如何将 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 与多语言数据库模型一起使用? 的相关文章

  • SCORM 与 PHP/Yii 的集成 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 实际上我是新手SCORMPHP 中的实现 理论上 我在这里提问之前已经介绍了这些领域 已经看过了维基百科 http en wikipedia
  • 如何找到 Oracle 数据库的 URL?

    如何找到 Oracle 数据库的 URL 和端口 Example jdbc oracle thin host port dbName 用户名 密码 是否有我可以查看的 SQL 命令或日志 配置文件 对于甲骨文来说 有一个tnsnames o
  • 从多个表中选择 - 一对多关系

    我有这样的表 表产品 身份证 姓名 表格图像 产品 ID 网址 订单号 表价 产品 ID 组合 货币 价格 表数量 产品 ID 组合 数量 表 Product 与其他表是一对多关系 我需要查询表并得到类似这样的结果 伪数组 ProductI
  • Yii框架异步请求

    我有一个执行 3 个任务的 ajax 请求 保存模型 数据库 发电子邮件 给出成功或失败的消息 因为这个任务需要的时间太长了 用户最多可以等待 20 秒以获得响应 成功或失败消息 如果用户关闭浏览器 则其会停止用户当前进程的操作之一 这是糟
  • 如何转换为在视图上使用 Yii CDataProvider?

    我正在尝试学习 Yii 并查看了 Yii 文档 但仍然没有真正理解 我仍然不知道如何在控制器和视图上使用 CDataProvider 来显示视图上可用的所有博客文章 任何人都可以根据以下内容提供建议或举例 我的 PostController
  • SQLite同时读写

    我读过很多主题 但无法找到问题的答案 是否可以同时读写 我有后台线程更新一些数据 UI 需要存储在数据库中的一小部分数据 所以在UI线程中执行SELECT操作 但当更新正在进行时它会阻塞 结果 UI 冻结了几秒钟 有人在写入时成功从数据库读
  • 需要有关使用 PHP 在 mysql 数据库中插入逗号分隔数据的帮助

    数据库表中已有的演示数据 INSERT INTO csvtbl ID SKU Product Name Model Make Year From Year To VALUES 1 C2AZ 3B584 AR Power Steering P
  • SQL 大表中的随机行(使用 where 子句)

    我有一个网站 人们可以在其中对汽车进行投票 向用户展示 4 辆汽车 他 她可以投票选出他们最喜欢的汽车 桌子cars有重要的列 car id int 10 not auto increment so has gaps views int 7
  • 即使将“enable_seqscan”设置为关闭后,也未使用数组列上的 GIN 索引?

    根据推荐this https stackoverflow com questions 4058731 can postgresql index array columns comment10357041 4059785评论 我建立了一个 i
  • 从数据库 MYSQL 和 Codeigniter 获取信息

    如果你们需要其他信息 上一个问题就在这里 从数据库中获取信息 https stackoverflow com questions 13336744 fetching information from the database 另一个更新 尽
  • 如果我的应用程序安装在 SD 卡上,私人数据也在那里吗?

    我假设应用程序的私有数据 例如 SharedPreferences 和 SQLite 数据库 位于手机的内部存储而不是 SD 卡上 即使应用程序本身安装在 SD 卡上 我在任何地方都找不到对此的简单明确的确认 有人可以确认一下吗 是的 私有
  • Laravel 使用数据库自​​动完成文本字段

    我正在尝试制作如下所示的自动完成表单 但该表单没有显示建议 因为我的数据库查询没问题 形成科尔 控制器方法代码 Routes 当我搜索链接时 我得到如下查询结果 显示结果 id 1 value 苏拉夫霍森 id 2 value 苏拉夫霍森
  • 在 Access DB 中对字符串进行排序

    我有一个带有字段版本的数据库 可能有许多记录具有相同的版本字符串 因此要提取我拥有的版本 我执行以下操作 SELECT DISTINCT tblSample Version FROM tblSample ORDER BY tblSample
  • Cassandra 与 ZooKeeper 的事务 - 这有效吗?

    我正在尝试在 ZooKeeper 的帮助下为 Cassandra 实现一个事务系统 由于我认为我在数据库实现方面没有足够的经验 所以我想知道我的想法原则上是否可行 或者是否有任何重大缺陷 以下是步骤的高级描述 识别所有要编辑的行 键 和列
  • 为什么使用参数化查询将数据插入表比将值附加到查询字符串更快?

    为什么使用参数化查询向表中插入数据 string queryString insert into product id name values id name 比将值附加到查询字符串更快 string queryString insert
  • 分区表查询仍然扫描所有分区

    我有一个包含超过十亿条记录的表 为了提高性能 我将其分区为30个分区 最常见的查询有 id 在他们的 where 子句中 所以我决定对表进行分区id column 基本上 分区是这样创建的 CREATE TABLE foo 0 CHECK
  • 为什么MongoDB不使用复合索引进行查询?

    以下是我对此集合的复合索引和单一索引 db Collection getIndexes 1 v 2 key id 1 name id ns service Collection 2 v 2 key FirstId 1 SecondId 1
  • 动态表单字段验证的数据库设计

    在我的应用程序中 我允许用户创建一个包含他们想要的任何 HTML 表单字段 例如文本输入 文本区域 选择等 的表单 我想让用户能够为每个字段定义 0 个或多个累积验证规则 最多可能有 25 个不同的验证规则 我应该如何建模 这是一个潜在的解
  • SQLite 数据库安全

    我正在构建一个使用 Sqlite DB 的应用程序 用户可以将他们的信息输入数据库并检索它们 但是 我希望他们能够备份 sqlite 数据库 我所做的是将 sqlite 数据库放入文档文件夹中 以便他们可以使用 iTunes 将其检索出来
  • SQL 未插入到 Yii 中具有关系的表中

    我正在尝试创建一个用户 但所有值都没有插入到数据库中 Systems user 表与partys 表有关系 因为party id 是sytems user 的主键 没有插入任何内容 甚至没有错误 它只是返回到 创建 页面 这是我的架构 Ta

随机推荐

  • 如何在 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