gpt4 book ai didi

PHP 网络应用程序国际化

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:48:36 24 4
gpt4 key购买 nike

我正在构建一个需要国际化的 php 网络应用程序。我决定对系统相关的字符串使用 get-text,也许对用户生成的内容使用一些数据库表。

例如,用户可以发布博客文章。他应该能够用不同的语言发布该帖子的不同版本。我可以通过将所有帖子存储在带有表示语言的额外列的帖子表中来实现这一点。

困难的一点是尝试将存储在数据库中的系统字符串国际化。

例如,我有一个存储权限的表。每个权限都应该有一个字符串来描述此权限的作用。

目前,它存储在这样一个表中:

app_privileges

  • 编号
  • 特权
  • 其他一些专栏
  • 描述

我打算使用像 PoEdit 这样的应用程序来生成 gettext 文件。它能够搜索所有 php 文件以获取字符串。但是在这种字符串存储在数据库中的情况下,提取字符串进行转换可能需要相当多的工作。有哪些处理此问题的技巧和解决方案?

最后,假设我有一些用户可以在应用程序中创建和定义的数据类型和表单。例如,为购物车定义“产品类型”。这意味着产品将拥有自己独特的一组属性和描述。这些属性将需要与描述一起翻译。

与表单相同的情况。用户可以创建一个可能存储在一组表中的表单。然后需要翻译这些表格。

我可以使用哪些数据库模型来存储表单和产品类型的翻译?

干杯:)

最佳答案

对于更“系统”导向的字符串,例如:

  • 按钮
  • 特征名称
  • 特权
  • 等等

Gettext 很好。

例如,权限更面向“系统”(用户不创建权限,而是管理员将权限授予用户但不创建新类型的权限)。因此,您的权限表可以有一个从不显示的列“privilege_name”,它只包含 gettext 键,例如:“权限:用户可以编辑指定论坛中的帖子”。

应用程序中的字符串也不应该是用户将看到的文本,而是更详细的内容,例如“菜单:编辑首选项”。

这些字符串通过 gettext(即使是英语或网站的“母语”)并被翻译成正确的用户可见字符串。

您还应该使用带编号的 sprintf 样式参数,即不是“%s 的价格是 %s”,而是“%(1)s 的价格是 %(2)s”。

这有几个优点:

  • gettext 提供很少的上下文,并合并相同的字符串。看到“按钮:编辑这篇文章”的译者比看到“编辑”的译者有更多的帮助。在某些语言中,简单的文本“编辑”可能会翻译成不同的词或同一动词的语法形式,具体取决于“编辑”的内容。
  • 您可以随意更改英文文本而无需破坏其他语言的 gettext 键
  • 编号参数处理具有不同主语/动词/等顺序的语言

如果您在图像中有文字(例如某些按钮),您也需要注意这一点。 Gettext 也可以翻译文件名(images/buttons/en/submit.png => images/buttons/fr/valider.png 虽然简单的正则表达式也不错)并且不要忘记使用屏幕阅读器的盲人。

对于多语言用户生成的内容(存储在表中),通常的关系方法更好。

表格帖子(post_id ...)表posts_translated(post_id外键,language_id外键,标题,文本等)

这将允许您将 SQL 用于所有事情,例如显示帖子可用的语言列表、允许默认语言、显示未翻译的帖子、全文搜索等。

关于PHP 网络应用程序国际化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6772382/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com