laravel 本地化 locale 语言包改造

Laravel 5.5 中文本地化语言包实战指南 Laravel作为一个流行的PHP Web应用框架,提供了丰富的本地化支持,允许开发者为他们的应用创建多语言版本。中文语言包是Laravel生态系统中不可或缺的一部分,它为全球华语用户提供了一个亲切的界面,增强了用户体验。本章我们将深入探讨Laravel中文语言包的来源、重要性以及在应用中的作用。接下来的章节将会详细说明如何安装和配置中文语言包,并且通过实战案例,演示如何在实际的开发工作中有效地应用这些语言包。在Laravel框架中,文件扮演着重要的角色,它位于config文件夹内。 阅读详情
laravel 的本地化 locale,用起来感觉很别扭,不能像其他框架一样,按照控制器等自动加载语言包。

结合文档,并查看了源码,简单总结下 laravel 本地化的使用:
	1>支持引入 2 类文件:
		1.php 文件(php 文件 return 一个数组)
			不同语言包目录下,根据用途,可创建多个 xx.php,例如:
			en
				messages.php
				other.php
			zh-cn
				messages.php
					<?php
						return [
							'name' => '姓名',
							'gender' => '性别',
						];
				other.php

			使用:
				__('message.name')

		2.json 文件(必须是json格式)
			不同语言包,只能是以 '不同语言' 命名的 json 文件	
				/path1/en.json
				/path1/zh-cn.json
					{
						'name': '姓名',
						'gender': '性别'
					}

			但是允许我们添加多个路径
				/path2/en.json
				/path2/zh-cn.json

			使用:
				__('name')

			但多个路径,对于我们项目组织语言包目录结构,貌似没啥用...

	2>一般使用 2 个函数:
		__('messages.name') 或 trans('messages.name'),__() 是 trans() 别名

		trans_choice('messages.minutes', 10) - 对于复数形式的处理

	3>关于 key 参数:
		当引入的 php 文件,必须使用 '文件名.键名',文档中提到的 '使用短键'

		当引入的 json 文件,只使用 '键名',文档中提到的 '使用翻译字符串作为键'

	4>重写扩展包的语言文件
		laravel 的语言包,还支持使用 '命名空间',应该是 key 可以是 
			'namespace::message.name'

		部分扩展包可能会附带自己的语言文件,我们可以在 resources/lang/vendor/{package}/{locale} 下放置语言包文件,来重写

	5>总结,laravel 的语言包的 key,通过 '::' 和 '.' 进行解析,从而得到:
			namespace::group.item
		然后来进行字符串的替换

		里面还有一些其他使用原则,例如:
			json 文件的引用,我们可以添加过个 json 路径:
				use Lang;
				Lang::addJsonPath('path1');
				Lang::addJsonPath('path2');

			namespce 的引用,我们得先添加 namespace:
				use Lang;
				Lang::addNamespace('namespace1');
				Lang::addNamespace('namespace2');

好了,简单的介绍到这,写的有点乱,有些东西不好描述。最好是分析下源码
接下来继续我们的主题,我们想按照 '控制器' 自动加载语言包(或者可以说是,任意加载不同的语言包文件):
	
改造:
	vendor/laravel/framework/src/Illuminate/Translation/Translator.php

		文件末尾,添加 addCustomFile() 方法:
		    /**
		     * 添加自定义文件
		     */
		    public function addCustomFile($file)
		    {
		        $this->loader->addCustomFile($file);
		    }
	

	vendor/laravel/framework/src/Illuminate/Translation/FileLoader.php

		属性末尾,添加 $customFiles 属性
	    /**
	     * 所有的自定义文件
	     */
	    protected $customFiles = [];

		修改 load() 方法:
		    public function load($locale, $group, $namespace = null)
		    {
		        if ($group === '*' && $namespace === '*') {
		            // return $this->loadJsonPaths($locale);

		            /*
		                这里我们进行重构,额外支持加载自定义的语言包路径
		             */
		            $jsonFileMessages = $this->loadJsonPaths($locale);
		            $customFileMessages = $this->loadCustomFiles($locale);

		            return array_merge($jsonFileMessages, $customFileMessages);
		        }

		        if (is_null($namespace) || $namespace === '*') {
		            return $this->loadPath($this->path, $locale, $group);
		        }

		        return $this->loadNamespaced($locale, $group, $namespace);
		    }

		文件末尾,添加 loadCustomFiles(), addCustomFile() 方法:
		    /**
		     * 从给定的文件中加载语言包
		     */
		    protected function loadCustomFiles($locale)
		    {
		        return collect($this->customFiles)
		            ->reduce(function ($output, $file) use ($locale) {
		                if ($this->files->exists($file)) {
		                    $messages = $this->files->getRequire($file);
		                    $output = array_merge($output, $messages);
		                }

		                return $output;
		            }, []);
		    }

		    /**
		     * 添加自定义文件
		     */
		    public function addCustomFile($file)
		    {
		        $this->customFiles[] = $file;
		    }

