簡體   English   中英

PHP本地化最佳實踐? gettext的?

[英]PHP Localization Best Practices? gettext?

我們正在使我們的網站國際化,允許多種語言。

我已經研究過php的“gettext”但是,如果我理解正確,我會看到一個很大的缺陷:

如果我的網頁讓“Hello World”作為靜態文本。 我可以把字符串作為<?php echo gettext("Hello World"); ?> <?php echo gettext("Hello World"); ?> ,使用工具生成po / mo文件。 然后我會把文件交給譯員繼續工作。

幾天后,我們想用英文改成文字說“Hello Small World”? 我是否更改了gettext中的值? 我是否創建了一個英文PO文件並在那里進行更改? 如果您更改了gettext,它會將其視為一個新字符串,您將立即松開當前的翻譯...

在我看來,漸漸地,php文件的內容到處都會有舊文本。 或者翻譯人員可能必須被告知“當你看到Hello World,而不是翻譯Hello Small World”。

我不知道我感到困惑。

在其他編程語言中,我看到他們使用web.home.featured.HelloWorld等關鍵字。

在PHP中處理翻譯的最佳方法是什么?

謝謝

你基本上問了並回答了你自己的問題,答案可能只是對PO文件的工作方式有了更好的理解。

在PO文件中,您有一個msgid和一個msgstr。 msgid是PHP文件中的msgstr替換的值,具體取決於本地化。

現在你可以把這些msgid做成你想要的任何東西,你可以很好地做到:

<?php echo _("web.home.featured.HelloWorld"); ?>

然后你永遠不會在源代碼中再次觸摸此字符串,只能通過PO文件編輯字符串。

所以基本上你的問題的答案是你為字符串應該說的內容制作gettext值標識符,但翻譯人員通常使用默認語言文件文本作為轉換的基礎,而不是標識符本身。

我希望這很清楚。

我知道答案已經被接受了,上面的答案很好。 但是在使用Gettext時,使用諸如thing.stuff.widget類的永久機器式鍵存在另一個問題。

雖然使用永久密鑰是一種更好的開發方法,但Gettext並未針對該工作方式進行設置,這可能會使您的工作流程復雜化。

如果您提供的翻譯器的PO文件中填充了密鑰來代替源文本,他們可能不知道英語應該是什么。 因此,您必須為他們提供包含源語言翻譯的第二個文件,以便與之進行比較。 不是世界末日,而是更加繁瑣,而不是如何設計Gettext。 (方形釘,圓孔等..)

我認為PO作為PHP翻譯的文件格式非常好,特別推薦如果你不使用具有良好l10n模塊的框架,但這並不意味着它對工作流程和翻譯過程有利。

我建議你到達一個工作流程,允許程序員使用永久密鑰,翻譯人員使用單詞,並在另一端提供MO文件。 看一下Loco的解決方案。

或者,使用允許使用鍵和單詞的不同臨時文件格式。 TMX就是一個例子。 如果您仍想在運行時使用Gettext,則可以轉換文件

目前,我正在處理同樣的問題。 gettext的常見做法是使用英文文本作為關鍵字。 最近,我們的復制編輯器改變了一大堆英文文本(其他語言很難觸及)所以我們必須更改所有PO文件的所有源代碼。

我們正在轉向中性密鑰。 因為我們已經在Java上有一些網站。 我們將使用相同的屬性名稱格式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM