- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将为Node.js(服务器端Javascript)实现此功能,但是这个问题是关于如何解决此问题的一般方法。
有许多平台支持国际应用程序的翻译。
例如,Zend's Translation Adapter的工作方式如下:
printf($translate->_("Today is the %1\$s") . "\n", date("d.m.Y"));
最佳答案
实际上很难直接回答这个问题。这里有很多用例。如果要设计这样的系统,我会牢记以下几点:
1.翻译后可能需要对句子重新排序(您已经提出了)。这就是为什么我们使用编号占位符(如{1},{2})和某些格式化消息的方式的原因。
2.有许多种语言具有多种复数形式。也就是说,如果消息包含一些数字,则取决于数量,它将以不同的方式进行翻译。例如:
中文:已发现1种病毒|已找到2个病毒|已发现5种病毒
波兰语:Znaleziono 1 wirusa | Znaleziono 2无线网络| Znaleziono 5wirusów
这不容易处理,但是我真的很喜欢GetText做到这一点的方式(有一些表达式可以决定使用哪种形式,以及对多种形式的支持)。
3.这样的库的用户可能想要命名的占位符(请参阅I18n标记中的先前问题),例如“这是$ {name}在$ {location}中的消息”,并像这样使用它:
var formatted ='这是$ {name}中$ {name}的消息。'。format('location = Warsaw','name =Paweł');
尽管这带来了一些i18n问题,但我相当确定可以在JavaScript中完成(尽管您传递命名参数(即自变量)的方式可能需要有所不同。
4. Java倾向于在MessageFormat.format()方法中为特定语言环境格式化数字和日期。这不是理想的行为,并且几乎没有问题,尤其是在JavaScript中。好吧,您首先需要知道的是什么是当前用户的语言环境。如果这样做,容易吗?好吧,不。有很多可能的日期格式-Java将它们枚举为:完整,长,中,短和默认。不幸的是,格式化期间没有区别-总是会使用AFAIR short。当然,可以将其格式传递给占位符,如下所示(AFAIR):{0,date,yyyy-MM-dd}。这带来了另一个问题:译者将总是必须提供格式。这容易出错。相反,我将使用默认模式进行格式化(如果未提供其他信息),并允许传递模式名称:{0,date,long}。
对于数字,它可以是任何东西:货币,百分比或简单数值。您还需要支持区分,例如:{0,currency,symbol:$,long},{0,percentage},{0,number,long}。很难猜出我的意思,但是对于大数,您可能要使用分组分隔符(1,000,000.00 $),让我们将其称为长格式,而有时您希望打印数字:1234。这不是一件容易的事。
5. .Net具有用户界面区域性(CurrentUICulture)和格式区域性(CurrentCulture)的概念。首先用于确定用户界面消息的适当语言,而第二用于格式设置(数字,日期,货币等)。
6.不同的语言倾向于使用不同的Collation顺序,甚至同一语言都可以使用两种(或更多)不同的语言。我不确定它是否适合该范围,但至少应该知道。
7.可能需要(并且可能会)支持不同的Character Encodings。但是,您可能希望将资源编码文件限制为UTF-8。它不会覆盖所有可能的字符(例如,请参见GB18030),但是它很接近。
...?
好吧,我确定我忘记了一些主要的事情,因为您要处理的任务是艰巨的。而且我对Node.js的了解不多(如当前所支持的那样)。
编辑
8.当然,我忘了提到随着软件的发展,只有很少的用户界面消息发生变化,因此需要合并旧的翻译(在L10n术语中称为杠杆化)。通常,会使用某种翻译记忆库软件(例如POEdit,GetText文件格式编辑器内置了此类功能)。 TM软件通常仅对某些文件格式提供支持,因此最好保留现有格式,而不是创建自己的格式。这可能意味着将某些功能从列表中删除...
关于internationalization - 设计用于全局应用程序的国际翻译/语言适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5611808/
我在不同的国家从事不同的项目,并指出有时代码变得国际化,例如 SetLargeurEtHauteur() (for SetWidthAndHeig
我正在使用 BIRT 开发多语言报告,我已经翻译了报告中的几乎所有内容,除了一些报告参数属性,例如: 提示文字 帮助文本 我也想翻译报告标题属性,但似乎也是不可能的...... 在参数定义中我找不到使
当人们讨论国际化时,他们会更频繁地使用“i18n”一词。第一次我没有得到“i18n”所指的含义,然后我才知道这意味着“国际化”。 因此想知道为什么国际化= i18n。 最佳答案 http://en.w
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
我们有一个网站,将用于两个不同的客户。在第一次请求期间,用户将被要求选择一个客户端。根据该文本,应显示标签和站点内容。 是否可以在 Play 框架中有两个消息文件,并且在 session 启动期间将决
我想知道我的 Bundle 文件放在哪里以便国际化。 Libgdx wiki 没有解释位置(Android Assets 文件夹?),他们使用名为 MyBundle 的文件名作为示例。我可以使用另一个
我有 Yii2 - 高级模板 我保留了源语言英语 目标语言是法语 系统消息翻译如下: Yii::t('yii','Update') 翻译成“修饰符” 但是我所有的自定义翻译都不起作用 - 这是我所做的
我曾经看到一个免费的翻译管理软件,用来发布原始软件文本并允许以协作的方式翻译成其他语言。类似于 http://www.mtranslator.com/ 的东西但也允许社区驱动的额外翻译。 我只是似乎无
在某些HTML页面中,我的字符编码为a problem。看来问题的根源在于某些.html文件未保存为UTF-8编码文件。即使我已指示Eclipse将这些文件另存为UTF-8,但当我在浏览器中打开它们时
我想这是一个多部分的问题。我正在建立一个成员(member)网站,并希望帐户尽可能国际化。 在允许国际号码的表格上收集电话号码的最佳方法是什么?我不担心存储它们,只是收集和验证。我现在拥有的是一个带有
我开始逐步构建我的 Web 应用程序,向路由器添加路由和其他路由。该应用程序不是单页应用程序,因为它提供了相对独立的功能。 例如,如果您必须构建一个包含 wiki、仪表板(和设置)以及使用 wiki
通常我将 Recaptcha 用于所有验证码目的,但现在我正在建立一个网站,该网站被翻译成中文和日文以及其他语言。我想让这些用户尽可能访问验证码。即使他们可以阅读和输入英文字符(不一定是这种情况),很
一些语言,尤其是斯拉夫语言,会根据语法上下文改变人名的结尾。 (对于那些了解语法或学习过对单词(例如德语或俄语)执行此操作并帮助搜索关键字的语言的人,我说的是名词变格。) 这可能是一组示例最简单的(在
是否有其他语言默认为ddmmyyyy以外的其他语言(美国除外)? 我正在从事一个国际项目,想知道是否还有其他语言使用mmddyyyy日期格式。我对许多语言的了解有限,但到目前为止,似乎大多数人都使用d
我如何在英文网站上编码外国字母字符,例如;俄语、德语等(不想用十六进制字符串编码) 最佳答案 一个不错的选择是使用 utf-8 编码。 关于internationalization - 如何在网站上编
使用 gettext 如何使具有多个数字变量的句子可翻译? ngettext 只接受一个数字作为复数参数。 以下句子中应该允许的排列是“成人和 child ”、“成人和 child ”、“成人和 ch
是否有像reCAPTCHA这样的CAPTCHA Web服务支持英语以外的其他语言? 为非英语用户提供本地化的验证码会很好。 最佳答案 recaptcha支持其他语言,请参阅链接 http://code
我目前正在 Google 表单上创建一个调查,我需要以 4 种语言进行调查,因此每个问题的结果不会根据用户选择的语言而分开。 (因此我们可以在不考虑语言的情况下获得每个响应的图形结果) 这提出了不同的
我正在开发一个软件项目,该项目需要翻译成30种语言。这意味着更改任何字符串都将导致较高的成本。此外,翻译不会一overnight而就,因为翻译包需要由不同的翻译人员处理,因此可能需要一段时间。 以某种
通常,转换方法采用键 > 值映射,并使用键将其转换为值。现在我认识到两种不同的方法来命名您的翻译键,在我的团队中,我们没有就似乎最好的方法达成共识。 方法一: 使用完整的英语单词或句子: Name =
我是一名优秀的程序员,十分优秀!