如何将 Yii 与多语言数据库模型一起使用?

2023-12-26

我在从我创建的完全多语言数据库中获取数据时遇到问题,我希望这里有人可以帮助我。

我将所有桌子分成两部分; “通用”表(不包含任何需要翻译的文本)和包含需要翻译的所有字段及其翻译的表。

示例表:

base_material
    id
    picture
base_material_i18n
    base_material_id
    localization_id
    name
    description
    review_status
    review_notes
localization
    id
    language_name

查询以获取翻译(如果没有可用翻译,则使用英语 (en) 作为后备语言):

SELECT o.id
     , o.type
     , o.code
     , o.position
     , ifnull(t.name,d.name) name
     , ifnull(t.description,d.description) description
  FROM base_material o
       INNER JOIN base_material_i18n d
               ON ( o.id=d.base_material_id)
       LEFT OUTER JOIN base_material_i18n t
                    ON ( d.base_material_id=t.base_material_id AND t.localization_id='nl' )
 WHERE d.localization_id='en'

我的问题是,当我搜索 base_material 对象时,如何自动将这些翻译(使用此查询中的后备语言)附加到 Yii 中的模型上? (这只是 1 个示例表,但几乎我所有的表(20+)都是以这种方式构建的,所以如果可能的话我需要一些灵活的东西)

使用我需要的现有系统的一个例子是 Propel:http://propel.posterous.com/propel-gets-i18n-behavior-and-why-it-matters http://propel.posterous.com/propel-gets-i18n-behavior-and-why-it-matters

