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