Javascript 有没有可能编写多语言网站而不用重复js中的代码?
我需要写一个2语言的网站,一个用英语,另一个用丹麦语。要显示的数据将以json格式存储,分别为name.en和name.de。将有两个按钮,一个用于英语,一个用于丹麦语 但我不想这样编码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=
<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;
}