2015-02-23 27 views
0

我正在開發一個使用Ionic框架的移動應用程序,並且我有一個很大的問題來處理幫助頁面的多語言功能。angular.js - 通過語言動態設置templateUrl(app.config stateprovider)

我有2種語言(en + de),我想根據語言加載help_en.html或help_de.html。

我在主控制器中設置了默認語言和changeLanguage函數,它將lang設置爲$ cookies.language並且它正在工作;

1.View:

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

2.MainCtrl - 更改語言功能:

$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('/'); 
    }); 

這是在鉻工作,但移動將始終停留在「en」的語言,即使我把價值從$ cookies.language更改爲「德」。

我該怎麼做才能完成這項工作?任何ideea? 我真的很感謝所有幫助

感謝

+0

任何其他簡單的工作方法將是巨大的 – godzo101 2015-02-23 19:57:15

+0

我認爲這不是一個很好的解決方案,以創建2個國家的公司簡介恩和德:) – godzo101 2015-02-23 20:08:08

+0

爲什麼要使用cookie,而不是本地存儲? – 2015-02-23 22:44:24

回答

1

關於你的問題與cookies在離子&科爾多瓦的應用程序。該解決方案是使用localStorage的。看看this question

關於i18n我建議你使用angular-translate。我已經在android和ios的離子應用程序中使用過。如果你需要翻譯你的應用程序的所有字符串和小文本,這是非常有用的。

也許我在幫助頁面中遇到了同樣的問題,並且因爲我有很多文本(有些段落),所以我首選使用純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>