2016-04-30 68 views
0

我試着翻譯WP主題。我有這樣的代碼:翻譯WP與__()和sprintf()

$translation = __(get_color(), 'textdomain'); 

它的工作原理,我得到的色彩動態地從get_color()函數,並將其轉換好。但是當我使用「主題檢查」插件時,我得到此代碼的錯誤。

我需要使用它代替:

$translation = sprintf(__('%s', 'textdomain'), get_color()); 

但是,在這種情況下,我的佔位符%s不轉換,和我原來的顏色名稱(而不是翻譯)。

我在做什麼錯了?謝謝。

回答

1

A.,

在您的代碼:

$translation = sprintf(__('%s', 'textdomain'), get_color()); 

的字符串 '%s' 的一個翻譯__()功能檢查 - 這些你可能都沒有翻譯 - 然後替換「% s'結果爲get_color()。所以get_color()的值永遠不會傳遞翻譯功能。

我不知道正確的解決辦法是什麼在這裏,也許只是忘了在這種情況下,主題檢查。

0

很多翻譯工具,提取翻譯字符串將查找字符串文字,像這樣:

$translation = __('red', 'textdomain'); 

這是一個安全的賭注*的主題檢查插件提醒你一個事實,即你的動態字符串不會被這些工具提取。這是因爲代碼不會提取期間被執行,因此表達get_color()不會被評估成可翻譯字符串。

如果你不關心與列提取工具的兼容性,然後就離開你的代碼按你的第一個例子(第二個例子是錯誤的,因爲已經指出的那樣)。

如果您確實希望自己的代碼能夠使用翻譯工具,那麼我建議您創建一個包含所有可能的顏色值的虛擬 PHP文件。 (假設列表是有限的)。你的文件看起來是這樣的:

<?php 
__('red', 'textdomain'); 
__('blue', 'textdomain'); 
// and so on.. 

然後,如果你想停止的實際翻譯通話生產「主題檢查」錯誤,你必須將它重構到的東西,不會得到回升。像這樣的東西會被大多數提取得到錯過:

$translation = call_user_func('__', get_color(), 'textdomain'); 

*值得關注的主題檢查的作者是一個核心的WordPress貢獻者,約doing WordPress i18n correctly相當聲樂。

0
echo sprintf(__("text %s", your domain or plugin name), $data); 
+3

雖然這段代碼可能回答這個問題,但提供關於爲什麼和/或代碼如何回答這個問題的附加上下文會提高它的長期價值。 – liliscent