Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有没有可能编写多语言网站而不用重复js中的代码?_Javascript_Angularjs_Multilingual - Fatal编程技术网

Javascript 有没有可能编写多语言网站而不用重复js中的代码?

Javascript 有没有可能编写多语言网站而不用重复js中的代码?,javascript,angularjs,multilingual,Javascript,Angularjs,Multilingual,我需要写一个2语言的网站,一个用英语,另一个用丹麦语。要显示的数据将以json格式存储,分别为name.en和name.de。将有两个按钮,一个用于英语,一个用于丹麦语 但我不想这样编码 <p ng-show="english">{{name.en}}</p> <p ng-show="danish">{{name.de}}</p> {{name.en} {{name.de} 而且我也不想这样编码 <div ng-switch on=

我需要写一个2语言的网站,一个用英语,另一个用丹麦语。要显示的数据将以json格式存储,分别为name.enname.de。将有两个按钮,一个用于英语,一个用于丹麦语

但我不想这样编码

<p ng-show="english">{{name.en}}</p> 
<p ng-show="danish">{{name.de}}</p> 

{{name.en}

{{name.de}

而且我也不想这样编码

 <div ng-switch on="isExists(item)">
        <span ng-switch-when="true">{{name.en}}</span>
        <span ng-switch-default>{{name.en}}</span>
       <span ng-switch-when="false">{{name.de}}</span>
 </div>

{{name.en}
{{name.en}
{{name.de}
我分别用英语和丹麦语重复相同的代码。
我想用一行字来表示。有人能帮我吗?

是的,在
角度翻译的帮助下,这是可能的。
在angular应用程序中注入
'pascalprecht.translate'
作为模块依赖项

var app = angular.module("app", ['pascalprecht.translate']);
创建一个包含json数据的配置部分

app.config(function ($translateProvider) {
    $translateProvider.translations('en', {
        'Logout': 'Logout',
        'Login': 'Login'
    });
    $translateProvider.translations('de', {
        'Logout': 'DeLogOut',
        'Login': 'DeLogIn'
    });
    $translateProvider.preferredLanguage('en');
});
在控制器中,注入
$translate
作为依赖项动态更改语言

$scope.changeLanguage = function (key) {
         $translate.use(key); // key as 'en' or 'de'
     };
在部分使用
translate
指令时

<h2 translate="">Log In</h2>

有关更多信息,请参阅

为什么不在您的作用域中创建一个名为translate的函数,该函数将一个对象作为参数(参数?),该对象可以是

{ english: "thank you", portuguese: "obrigado" }
translate功能确认服务/工厂的语言设置值,并以正确的语言呈现单词

工厂可能是这样的:

app.Factory("LanguageFactory", function () {
    var obj = {};
    obj.language = "english"; //of course, it's english
    return obj;
});
您的控制器可以使用出厂设置,如:

app.controller("", function ($scope, LanguageFactory) {
    $scope.language = LanguageFactory;
    $scope.translate = function (word) {
        if ($scope.language == 'english') {
           return word.english;
        }
        else if ($scope.language == 'french') {
           return word.french;
        } // could go on and on
        //an alternative would be
        return word[$scope.language];
        //but to use to alternative, you would need to know what format the
        //json is returned in 
    }
});
我认为这应该行得通。因此,在你的html中,只要你想让你的多语言功能发挥作用,你就可以像这样显示它

<p>{{translate(name)}}</p>

试试这个简单的例子
Html

<button class="btn btn-info" ng-click="setLanguage('en')">English</button>
<button class="btn btn-info" ng-click="setLanguage('de')">Danish</button>
<p>{{name[language]}}</p>
你可以用它


希望这将有助于将文本存储在数据库表中。它甚至可以是类似SQLite3的东西,非常轻。然后根据浏览器的“设置语言文化代码”提取语言。我不想要浏览器的“设置语言文化代码”,我需要在按下“英语”按钮时,显示英语,单击“丹麦语”,应显示丹麦语。在这种情况下,应将文本存储在某种存储器中。XML文件、数据库甚至是硬编码的JSON对象。如果你把双语文本放在某种存储中,你就不必担心角度模板上的重复文本。@Snowyet你的意思是,不可能用JSON一行一行地写出来。在这种情况下,你只需将该按钮的文本与JSON数据绑定,然后单击,执行任务后,刚刚更改了绑定的JSON值。我将api数据用于JSON格式的英语和丹麦语内容。如何使用api数据为其创建配置节创建一个常量以获取api数据,并在configuse pascalprecht.translate中注入相同的常量以进行转换。非常简单和快速。它只需要为每种语言创建一个json文件,里面有翻译。
$scope.changeLanguage = function (l) {
     $scope.language.language = l;
}
<button class="btn btn-info" ng-click="setLanguage('en')">English</button>
<button class="btn btn-info" ng-click="setLanguage('de')">Danish</button>
<p>{{name[language]}}</p>
  //inside controller
    $scope.language='en';  //initial default value
    $scope.setLanguage = function(language) {
        $scope.language = language;    
       }