考慮下面的代碼片段:Symfony2的翻譯:在所有的消息重寫/替換一個字
$translator->setLocale('nl');
$translator->trans('You have ordered one cup of coffee');
許多語言有什麼所謂的T–V distinction,使文字更客氣或熟悉的:「你」成爲一個大寫「 U「或荷蘭語中的非大寫」je「,法語中的」Vous「或」tu「等。
我們要使用哪一個取決於目標受衆(在我們的案例中主要基於域)我們的一個向老年人銷售奢侈品的網站應該使用禮貌信息,而針對學生的網站則需要使用更爲熟悉的形式。
什麼是替換翻譯器中特定消息的最佳方法?創建一個完整的新語言環境('nl,nl_polite')看起來像是矯枉過正,要求我們爲每個語言環境翻譯每個消息兩次,並使用T-V區分。
理想我願做這樣的事情,這已經與子域/域/客戶設置涉及現有onKernelRequest監聽器裏:
if ($translator->getLocale() == 'nl' && $customer->getLanguagePolite() == true)
$translator->replaceWord('you','U');
$translator->replaceWord('your','Uw');
}
我想更換內部的每一個字的出現同時翻譯消息(可能使用preg_replace?),而不是替換消息。這個詞的語法位置畢竟不會改變。
我可以通過重寫symfony翻譯器來做到這一點嗎?
沒想到佔位符!這將需要大量的代碼重寫,但它似乎仍然是一個非常合理的解決方案。 – Fx32