2011-06-01 18 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

相關問題