angular.js - 按语言动态设置templateUrl(app.config stateprovider)

时间:2015-02-23 19:54:34

标签: android angularjs angular-ui-router ionic-framework

我正在使用Ionic框架开发移动应用程序,我在处理帮助页面的多语言功能时遇到了很大的问题。

我有2种语言(en + de),我想根据语言加载help_en.html或help_de.html。

我在主控制器中设置了默认语言和changeLanguage函数,它将在$ cookies.language中设置lang并且它正在工作;

1.View:

    <a ng-href="#/help" > 

2.MainCtrl -change语言功能:

    $scope.changeLanguage = function(lang) {
      $scope.translation=translationService.getTranslation($scope, lang);
      $cookies.lang=lang;
    };

3. app.js的配置看起来像这样:

    var myApp = angular.module('MyPetApp', ['ionic', 'config', 'MyApp.controllers', 'ngCordova', 'ngResource', 'ngCookies']);

  myApp.config(function($stateProvider, $urlRouterProvider) {
    var $cookies;
    angular.injector(['ngCookies']).invoke(function(_$cookies_) {
      $cookies = _$cookies_;
    });
    if ($cookies.language==undefined){
      $cookies.language = 'en'
    }

    $stateProvider
      .state('default', {
        url: "/",
        templateUrl: "templates/default.html"
     })

    .state('help', {
        url: '/help', 
        templateUrl: function (){
            return 'templates/help_'+$cookies.lang+'.html'
        }
    })
      $urlRouterProvider.otherwise('/');
  });

这适用于Chrome,但在移动设备上会一直停留在&#34; en&#34;语言甚至我将值从$ cookies.language更改为&#34; de&#34;。

我可以做些什么来完成这项工作?任何想法? 我真的很感激任何帮助

由于

1 个答案:

答案 0 :(得分:1)

关于离子和饼干中的饼干问题。 cordova app ..解决方案是使用 localStorage 。看看this question

关于 i18n 我建议您使用angular-translate。我已经在Android和ios的离子应用程序中使用过。如果您需要翻译app的所有字符串和小文本,这非常有用。

我的帮助页面中可能存在相同的问题,因为我有很多文本(一些段落)我更喜欢使用普通的html和所有文本,只显示当前语言的简单ng-if:

<ion-content class="has-header">
    <div class="list padding card" ng-if="settings.languageId == 'en'">
      ...
      English text here
      ...
    </div>
    <div class="list padding card" ng-if="settings.languageId == 'pt'">
      ...
      Portuguese text here
      ...
    </div>
</ion-content>