我正在制作一个I18N应用程序,该应用程序将位于日语中,我不知道日语中的任何单词,我首先想知道utf8是否足以支持该语言。
通常,对于欧洲语言,utf8就足够了,我要设置我的数据库字符集/校对以使用utf8_general_ci(在MySQL中)和我在utf8中的html视图,这就足够了。
但是日本人怎么办呢?
顺便说一句,我的应用程序可以处理英语,法语,日语,但稍后,可能需要添加一些语言,比方说俄语。
如何设置我的I18N应用程序以便广泛使用而无需在部署时更改多少配置?
有最佳做法吗?
顺便说一句,我打算使用gettext,我很确定它支持这些语言没有任何问题,因为它几乎是所有GNU软件的事实标准,但有任何反馈吗?
答案 0 :(得分:5)
有几点:
答案 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,您可以根据控制器分割语言文件,这样就不会导致加载大量文本文件。