5

我想创建一个可以用两种语言查看的网站,一种 LTR 和一种 RTL。这意味着所有内容都应以两种语言中的任何一种显示。

我的框架是 Spring,我使用的是 Tiles2,但我认为这个问题不是特定于框架的。

支持两种语言的明显解决方案是将所有内容加倍(所有 JSP、片段等),并且您将获得适合您选择的语言的树部分。但这在更改网站时会导致问题(您可能忘记更新其他 JSP),并且不可扩展(尝试对 5 或 10 种语言进行此操作)。

我知道我可以使用属性文件来托管不同语言的字符串,但是我的网站将是一个巨大的 spring:message 标签集合,并且会更难维护(如果我有 100 行的段落会发生什么,这一切都进入一个单一的属性行吗?)

有没有解决这个问题的框架、插件、其他?有没有人遇到过这个问题的巧妙解决方案?

4

6 回答 6

4

我从来没有实现过一个完整的项目,只是一些测试。如果你遵循一些简单的规则,我认为这个问题并不像看起来那么大。这是我会尝试做的事情:

  • 用 指定方向<body dir='ltr/rtl'>。这是首选而不是 CSS 方向属性。

  • 避免在所有 CSS 中使用不同的左右边距或填充。如果你必须打破这个规则,你可能需要使用包含所有这些不同元素的两个不同文件(ltr.css 和 rtl.css)。

  • 有时您需要将一些元素从左向右移动,反之亦然。例如,在 LTR 中,您希望菜单在左侧,但在 RTL 中,您希望在右侧。您可以使用 CSS 实现这一点,但如果您不是专家,这有时会很复杂,您必须在所有浏览器中进行测试。另一种选择是根据情况使用一些 IF。如果您使用基于网格的 CSS 库(如 Bootstrap),最后一个选项将非常适合。

  • 仔细选择您将使用的 CSS 和 JS 库。显然,选择那些提供 RTL/LTR 支持的。

  • 不要太担心图像。如果您必须根据语言更改一张图像,可能是因为其中包含一些文本。所以,无论如何,你必须使用不同的图像。这是与 i18n 相关的问题,而不是文本方向问题。

  • 不要让您的客户对此过于挑剔。我认为通过这些规则(可能还有更多规则),您可以获得一个好的结果。但是,如果您的客户开始抱怨这里有一个像素而那里有另一个像素,那么您需要将这一切复杂化,并且可能没有必要。

  • 关于您的语言属性文件。是的,使用它们。总是。即使您只使用一种语言,这也是一个很好的做法:HTML 结构与内容分离,很容易更正或翻译,一些单词或句子只在一个文件中......

于 2013-01-03T15:26:29.307 回答
2

通常,Web 框架用于构建 Web 应用程序而不是网站,并且很少有长的静态段落。大多数内容是动态的并且来自数据库。但是,是的,通常的做法是将所有内容外部化到资源包中,通常以属性文件的形式。

将长段落放入属性文件不会造成太大问题,因为您可以通过以反斜杠结束每行来将长段落分成多行:

home.welcomeParagraph=This is a long \
    paragraph splitted into several lines \
    thanks to backslashes.
于 2012-12-29T13:58:55.653 回答
1

RTL 和 LTR 是 i18n 的高级和更困难的问题之一。

基本上它是 MVC 模型的视图范围的问题。这可能还包括图片和情感差异,例如人的皮肤颜色。在这种情况下,您最好放弃 HTML+CSS 为您提供的解决方案。

例如:

<style type="text/css">
    *:lang(ar) { direction:rtl }
    *:lang(de) { direction:ltr }
</style>

最佳做法是询问受众群体的成员网页对他们的影响。

于 2013-01-01T19:49:16.087 回答
1

我同意这里提供的大多数解决方案。您的问题更多是面向设计(架构)而不是技术。您需要选择路径是否需要将此国际化逻辑保留在服务器(java)端或静态文件中。

如果您想使用 java 端(首选解决方案),您需要保留两个属性文件并使用 jstl 标签。如果您以后想添加另一种语言,这可以最大限度地减少您的工作。这是可维护的解决方案。我见过支持超过 15 种语言和时区的应用程序。事实上,发布过程变得非常容易。

如果您想保留多个 css 和其他静态文件,您很快就会发现事情很快就用完了。我不认为这是一个可维护的解决方案。

说了这么多,我会把这个选择留给应用程序的架构师。他将能够根据应用程序的性质和给予他的限制来判断走哪条路。

于 2013-01-07T13:57:27.557 回答
0

你不想到处使用。很遗憾,因为这正是你应该这样做的方式。如果需要国际化,将硬编码文本保存在 jsp 中是一种不好的做法。

此外,大多数现代 IDE 允许您通过 ctrl+左键单击(或悬停键)进入变量声明,因此代码中包含大量变量不应该成为维护问题。

于 2013-01-10T11:25:26.233 回答
0

首先,对于每个文本元素,您必须区分它是用户界面元素(例如按钮标签)还是编辑内容。

用户界面元素标签将存储在必须为每种支持的语言翻译的属性文件中(并提供默认值作为后备)

编辑内容将存储在内容管理系统中,您将组织该系统以便轻松找到内容的本地化版本

于 2013-01-10T11:38:58.773 回答