簡體   English   中英

在PHP webapp中模板化不同的語言

[英]Templating different languages in a PHP webapp

我正在用德語寫一個webapp,所以現在所有按鈕,文本,工具提示等都是德語。 但我想為webapp使用某種模板文件,以便我可以根據需要快速更改為其他語言。 我想到了我用"\\n" explode文本文件並加載到sessionvariable中,以便始終擁有用戶在其會話中需要的所有文本。 另一種方法是解析這樣的文件,即這樣的XML文檔:

<?xml version="1.0"?>
<phrase>
    <placeholder></placeholder>
    <value></value>
</phrase>

其中每個字段都有自己的名稱/值,表示文本片段或按鈕或網站上的任何內容,然后將其轉換為一個對象,為每個人緩存它。 我認為第二種方法是最適合使用多種語言的webapp。 任何人都可能會指出我能做得更好的事情,或者只是發布你過去如何使用這種語言模仿mutlinational webpages / webapps。

看看GNU Gettext ,它非常方便多語言支持。

主要的想法是你只需將你的單詞或短語包裝成一個函數,比如

echo _g('Hello');

所以你沒有任何引擎變化。 您必須為您正在使用的每種語言添加翻譯文件。

由於您正在尋找翻譯解決方案,我了解您不使用框架來開發您的網站,因為大多數網站都為您提供處理翻譯的解決方案。

我在php中看到的大多數框架和應用都使用數組,其中原始句子是關鍵,翻譯是價值。 因此,為了更容易將其翻譯成多種語言,關鍵在於英語。

如果您按照建議使用gettext或其他方法,那么解析您的代碼以捕獲所有要自動翻譯的字符串也會很有用,因為當基本代碼增長並且您想要保留時,手動執行它會很麻煩最新的翻譯。

您已經提出了兩種用於存儲數據的解決方案,但我建議您需要進一步思考架構並更全面地了解每個請求的生命周期。

關於架構:兩種解決方案都不能擴展到很好地描述廣泛的詞匯 - 盡管一兩頁就足夠了。 替代方法是管理可能過度的翻譯數據庫(例如gettext),並且對於少量頁面執行效果較差,但重要的是,大/多個詞典的性能不會顯着惡化。 折衷的解決方案可能是為每個URL /語言(可能從統一數據庫中提取)提供數據集。

如果是我,我不會使用您建議用於存儲數據的任何方法:解析XML會為每個頁面請求創建一個明顯的開銷:使用\\ n作為分隔符會排除在翻譯中使用\\ n。 使用序列化的PHP陣列似乎是最便宜的解決方案。

暫無
暫無

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

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