关于angularjs:无需在Ionic中刷新即可在应用程序内重新加载angular-translate-static-loader-files

Reload angular-translate-static-loader-files within app, without refresh in Ionic

我正在使用此Ionic应用程序,正在使用带有angular-translate的angular-translate-loader-static-files加载一堆语言.json文件。

一切正常,但是我试图弄清楚如何基本上"重新运行$ translateProvider",以便它可以重新加载所有静态文件,因为.json文件将定期从服务器更新。 。我还没有弄清楚这一点,即使尝试强制执行"页面重新加载"也不会导致静态文件重新加载。

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
(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中的摘录:

1
2
3
4
5
// Setup the language translations
  $translateProvider.useStaticFilesLoader({
    prefix: 'languages/',
    suffix: '.json'
  });

这是我的控制器中的代码段:

1
Translations.updateLanguageFile('en_US');

在运行此功能后打开文件时,文件的内容将被替换并完全按照我想要的方式进行操作,但是我也希望更新应用程序内的语言变量,并且它们不是。

有什么想法可以在这里做?


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
(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
    }
  }
})();