php - 国际化的设计注意事项

标签 php internationalization locale

我在 Unicode 上阅读了 Joel 的文章而且我觉得我至少从字符集的角度对国际化有一个基本的了解。除了阅读this question ,我也对设计考虑方面的国际化做了一些自己的研究,但我不禁怀疑还有很多我不知道或不知道要问的问题。

我学到的一些东西:

  • 某些语言从右到左阅读
    而不是从左到右。
  • 日历、日期、时间、货币和
    数字显示不同
    从语言到语言。
  • 设计应该足够灵活
    容纳更多的文字,因为
    有些语言要冗长得多
    相对于其它的。
  • 不要拿图标或颜色
    当涉及到他们的
    语义含义,因为这可能会有所不同
    从文化到文化。
  • 地理命名法从
    语言到语言。

  • 我在哪里:
  • 我的设计足够灵活
    容纳更多的文字。
  • 我会自动翻译每个
    字符串,包括错误消息和帮助对话框。
  • 我还没有到点
    我需要显示时间单位,
    货币或数字,但我会
    很快就会有,并且需要
    制定解决方案。
  • 我正在使用 UTF-8 字符集
    全面。
  • 我的应用程序中的菜单和各种列表已排序
    每种语言按字母顺序排列,以便于阅读。
  • 我有一个标签解析器,可以提取
    通过过滤停用词来标记标签。这
    停用词列表是特定于语言的
    并且可以换掉。

  • 我想了解的更多信息:
  • 我正在开发一个可下载的 PHP Web 应用程序,
    所以关于以下方面的任何具体建议
    PHP 将不胜感激。
    我已经开发了自己的框架和
    对使用其他不感兴趣
    此时的框架。
  • 我对非西方国家知之甚少
    语言。有没有具体
    需要考虑的因素
    考虑到我没有提到
    以上?还有,PHP的数组怎么做
    排序函数处理非西方
    人物?
  • 是否有任何特定的陷阱
    你在实践中经历过吗?我正在查看 GUI 和应用程序代码本身。
  • 任何与合作的具体建议
    日期和时间显示?有没有
    按地区分割或
    语?
  • 我看过很多项目和网站
    让他们的社区提供
    翻译他们的应用程序
    和内容。你推荐这个吗
    什么是一些好的策略
    确保你有一个好的
    翻译?
  • 这个问题基本上是程度
    我所知道的
    国际化。什么我不
    知道我不知道我应该
    进一步研究?

  • 编辑 :我添加了赏金,因为我想从经验中获得更多真实世界的例子。

    最佳答案

    我们的游戏 Gemsweeper已被翻译成 8 种不同的语言。在这个过程中我学到了一些东西:

  • 如果给翻译者翻译单个句子,请确保他知道每个句子使用的上下文。否则他可能会提供一种可能的翻译,但不会提供您想要的翻译。
    Babelfish等工具在不了解上下文的情况下进行翻译,这就是结果通常如此糟糕的原因。只需尝试将任何非平凡的文本从英语翻译成德语,然后再翻译回来,你就会明白我的意思。
  • 应该翻译的句子不能因为同样的原因被分成不同的部分。 那是因为您需要维护上下文(请参阅上一点)并且因为某些语言可能在句子的开头或结尾处具有变量。使用占位符而不是拆分句子。例如,代替

  • "This is step" "of our 15-step tutorial"



    写一些类似的东西:

    "This is step %1 of our 15-step tutorial"



    并以编程方式替换占位符。
  • 不要指望翻译很有趣或有创意。 他通常没有足够的动力去做这件事,除非你说出特定的文本段落并付钱给他。例如,如果您的语言 Assets 中有笑话,请在附注中告诉译员不要尝试翻译它们,而是将它们排除在外或用更阴沉的句子代替它们。否则翻译人员可能会逐字翻译笑话,这通常会导致完全胡说八道。在我们的案例中,我们有一名翻译人员和一名笑话作家负责最重要的翻译(英语)。
  • 试着找一个翻译,他的第一语言是他要把你的软件翻译成的语言,而不是相反。 否则,他可能会写出可能是正确的文本,但对于母语人士来说听起来很奇怪或过时。此外,他应该住在您翻译的目标国家/地区。例如,来自瑞士的说德语的人不是德语翻译的好选择。
  • 如果可能,请让一位了解特定翻译的公共(public) Beta 测试用户验证已翻译的 Assets 和已完成的软件。 我们有一些非常好的和非常糟糕的翻译,这取决于提供它的人。根据我们的一些用户的说法,瑞典语翻译完全是胡言乱语,但为时已晚。
  • 请注意,对于具有新功能的每个更新版本,您都必须翻译您的语言 Assets 。 这会产生一些严重的开销。
  • 请注意,如果您的软件被翻译,最终用户将希望技术支持能说他们的语言。 再一次,Babelfish 很可能不会这样做。

  • 编辑 - 更多点
  • 尽可能轻松地在本地化之间切换。 在 Gemsweeper 中,我们有一个在不同语言之间切换的热键。它使测试变得更加容易。
  • 如果您要使用异国情调的字体,请确保这些字体包含特殊字符。 我们为 Gemsweeper 选择的字体适用于英文文本,但我们不得不手动添加相当多的字符,这些字符仅存在于德语、法语、葡萄牙语、瑞典语、...
  • 不要编写自己的本地化框架。 使用像 Gettext 这样的开源框架可能会好得多。 . Gettext 支持句子中的变量或复数等功能,并且坚如磐石。本地化资源是编译好的,所以没有人可以篡改它们。此外,您还可以使用 Poedit 之类的工具。用于翻译您的文件/检查其他人的翻译并确保所有字符串都被正确翻译并且在您更改基础源代码的情况下仍然是最新的。我已经尝试过自己滚动和使用 Gettext,我不得不说 Gettext 加上 PoEdit 更胜一筹。

  • 编辑 - 更多积分
  • 了解不同的文化具有不同风格的数字和日期格式。 编号方案不仅因文化而异,而且因该文化中的目的而​​异。在 EN-US 中,您可能会格式化一个数字“-1234”; '-1,234' 或 (1,234) 取决于数字的用途。了解其他文化做同样的事情。
  • 了解您从何处获取全局化信息。 例如。 Windows 具有 CurrentCulture、UICulture 和 InvariantCulture 的设置。了解每一项的含义以及它如何与您的系统交互(它们并不像您想象的那么明显)。
  • 如果你打算做东亚翻译,真的要做好功课。 东亚语言与这里的语言有很多不同。除了同时使用多个字母表之外,它们还可以使用不同的布局系统(自上而下)或基于网格的布局系统。东亚语言中的数字也可能大不相同。在 en-US 中,您只能在有限的条件下更改系统(例如 1 对 1st),除了逗号和句点之外,还有其他数字考虑因素。
  • 关于php - 国际化的设计注意事项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/644100/

    相关文章:

    php - 全局搜索字段搜索多列

    php - Yii2 翻译查找错误的文件夹

    jquery i18n 属性 ie 在 eval 行上失败

    php - 用 __() 和 sprintf() 翻译 WP

    android - 如何恢复 Android 应用程序的默认语言环境

    php - 随机选择一个帖子,不重复

    PHP 使用包含在页面上设置事件链接

    php - 无法在我的代码中使用 require 或 include 来包含我的 Css 文件

    php - 如何将 Symfony 翻译的句子传递给 twig?

    url - 如何在GWT应用程序上获取语言环境信息