使用:
	lang/zh-cn/admin/admin.php
		<?php
			return [
				'name' => '姓名',
				'avatar' => '头像',
			];

	/*
		对于未改造前,我们想得到 name 的中文,laravel 其实是不支持的,laravel 默认只能是 zh-cn/ 的文件,不能再嵌套目录。

		查看源码,其实有种手法也可以实现,key 带上文件目录层级:
			__('admin/admin.name')	
	 */ 

	改造后:
		use Lang;
	    Lang::addCustomFile(resource_path('lang/zh-cn/admin/admin.php'));

	    __('name')

    注意:
    	可添加任意的绝对文件路径,必须是 .php 文件,同时 return 一个数组


 

Laravel框架中文语言包安装与配置实战 如果你要做中东或多民族市场,可能需要自定义规则。注册后即可生效。看完这一整套流程,你应该已经明白:Laravel 的多语言系统 ≠ 简单地翻译几句话而是一整套涵盖配置、加载、切换、持久化、安全、性能的工程体系。我们可以把它总结为五个层次:层级关键技术目标L1 基础集成trans()让系统支持中文L2 动态切换路由 + 控制器 +用户可主动更改L3 状态维持Session + 中间件刷新不丢失。 阅读详情

相关推荐

Laravel开发-locale

Laravel开发-locale Laravel 5本地化包

Laravel 项目,关于 locale 报错

错误信息: Symfony\Component\Debug\Exception\FatalErrorException Declaration of Symfony\Component\Translation\TranslatorInterface::setLocale($locale) must be compatible with Symfony\Contracts\Translation\LocaleAwareInterface::setLocale(string $locale) 解决方案:

bboyzhouda的博客 762

Laravel开发-locale-middleware

Laravel开发-locale-middleware 此软件包将帮助您根据用户使用geoip的位置对应用程序进行本地化,还提供了使用cookie覆盖geoip提供的默认语言的可能性。

Laravel框架设置多语言

Laravel框架版本:7.3*

爱吃五花肉EMin的博客 348

Laravel开发-laravel-locale

Laravel开发-laravel-locale Laravel 5强大的本地化功能

Laravel 实现添加多语言提示信息

Laravel默认的locale用的是en,在resouces/lang/en文件夹下,我们可以看到以下几个文件: resources - lang - en -- auth.php -- pagination.php -- passwords.php -- validation.php 其中validation.php是验证用户提交表单信息的提示文字,比如 'required' => 'The :attribute field is required.', 该行将会在用户未填写某一栏(假设input的name为test)时提示T

Laravel Lang 终极指南:79种语言本地化解决方案的完整教程

Laravel Lang 是一个功能强大的多语言本地化包,专为 Laravel 生态系统设计。它为 Laravel Framework、Laravel Jetstream、Laravel Fortify、Laravel Breeze、Laravel Cashier、Laravel Nova、Laravel Spark 和 Laravel UI 提供了79种语言的完整翻译支持。无论是构建面向全球用户

gitblog_00001的博客 882

Moveit Servo学习

MoveIt Servo功能与配置指南 摘要:本文介绍了MoveIt Servo的功能特性,包括支持关节速度、末端执行器速度和位置控制,以及安全功能如奇点检查、碰撞检测等。通过示例展示了如何运行伺服控制demo,详细解析了关键节点和话题。最后以睿尔曼rml_63机器人为例,讲解了如何自定义伺服配置文件,包括环境设置、输入输出参数配置、平滑滤波器和规划场景监控等关键配置项。文章提供了从基础使用到自定义机器人配置的完整指导,帮助开发者实现高效的实时运动控制。

Fisher的博客 1173

laravel 关于 locale 相关报错

