Added locale settings support 29/12729/1
authorJimmy Huang <jimmy.huang@intel.com>
Thu, 21 Nov 2013 22:36:44 +0000 (14:36 -0800)
committerJimmy Huang <jimmy.huang@intel.com>
Thu, 21 Nov 2013 22:38:43 +0000 (14:38 -0800)
- New locale settings uses the locale web api to get/set locale

Change-Id: I8d180a2f4b33f2af0600acbc447698e36cf8aa3b
Signed-off-by: Jimmy Huang <jimmy.huang@intel.com>
css/style.css
index.html
js/main.js
js/panel-locale.js [new file with mode: 0644]

index b8f6d66..9d34f24 100644 (file)
@@ -82,4 +82,8 @@
 /* make room for bottom for bottom of the screen due to weston compositor */
 #button_bluetooth_scan {
     margin-bottom: 100px;
+}
+/* Locale */
+#button_locale_apply, #button_locale_cancel{
+    display: none;
 }
\ No newline at end of file
index 530cd5a..f3cb7da 100644 (file)
@@ -27,6 +27,7 @@
     <script type="text/javascript" src="./js/panel-connman.js"></script>
     <script type="text/javascript" src="./js/panel-bluetooth.js"></script>
     <script type="text/javascript" src="./js/panel-datetime.js"></script>
+    <script type="text/javascript" src="./js/panel-locale.js"></script>
     <link rel="stylesheet" href="./css/style.css" />
 </head>
 
@@ -63,6 +64,9 @@
                         <li>
                             <a href="#page_datetime" id="button_datetime_settings">Date and Time</a>
                         </li>
+                        <li>
+                            <a href="#page_locale" id="button_locale_settings">Language</a>
+                        </li>
                     </ul>
                 </div>
             </div>
             <div data-role="button" id="button_datetime_cancel">Cancel</div>
         </div>
     </div>
+
+    <!-- Locale Settings -->
+    <div data-role="page" id="page_locale">
+        <div data-role="header">
+            <a href="#main" data-icon="back">Back</a>
+            <h1>Language</h1>
+        </div>
+
+        <div data-role="content">
+            <fieldset data-role="controlgroup">
+                <input type="radio" name="radio_locale" id="radio_locale_english" value="en_US.UTF-8" checked="checked" />
+                <label for="radio_locale_english">English</label>
+
+                <input type="radio" name="radio_locale" id="radio_locale_german" value="de.UTF-8" />
+                <label for="radio_locale_german">German (Deutsch)</label>
+
+                <input type="radio" name="radio_locale" id="radio_locale_japanese" value="ja.UTF-8" />
+                <label for="radio_locale_japanese">Japanese (日本語)</label>
+
+                <input type="radio" name="radio_locale" id="radio_locale_simplified_chinese" value="zh_CN.UTF-8" />
+                <label for="radio_locale_simplified_chinese">Simplified Chinese (简体中文)</label>
+
+                <input type="radio" name="radio_locale" id="radio_locale_traditional_chinese" value="zh_TW.UTF-8" />
+                <label for="radio_locale_traditional_chinese">Traditional Chinese (繁體中文)</label>
+            </fieldset>
+            <div data-role="button" id="button_locale_apply">Apply</div>
+            <div data-role="button" id="button_locale_cancel">Cancel</div>
+        </div>
+    </div>
 </body>
 </html>
index a229978..2e7cf9e 100644 (file)
@@ -43,6 +43,8 @@
                     wsAPI.unsubscribeEvents(bluetoothEventReceived);
                 } else if (data.prevPage.attr('id') === 'page_datetime') {
                     console.log('Date and Time settings exited');
+                } else if (data.prevPage.attr('id') === 'page_locale') {
+                    console.log('Locale settings exited');
                 }
             });
 
@@ -50,6 +52,7 @@
             connmanPanelInit();
             bluetoothPanelInit();
             datetimePanelInit();
+            localePanelInit();
         } catch (e) {
             showMsg('Error', 'Javascript Exception Caught: ' + e);
         }
diff --git a/js/panel-locale.js b/js/panel-locale.js
new file mode 100644 (file)
index 0000000..b804faa
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2013, Intel Corporation.
+ *
+ * This program is licensed under the terms and conditions of the
+ * Apache License, version 2.0.  The full text of the Apache License is at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ */
+
+var localeChanged = false;
+
+function localePanelInit() {
+    /* Locale Settings Panel */
+    $('#page_locale').on('pageshow', function(event, data) {
+        localePageReload();
+    });
+
+    $('[name="radio_locale"]').on('change', function(event, data) {
+        var new_locale = $('input[name=radio_locale]:checked').val();
+
+        if (tizen.locale) {
+            if (new_locale !== tizen.locale.getLocale()) {
+                localeChanged = true;
+                localeShowOption();
+            }
+        } else {
+            console.error('tizen.locale missing');
+        }
+    });
+
+    $('#button_locale_apply').on('click', function(event, data) {
+        if (localeChanged) {
+            localeChanged = false;
+            updateSystemLocale();
+        }
+
+        localeHideOption();
+    });
+}
+
+function localeShowOption() {
+    $('#button_locale_apply').show();
+    $('#button_locale_cancel').show();
+}
+
+function localeHideOption() {
+    $('#button_locale_apply').hide();
+    $('#button_locale_cancel').hide();
+}
+
+function localePageReload() {
+    localeChanged = false;
+
+    localeHideOption();
+
+    if (tizen.locale) {
+        var locale = tizen.locale.getLocale();
+        var language = localeToLanguage(locale);
+        if (!locale) {
+            showMessage('Error', 'Failed to get current locale');
+        }
+
+        console.log('Current locale is set to ' + locale);
+        console.log('Current language is set to ' + language);
+        if (language) {
+            $('#radio_locale_' + language).prop('checked', true);
+            $('input[name=radio_locale]').checkboxradio('refresh');
+        } else {
+            console.log('Unknown locale ' + locale + ', default to English');
+            $('#radio_locale_english').prop('checked', true);
+            $('input[name=radio_locale]').checkboxradio('refresh');
+        }
+    } else {
+        console.error('tizen.locale missing');
+        $('input[name=radio_locale]').checkboxradio('disable');
+    }
+}
+
+function updateSystemLocale() {
+    var locale = $('input[name=radio_locale]:checked').val();
+
+    if (tizen.locale) {
+        console.log('New locale is set to ' + locale);
+        tizen.locale.setLocale(locale);
+        localePageReload();
+    } else {
+        console.error('tizen.locale missing - cannot update locale');
+    }
+}
+
+function localeToLanguage(locale) {
+    if (locale === 'C' || locale === 'en_US.UTF-8') return 'english';
+    else if (locale === 'de_DE.UTF-8') return 'german';
+    else if (locale === 'ja_JP.UTF-8') return 'japanese';
+    else if (locale === 'zh_CN.UTF-8') return 'simplified_chinese';
+    else if (locale === 'zh_HK.UTF-8' || locale === 'zh_TW.UTF-8') return 'traditional_chinese';
+    else return null;
+}
\ No newline at end of file