如何更改Web应用程序的语言。那有什么api吗?

时间:2016-05-02 15:02:04

标签: javascript java api rest java-ee

我正在使用Search页面作为我的应用程序起始页面在java中开发一个应用程序。我在搜索页面中有一个包含语言的下拉列表。如果我从下拉列表中选择任何一种语言,则需要将我的整个应用程序更改为相应的语言。如何更改它?是否有任何apl。

2 个答案:

答案 0 :(得分:1)

我不知道任何API,但我使用JQuery来更改每种语言的文本,这里是一个简单网页的例子,可以用英语和德语翻译:

 function lang_en(){
  $(document).prop('title', 'Todo-List');
  $("#autoremove_label").text("Remove immediately?");
  $("#task").css('width', '142');
  $("#h1_title").html("Todo-List");
  $("#autoremove").prop('title', 'Remove immediately?');
  $("#task").prop('title', 'Name of the enty.');
  $('#autoremove_label').prop('title', 'With that checkbox you can toggle if an element you select will immediatly disappear or stay selected until you enable that checkbox again.');
  saveLang("en");
}

function lang_de(){
  $(document).prop('title', 'Merkliste');
  $("#h1_title").html("Merkliste");
  $("#autoremove_label").text("Sofort entfernen?");
  $("#task").css('width', '175');
  $("#autoremove").prop('title', 'Sofort entfernen?');
  $("#task").prop('title', 'Name des Eintrags.');
  $('#autoremove_label').prop('title', 'Wenn sie es anschließend wieder einschalten werden alle markierten Einträge auf einmal entfernt.');
  saveLang("de");
}
function saveLang(input){
  localStorage.setItem("lang", input);
}

然后恢复用户在重新加载后选择的语言,或者当他回到网站时我使用该语言:

 $(document).ready(function() {
  if(localStorage.getItem("lang") != null){
    if(localStorage.getItem("lang") == "de"){
      lang_de();
    }
    else if (localStorage.getItem("lang") == "en") {
      lang_en();
    }
  }

我知道它不是一个完美的(对于包含大量文本的网页来说是一个非常耗费工作量的解决方案),但是它可以正常工作,而且如果不使用像翻译网站这样的服务,你可以获得最接近的解决方案。谷歌,在我看来翻译网站时非常糟糕。

编辑:根据您要更改的文本要素,您可能需要不同的JQuery代码: 例如标签:

$("#idOfLabel").text("Translated text");

或h1:

$("#h1_id").html("Translated text");

这是网站标题:

$(document).prop('title', 'Translated text');

关于这一点很酷的是你也可以改变按钮的宽度,所以它可以包含更长和更短的字符串,否则可能会弄乱你的网站。

答案 1 :(得分:1)

您可以使用Java的国际化(I18N),以允许应用程序支持多种语言的文本。这是通过使用LocaleResourceBundle类添加特定语言的文本来完成的:

查看oracle文档教程here

简单地说,您可以根据语言(作为2个字符的代码,例如Locale)和国家/地区(另外2个字符代码,例如en)创建US。然后,您可以使用ResourceBundle中的Locale并使用属性文件来存储文本。

示例:

String language = "en";
String country = "US";

Locale currentLocale = new Locale(language, country);
ResourceBundle messages = ResourceBundle.getBundle("MessagesBundle", currentLocale);
System.out.println(messages.getString("your_string_here"));

然后你会有一个属性文件;在此示例中,MessagesBundle.properties

your_string_here = Hello world!
your_other_string = Something else

对于另一种语言,您将在正确的本地化下拥有另一个MessagesBundle文件。例如,对于法语,该文件将被称为MessagesBundle_fr_FR.properties

your_string_here = Bonjour!
your_other_string = Something else in French