18ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// Copyright (c) 2010 The Chromium Authors. All rights reserved. 28ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// Use of this source code is governed by a BSD-style license that can be 38ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// found in the LICENSE file. 48ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// 58ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// This file declares extension specific l10n utils. 68ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 78ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen#ifndef CHROME_COMMON_EXTENSIONS_EXTENSION_L10N_UTIL_H_ 88ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen#define CHROME_COMMON_EXTENSIONS_EXTENSION_L10N_UTIL_H_ 98ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen#pragma once 108ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 118ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen#include <set> 128ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen#include <string> 138ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen#include <vector> 148ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 158ae428e0fb7feea16d79853f29447469a93bedffKristian Monsenclass DictionaryValue; 168ae428e0fb7feea16d79853f29447469a93bedffKristian Monsenclass Extension; 178ae428e0fb7feea16d79853f29447469a93bedffKristian Monsenclass ExtensionMessageBundle; 188ae428e0fb7feea16d79853f29447469a93bedffKristian Monsenclass FilePath; 198ae428e0fb7feea16d79853f29447469a93bedffKristian Monsenclass GURL; 208ae428e0fb7feea16d79853f29447469a93bedffKristian Monsenclass ResourceDispatcherHostRequestInfo; 218ae428e0fb7feea16d79853f29447469a93bedffKristian Monsenstruct ExtensionInfo; 228ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 238ae428e0fb7feea16d79853f29447469a93bedffKristian Monsennamespace extension_l10n_util { 248ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 258ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// Set the locale for this process to a fixed value, rather than using the 268ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// normal file-based lookup mechanisms. This is used to set the locale inside 278ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// the sandboxed utility process, where file reading is not allowed. 288ae428e0fb7feea16d79853f29447469a93bedffKristian Monsenvoid SetProcessLocale(const std::string& locale); 298ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 308ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// Returns default locale in form "en-US" or "sr" or empty string if 318ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// "default_locale" section was not defined in the manifest.json file. 328ae428e0fb7feea16d79853f29447469a93bedffKristian Monsenstd::string GetDefaultLocaleFromManifest(const DictionaryValue& manifest, 338ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::string* error); 348ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 358ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// Returns true iff the extension was localized, and the current locale 368ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// doesn't match the locale written into info.extension_manifest. 378ae428e0fb7feea16d79853f29447469a93bedffKristian Monsenbool ShouldRelocalizeManifest(const ExtensionInfo& info); 388ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 398ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// Localize extension name, description, browser_action and other fields 408ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// in the manifest. 418ae428e0fb7feea16d79853f29447469a93bedffKristian Monsenbool LocalizeManifest(const ExtensionMessageBundle& messages, 428ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen DictionaryValue* manifest, 438ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::string* error); 448ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 458ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// Load message catalogs, localize manifest and attach message bundle to the 468ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// extension. 47513209b27ff55e2841eac0e4120199c23acce758Ben Murdochbool LocalizeExtension(const FilePath& extension_path, 488ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen DictionaryValue* manifest, 498ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::string* error); 508ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 518ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// Adds locale_name to the extension if it's in chrome_locales, and 528ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// if messages file is present (we don't check content of messages file here). 538ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// Returns false if locale_name was not found in chrome_locales, and sets 548ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// error with locale_name. 558ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// If file name starts with . return true (helps testing extensions under svn). 568ae428e0fb7feea16d79853f29447469a93bedffKristian Monsenbool AddLocale(const std::set<std::string>& chrome_locales, 578ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen const FilePath& locale_folder, 588ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen const std::string& locale_name, 598ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::set<std::string>* valid_locales, 608ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::string* error); 618ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 628ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// Returns normalized current locale, or default locale - en_US. 638ae428e0fb7feea16d79853f29447469a93bedffKristian Monsenstd::string CurrentLocaleOrDefault(); 648ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 658ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// Extends list of Chrome locales to them and their parents, so we can do 668ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// proper fallback. 678ae428e0fb7feea16d79853f29447469a93bedffKristian Monsenvoid GetAllLocales(std::set<std::string>* all_locales); 688ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 698ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// Adds valid locales to the extension. 708ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// 1. Do nothing if _locales directory is missing (not an error). 718ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// 2. Get list of Chrome locales. 728ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// 3. Enumerate all subdirectories of _locales directory. 738ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// 4. Intersect both lists, and add intersection to the extension. 748ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// Returns false if any of supplied locales don't match chrome list of locales. 758ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// Fills out error with offending locale name. 768ae428e0fb7feea16d79853f29447469a93bedffKristian Monsenbool GetValidLocales(const FilePath& locale_path, 778ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::set<std::string>* locales, 788ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::string* error); 798ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 808ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// Loads messages file for default locale, and application locales (application 818ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// locales doesn't have to exist). Application locale is current locale and its 828ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// parents. 838ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// Returns message bundle if it can load default locale messages file, and all 848ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// messages are valid, else returns NULL and sets error. 858ae428e0fb7feea16d79853f29447469a93bedffKristian MonsenExtensionMessageBundle* LoadMessageCatalogs( 868ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen const FilePath& locale_path, 878ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen const std::string& default_locale, 888ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen const std::string& app_locale, 898ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen const std::set<std::string>& valid_locales, 908ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::string* error); 918ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 928ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// Returns true if directory has "." in the name (for .svn) or if it doesn't 938ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// belong to Chrome locales. 948ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// |locales_path| is extension_id/_locales 958ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// |locale_path| is extension_id/_locales/xx 968ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// |all_locales| is a set of all valid Chrome locales. 978ae428e0fb7feea16d79853f29447469a93bedffKristian Monsenbool ShouldSkipValidation(const FilePath& locales_path, 988ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen const FilePath& locale_path, 998ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen const std::set<std::string>& all_locales); 1008ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 1018ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen} // namespace extension_l10n_util 1028ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 1038ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen#endif // CHROME_COMMON_EXTENSIONS_EXTENSION_L10N_UTIL_H_ 104