summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/chromeos/dom_ui/language_options_handler.cc10
-rw-r--r--chrome/browser/resources/options.html8
-rw-r--r--chrome/browser/resources/options/chromeos_language_list.js71
-rw-r--r--chrome/browser/resources/options/chromeos_language_options.html8
-rw-r--r--chrome/browser/resources/options/chromeos_language_options.js48
5 files changed, 133 insertions, 12 deletions
diff --git a/chrome/browser/chromeos/dom_ui/language_options_handler.cc b/chrome/browser/chromeos/dom_ui/language_options_handler.cc
index c78cccc..0a94285 100644
--- a/chrome/browser/chromeos/dom_ui/language_options_handler.cc
+++ b/chrome/browser/chromeos/dom_ui/language_options_handler.cc
@@ -7,6 +7,8 @@
#include "app/l10n_util.h"
#include "app/resource_bundle.h"
#include "base/values.h"
+#include "base/utf_string_conversions.h"
+#include "chrome/browser/chromeos/input_method/input_method_util.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
@@ -41,4 +43,12 @@ void LanguageOptionsHandler::GetLocalizedValues(
l10n_util::GetStringF(
IDS_OPTIONS_SETTINGS_LANGUAGES_DISPLAY_IN_THIS_LANGUAGE,
l10n_util::GetString(IDS_PRODUCT_OS_NAME)));
+
+ // Build mappings of locale code (language code) to display name
+ // (ex. "en-US" => "English (United States)".
+ const std::vector<std::string>& locales = l10n_util::GetAvailableLocales();
+ for (size_t i = 0; i < locales.size(); ++i) {
+ localized_strings->SetString(UTF8ToWide(locales[i]),
+ chromeos::input_method::GetLanguageDisplayNameFromCode(locales[i]));
+ }
}
diff --git a/chrome/browser/resources/options.html b/chrome/browser/resources/options.html
index 5d5cfd4..e829473 100644
--- a/chrome/browser/resources/options.html
+++ b/chrome/browser/resources/options.html
@@ -21,6 +21,8 @@
<script src="options/pref_ui.js"></script>
<script src="options/options_page.js"></script>
<if expr="pp_ifdef('chromeos')">
+ <script src="options/chromeos_language_list.js"></script>
+ <script src="options/chromeos_language_options.js"></script>
<script src="options/chromeos_system_options.js"></script>
<script src="options/chromeos_accounts_options.js"></script>
<script src="options/chromeos_accounts_user_list.js"></script>
@@ -69,11 +71,7 @@ function load() {
localStrings.getString('labsPage'),
'labsPage');
OptionsPage.register(labsOptions);
- var languageSettings = new OptionsPage('language',
- localStrings.getString(
- 'languagePage'),
- 'languagePage');
- OptionsPage.registerSubPage(languageSettings);
+ OptionsPage.registerSubPage(LanguageOptions.getInstance());
}
var syncSettings = new OptionsPage('sync',
diff --git a/chrome/browser/resources/options/chromeos_language_list.js b/chrome/browser/resources/options/chromeos_language_list.js
new file mode 100644
index 0000000..cb4bc50
--- /dev/null
+++ b/chrome/browser/resources/options/chromeos_language_list.js
@@ -0,0 +1,71 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+cr.define('options.language', function() {
+ const List = cr.ui.List;
+ const ListItem = cr.ui.ListItem;
+ const ArrayDataModel = cr.ui.ArrayDataModel;
+
+ /**
+ * Creates a new language list.
+ * @param {Object=} opt_propertyBag Optional properties.
+ * @constructor
+ * @extends {cr.ui.List}
+ */
+ var LanguageList = cr.ui.define('list');
+
+ LanguageList.prototype = {
+ __proto__: List.prototype,
+
+ pref: 'settings.language.preferred_languages',
+
+ /** @inheritDoc */
+ decorate: function() {
+ List.prototype.decorate.call(this);
+
+ // HACK(arv): http://crbug.com/40902
+ window.addEventListener('resize', cr.bind(this.redraw, this));
+
+ // Listens to pref change.
+ Preferences.getInstance().addEventListener(this.pref,
+ cr.bind(this.handlePrefChange_, this));
+ },
+
+ createItem: function(languageCode) {
+ var languageDisplayName = localStrings.getString(languageCode);
+ return new ListItem({label: languageDisplayName});
+ },
+
+ /**
+ * Handles pref change.
+ * @param {Event} event The change event object.
+ * @private
+ */
+ handlePrefChange_: function(event) {
+ this.load_(event.value);
+ },
+
+ /**
+ * Loads given language list.
+ * @param {string} languageCodesInCsv A CSV string of language codes.
+ * @private
+ */
+ load_: function(languageCodesInCsv) {
+ var languageCodes = languageCodesInCsv.split(',');
+ this.dataModel = new ArrayDataModel(languageCodes);
+ },
+
+ /**
+ * Updates backend.
+ */
+ updateBackend_: function() {
+ // Encode the language codes into a CSV string.
+ Preferences.setStringPref(this.pref, this.dataModel.slice().join(','));
+ },
+ };
+
+ return {
+ LanguageList: LanguageList
+ };
+});
diff --git a/chrome/browser/resources/options/chromeos_language_options.html b/chrome/browser/resources/options/chromeos_language_options.html
index 7d8ef823..a69f004 100644
--- a/chrome/browser/resources/options/chromeos_language_options.html
+++ b/chrome/browser/resources/options/chromeos_language_options.html
@@ -5,13 +5,7 @@
<div class="language-options">
<div class="language-options-left">
<h3 i18n-content="languages"></h3>
- <list id="language-options-list">
- <!-- TODO: The contents should be dynamically changed. -->
- <li>English (United States)</li>
- <li>Spanish</li>
- <li>French</li>
- <li>Japanese</li>
- </list>
+ <list id="language-options-list"></list>
<div class="language-options-lower-left">
<button id="add-button" i18n-content="add_button"></button>
<button id="remove-button" i18n-content="remove_button"></button>
diff --git a/chrome/browser/resources/options/chromeos_language_options.js b/chrome/browser/resources/options/chromeos_language_options.js
new file mode 100644
index 0000000..99fed77
--- /dev/null
+++ b/chrome/browser/resources/options/chromeos_language_options.js
@@ -0,0 +1,48 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+///////////////////////////////////////////////////////////////////////////////
+// LanguageOptions class:
+
+/**
+ * Encapsulated handling of ChromeOS language options page.
+ * @constructor
+ */
+function LanguageOptions(model) {
+ OptionsPage.call(this, 'language', localStrings.getString('languagePage'),
+ 'languagePage');
+}
+
+cr.addSingletonGetter(LanguageOptions);
+
+// Inherit LanguageOptions from OptionsPage.
+LanguageOptions.prototype = {
+ __proto__: OptionsPage.prototype,
+
+ /**
+ * Initializes LanguageOptions page.
+ * Calls base class implementation to starts preference initialization.
+ */
+ initializePage: function() {
+ OptionsPage.prototype.initializePage.call(this);
+
+ options.language.LanguageList.decorate($('language-options-list'));
+
+ this.addEventListener('visibleChange',
+ cr.bind(this.handleVisibleChange_, this));
+ },
+
+ languageListInitalized_: false,
+
+ /**
+ * Handler for OptionsPage's visible property change event.
+ * @param {Event} e Property change event.
+ */
+ handleVisibleChange_ : function(e) {
+ if (!this.languageListInitalized_ && this.visible) {
+ this.languageListInitalized_ = true;
+ $('language-options-list').redraw();
+ }
+ }
+};