Bug 1347825 - Transition Fennec to use the new Localization API. draft
authorZibi Braniecki <gandalf@mozilla.com>
Thu, 09 Mar 2017 17:56:31 -0800
changeset 499811 878fae063ac64b3f813cabb315bd018fb02010b9
parent 499810 388da7b01f813b0582d8366a964382ae28f46719
child 549470 24586ccea3c60df936acd4873efa8b90171fac8e
push id49539
push userzbraniecki@mozilla.com
push dateThu, 16 Mar 2017 07:21:18 +0000
bugs1347825
milestone55.0a1
Bug 1347825 - Transition Fennec to use the new Localization API. MozReview-Commit-ID: BVHQO7lbphm
mobile/android/branding/nightly/locales/en-US/brand.ftl
mobile/android/branding/nightly/locales/jar.mn
mobile/android/branding/unofficial/locales/en-US/brand.ftl
mobile/android/branding/unofficial/locales/jar.mn
mobile/android/chrome/content/aboutAddons.js
mobile/android/chrome/content/aboutAddons.xhtml
mobile/android/installer/package-manifest.in
mobile/android/locales/en-US/mobile/aboutAddons.ftl
mobile/android/locales/jar.mn
new file mode 100644
--- /dev/null
+++ b/mobile/android/branding/nightly/locales/en-US/brand.ftl
@@ -0,0 +1,1 @@
+brandShortName = Nightly
--- a/mobile/android/branding/nightly/locales/jar.mn
+++ b/mobile/android/branding/nightly/locales/jar.mn
@@ -1,11 +1,13 @@
 #filter substitution
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
+[localization] @AB_CD@.jar:
+  mobile                           (en-US/*.ftl)
 
 @AB_CD@.jar:
 % locale branding @AB_CD@ %locale/branding/
 # Nightly branding only exists in en-US
   locale/branding/brand.dtd        (en-US/brand.dtd)
   locale/branding/brand.properties (en-US/brand.properties)
new file mode 100644
--- /dev/null
+++ b/mobile/android/branding/unofficial/locales/en-US/brand.ftl
@@ -0,0 +1,1 @@
+brandShortName = Fennec
--- a/mobile/android/branding/unofficial/locales/jar.mn
+++ b/mobile/android/branding/unofficial/locales/jar.mn
@@ -1,11 +1,13 @@
 #filter substitution
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
+[localization] @AB_CD@.jar:
+  mobile                           (en-US/*.ftl)
 
 @AB_CD@.jar:
 % locale branding @AB_CD@ %locale/branding/
 # Nightly branding only exists in en-US
   locale/branding/brand.dtd        (en-US/brand.dtd)
   locale/branding/brand.properties (en-US/brand.properties)
--- a/mobile/android/chrome/content/aboutAddons.js
+++ b/mobile/android/chrome/content/aboutAddons.js
@@ -9,18 +9,16 @@
 var Ci = Components.interfaces, Cc = Components.classes, Cu = Components.utils;
 
 Cu.import("resource://gre/modules/Services.jsm")
 Cu.import("resource://gre/modules/AddonManager.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 
 const AMO_ICON = "chrome://browser/skin/images/amo-logo.png";
 
-var gStringBundle = Services.strings.createBundle("chrome://browser/locale/aboutAddons.properties");
-
 XPCOMUtils.defineLazyGetter(window, "gChromeWin", function() {
   return window.QueryInterface(Ci.nsIInterfaceRequestor)
            .getInterface(Ci.nsIWebNavigation)
            .QueryInterface(Ci.nsIDocShellTreeItem)
            .rootTreeItem
            .QueryInterface(Ci.nsIInterfaceRequestor)
            .getInterface(Ci.nsIDOMWindow)
            .QueryInterface(Ci.nsIDOMChromeWindow);
@@ -207,17 +205,17 @@ var Addons = {
     outer.appendChild(img);
 
     let inner = document.createElement("div");
     inner.className = "inner";
 
     let title = document.createElement("div");
     title.id = "browse-title";
     title.className = "title";
-    title.textContent = gStringBundle.GetStringFromName("addons.browseAll");
+    title.setAttribute('data-l10n-id', 'ui-browseAll');
     inner.appendChild(title);
 
     outer.appendChild(inner);
     return outer;
   },
 
   _createItemForAddon: function _createItemForAddon(aAddon) {
     let appManaged = (aAddon.scope == AddonManager.SCOPE_APPLICATION);
@@ -336,18 +334,21 @@ var Addons = {
     let addon = detailItem.addon = aListItem.addon;
 
     let favicon = document.querySelector("#addons-details > .addon-item .icon");
     favicon.setAttribute("src", addon.iconURL || AMO_ICON);
 
     detailItem.querySelector(".title").textContent = addon.name;
     detailItem.querySelector(".version").textContent = addon.version;
     detailItem.querySelector(".description-full").textContent = addon.description;
-    detailItem.querySelector(".status-uninstalled").textContent =
-      gStringBundle.formatStringFromName("addonStatus.uninstalled", [addon.name], 1);
+    document.l10n.setAttributes(
+      detailItem.querySelector(".status-uninstalled"),
+      'ui-uninstalled',
+      {name: addon.name}
+    );
 
     let enableBtn = document.getElementById("enable-btn");
     if (addon.appDisabled) {
       enableBtn.setAttribute("disabled", "true");
     } else {
       enableBtn.removeAttribute("disabled");
     }
 
--- a/mobile/android/chrome/content/aboutAddons.xhtml
+++ b/mobile/android/chrome/content/aboutAddons.xhtml
@@ -1,63 +1,59 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
-  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" [
-<!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd" >
-%brandDTD;
-<!ENTITY % globalDTD SYSTEM "chrome://global/locale/global.dtd" >
-%globalDTD;
-<!ENTITY % aboutDTD SYSTEM "chrome://browser/locale/aboutAddons.dtd" >
-%aboutDTD;
-]>
-
 <!-- This Source Code Form is subject to the terms of the Mozilla Public
    - License, v. 2.0. If a copy of the MPL was not distributed with this
    - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
 
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
-  <title>&aboutAddons.title2;</title>
+  <title data-l10n-id="ui-title"></title>
   <meta name="viewport" content="width=device-width; user-scalable=0" />
   <link rel="icon" type="image/png" sizes="64x64" href="chrome://branding/content/favicon64.png" />
   <link rel="stylesheet" href="chrome://browser/skin/aboutBase.css" type="text/css"/>
   <link rel="stylesheet" href="chrome://browser/skin/aboutAddons.css" type="text/css"/>
+
+  <link rel="localization" href="mobile/brand.ftl"/>
+  <link rel="localization" href="mobile/aboutAddons.ftl"/>
+  <script type="text/javascript" src="chrome://global/content/l20n.js"></script>
 </head>
 
-<body dir="&locale.dir;">
+<body>
   <menu type="context" id="addonmenu">
-    <menuitem id="contextmenu-enable" label="&addonAction.enable;"></menuitem>
-    <menuitem id="contextmenu-disable" label="&addonAction.disable;" ></menuitem>
-    <menuitem id="contextmenu-uninstall" label="&addonAction.uninstall;" ></menuitem>
+    <menuitem id="contextmenu-enable" data-l10n-id="menu-enable"></menuitem>
+    <menuitem id="contextmenu-disable" data-l10n-id="menu-disable" ></menuitem>
+    <menuitem id="contextmenu-uninstall" data-l10n-id="menu-uninstall" ></menuitem>
   </menu>
 
   <div id="addons-header" class="header">
-    <div>&aboutAddons.header2;</div>
+    <div data-l10n-id="ui-header"></div>
   </div>
   <div id="addons-list" class="list">
   </div>
 
   <div id="addons-details" class="list">
     <div class="addon-item list-item">
       <img class="icon"/>
       <div class="inner">
         <div class="details">
           <div class="title"></div><div class="version"></div>
         </div>
         <div class="description-full"></div>
-        <div class="options-header">&aboutAddons.options;</div>
+        <div class="options-header" data-l10n-id="ui-options"></div>
         <div class="options-box"></div>
       </div>
-      <div class="warn-unsigned">&addonUnsigned.message; <a id="unsigned-learn-more">&addonUnsigned.learnMore;</a></div>
+      <div class="warn-unsigned" data-l10n-id="ui-unsigned-message">
+        <a id="unsigned-learn-more"></a>
+      </div>
       <div class="status status-uninstalled show-on-uninstall"></div>
       <div class="buttons">
-        <button id="enable-btn" class="show-on-disable hide-on-enable hide-on-uninstall" >&addonAction.enable;</button>
-        <button id="disable-btn" class="show-on-enable hide-on-disable hide-on-uninstall" >&addonAction.disable;</button>
-        <button id="uninstall-btn" class="hide-on-uninstall" >&addonAction.uninstall;</button>
-        <button id="cancel-btn" class="show-on-uninstall" >&addonAction.undo;</button>
+        <button id="enable-btn" class="show-on-disable hide-on-enable hide-on-uninstall" data-l10n-id="action-enable"></button>
+        <button id="disable-btn" class="show-on-enable hide-on-disable hide-on-uninstall" data-l10n-id="action-disable"></button>
+        <button id="uninstall-btn" class="hide-on-uninstall" data-l10n-id="action-uninstall"></button>
+        <button id="cancel-btn" class="show-on-uninstall" data-l10n-id="action-undo"></button>
       </div>
     </div>
   </div>
 
   <script type="application/javascript" src="chrome://browser/content/aboutAddons.js"></script>
 </body>
 </html>
--- a/mobile/android/installer/package-manifest.in
+++ b/mobile/android/installer/package-manifest.in
@@ -19,16 +19,17 @@
 @BINPATH@/chrome/@AB_CD@.manifest
 @BINPATH@/@PREF_DIR@/mobile-l10n.js
 @BINPATH@/update.locale
 #ifdef MOZ_UPDATER
 @BINPATH@/updater.ini
 #endif
 @BINPATH@/dictionaries/*
 @BINPATH@/hyphenation/*
+@BINPATH@/localization/*
 
 [assets destdir="assets/@ANDROID_CPU_ARCH@"]
 #ifndef MOZ_STATIC_JS
 @BINPATH@/@DLL_PREFIX@mozjs@DLL_SUFFIX@
 #endif
 #ifdef MOZ_DMD
 @BINPATH@/@DLL_PREFIX@dmd@DLL_SUFFIX@
 #endif
new file mode 100644
--- /dev/null
+++ b/mobile/android/locales/en-US/mobile/aboutAddons.ftl
@@ -0,0 +1,28 @@
+[[ User Interface ]]
+
+ui-title    = Add-ons
+ui-header    = Your Add-ons
+ui-options   = Options
+ui-browseAll = Browse all Firefox Add-ons
+
+ui-unsigned-message   =
+    This add-on could not be verified by { brandShortName }
+    <a>Learn more</a>
+
+ui-uninstalled   = { $name } will be uninstalled after restart.
+
+[[ Menu ]]
+
+menu-enable
+    .label       = Enable
+menu-disable
+    .label       = Disable
+menu-uninstall
+    .label       = Uninstall
+
+[[ Actions ]]
+
+action-enable    = Enable
+action-disable   = Disable
+action-uninstall = Uninstall
+action-undo      = Undo
--- a/mobile/android/locales/jar.mn
+++ b/mobile/android/locales/jar.mn
@@ -1,13 +1,16 @@
 #filter substitution
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
+[localization] @AB_CD@.jar:
+  mobile                                          (%mobile/**/*.ftl)
+
 
 @AB_CD@.jar:
 % locale browser @AB_CD@ %locale/@AB_CD@/browser/
   locale/@AB_CD@/browser/about.dtd                (%chrome/about.dtd)
   locale/@AB_CD@/browser/aboutAccounts.dtd        (%chrome/aboutAccounts.dtd)
   locale/@AB_CD@/browser/aboutAccounts.properties (%chrome/aboutAccounts.properties)
   locale/@AB_CD@/browser/aboutAddons.dtd          (%chrome/aboutAddons.dtd)
   locale/@AB_CD@/browser/aboutAddons.properties   (%chrome/aboutAddons.properties)