2011-06-01 32 views
6

我正在研究一个I18N应用程序,这个应用程序将位于日语中,我不知道日语中的任何单词,我首先想知道utf8是否足够用于该语言。我应该知道什么让我的I18N申请在日本工作?

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

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

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

如何将我的I18N应用程序设置为广泛可用,而无需更改部署中的多少配置?

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

+2

看:http://yahoo.jp是UTF-8编码。那么我认为这意味着UTF-8就没问题了。 – 2011-06-01 10:08:28

回答

5

几个要点:

  • UTF-8是罚款您的应用程序内部的数据,但如果你需要处理用户提供的文件(如上传),这些可以使用其他编码方式,如按住Shift JIS或ISO-2022-JP
  • 日文文本不使用单词之间的空格。如果你的应用程序需要将文本分割成文字,你就会遇到问题。
  • 除了文本,日期和数字格式不同
  • 通用整理可能不会导致一个有用的排序顺序为日文文本 - 如果你的应用涉及大量列表,人们必须找到,这可能是一个问题的事情。
+0

谢谢,这是一个很好的清单。关于文本方向的任何事情?我认为日语可以写在任何意义上,但是网上可能有标准来避免rtl语言的问题? – 2011-06-08 10:49:47

+1

@Boris:日文不是rtl。它传统上是以垂直线条写成的,但这在电子媒体中从未做过。尽管如此,Rtl仍然是阿拉伯语和希伯来语的关注点,并且在将这些内容与ltr文本混合在一起时,您可能会得到奇怪的效果。但是我对这个问题的了解还不够多 - 如果你想认真支持rtl语言,你就必须研究它。 – 2011-06-08 11:56:20

+0

我刚刚检查过,你是对的,我很确定在某处读过日文可能是RTL。然而,现在的方向现在非常恶劣,但我仍然很好奇。谢谢 – 2011-06-08 18:29:27

0

如果您存储在文本文件中的文本则是这样的:

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

-lang 
     -en 
     -fr 
     -jp 
     etc 

每个子文件夹,EN,FR ...包含相同的文件,具有不同值的相同变量。

例如,在郎/ 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,则可以根据控制器拆分语言文件,以免导致加载大型文本文件。

3

是的,Unicode包含了所有你需要在世界上显示英文,法文,日文,俄文和几乎任何语言的代码点(包括台湾,切诺基,世界语,除了小精灵以外的任何东西)。这就是它的目的。但是,由于UTF8的性质,更深奥的语言中的文本将需要更多的字节来存储。

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

+1

哈哈谢谢你太糟糕了不包括Elfish;) – 2011-06-09 10:42:16

相关问题