我应该知道如何让我的I18N应用程序使用日语?

时间:2011-06-01 10:02:14

标签: php utf-8 internationalization gettext utf-16

我正在制作一个I18N应用程序,该应用程序将位于日语中,我不知道日语中的任何单词,我首先想知道utf8是否足以支持该语言。

通常,对于欧洲语言,utf8就足够了,我要设置我的数据库字符集/校对以使用utf8_general_ci(在MySQL中)和我在utf8中的html视图,这就足够了。

但是日本人怎么办呢?

顺便说一句,我的应用程序可以处理英语,法语,日语,但稍后,可能需要添加一些语言,比方说俄语。

如何设置我的I18N应用程序以便广泛使用而无需在部署时更改多少配置?

有最佳做法吗?

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

4 个答案:

答案 0 :(得分:5)

有几点:

  • UTF-8适用于您的应用内部数据,但如果您需要处理用户提供的文档(例如上传),则可以使用其他编码,如Shift-JIS或ISO-2022-JP
  • 日文文本不使用单词之间的空格。如果你的应用需要在某个地方将文字拆分成文字,你就会遇到问题。
  • 除了文字,日期和数字格式不同
  • 通用排序规则可能不会导致日文文本的有用排序顺序 - 如果您的应用涉及人们必须查找内容的大型列表,则可能会出现问题。

答案 1 :(得分:3)

是的,Unicode包含显示英语,法语,日语,俄语以及几乎所有语言所需的所有代码点(包括台语,切诺基语,世界语,除了Elfish之外的任何其他语言)。这就是它的用途。但是,由于UTF8的性质,更多深奥语言中的文本将需要更多的字节来存储。

Gettext被广泛使用,您的PHP构建甚至可能包含它。有关使用详情,请参阅http://php.net/gettext

答案 2 :(得分:1)

添加有趣的网站以帮助构建I18N应用程序:http://www.i18nguy.com/

答案 3 :(得分:0)

如果您将文本存储在文本文件中,则它如下所示:

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

-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')
...

然后

include('lang'.__LANG.'what ever file you want')

然后这是你的PHP脚本中的一块:

echo txtLink::$menu etc...

如果你按照数据库的方式进行类似的操作,那么你可以使用表格来代替文件。

这样你就拥有了绝对的自由,因为你可以把英文文件交给一个说法语的人,他能用法语填写这些值,而不需要知道编程。

而你自己并不关心以后添加或删除的语言。

如果您使用mvc,您可以根据控制器分割语言文件,这样就不会导致加载大量文本文件。