有什么想法如何去做吗?我检查了有关多语言网站的现有 Yii 扩展(例如多语言活动记录 http://www.yiiframework.com/extension/multilingual-active-record),但它们都使用不同的数据库设计(主表中的一般信息+后备语言,i18n 表中的翻译),并且我不确定如何更改这些扩展以使用我的数据库模型。

如果有人知道一种方法来更改现有扩展,以便它可以使用我的数据库方案,那么这绝对是绝妙的,并且可能是实现此目的的最佳方法。

编辑:我添加了一个赏金,因为我仍然找不到任何关于如何让 Propel 与 Yii 一起工作的信息(确实存在 Doctrine 的扩展,但 Doctrine 也不支持这种带翻译的数据库模型),也不有关如何使用现有 Yii 扩展或范围来处理此问题的更多信息。

Edit:浏览了 98 次,但只有 3 条点赞和 1 条评论。我不禁觉得我在这里做错了什么,无论是在我的问题还是应用程序/数据库设计中;要么就是我的问题非常独特(这会让我感到惊讶,因为我不认为我的多语言数据库设计那么荒谬;-)。因此,如果有人知道使用 Yii 和/或 Propel 的多语言网站有更好的全面解决方案(除了当前的扩展,由于文本字段的重复,我真的不喜欢)或类似的东西,请告诉我以及。

提前致谢!


你有没有尝试过http://www.yiiframework.com/extension/i18n-columns/ http://www.yiiframework.com/extension/i18n-columns/(基于http://www.yiiframework.com/extension/stranslateablebehavior/ http://www.yiiframework.com/extension/stranslateablebehavior/)?

这是一种更简单的替代方法,通过以 {field}_{language code} 的样式添加新的表字段,然后将原始模型中的翻译字段设置为 afterFind 上当前语言的翻译。

从本质上讲,它会让您启动并运行可翻译字段,并“自动”获取翻译内容,无论好坏:)。添加和删​​除语言(=列)是使用迁移完成的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 Yii 与多语言数据库模型一起使用? 的相关文章

  • Postgres - 如何在插入时自动调用 ST_SetSRID(ST_MakePoint(lng, lat), 4326)?

    我正在使用postGIS 并且我对SQL不是很熟悉 我可以成功插入到我的markers表只要我做这样的事情 伪代码 INSERT INTO markers created by title description lat lng geogr
  • 通过删除空 GET 变量并简化变量名称来缩短 URL

    我正在开发一个网站 在提交后组成一个 URLGET form 表单值作为一组变量传递 其中必须至少定义一个变量才能在数据库上进行搜索 我想将网址缩短为删除空表单元素并使其更加用户友好简化变量名称 目前 URL 如下所示 只是带有更多变量 我
  • 通过 Matlab 访问 Physionet 的 ptbdb 中的数据库

    我首先设置系统 old path which rdsamp if isempty old path rmpath old path 1 end 8 end wfdb url http physionet org physiotools ma
  • CloudKit 通过 cron 作业发送推送通知?

    我正在创建一个大学餐饮菜单应用程序 在其中我需要根据每日菜单发送推送通知 最初 我计划通过 Heroku 将用户数据存储在数据库中 并使用 cron 作业将数据库中的数据与每日菜单进行比较 并向用户发送适当的通知 然而 在 Cloudkit
  • 如何在 Visual Studio 中更改 Azure 数据库表的列顺序

    我整个下午都在寻找在 MS Visual Studio 2022 中重新排序 Azure 数据库表列的方法 没有运气 在其他应用程序中 可以通过拖动或剪切和粘贴轻松重新排列列 这里无能为力 此时 我什至不确定可以在 VS 中移动列 我只对
  • 对多个数据库执行 SQL 查询

    我知道我的帖子与该论坛中的其他帖子的标题非常相似 但我真的找不到我需要的答案 这是我的问题 我的 Windows Server 上运行着 SQL Server 在我的 SQL Server 中 我有大约 30 个数据库 它们都具有相同的表和
  • 更改 yii 中注册脚本文件的顺序

    我正在为 Yii 应用程序制作一个小部件 主布局视图注册了所有常见的脚本文件 例如 jQuery 和 jQueryUI 在我的小部件中 我想使用依赖于已加载的 jQueryUI 的 jQueryUI 插件 我知道我可以指定脚本包含在页面上的
  • Yii 框架中的图像链接

    朋友们大家好 我是 YII 的新手 我有一个形象 在 Yii 中调用该图像后 其代码如下 img class deals product image src alt 一般来说 html 是这样的 img alt women jackets
  • 同时使用 GUID 和自动递增整数

    我一直在研究使用 GUID 作为数据库中的主键 到目前为止 利似乎大于弊 然而 我发现 GUID 可能不是我想要的 在我的应用程序中 用户应该能够根据用户友好的 ID 来识别对象 因此 例如 如果他们想要获取特定产品而不输入全名 则可以使用
  • 如何停止在 mongodb 集合中插入重复文档

    让我们有一个MongoDB包含三个文档的集合 db collection find id user A title Physics Bank Bank A id user A title Chemistry Bank Bank B id u
  • 串行类型的外键 - 确保始终手动填充

    我有两个表 国家和地区 CREATE TABLE Countries id SERIAL name VARCHAR 40 NOT NULL PRIMARY KEY id CREATE TABLE Regions id SERIAL coun
  • Sequelize.js 中的自定义或覆盖连接

    我需要使用创建自定义连接条件Sequelize js http sequelizejs com使用 MSSQL 具体来说 我需要加入TableB基于一个COALESCE中的列的值TableA and TableB并最终得到这样的连接条件 L
  • 非常大的字段会对 MySQL 数据库产生负面影响吗?

    我目前正在使用 Django 构建一个网站 并希望托管用户生物样式页面 该页面可能长达几 KB 这些字段不一定需要搜索 但在查找用户名时确实需要提供 将这些数据存储在数据库中会产生负面影响吗 如果我使用带有数据库链接的静态文本文件 我的服务
  • rake db:migrate db:reset 和 db:schema:load 之间的区别

    和 之间的不同rake db migrate and rake db reset我很清楚 我不明白的是如何rake db schema load与前两者不同 只是为了确保我在同一页面上 rake db migrate 运行尚未运行的迁移 r
  • 通知设置的数据库设计

    用户可以打开或关闭 他的通知设置 帐户 用于通知 例如 更改帐户资料信息 收到新消息等 通知可以通过电子邮件或手机 推送或短信 发送 用户可以只有 1 封电子邮件和多个手机设备 有什么方法可以改进以下数据库设计或者您会采取不同的方式吗 让我
  • select2 小部件如何使用 AJAX 填充?

    当我在小部件中输入一些字符时 我会从 AJAX 获得如下结果 id 550 campName IB Resi Showtime Rebate Website id 60 campName OB ACGBK EB 但是 我缺少有关如何使用这些
  • 使用默认路径中的文件创建数据库

    我想创建一个创建数据库的 SQL 脚本 现在 我有这个 CREATE DATABASE Documents ON PRIMARY NAME N Documents FILENAME N Documents mdf LOG ON NAME N
  • 为 WPF DataGrid 行一一着色

    我正在制作一个 WPF 程序 它能够为 a 中的行着色DataGrid一个接一个地使用红色for循环 我遇到了一些奇怪的事情 如果DataGrid数据库表中有 40 多行数据 它不会对所有行进行着色 这是我正在使用的代码 private v
  • 超集:未找到命令

    我已经使用安装了超集pip install superset命令 然后我尝试超级集数据库升级但它说superset command not found 有人能帮我一下吗 仅供参考 现在 PyPI 包是apache superset so p
  • 发布Oracle和SQL Server性能测试是否违反许可? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想对Oracle和SQL Server中的空间索引进行性能测试 我想将其纳入我的理学硕士工作中 发布此类结果是否违反 dbms 的许可 也许有人已经

