php - 在 YII 中动态添加语言

标签 php mysql database yii relational-database

我的客户要求网站需要能够支持他想要的任何语言,即他想从后端动态添加语言。我知道我们可以通过创建文件并从相应文件调用来使用消息文件夹,但问题是我们不知道他需要哪种语言。

我对无限语言支持的概念感到非常困惑。我似乎无法将所有语言保存在数据库中,因为以后每次创建新表并将其链接到每个内容(或文本)时都会变得模糊。

请帮我用描述性或 ER 图来说明数据库结构。 任何帮助将不胜感激。

谢谢

编辑: 这是客户想要的流程。 (HE 表示客户)

我正在创建一个徒步旅行网站,来自不同国家的许多观众将访问该网站。所以他想添加这些国家的语言。但他不确定目前需要哪些国家。

1) He'll create a language eg Germany. 
2) Goes to add a tour or trekk.
3) Select the language he had created (Germany and others)
4) If the required language is not there he'll go back to language and create it and return to add a tour/trek

实际上就是这样。在前端,用户将能够在下拉列表中选择语言,这显然应该给出相应的内容。

我知道这个问题似乎有点含糊。但我不知道如何开始使用这个。我需要的是精确的数据库概念。如果仍然不清楚,请提出问题,以便我可以提供更多信息,并可以为其他执行类似任务的人提供帮助。

最佳答案

根据您的要求,Yii 的国际化应该可以满足您的要求。我就是这样做的:

请参阅以下 ERD: ERD database for internationalization

lang_source: 将是您的源语言表(默认为英语,不建议更改)。

lang_translation: 将是存储所有翻译的表。

注意:请注意 identifying relationship在两个表之间。

每当您有需要翻译的内容时,请使用 Yii::t()它接受 2 个参数,即类别(用于帮助构建可翻译内容)和内容本身(消息)。 示例:<?= Yii::t('myCategory', 'Welcome to my website'); ?>

Yii 通过设置语言 'language'=>'en-US' 知道在数据库中“获取”哪种语言在你的配置中。

lang_translation中的每条记录表对应于 lang_source记录,这样就可以在 lang_translation 中添加记录对于 lang_source 中的所有可翻译内容对于您想要的每种语言。

换句话说,在后台你可以检查是否存在某种语言和消息的记录。如果没有,则需要将该翻译插入 lang_translation 。这样您就不需要为新语言创建任何表。

希望这有帮助!

关于php - 在 YII 中动态添加语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23992647/

相关文章:

java - 从 JavaFX WebView 中提取内容

mysql - 具有 2 个指向同一个表的 FK 的表

php - 我们如何才能在 php 中准确地进行缓存

php - 使用 INSERT … ON DUPLICATE KEY UPDATE 与多个键

php - 10 个随机的 MySQL 行到不同的行

mysql - 触发器语句中的语法错误

mysql - 在 Django 1.7 中从 auth_user 切换到 CustomUser

php - [MySql]如何从一个表复制一行到另一个表并填充额外的列?

php - Laravel 5.1 服务器 - 找不到类

php - 带有 php 内置服务器的 Docker