在app中重新加载angular-translate-static-loader-files,无需在Ionic中刷新

时间:2016-02-18 06:13:53

标签: angularjs ionic-framework angular-translate

我正在研究这个Ionic应用程序,我正在使用angular-translate-loader-static-files和angular-translate来加载一堆语言.json文件。

一切都运行良好,但我正在试图弄清楚如何基本上“重新运行$ translateProvider”,以便它可以重新加载所有静态文件,因为.json文件将定期从服务器更新。我还没想到这一点,甚至试图强制“页面重新加载”也不会导致静态文件重新加载。

我应该注意到我目前正在iOS中对此进行测试,并且我意识到目录结构将根据操作系统进行更改。

这是我的服务,利用$ cordovaFile用新文本覆盖文件。现在我只是使用一个简单的json字符串来确保我可以解决问题:

(function() {
  'use-strict';
  angular.module('coursemill.services')
    .service('Translations', Translations);

  /**
   *  Service: Check network connection
   */
  function Translations($cordovaFile) {

    function updateLanguageFile(lang) {
      document.addEventListener("deviceready", function() {
        $cordovaFile.checkFile(cordova.file.applicationDirectory + "/www/languages/", lang + ".json")
        .then(function (success) {

          // Update the language file
          $cordovaFile.writeFile(cordova.file.applicationDirectory + "/www/languages/", lang + ".json", '{"COURSES_MENU_REQUIRED": "Required"}', true)
          .then(function (success) {
            // TO-DO: reload translation files
          },
          function (error) {});
        },
        function (error) {});
      });
    }

    return {
      updateLanguageFile: updateLanguageFile
    }
  }
})();

以下是我的.config:

的摘录
// Setup the language translations
  $translateProvider.useStaticFilesLoader({
    prefix: 'languages/',
    suffix: '.json'
  });

以下是我的控制器的片段:

Translations.updateLanguageFile('en_US');

当我在运行此函数后打开文件时,文件的内容会被替换,并且正在完全按照我的要求进行操作,但我希望我的应用程序中的语言变量也会更新,并且不是。

关于在这里可以做些什么的任何想法?

1 个答案:

答案 0 :(得分:1)

Doink,我需要在我的服务函数中使用$ translate.refresh()。所以现在它看起来像这样:

(function() {
  'use-strict';
  angular.module('coursemill.services')
    .service('Translations', Translations);

  function Translations($cordovaFile, $translate) {

    function updateLanguageFile(lang) {
      document.addEventListener("deviceready", function() {
        $cordovaFile.checkFile(cordova.file.applicationDirectory + "/www/languages/", lang + ".json")
        .then(function (success) {

          // Update the language file
          $cordovaFile.writeFile(cordova.file.applicationDirectory + "/www/languages/", lang + ".json", '{"COURSES_MENU_REQUIRED": "Required"}', true)
          .then(function (success) {
            // Reload translation files
            $translate.refresh();
          },
          function (error) {});
        },
        function (error) {});
      });
    }

    return {
      updateLanguageFile: updateLanguageFile
    }
  }
})();