gpt4 book ai didi

php - 模型属性的翻译

转载 作者:可可西里 更新时间:2023-11-01 09:01:42 24 4
gpt4 key购买 nike

我正在开发一个 MVC 框架(请不要质疑,我知道..)并且目前正在设计一种翻译机制以最大限度地简化应用程序的翻译,到目前为止我有一个 lang 文件夹包含不同页面的翻译文件

./lang/en/system.php
./lang/es/system.php
./lang/fr/system.php

等等。假设此文件包含系统消息的翻译,例如

./lang/en/system.php

<?php

return array(
'yourIP' => 'Your IP address is :1'
);

为了在页面中访问它,我将使用外观类 Lang,它将根据所选语言(存储在 session 中)获取文件并提供翻译。

Controller

public function index() {
return new View('index', ['translations' => Lang::get('system')]);
}

查看

<h1><?= $translations->get('yourIP', System::getClientIP()) ?></h1>

这似乎工作得非常快,因为我可以将翻译有效地分组到单独的文件中,用于单独的模块/页面。

我现在要解决的问题是翻译模型。例如,假设我正在构建一个多语言博客并将帖子保存在数据库中。每个帖子都需要自己的翻译,但理论上可以有无限数量的帖子。我目前使用的方法似乎不太实用。

我要做的是创建一个子目录并像这样存储翻译

./lang/en/posts/post-1.php
./lang/en/posts/post-2.php
...
./lang/en/posts/post-n.php

这将适用于每种语言,在这个文件中我将存储模型的所有可翻译(这是一个词吗?)字段并将其加载到模型的构造函数中。

关于这个解决方案的问题:

  • 文件系统会塞满很多非常小的文件——我不是真正的文件系统专家,我想问一下拥有大量这样的小文件是否会对文件系统本身造成伤害,包括读取速度减慢等等。
  • 检索一组模型时会有n 次文件系统读取,其中n 是模型的数量。硬盘驱动器是计算机中最慢的组件,在脚本中执行大量 FS 读取会显着降低速度,现在使用 SSD 可能不会那么慢,但仍然不是小问题。

我想出的另一个解决方案是使用一个额外的系统数据库表,它将按表和主键存储翻译,比如

table INT
model_pk INT
lang INT
translations TEXT

其中 table 将是翻译所属表名称的 crc32 编码数字,model 将是 PK ( id),lang 无需解释,translations 将是包含所有可翻译属性的序列化字符串。

这种方法的问题:

  • 强制开发人员使用数据库并强制他们拥有特定的表(目前框架不要求您拥有数据库,因此当您实际使用时没有系统表)。
  • 具有复合主键的模型将无法从中受益,因为 model 列不能存储复合键,因此只有具有单列主键的模型才可以翻译。

这些只是我的观察和想法,我可能是错的或者我可能遗漏了什么。我发布这个问题是为了从经验丰富的人那里获得关于哪种解决方案问题较少的建议,或者提出一个完全不同的解决方案,我对一切都持开放态度。

最佳答案

如果你需要首先构建一些伟大的东西,你必须明白你到目前为止所做的被称为本地化(设置应用程序语言,这将对静态数据进行案例翻译)但你仍然需要进行翻译(这意味着翻译动态数据,如数据来自数据库)

更多详情 http://content.lionbridge.com/the-difference-between-translation-and-localization-for-multilingual-website-projects-definitions/

有关本地化的更多信息:https://laravel.com/docs/5.3/localization另见 https://github.com/mcamara/laravel-localization

有关翻译的更多信息,您可以找到对 Laravel 框架感兴趣的这个包 https://github.com/dimsav/laravel-translatable

关于php - 模型属性的翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39306696/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com