2011-05-08 79 views
1

我正在开发一个网站来培训学生参加编程比赛。目前,该网站大部分是法文版本,但将以西班牙文翻译(另一个国家希望使用我们的培训网站)。I18n in symfony部分翻译和多种首选语言

界面的国际化很简单,但1500多个练习不会在很长时间之前完成翻译。

我需要的是一种以用户选择的语言对内容(和界面)进行本地化的方法,但如果该特定翻译在该语言中不可用,那么应该使用默认语言(法语)。 我们甚至想要概括一下:想象一下法语练习用英语翻译,你是西班牙语的人,不会说法语。你首先需要西班牙文版本,然后是英文版本,然后是法文版本。

在这种情况下是否有一种好的方法来使用国际化?

我可以尝试一种语言,如果没有任何结果的尝试另一种,但它不会是非常有效的....

回答

1

模板的内容,如果您正在使用的Symfony国际化行为,后退默认语言将自动可用。无论你放在__('string')里面,如果找不到翻译的字符串,助手将使用默认文化(在settings.yml中声明)。对于多语言数据库内容,您需要使用Symfony i18n表格行为或自己构建。如果没有找到特定语言的内容,我不知道Symfony i18n数据库处理如何在缺省语言的情况下工作。查询可能变得复杂。我的一般意见是,你会更好地建立自己的数据库相关的功能,但这只是我。

对于排序的语言(第一次翻译,然后英语,然后默认),我的理解是,开箱即用的Symfony国际化行为不支持这一点。您可以通过确保在西班牙语XML/XLIFF文件中的英文译文位于<target>标签(英文(但不是西班牙语))可用的位置,来破解某些类型的解决方案。这会给你ES - > EN - > FR。但是,我还建议您打算干净地“管理”您的翻译,以免它变得太复杂/混乱。

希望有所帮助。

+0

感谢您的回答。对于界面(快速翻译)回退应该是足够的。对于内容,我认为我会把电子邮件“不可用这种语言”或将用户重定向到不同版本的页面。 site.com/fr/post/20/en其中“fr”表示界面,“en”表示内容。这种方式很容易使用缓存。 – 2011-05-10 15:50:29