初学laravel 刚用composer 下载 laravel 5.7 后出现以下报错 Symfony \ Component \ Debug \ Exception \ FatalErrorException (E_UNKNOWN) Declaration of Symfony\Component\Translation\TranslatorInterface::setLocale($local...

Frostmourne666的博客 1743

EDA开源仿真工具verilator入门4:访问函数介绍

访问函数(Visitor Function)是verilator算法实现的主要工作方式之一,本节将介绍一下访问函数。

fangfanglovezhou的博客 1074

深入解析SSD报错“READ FPDMA QUEUED”:从诊断到修复全流程

本文深入解析了SSD报错“READ FPDMA QUEUED”的含义、成因与全流程解决方案。该错误通常指示硬盘硬件或健康状态问题。文章详细介绍了如何通过系统日志定位错误、解读关键的S.M.A.R.T.健康报告(重点关注重分配扇区计数等指标),并逐步进行硬件排查(如更换SATA数据线)、软件修复与数据抢救,最终指导用户根据诊断结果做出维修或更换SSD的决策。

weixin_29233333的博客 395

Laravel项目国际化(Localization)完全指南

Laravel项目国际化(Localization)完全指南 前言 在构建现代Web应用时,支持多语言是提升用户体验的重要环节。Laravel提供了强大的国际化(Localization)功能,使开发者能够轻松实现多语言支持。本文将深入解析Laravel的国际化机制,帮助开发者掌握从基础配置到高级用法的完整知识体系。 核心概念 Laravel的国际化系统基于以下几个核心概念: 语言文件:存储各种...

gitblog_00354的博客 440

2025.05.30【转录组】|Ribo-seq数据流程详解(一 质量控制)

本文详细介绍了Ribo-seq数据的质控分析流程,重点讲解了使用fastp进行原始数据质控的关键步骤和参数设置。作者通过Snakemake自动化流程示例,展示了如何去除接头序列、过滤低质量reads、生成质控报告等操作。文章强调高质量的Ribo-seq数据对转录后调控和翻译动态研究的重要性,并提供了兼顾数据质量和下游分析需求的参数配置建议。该流程有助于研究人员规范高效地完成Ribo-seq数据质控,为后续分析提供可靠数据基础。

784

laravel admin 表单验证本地化

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、背景介绍二、使用步骤1.进入Laravel-admin官网2.进入语言包官网3.点击via Composer4.使用 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、背景介绍 一直听说Laravel-admin是一款非常好用的Laravel框架,于是

Z_PTOPONE的博客 470

HyperLynx仿真(一)LineSim简单介绍

可以选择设置信号线与信号线之间默认的距离和信号线与同平面的平面之间的距离,这些设置根据工程师项目上经常使用的情况而设置,也可以选择不设置,在每次仿真时根据需要再对每一个仿真单独设置。仿真属性的设置对话框包含一般设置、 显示颜色设置、LineSim 设置、BoardSim 设置、 层叠默认设置、焊盘类型设置、仿真示波器默认设置、电路仿真器默认设置、电源完整性设置及高级设置。第一次使用HyperLynx软件时需要设置仿真相关环境,包括仿真软件的基本设置、模型库路径设置、仿真控制器控制、单位等。...

小幽余生不加糖 8946

2025年华为杯中国研究生数学建模竞赛A题 通用神经网络处理器下的核内调度问题 思路+代码

针对通用神经网络处理器下的核内调度问题,我们提出了一套基于分层优化框架的系统性解决方案。该方案首先通过缓存敏感的启发式拓扑排序算法生成最小峰值缓存占用的调度序列,在满足计算图依赖关系的前提下优先选择能够释放或减少缓存占用的节点;随后采用最佳适应算法进行精细化的缓存分配,结合LRU换出策略动态管理多级缓存空间,最小化额外数据搬运量;最后引入多目标遗传算法进行联合优化,在严格控制数据搬运量不显著增加的前提下,通过关键路径分析、流水线并行和数据预取等技术进一步优化总执行时间。

YOLO 783

Laravel 本地化扩展包 caouecs/laravel-lang 使用

Laravel 本地化 中文提示 扩展包 caouecs/laravel-lang **项目地址&amp;amp;quot;&amp;amp;quot;:https://github.com/caouecs/Laravel-lang 使用场景:Laravel 项目本地化-中文提示 使用方法: (1)下载扩展包 composer require caouecs/laravel-lang:~3.0 (2)将「vendor/caouecs/lara...

Geek彬的博客 3384

ADS基础教程16 - 存档和导入(workspace、cell、view)

选择workspace_Archive目录作为保存workspace归档的目录,点击打开进行目录选择,点击Finish保存目录。,选择cell_Archive目录作为保存cell归档的目录,点击打开进行目录选择,点击Finish保存目录。,选择view_Archive目录作为保存view归档的目录,点击打开进行目录选择,点击Finish保存目录。(2)在弹框中,可以选择点击Select将参考的条目添加进来,然后点击Next…(2)在弹框中,可以选择点击Select将参考的条目添加进来,然后点击Next…

XZ_ZC的博客 3699

QuickRecorder 快速上手指南:macOS 录屏与系统声音录制如何一步到位

QuickRecorder 是一款基于苹果原生 ScreenCapture Kit 的轻量级 macOS 录屏工具,不需要虚拟音频驱动,屏幕、系统声音、麦克风能同时录进同一个文件。装好之后三步就能录出第一段视频。 ## 快速上手 ### 一行命令完成安装 在终端执行(要求 macOS 12.3 及以上): ```bash brew install lihaoyun6/tap/quickre

gitblog_00441的博客 354

手把手教你学simulink实例--基于Simulink的航空航天器飞行轨迹规划与仿真详细介绍

航空航天器飞行轨迹规划是实现高效、安全和精确飞行的关键技术。通过Simulink进行航空航天器飞行轨迹规划与仿真,可以验证控制算法的有效性、优化飞行路径,并降低开发成本。以下是如何在MATLAB和Simulink中设计并仿真一个航空航天器飞行轨迹规划系统的详细步骤。通过上述步骤,我们成功设计并实现了基于Simulink的航空航天器飞行轨迹规划与仿真系统。该系统能够根据实时环境变化动态调整飞行轨迹,从而提高飞行效率、降低燃料消耗并提升安全性。

MHD0815的博客 387

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

UNIT3D多语言支持:50+语言包与本地化配置完整指南

UNIT3D是一款基于Laravel、Livewire和AlpineJS构建的私有种子追踪器,提供强大的多语言支持功能。本文将详细介绍如何利用UNIT3D内置的50多种语言包,轻松实现平台的本地化配置,让全球用户获得更友好的使用体验。 ## 多语言支持概览:突破语言障碍的终极方案 🚀 UNIT3D的国际化架构设计让平台能够无缝支持全球用户。通过精心构建的语言文件系统和灵活的配置选项,管理员可

gitblog_00234的博客 537

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Laravel Comments国际化:如何为你的应用添加多语言评论支持

想要为你的Laravel应用添加国际化评论功能吗?Laravel Comments包提供了强大的多语言支持,让你的应用能够轻松支持全球用户。无论你的用户来自哪个国家或地区,都能以他们熟悉的语言使用评论功能。本文将详细介绍如何为你的应用配置和使用Laravel Comments的国际化功能。 ## 📋 Laravel Comments国际化功能概述 Laravel Comments是一个功能丰

gitblog_00504的博客 463

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

laravel laravel-admin 语言包的问题 trans('demo.user_not_exists'); trans("admin::passwords.password");

语言包的问题 laravel 5.3 更换语言包 96 假行僧396741 关注 2016.12.15 15:36* 字数 280 阅读 4457评论 0喜欢 4 Laravel-lang Laravel 5 语言包,包含 52 种语言, 基于 caouecs/Laravel-lang. trans() 函数根据你的 [本地化文件] 翻译指定的语句 安装 composer requir...

AI 前沿技术实战博客:LLM / Agent / AI 制药 / 生信四大栏目日更,硬核干货 + 可复现代码,看完就能上手 7404

laravel安装-中文语言包

laravel安装-中文语言包

qq_32450471的博客 1953

Laravel 的 <p>{{ __(‘errors.500.message‘) }}</p>的庖丁解牛

是 Laravel 多语言本地化(Localization) 体系的典型用法,用于在错误页面中安全、可维护地显示用户友好的错误提示。

长风破浪会有时的博客 755

laravel多国语言包

https://packagist.org/packages/caouecs/laravel-lang 例如安装中文语言包 则下载 zh-CN 拷贝文件到 resouces/lang 下 然后修改config/app配置文件'locale' => 'zh-CN'即可。 转载于:https://www.cnblogs.com/onephp/p/6117863.html...

aa110212312的博客 273
上一篇: $http_response_header 用法
下一篇: php 没注意、但有用的函数
beyond__devil
博客等级 码龄14年 147粉丝 314原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值