寻找一种允许嵌套键的干净的国际化方法。
例如消息 = 请检查您的启动工具。
现在,boot 一词在 s/w 的 100 多个字符串中使用,当我去客户端 X 时,他说用主干更改引导。所以想创建具有嵌入在值中的键的语言文件,例如
message = 请检查您的 {boot} 以获取工具。
引导 = 后备箱
这将是一个 SaaS 应用程序,我们将允许用户通过 Web 界面更改字符串。
寻找一种允许嵌套键的干净的国际化方法。
例如消息 = 请检查您的启动工具。
现在,boot 一词在 s/w 的 100 多个字符串中使用,当我去客户端 X 时,他说用主干更改引导。所以想创建具有嵌入在值中的键的语言文件,例如
message = 请检查您的 {boot} 以获取工具。
引导 = 后备箱
这将是一个 SaaS 应用程序,我们将允许用户通过 Web 界面更改字符串。
我不确定这是个好主意:
恕我直言,要么您的系统过于简单,但在 2% 的情况下符合要求,要么它会非常复杂,使用和配置是一场噩梦,而且您会因为一个很少发生的问题而浪费时间和可读性并且可以通过临时搜索/替换来修复。
如果简单的方法适合您,我只需要特殊标记来识别标记(@boot@
例如),并在构建应用程序期间进行替换,例如使用 Ant 的替换任务。
您想要做的是串联- 第二个最常见的国际化缺陷。换句话说,不要那样做。最好复制这 100 个字符串 - 使用有效的工具(如支持正则表达式的文本编辑器)相当容易,而不是连接字符串。
许多(如果不是大多数)语言都有Inflection的概念,即您要连接的单词可能需要翻译成几种不同的形式。
翻译通常取决于上下文。如果这个词必须完全按原样翻译(只是形式发生变化),那么……上下文本身就没有必要了。这不是一个理论,请考虑以下示例。
我们在资源中有一个字符串,例如“{0} 已切换 {1}”,它被解析为“[some program] | [some function] has been connected [on] | [off]”。问题是,当我们想将它正确翻译成波兰语时(只是一个例子,在许多其他语言中都会发生),它应该根据它是程序还是函数而有所不同。仅仅因为程序是阳性的(“程序 [jakiś program] został [włączony] | [wyłączony]”)而功能是阴性的(“一个* ] | [wyłączon* a * ]")。
不仅词的形式需要改变,而且整个上下文(见添加的词)!
连接是不可行的。你们中的一些人可能会说“磁盘占用空间怎么样?”。好吧, 现在空间很便宜,只是对与错而已。为了节省几千字节而连接单词是错误的,并且会导致严重的本地化问题。
有时,屈折变化不是问题,但您需要根据上下文将语气从指示性变为祈使性。这导致了不同的翻译。
如果您确实需要使用消息格式,我建议仅将其用于数字、货币和日期(请记住有效的区域格式!)。