Php 我应该知道什么才能让我的I18N应用程序在日语中工作?

Php 我应该知道什么才能让我的I18N应用程序在日语中工作?,php,utf-8,internationalization,gettext,utf-16,Php,Utf 8,Internationalization,Gettext,Utf 16,我正在开发一个用日语编写的I18N应用程序,我不知道日语中的任何单词,我首先想知道utf8是否足够用这种语言 通常,对于欧洲语言,utf8就足够了,我必须设置我的数据库字符集/排序规则来使用utf8\u general\u ci(在MySQL中)和utf8中的html视图,这就足够了 但是日本人呢,还有别的事情要做吗 顺便说一下,我的应用程序将能够处理英语、法语、日语,但以后可能需要添加一些语言,比如说俄语 我如何设置我的I18N应用程序,使其广泛可用,而不必在部署时更改太多配置 有什么最佳实践

我正在开发一个用日语编写的I18N应用程序,我不知道日语中的任何单词,我首先想知道utf8是否足够用这种语言

通常,对于欧洲语言,utf8就足够了,我必须设置我的数据库字符集/排序规则来使用utf8\u general\u ci(在MySQL中)和utf8中的html视图,这就足够了

但是日本人呢,还有别的事情要做吗

顺便说一下,我的应用程序将能够处理英语、法语、日语,但以后可能需要添加一些语言,比如说俄语

我如何设置我的I18N应用程序,使其广泛可用,而不必在部署时更改太多配置

有什么最佳实践吗


顺便说一句,我计划使用gettext,我很确定它支持这样的语言没有任何问题,因为它是几乎所有GNU软件的事实标准,但是有任何反馈吗?

如果您将文本存储在文本文件中,那么它是这样的:

这是语言的主文件夹结构:

-lang
      -en
      -fr
      -jp
      etc
每个子文件夹,en,fr。。。包含相同的文件、具有不同值的相同变量

例如,在lang/en/links.txt中 你会的

class txtLinks 
{

public static $menu="Menu";
public static $products="Show products";
....

class txtErrors 
{

public static $wrongUName="This user  does not exists";
....
然后,当脚本加载时,您可以执行以下操作

if(en)
define(__LANG,'en')
if(fr)
define(__LANG,'fr')
...
然后

这是php脚本中的一部分:

echo txtLink::$menu etc...
如果你用数据库的方式做类似的事情,在那里你没有文件,而是有表

这样你就有了绝对的自由,因为你可以把英语文件交给说法语的人,他可以用法语填写这些值,而不需要懂任何编程

你自己也不在乎后来添加或删除了什么语言


如果你在mvc上工作,你可以根据控制器分割语言文件,这样你就不会加载一个巨大的文本文件

是的,Unicode包含了显示英语、法语、日语、俄语和世界上几乎所有语言(包括台语、切罗基语、世界语,真的不是精灵语)所需的所有代码点。这就是它的目的。但是,由于UTF8的特性,更深奥的语言中的文本需要多存储几个字节

Gettext被广泛使用,您的PHP构建甚至可能包括它。有关用法的详细信息,请参阅。

有几点:

  • UTF-8适用于您的应用程序内部数据,但如果您需要处理用户提供的文档(例如上载),这些文档可能会使用其他编码,如Shift JIS或ISO-2022-JP
  • 日语文本不在单词之间使用空格。如果你的应用程序需要在某处将文本拆分成单词,那么你就有问题了
  • 除文本外,日期和数字格式不同
  • 通用排序规则可能不会为日文文本提供有用的排序顺序-如果你的应用程序包含大量的列表,人们必须在其中查找内容,这可能是一个问题

只需添加一个有趣的网站来帮助构建I18N应用程序:

看:是UTF-8编码的。我想这意味着UTF-8没问题。谢谢,这是一份很棒的清单。有关于文字方向的吗?我认为日语在任何意义上都可以写,但网络上是否有一个标准来避免rtl语言的问题?@Boris:日语不是rtl。它传统上是用垂直线写的,但在电子媒体中几乎从来没有这样做过。不过,Rtl与阿拉伯语和希伯来语有关,当将它们与ltr文本混合时,可能会产生奇怪的效果。但我对这个问题的了解并不比它的存在多得多——如果你想认真支持rtl语言,你必须对它进行研究。我刚刚检查了一下,你是对的,我很肯定在哪里读到过日语可以是rtl。然而,方向现在是相当邪恶的预优化,但我还是对它感到好奇。Thanks@Boris:嗯,如果你垂直书写日语或汉语,这些行就会变成rtl。
echo txtLink::$menu etc...