使用自动加载翻译在 Laravel 中构建多态可翻译模型

使用自动加载翻译在 laravel 中构建多态可翻译模型

处理多语言内容时,将翻译存储在 json 列中通常比每个属性的单独行更有效。这种方法将翻译整合到单个列中,简化了数据管理和检索。

设置翻译系统

我们将增强翻译模型和表,以使用 json 列来存储翻译。这将涉及更新表架构并修改 translatable 特征以处理 json 数据。

第 1 步:创建翻译表迁移

如果翻译表尚不存在,则创建一个新的迁移:

php artisan make:migration create_translations_table

第2步:定义表结构

在database/migrations中打开生成的迁移文件。对于新表,定义如下:

use illuminatedatabasemigrationsmigration;use illuminatedatabaseschemablueprint;use illuminatesupportfacadesschema;class createtranslationstable extends migration{    public function up()    {        schema::create('translations', function (blueprint $table) {            $table->id();            $table->string('locale'); // stores the locale, e.g., 'en', 'fr'            $table->string('translatable_type'); // stores the related model type, e.g., 'post', 'product'            $table->unsignedbiginteger('translatable_id'); // stores the id of the related model            $table->json('translations'); // stores all translations as a json object            $table->timestamps();        });    }    public function down()    {        schema::dropifexists('translations');    }}

第 3 步:运行迁移
将迁移应用到您的数据库:

php artisan migrate

第四步:创建翻译模型

接下来,创建翻译模型来处理多态关系:

php artisan make:model translation

在translation模型中,定义多态关系:

class translation extends model{    protected $fillable = ['locale', 'translatable_type', 'translatable_id', 'translations'];    protected $casts = [        'translations' => 'array',    ];    public function translatable()    {        return $this->morphto();    }}

使用 json 存储实现可翻译特征

为了使翻译处理可在多个模型中重用,我们将创建一个 translatable 特征,它将根据用户选择的区域设置自动加载翻译内容。此外,如果所选语言环境没有可用的翻译,我们将添加一个后备机制来从默认语言环境加载内容。

第 1 步:使用 json 处理创建可翻译特征

namespace apptraits;use appmodelstranslation;use illuminatesupportfacadesapp;trait translatable{    public static function boottranslatable()    {        static::retrieved(function ($model) {            $model->loadtranslations();        });    }    public function translations()    {        return $this->morphmany(translation::class, 'translatable');    }    public function loadtranslations()    {        $locale = app::getlocale();        $defaultlocale = config('app.default_locale', 'en'); // fallback to the default locale        // try to load translations for the current locale        $translation = $this->translations()->where('locale', $locale)->first();        if (!$translation && $locale !== $defaultlocale) {            // if no translations are found for the current locale, fallback to the default locale            $translation = $this->translations()->where('locale', $defaultlocale)->first();        }        if ($translation) {            $translations = $translation->translations;            foreach ($translations as $key => $value) {                $this->{$key} = $value;            }        }    }    public function addtranslations(array $translations, $locale = null)    {        $locale = $locale ?? app::getlocale();        return $this->translations()->updateorcreate(            ['locale' => $locale],            ['translations' => $translations]        );    }}

第 2 步:将可翻译特征应用于您的模型
将 translatable 特征添加到任何需要翻译支持的模型中。

namespace appmodels;use apptraitstranslatable;use illuminatedatabaseeloquentmodel;class post extends model{    use translatable;    protected $fillable = ['title', 'content'];}

示例:创建翻译模型

将翻译添加为 json 对象:

$post = post::create(['title' => 'default title', 'content' => 'default content']);// adding translations$post->addtranslations([    'title' => 'hello world',    'content' => 'welcome to our website'], 'en');$post->addtranslations([    'title' => 'bonjour le monde',    'content' => 'bienvenue sur notre site web'], 'fr');

检索翻译模型

当您检索 post 模型时,它将根据当前语言环境自动加载翻译后的内容,或者在必要时回退到默认语言环境:

app::setlocale('fr');$post = post::find(1);echo $post->title; // displays "bonjour le monde" if french translation existsapp::setlocale('es');$post = post::find(1);echo $post->title; // displays "hello world" as it falls back to the english translation

在视图中显示翻译内容

在 blade 视图中,您可以像任何其他模型属性一样显示翻译的内容:

{{ $post->title }}

{{ $post->content }}

结论

通过使用 json 列来存储翻译并实现回退机制,您可以简化 laravel 应用程序中多语言内容的管理。这种方法将翻译整合到单个列中,简化了数据处理并使您的代码库更易于维护。无论您是构建博客、电子商务网站还是任何多语言应用程序,此方法都能确保流畅高效的用户体验。

尽情享受!

以上就是使用自动加载翻译在 Laravel 中构建多态可翻译模型的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1244416.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月9日 16:49:46
下一篇 2025年12月9日 16:49:59

相关推荐

  • php后端包括哪些

    PHP 后端技术栈由一系列工具和框架组成,用于创建和维护 PHP 应用程序,其主要组件包括:框架(Laravel、Symfony、CodeIgniter)数据访问(Doctrine ORM、Propel ORM、PDO)模板引擎(Twig、Blade、Smarty)部署(Composer、Docke…

    好文分享 2025年12月9日
    000
  • 如何通过验证令牌在 PHP 中设置电子邮件验证:完整指南

    电子邮件验证是确保电子邮件地址存在并且可以接收电子邮件的过程。鉴于,电子邮件验证会检查地址格式是否正确;也就是说 – 根据特定标准(例如 utf-8)编写。  在本文中,我将讨论 php 电子邮件验证以及如何将其用于 web 开发和通过验证令牌进行用户身份验证。文章涉及一些微教程,包括:…

    2025年12月9日
    000
  • 在 Laravel 中制作可重用的模型搜索:高效设置和最佳实践

    在开发 web 应用程序时,尤其是那些涉及复杂数据检索的应用程序,拥有可重用的模型搜索机制可以显着简化您的代码库。本博客将引导您为 laravel 模型创建可重用的搜索功能,并讨论实现最佳性能的最有效设置。 为什么可重用模型搜索? 可重用模型搜索是一种设计模式,允许您将常见搜索逻辑封装在单个可重用位…

    2025年12月9日
    000
  • php有哪些插件

    PHP的插件生态系统提供了丰富的功能来增强其核心能力,包括:数据库连接图像处理内容管理框架缓存安全保护测试工具插件可以通过Composer或手动安装,并使用require语句包含在脚本中。在选择插件时,应考虑功能性、性能、维护、社区支持和许可协议等因素。 PHP 的插件 PHP 拥有丰富的插件生态系…

    2025年12月9日
    000
  • php 有哪些扩展

    PHP 扩展是扩展 PHP 功能并连接外部服务的有价值工具,可分为内置扩展和第三方扩展。常用扩展包括 MySQLi、PDO、JSON 和 cURL。安装扩展时使用 pecl install 命令,启用时使用 extension_loaded() 函数检查是否已加载。之后,可以使用扩展的命名空间中的方…

    2025年12月9日
    000
  • 有哪些php程序

    PHP 是一种脚本语言,用于创建动态交互式 Web 页面和应用程序。常见的 PHP 程序包括:内容管理系统 (CMS),如 WordPress 和 Drupal电子商务平台,如 Magento 和 WooCommerce论坛和博客引擎,如 phpBB 和 WordPress框架,如 Laravel …

    2025年12月9日
    000
  • php包括哪些课程

    PHP 课程包括:1. 基础概念;2. PHP 语法;3. 数据类型和变量;4. 流程控制语句;5. 函数;6. 数组;7. Web 开发;8. 表单处理;9. 会话管理;10. 数据库连接和查询;11. 面向对象编程;12. 类和对象;13. 继承;14. 多态;15. 高级主题,如错误处理、文件…

    2025年12月9日
    000
  • php网站哪些软件

    PHP 网站必备软件:Web 服务器:Apache、Nginx、IIS数据库管理系统:MySQL、PostgreSQL、MongoDBPHP 框架:Laravel、Symfony、CodeIgniter集成开发环境:PHPStorm、Visual Studio Code、Sublime Text版本…

    2025年12月9日
    000
  • php学哪些东西

    学习 PHP 的核心路线:掌握基本语法和面向对象编程;探索数据库交互,如 MySQL 和 PostgreSQL;选择框架:Laravel(流行)、CodeIgniter(轻量级)、Symfony(模块化);探索高级主题,如 ORM、RESTful API 开发、性能优化和部署;利用文档、社区论坛和在…

    2025年12月9日
    000
  • php有哪些软件

    PHP(超文本预处理器)是用于创建动态 web 应用程序和网站的服务器端脚本语言。它支持各种数据库、web 服务器和操作系统。使用 PHP 构建的一些流行应用程序包括:网站和网络应用程序电子商务平台社交网络论坛和留言板移动应用程序后端企业应用程序工具和框架脚本和自动化API 开发数据分析和可视化 P…

    2025年12月9日
    000
  • php有哪些源码

    PHP 拥有庞大的开源源码社区,提供各种解决方案和工具,其中包括:框架:Laravel、Symfony、CodeIgniter内容管理系统 (CMS):WordPress、Drupal、Joomla电子商务平台:Magento、WooCommerce、PrestaShopAPI 库:Guzzle、S…

    2025年12月9日
    000
  • php有哪些证书

    PHP 证书的种类包括:Zend、PHP Institute、Magento、Composer 和 Laravel。这些证书证明技能水平,提升职业发展机会,并为个人和团队带来竞争优势。选择前应考虑职业目标、经验和技术重点。 PHP 证书 PHP 是一种广泛使用的服务器端编程语言,其社区提供了多种认证…

    2025年12月9日
    000
  • php面试哪些东西

    PHP面试考察核心内容:基础知识、框架和工具、设计模式、系统架构、算法和数据结构、问题解决能力、团队合作和沟通、最新技术趋势。 PHP面试常见考察内容 1. 基础知识 变量类型、数据结构、运算符数组、字符串处理、对象和类错误处理、异常和调试 2. 框架和工具 流行框架(如 Laravel、Symfo…

    2025年12月9日
    000
  • php 框架都有哪些

    PHP 框架是一种基础库,为 PHP Web 应用程序提供通用功能和结构,简化开发并提高代码可维护性和性能。流行的 PHP 框架包括:Laravel、Symfony、CodeIgniter、Zend Framework、CakePHP、Yii、Phalcon、Slim、FuelPHP 和 AuraP…

    2025年12月9日
    000
  • php要掌握哪些

    掌握 PHP 必备知识点包括:基础语法函数OOP数据库交互Web 开发基础框架和库安全实践调试和错误处理 PHP 掌握须知 PHP 是一种广泛应用于 Web 开发的服务器端脚本语言,对于有志于从事 Web 编程的人员来说,掌握 PHP 至关重要。 掌握 PHP 的必备知识点 以下列出了掌握 PHP …

    2025年12月9日
    000
  • php系统有哪些

    PHP是一种开源脚本语言,广泛用于Web开发,主要包括核心组件(核心语言和标准库)、扩展(PECL和Zend扩展)、框架(如Laravel、Symfony、CodeIgniter)、内容管理系统(如WordPress、Joomla、Drupal)以及其他组件(如MySQL、Apache、Nginx)…

    2025年12月9日
    000
  • php论题有哪些

    PHP 作为流行编程语言,常见的论题包括后端开发优势与劣势、框架比较、与 MySQL 集成、前沿技术应用、安全性和性能优化、社区支持、未来发展方向。 PHP 论题 PHP 作为一种流行的编程语言,拥有广泛的应用场景,因此可供讨论的论题也十分丰富。以下列出一些常见的 PHP 相关论题: 后端开发 PH…

    2025年12月9日
    000
  • php进哪些企业

    PHP 被广泛应用于各大企业,包括:电子商务网站(亚马逊、eBay)支付网关(PayPal、Stripe)内容管理系统(WordPress、Drupal)社交媒体平台(Facebook、Twitter)医疗保健信息系统(医院、患者门户) PHP 在哪些企业得到应用? PHP 作为一种流行的多功能脚本…

    2025年12月9日
    000
  • php库有哪些

    PHP 库提供了丰富的功能,涵盖数据库连接、数据处理、图像处理和 Web 开发等领域。流行的库包括:数据库连接: PDO、MySQLi、PostgreSQL数据处理: PHPExcel、SimpleXMLElement、JSON图像处理: GD、Imagick、Intervention ImageW…

    2025年12月9日
    000
  • php优势有哪些

    PHP 是一种通用脚本语言,特别适合 Web 开发,其优势包括:易于学习、跨平台支持、丰富的模块库、高性能、Web 开发框架的支持、社区支持、面向对象编程和数据库连接。 PHP 的优势 PHP(超文本预处理器)是一种广泛使用的通用脚本语言,尤其适合于 Web 开发。它具有以下优势: 1. 易于学习和…

    2025年12月9日
    000

发表回复

登录后才能评论
关注微信