JSP internationalization RTL/LTR



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

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

支持两种语言的明显解决方案是将所有内容(所有JSP、片段等)都翻倍,这样您就得到了树中适合您选择的语言的部分。但是,当更改网站时(您可能会忘记更新其他JSP),这会导致问题,并且不可伸缩(尝试为5或10种语言这样做)。

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

是否有任何类型的框架,插件,其他,可以解决这个问题?有人想出了解决这个问题的聪明办法吗?

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

  • <body dir='ltr/rtl'>指定方向。

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

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

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

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

  • 不要让你的客户太挑剔。我认为有了这些规则(也许还有更多),你可以得到一个好结果。但是如果你的客户开始抱怨这里一个像素,那里另一个像素,你就需要把所有这些复杂化,可能是没有必要的。

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

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

在属性文件中放置长段落不会造成太大问题,因为您可以通过在每行末尾使用反斜杠将长段落分成多行:

home.welcomeParagraph=This is a long 
    paragraph splitted into several lines 
    thanks to backslashes.

RTL和LTR是i18n中较高难度的问题之一。

这基本上是mvc模型的视域问题。这也可能包括图片和情感上的差异,比如人们的肤色。在这种情况下,你最好放弃HTML+CSS给你的解决方案。

在例子:

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

最好的做法是询问受众组的成员关于网页对他们有什么影响。

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

如果您想使用java端(最好的解决方案),您需要保留两个属性文件并使用jstl标记。如果将来想要添加另一种语言,这将使您的工作最小化。这是一个可维护的解决方案。我见过支持超过15种语言和时区的应用程序。事实上,发布过程非常简单。

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

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

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

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

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

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

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

最新更新