全球互聯網用戶持續增長,許多用戶希望以母語瀏覽你的內容。你可能認為只需要一個優秀的翻譯就能搞定網站的用戶界面翻譯,但更大的挑戰在於後台代碼的編寫。傳統的軟件本地化過程繁瑣且易出錯,導致代碼混亂。一些開發者甚至為不同地區使用不同版本的代碼,這使得代碼庫管理幾乎不可能。
gettext是一個優秀的開源工具,它能簡化這個過程,讓你專注於代碼編寫,而翻譯人員則負責處理目標語言的單獨翻譯文件。掌握PHP的gettext,拓展應用的全球影響力將變得輕而易舉!本系列文章將教你如何使用gettext本地化你的PHP應用。第一部分將快速介紹gettext。後續部分將在此基礎上,講解如何處理多個翻譯域、複數形式,甚至如何自動化部分本地化流程。
準備環境
在開始學習之前,確保環境設置正確,這有助於逐步測試學習內容。以下是安裝清單:
無論你的平台是什麼,要從PHP使用gettext,都需要安裝gettext庫和連接到該庫的PHP擴展。 Ubuntu/Debian用戶可以使用apt-get,Fedora/CentOS/Redhat用戶可以使用yum安裝gettext庫。如果你使用的是其他類Unix系統,請訪問www.gnu.org/s/gettext,獲取與你的平台兼容的gettext副本。 Windows用戶可以從gnuwin32.sourceforge.net/packages/gettext.htm下載最新的可執行文件並安裝。安裝庫後,需要通過編輯php.ini並添加一行來啟用gettext的PHP擴展:
<code># Windows用户 extension=php_gettext.dll # *nix用户 extension=gettext.so</code>
然後,安裝稍後將用到的Poedit。你可以在www.poedit.net下載副本。
gettext的“Hello World”
在你的Web根目錄中,創建一個名為TestI18N的沙盒目錄用於gettext練習(I18N代表國際化)。在TestI18N目錄中,創建以下層次結構:
在未來的項目中,你可以隨意命名父目錄和Locale目錄,但en_US和LC_MESSAGES是gettext使用的標準名稱。 en_US代表區域設置的名稱,由兩部分組成。第一部分是根據ISO 639-1規範的語言的兩位小寫字母縮寫。下劃線後的第二部分是根據ISO 3166-1 alpha-2規範的兩位大寫國家代碼。因此,en_US表示語言是美國英語。
接下來,確保Poedit在你的平台上正常工作。啟動程序,從頂部菜單欄中選擇“文件”>“新建目錄”。在設置窗口中,填寫以下信息,暫時跳過複數形式字段:
點擊“確定”,然後將文件保存為LC_MESSAGES目錄中創建的messages.po。現在關閉Poedit,並使用你喜歡的文本編輯器打開messages.po……是的,它是一個普通的文本文件!你可以手動編輯它,但為了省事,我們讓Poedit為我們創建主要的定義。在文件中已有的行之後留下一行空行,然後添加以下內容:
<code># Windows用户 extension=php_gettext.dll # *nix用户 extension=gettext.so</code>
保存messages.po並關閉它,然後在Poedit中重新打開它。在Poedit中,選擇“文件”>“保存”或點擊圖標欄中的“保存目錄”條目。我們在Poedit中保存PO文件的原因是,它們需要編譯成gettext可用的特殊格式。在Poedit中保存後,你將看到在同一目錄中創建了一個同名的新文件,但擴展名為.mo。如果你要繼續使用常規文本編輯器修改和保存PO文件,則需要使用pocompile命令進行編譯。如果你使用Poedit,則不需要額外的編譯步驟,因為它會在你保存文件時自動編譯文件。
回到TestI18N目錄,創建一個名為test-locale.php的文件,其中包含以下代碼:
<code># 测试标记1 msgid "HELLO_WORLD" msgstr "Hello World!" # 测试标记2 msgid "TEST_TRANSLATION" msgstr "Testing translation..."</code>
在瀏覽器中打開TestI18N/test-locale.php。如果一切安裝正確且運行良好,你將看到頁面上顯示“Hello World”。
總結
在本地化你的PHP應用程序時,你有很多選擇。我們選擇使用GNU gettext庫及其PHP擴展,這是一種強大且簡單的方法,可以“正確地”本地化應用程序!在本部分中,你看到了安裝gettext和PHP擴展所需的內容,簡要地使用了Poedit,並通過一個簡單的Hello World腳本激發了你的興趣。第二部分將以此為基礎,學習更多關於gettext的知識;我將解釋在Hello World腳本中介紹的每個函數以及gettext庫的工作原理。
圖片來自sgame / Shutterstock
(以下為FAQ部分,根據原文內容調整,並進行了偽原創)
關於PHP應用程序本地化的常見問題
本地化PHP應用程序的重要性是什麼?
本地化PHP應用程序對於希望覆蓋全球用戶的企業至關重要。它涉及將軟件應用程序的用戶界面和其他可見元素翻譯成不同的語言。此過程不僅增強了用戶體驗,還擴大了應用程序的市場覆蓋範圍。通過本地化你的PHP應用程序,你可以滿足不同用戶的需求,從而增加你的用戶群和潛在收入。
PHP本地化是如何工作的?
PHP本地化涉及使用特定的函數和庫來翻譯應用程序中的文本。最常用的方法是使用gettext,這是一個強大的庫,允許你將字符串包裝在一個函數中,該函數將根據用戶的區域設置翻譯它們。這涉及為每種語言創建一個.po文件,其中包含所有翻譯。
實現PHP本地化的步驟是什麼?
實現PHP本地化涉及幾個步驟。首先,你需要在你的PHP環境中安裝和配置gettext庫。接下來,你需要使用gettext函數包裝應用程序中所有你想要翻譯的字符串。然後,你需要為每種你想要支持的語言創建.po文件,並翻譯這些文件中的所有字符串。最後,你需要將這些.po文件編譯成.mo文件,這些文件是二進製文件,gettext可以讀取它們。
本地化PHP應用程序的挑戰是什麼?
由於以下幾個原因,本地化PHP應用程序可能具有挑戰性。首先,翻譯應用程序中的所有字符串可能非常耗時,尤其是在應用程序龐大而復雜的情況下。其次,維護翻譯可能很困難,尤其是在更新或向應用程序添加新功能時。第三,處理不同語言中的複數、性別和其他語法細微之處可能很棘手。
如何在PHP本地化中處理複數?
可以使用ngettext函數在PHP本地化中處理複數。此函數接受三個參數:字符串的單數形式、複數形式和數字。然後,它根據數字返回正確的形式。例如,ngettext(“一個蘋果”,“許多蘋果”,$number)如果$number為1,則返回“一個蘋果”,否則返回“許多蘋果”。
如何測試我的本地化PHP應用程序?
你可以通過更改服務器上或PHP代碼中的區域設置,然後檢查字符串是否正確翻譯來測試你的本地化PHP應用程序。你還應該測試不同語言中應用程序的佈局和設計,因為某些語言可能需要更多空間或具有不同的閱讀方向。
我可以使用機器翻譯進行PHP本地化嗎?
雖然機器翻譯可以快速輕鬆地翻譯你的字符串,但不建議將其用於PHP本地化。機器翻譯通常缺乏軟件本地化所需的準確性和上下文感知能力。最好使用專業的翻譯人員或本地化服務來確保翻譯的質量。
如何管理我的PHP應用程序的翻譯?
可以使用本地化平台或翻譯管理系統來管理PHP應用程序的翻譯。這些工具允許你將翻譯存儲、管理和更新在一個中心位置。它們還提供翻譯記憶、術語表和協作工具等功能,以幫助你簡化本地化過程。
.po和.mo文件在PHP本地化中的作用是什麼?
.po和.mo文件在PHP本地化中起著至關重要的作用。 .po文件是包含原始字符串及其翻譯的文本文件。它們是人類可讀的,可以使用文本編輯器或.po文件編輯器進行編輯。另一方面,.mo文件是機器可讀的二進製文件。它們是由.po文件生成的,並由gettext用於翻譯應用程序中的字符串。
我可以將我的PHP應用程序本地化為任何語言嗎?
是的,你可以將你的PHP應用程序本地化為gettext支持的任何語言。但是,你需要擁有應用程序中所有字符串的該語言的翻譯。此外,你需要考慮每種語言的文化和語言細微之處,以確保本地化的質量。
以上是phpmaster |本地化PHP應用程序第1部分:2011年10月 - 站點點的詳細內容。更多資訊請關注PHP中文網其他相關文章!