【问题标题】:Multilenguage data in web applicationWeb 应用程序中的多语言数据
【发布时间】:2014-04-24 09:19:29
【问题描述】:

我正在开发一个关于餐厅管理的 Web 应用程序,并且我想存储不同的类别并可以使用我选择的语言访问它们。 我正在使用 mySQL,我的应用程序是用 Java+Spring+Hibernate+Tapestry 开发的。 我怎样才能做到这一点?用三种或四种语言在数据库中存储姓名?

【问题讨论】:

标签: java mysql database spring hibernate


【解决方案1】:

您应该使用称为国际化 (i18n) 的机制。 在这里您可以找到如何在 Spring 中执行此操作的示例: http://simplespringtutorial.com/i18n.html

常见的方法是将翻译存储在带有语言后缀的属性文件中,例如messages_fr.properties 等等,而不是存储在数据库中。

【讨论】:

  • 如果例如:一个英语用户(管理员)可以添加一个类别“饮料”,但他的同事是西班牙人,他想阅读“Bebidas”。在 Add Category 表单中可以询问三四种语言的新类别名称,但都保存在 .properties 文件中?
  • 您可以使用网站上的一些按钮来选择所需的语言。单击按钮后,您的页面必须重新加载(如果您不使用 Ajax),并且在服务器重新构建页面时,将从 *.properties 文件中读取新的本地化消息。您必须链接到站点页面中的“键”(您在 *.properties 文件中通过键=值定义它们)。
【解决方案2】:

好的。我将在这里计算我的答案并描述一些细节,这在我的 cmets 中没有涵盖。

为您计划使用的每种语言创建 *.properties 文件。他们的内容例如:

I18n_en.properties

category.dinners=晚餐

I18n_es.properties

category.dinners=Bebidas

站点上的用户点击按钮或链接,服务器收到请求参数,例如 locale=en。

生成站点页面的代码可能包含如下内容:

String path = ...;  //--- Path to folder with *.properties files

if (locale.equals("en")) path += "I18n_en.properties";
else path += "I18n_es.properties";

FileInputStream fis = new FileInputStream(path);
ResourceBundle resourceBundle;
try {
    resourceBundle = new PropertyResourceBundle(fis);
} finally {
    fis.close();
}

您的类别对象必须具有“名称”属性。此“名称”必须包含来自 *.propeties 的所需键。在我们的例子中 - name="category.dinners"。

您从数据库中获取类别对象。现在您需要将文本放入所需的语言环境中:

String htmlForResponse = ...;  //--- Your HTML-page

htmlForResponse += "<div>" + resourceBundle.getString(category.getName()) + "</div>";

这不是最好的解决方案。这仅向您展示了一些可能的步骤。祝你好运!

【讨论】:

  • 谢谢!我会试试这个解决方案。
猜你喜欢
  • 2011-06-28
  • 1970-01-01
  • 2012-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多