这可能是一个愚蠢的问题,但这里有.
我见过几个项目使用一些翻译库(例如gettext)和普通英语占位符一起工作.例如:
_("Please enter your name");
Run Code Online (Sandbox Code Playgroud)
而不是抽象的占位符(这一直是我本能的偏好)
_("error_please_enter_name");
Run Code Online (Sandbox Code Playgroud)
我已经看到有关SO的各种建议与前一种方法一起工作,但我不明白为什么.我不知道如果你需要改变英语措辞,你会怎么做?因为如果将实际文本用作所有现有翻译的密钥,则还必须编辑所有翻译,并更改每个密钥.或者不是吗?
这不是很麻烦吗?为什么这是行业标准?
以这种方式做这绝对不是正确的规范化.我没有看到这种方法有很大的优势吗?
通常,转换方法采用键>值映射并使用键将其转换为值.现在我认识到两种不同的方法来命名您的翻译密钥,在我的团队中,我们没有达成共识,这似乎是最好的方法.
方法1: 使用完整的英语单词或句子:
Name => Name
Please enter your email address => Please enter your email address
Run Code Online (Sandbox Code Playgroud)
方法2: 使用描述情况的关键字:
NAME => Name
ENTER_EMAIL => Please enter your email address
Run Code Online (Sandbox Code Playgroud)
我个人更喜欢方法#1,因为它直接显示了消息的含义.如果翻译不存在,您可以回到密钥,这不会导致任何问题.但是,当翻译频繁更改时,该方法很麻烦,因为需要更新所有文件.此外,对于较长的文本,这些键变得非常大.这可以通过使用类似的键来解决ENTER_EMAIL,但是语法完全不在上下文中.抽象翻译密钥列表将是巨大的,您需要元数据来解释其使用的所有密钥,并且可以更容易地发生冲突.
两种世界或第三种方法都是最好的吗?如何在应用程序中使用翻译键?在我们的例子中,它是一个基于PHP的Web应用程序,但我认为上面的问题是通用的足以谈论i18n一般.
我们正在使我们的网站国际化,允许多种语言.
我已经研究过php的"gettext"但是,如果我理解正确,我会看到一个很大的缺陷:
如果我的网页让"Hello World"作为静态文本.我可以把字符串作为<?php echo gettext("Hello World"); ?>,使用工具生成po/mo文件.然后我会把文件交给译员继续工作.
几天后,我们想用英文改成文字说"Hello Small World"?我是否更改了gettext中的值?我是否创建了一个英文PO文件并在那里进行更改?如果您更改了gettext,它会将其视为一个新字符串,您将立即松开当前的翻译...
在我看来,渐渐地,php文件的内容到处都会有旧文本.或者翻译人员可能必须被告知"当你看到Hello World,而不是翻译Hello Small World".
我不知道我感到困惑.
在其他编程语言中,我看到他们使用的关键字如web.home.featured.HelloWorld.
在PHP中处理翻译的最佳方法是什么?
谢谢
我正在开发一个多语言的PHP Web应用程序,我有很长的( - )文本,我需要用gettext进行翻译.这些是电子邮件模板(通常很短,但仍有几行)和视图模板的一部分(较长的描述性文本块).这些文本将包括一些简单的HTML(强调粗体/斜体,可能是这里或那里的链接).模板是PHP脚本,其输出被捕获.
问题是gettext对于处理较长的文本似乎非常笨拙.较长的文本通常会比短文本有更多的变化 - 我可以更改msgid并确保在所有翻译中更新它(当msgid很长时可能是很多工作并且非常容易出错),或者我可以保留msgid保持不变并仅修改翻译(这会在模板中留下误导性的过时文本).另外,我已经看到了反对在gettext字符串中包含HTML的建议,但是避免它会将一个自然文本分成很多块,这将是翻译和重新组合的更大噩梦,我也看到了建议不必要的将gettext字符串拆分成单独的msgids.
我看到的另一种方法是完全忽略这些较长文本的gettext,并为每个语言环境分离外部子模板中的那些块,并且只包括当前语言环境的那个.缺点是我将gettext .po文件和位于完全不同位置的单独模板之间的转换工作分开.
由于此应用程序将在未来用作其他应用程序的起点,因此我试图提出长期的最佳方法.在这种情况下,我需要一些关于最佳实践的建议.你是如何实施类似案件的?什么结果发挥作用,结果是一个坏主意?