随机推荐

  • 如何在 vue.js webpack 项目上正确设置 favicon.ico?

    我创建了一个vue webpack项目使用vue cli vue init webpack myproject 然后在下面运行该项目dev mode npm run dev 我收到这个错误 无法加载资源 服务器响应状态为 404 未找到 h
  • 如何在 SAML 2.0 Web 浏览器 SSO 的 AuthnRequest 中识别主体

    我是 SAML 新手 在完全理解完整的 SAML2 SSO 流程方面遇到了一些困难 具体来说 当服务提供商使用元素响应资源请求时 元素中的哪一部分数据标识要由身份提供商验证的主体 即用户 例如 在以下 AuthnRequest 中似乎没有任
  • scipy.stats.binned_statistic_dd() 中的输出

    我正在尝试使用scipy stats binned statistic dd http docs scipy org doc scipy reference generated scipy stats binned statistic dd
  • 安装tensorflow 2有问题

    我想练习tensorflow 2 但我尝试在anaconda环境中安装它失败了 我的问题是 如何安装tensorflow 2 如果可以在 anaconda 环境中完成 在我看来会更方便 我不需要理解下面的错误信息 只要我能使用tensorf
  • 使用代码中的“fb_ref”参数跟踪来自 Facebook 的点赞按钮推荐

    我们想使用属性fb ref 点赞按钮中的 ref 参数 以便跟踪推荐点击和转化 您是否有关于如何在我们的页面上进行此操作的教程或示例 当您使用ref点赞按钮上的参数 点击返回由该点赞按钮生成的网站 在引荐来源网址中包含两个额外参数 fb r
  • 在哪里可以阅读有关编程的内容? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • ASP.NET MVC 将列表传递给 RouteData QueryString

    将值列表作为查询字符串传递的推荐方法是 www site com search value 1 value 2 value 3 value 4 ASP NET 很好地处理了这个问题 string value QueryString Get
  • 文件传输详细信息持续绑定,直到使用 WPF 在窗口中传输文件

    我已经创建了将文件从客户端传输到服务器的项目 我已经完成了文件传输并获取了文件传输的详细信息 例如文件名 something avi 和传输的文件百分比 10 如下所示 每当我传输文件时 我都会使用下面的事件处理程序来了解该文件转移的详细信
  • 如何进入封闭班? [复制]

    这个问题在这里已经有答案了 I know Class getDeclaredClasses 可以获取它声明的所有类 但不包括匿名类 我想知道有没有办法通过封闭类获取所有封闭类 例如 我想获取定义在中的所有封闭类Root用于测试目的 clas
  • 如何在 WPF 中创建可拖动到主窗口之外的面板?

    尝试在 Visual Studio 2008 中复制对接控件 我的应用程序为 FAA 重播 RADAR 环境 并且我希望双显示器用户能够将控制面板拖动到另一个显示器 以使主画布保持清晰 此功能类似于将 VS 中的不同面板拖到主窗口之外的方式
  • MIPS 伪指令、替换

    经过研究后 我发现这只是获得相同结果的方法的替代 如果我错了 请纠正我 example move s0 t1 可以替换为 add s0 zero t1 问题 怎样才能更换lw la sw bne 是的move指令可以并且被替换为add操作说
  • 当我使用 Control-C 中断 C# 控制台应用程序时会发生什么?

    当我使用 Control C 中断 C 控制台应用程序时会发生什么 进程被杀死了吗 内存被释放了吗 是finally块被执行 数据库连接会发生什么情况 如果应用程序是为调试或发布而构建的 或者在 Visual Studio 内部 外部运行
  • Angular 动态组件 AOT 问题

    由于一些业务逻辑 我必须读取动态组件 EntryComponents 的元数据 要读取元数据 以下是我的方法 使用读取模块的所有组件组件工厂解析器 使用组件名称和特定方法过滤掉类 创建组件并读取数据 销毁该组件 const factorie
  • 如何对多个项目使用 ETag / If-Match

    在 RESTful 接口中处理乐观锁定的推荐方法似乎是返回一个ETag来自 GET 并提供If Match在 PUT 上 即 GET items 1 gt gives client an ETag for a single item PUT
  • 从块返回 UIImage

    我有以下代码 UIImage getPublisherLogo check the cache if the logo already exists NSString imageUrl NSString stringWithFormat i
  • 与 Eclipse 编译器相比,为什么 javac 1.5 运行速度这么慢?

    我有一个 Java Maven 项目 其中包含大约 800 个源文件 其中一些由 javacc JTB 生成 使用 javac 编译需要花费 25 分钟 当我将 pom xml 更改为使用 Eclipse 编译器时 编译大约需要 30 秒
  • Qt 会泄漏内存吗?

    如果我编译这个 Qt hello world include
  • Python需要安装ipykernel

    我在 VS code 中使用 Jupyter Notebook 时遇到问题 屏幕显示 Python 3 7 8 requires ipykernel to be installed 我按照弹窗安装了ipykernel 还是不行 附上截图 很
  • 数据损坏:错误在哪里‽

    最后编辑 我已经弄清楚问题是什么 请参阅下面我自己的答案 但我似乎无法将问题标记为已回答 如果有人可以回答我在下面的回答中提出的问题 即这是 Cython 中的错误还是这是 Cython 的预期行为 我将标记that答案被接受 因为这将是从
  • 如何将 Yii 与多语言数据库模型一起使用?

    我在从我创建的完全多语言数据库中获取数据时遇到问题 我希望这里有人可以帮助我 我将所有桌子分成两部分 通用 表 不包含任何需要翻译的文本 和包含需要翻译的所有字段及其翻译的表 示例表 base material id picture bas