Pyramid 使用 gettext *.po 文件进行翻译,这是一种非常好的和稳定的国际化应用程序的方法。它的一个缺点是它不能从应用程序本身更改。我需要一些方法让普通用户能够自行更改翻译。Django允许直接更改文件,更改后它会重新启动整个应用程序。我没有那种自由,因为变化会非常频繁。
由于我找不到任何可以帮助我完成任务的包,我决定覆盖Localizer。我的想法是基于使用翻译域,如Zope项目使用并让Localizer搜索注册域,如果未找到,则退回到默认翻译策略。
问题是我找不到将自定义翻译解决方案放入 Localizer 本身的好方法。我能想到的就是重新实现get_localizer方法并重写整个Localizer。但是这里有几件事需要复制粘贴,例如映射插值和其他与翻译字符串相关的 tweeks 。