前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Laravel学习教程之本地化模块

Laravel学习教程之本地化模块

作者头像
用户8826052
修改于 2021-07-13 02:38:32
修改于 2021-07-13 02:38:32
7900
举报
文章被收录于专栏:编程乐园编程乐园

前言

本文主要给大家介绍了关于Laravel本地化模块的相关内容,分享出来供大家参考学习,话不多说了,来一起看看详细的介绍吧。

本文是基于Laravel 5.4版本的本地化模块代码进行分析书写;

模块组成

下图展示了本地化模块各个文件的关系,并进行简要说明;

TranslationServiceProvide

本地化模块的服务提供者,既是一个模块的入口,也是与IOC容器交互的中心;注册翻译器实例translation.loader,注册翻译管理实例translator,并声明延迟加载服务;

Translato

翻译管理类;

MessageSelecto

消息过滤器,通过判断复数值来选择合适的消息;比如消息内容是这样的{0}没有|[1,19]一些|[20,*]很多,我们传的数字是 18,那么最后选择的消息就是"一些";

LoaderInterface

翻译器接口;声明了三个方法load,addNamespace,namespaces;

FileLoade

继承了LoaderInterface,从文件获取本地化资源数据;

ArrayLoade

继承了LoaderInterface,在内存用数组维护本地化资源数据;

配置说明

在config配置目录下和本模块有关的参数只有app.php文件中的locale和fallback_locale;

locale表示默认本地化语言是什么,这样会优先从该语言资源目录中获取翻译(转换)内容;

如果locale表示的语言不存在,则使用fallback_locale这个备用语言;

笔者的locale是zh_CN,fallback_locale是en;

功能介绍

全局的语言资源目录在项目的resources/lang下,每个子目录分别以语言为名,比如en、zh_CN等;

另外一些子目录是命名空间为名,是对第三方加载库资源文件的补充替换;

有可能还存在en.json、zh_CN这类Json文件,项目有时候会从Json文件读取数据,这些数据均来自于这个已存在的Json文件;

翻译全局语言资源

笔者的语言资源根目录resources/lang下有zh_CN/validation.php,内容如下

<?php

return [

'accepted' => ':attribute 必须接受。',

'active_url' => ':attribute 不是一个有效的网址。',

'after' => ':attribute 必须是一个在 :date 之后的日期。',

......

];

通过调用代码

app('translator')->trans('validation.accepted', ['attribute' => '用户名'])

或者全局帮助函数trans

trans('validation.accepted', ['attribute' => '用户名'])

输出 "用户名 必须接受。";

调用过程如下:

解析键名:将键名进行解析成数组 ($namespace = '*', $group = 'validation', $item = 'accepted');namespace为*,表示在全局命名空间下;group,组,其实就是文件名,一个文件为一组;item是元素的意思;

获取语言数组: 这里的$locale为null,所以返回的是默认与备用语言组成的数组,也就是['zh_CN', 'en'];并进行for循环,进入语言资源目录中寻找需要的元素值,如果找到,即 break;

加载资源:因为命名空间为*,所以定位资源根目录为resources/lang;语言为zh_CN,所以子目录为zh_CN;group名为validation,这时就把resources/lang/zh_CN/validation.php文件中的所有内容都加载进内存中,并进行保存 $this-&gt;loaded[$namespace][$group][$locale] = $lines;

获取资源,并替换参数:/

/通过Arr::get方法从$this-&gt;loaded[$namespace][$group][$locale]中获取元素值:attribute 必须接受。;此时,参数数组为不空,循环替换,得到结果"用户名 必须接受。";

翻译带命名空间的语言资源

笔者在语言资源根目录resource/lang下,创建vendor/Faker/Provider/zh_CN/Internet.php文件,内容如下:

<?php

return [

'message' => 'hello, Faker/Provider',

......

];

同时,手动在Translato/

/r中注册第三方插件(也就是带命名空间)的资源根目录位置;

app('translator')->addNamespace('Faker/Provider', base_path('vendor/xx/resource/lang'))

现在,获取带命名空间的资源;

trans('Faker/Provider::Internet.message');

输出 'hello, Faker/Provider';

调用过程如下:

解析键名:将键名进行解析成数组 ($namespace = 'Faker/Provider', $group = 'Internet', $item = 'message');

获取语言数组: 这里的$locale为null,所以返回的是默认与备用语言组成的数组,也就是['zh_CN', 'en'];并进行for循环,进入语言资源目录中寻找需要的元素值,如果找到,即 break;

加载资源:因为命名空间为Faker/Provider,此时会分两步;第一步读取第三方插件资源库下的信息,这时读取命名空间注册的根目录为base_path('vendor/xx/resource/lang'),就读取base_path('vendor/xx/resource/lang')/zh_CN/Internet.php内容,文件不存在,返回空数组;第二步读取全局语言资源,进行补充,也就是读取base_path('resource/lang/vendor/Faker/Provider')/zh_CN/Internet.php; 最后进行保存 $this-&gt;loaded[$namespace][$group][$locale] = $lines;

获取资源,并替换参数:通过Arr::get方法从$this-&gt;loaded[$namespace][$group][$locale]中获取元素值" hello, Faker/Provider";此时,参数数组为空,直接返回结果 "hello, Faker/Provider";

翻译Json文件中的资源

笔者在语言资源根目录resource/lang下,创建zh_CN.json文件,内容如下:

{

"name": "zh_CN.json",

"place": "../resources/lang/zh_CN.json"

}

现在,获取Json文件中的name值;

trans('*.name')

输出 "zh_CN.json";

调用过程如下:

解析键名:将键名进行解析成数组 ($namespace = '*', $group = '*', $item = 'name');

获取语言数组: 这里的$locale为null,所以返回的是默认与备用语言组成的数组,也就是['zh_CN', 'en'];并进行for循环,进入语言资源目录中寻找需要的元素值,如果找到,即 break;

加载资源:因为命名空间为

,这时会读取语言根目录下,名字为语言值的Json文件;此时会读取resource/lang/zh_CN.json,将读取的内容,进行保存 $this-&gt;loaded[$namespace][$group][$locale] = $lines;

获取资源,并替换参数:通过Arr::get方法从$this-&gt;loaded[$namespace][$group][$locale]中获取元素值"zh_CN.json";此时,参数数组为空,直接返回结果 "zh_CN.json";

运行时绑定资源

资源的内容除了放在文件中,用到的时候在读取,也可以在项目运行时,存放;

以resources/lang/zh_CN/validation.php为例,现在想要在运行时,给这个组添加一个新的元素叫 extra,需要指定放在哪个语言下,可以这样写

app('translator')->addLines(array('validation.extra' => '测试添加额外数据'), 'zh_CN');

现在可以获取这个新添加的元素值

trans('validation.extra')

复数资源过滤

笔者通过 运行时绑定资源 添加一条翻译内容:

app('translator')->addLines(array('validation.extra' => '{0}没有|[1,19]一些|[20,*]很多'), 'zh_CN');

如果通过trans('validation.extra') ,获取的就是整条翻译内容,不是我们所期望的;用choice方法:

app('translator')->choice('validation.extra', 0) 得到 没有;

app('translator')->choice('validation.extra', 18) 得到 一些;

app('translator')->choice('validation.extra', 20) 得到 很多;

可以将app('translator')->choice(...)简写成全局帮助函数trans_choice(...);

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
数据分析-cuttag分析流程分享1-linux代码流程分析
老板最近比较痴迷于各种seq,由于俩师姐外加一师妹的chip-seq建库老不成功,于是改成了CUTTAG建库,其实读了文献,发现都是相似的原理,只不过是CUTTAG用的细胞起始量远低于chip-seq,同时用的酶不同,建库的时间相对少很多。具体可以参考一下这篇文献CUT&Tag for efficient epigenomic profiling of small samples and single cell(doi:10.1038/s41467-019-09982-5)。
小胡子刺猬的生信学习123
2022/04/03
7.9K1
数据分析-cuttag分析流程分享1-linux代码流程分析
HLA-VBSeq:对全基因组数据进行HLA分型
HLA-VBseq 利用全基因组测序的数据,可以提供8位的HLA分型结果,其文献链接如下
生信修炼手册
2020/05/11
1.7K0
短序列比对练习
针对人基因组RNA-Seq,read跨越外显子,此时要使用支持切除read的软件,例如tophat2,升级的hisat2.而bowtie2则不行。下面我们可以来对比下。
生信喵实验柴
2022/10/25
1.8K0
分享 | ATAC-Seq 分析流程
ATAC-Seq 是“Assay for Transposase-Accessible Chromatin with high-throughput Sequencing”的缩写。 ATAC-Seq 方法依赖于使用高活性转座酶 Tn5 的下一代测序(NGS)文库的构建。将 NGS 接头连接到转座酶上,该转座酶可以使染色质断裂并同时将这些接头整合到开放的染色质区域中。构建的文库可通过 NGS 测序,并使用生物信息学分析具有可及或可访问染色质的基因组区域。
用户7010445
2024/06/18
1.1K0
分享 | ATAC-Seq 分析流程
ATAC-seq经典分析流程(上)
--split-3 把双端测序数据拆分成两个文件,对单端测序数据不起作用.fastq-dump默认会把双端测序结果保存到一个文件里
生信菜鸟团
2023/12/28
2.6K0
ATAC-seq经典分析流程(上)
【直播】我的基因组 43:简单粗糙的WGS数据分析流程
前面我们扯到bam文件的各种操作,vcf文件的各种操作,基础知识不牢固的同学可能已经云里雾里了。这次我们来讲一个简单的。就是拿到了fastq的测序数据,如何把全基因组分析给跑一遍。(不谈细节!) 首先就是fastq文件比对到参考基因组变成sam文件: head -40 read1.fq >tmp/read1.fq head -40 read2.fq >tmp/read2.fq ~/biosoft/bwa/bwa-0.7.15/bwa mem -t 20 -M ~/reference/index/bwa/
生信技能树
2018/03/08
1.9K0
【直播】我的基因组 43:简单粗糙的WGS数据分析流程
snakemake杂记:多个转录组比对到多个基因组得到多个bam文件然后合并
我有10个基因组,然后又12个转录组数据,然后将这个12个基因组数据分别比对到这个10个基因组,每个基因组得到12个bam文件,然后将每个基因组的12个bam文件合并 ,最终得到10个合并的bam文件
用户7010445
2023/08/23
3620
snakemake杂记:多个转录组比对到多个基因组得到多个bam文件然后合并
看优秀本科生如何一周内学会Linux进而搞定RNA-seq上游分析
我是武汉大学基础医学专业第一届的学生,2016年9月刚进大学的时候就选了导师进入实验室接受科研训练。虽然我们实验室不是专门做生物信息学的,但第一次和导师正式交流的时候,她就建议我要学点生信。(巧合的是2016年9月也是生信菜鸟团转型生信技能树的时间点,如果所有的导师都如此明智就好了)
生信技能树
2020/04/14
8.9K1
看优秀本科生如何一周内学会Linux进而搞定RNA-seq上游分析
PSMC分析
A1_R1.fa.gz,A1_R2.fa.gz: 二代重测序clean_reads(个体B)【注:必须两个个体A与B】
花落花相惜
2021/12/06
1.1K0
新冠参考基因组构建
目前新冠病毒的基因组拼接主要采用与参考序列比对,生成一致性序列的方法。所以,参考序列就非常重要,那么参考序列从何而来,参考序列是否准备,遇到新物种如何构建参考序列?
生信喵实验柴
2022/04/07
8140
新冠参考基因组构建
bioconvert计算测序覆盖度并使用R语言ggplot2画折线图进行可视化展示
https://www.ncbi.nlm.nih.gov/nuccore/FN433596
用户7010445
2021/08/31
1.8K0
bioconvert计算测序覆盖度并使用R语言ggplot2画折线图进行可视化展示
拼接病毒基因组
得到参考序列之后,由于病毒基因组较小,不容易从头拼接,因此可以采用与参考序列比对生成一致性序列的方法。无论是 PCR 扩增产物还是宏基因组测序都可以使用该方法得到新冠基因组。
生信喵实验柴
2022/04/07
9710
拼接病毒基因组
HLAreporter : HLA分型软件简介
从示意图可以看出,一个HLA Allel 可以分成四个字段,在加上最后的修饰后缀,共5个字段;在定义HLA 分型结果的分辨率时,会根据分型结果的最大位数来判断,如果只给出了字段一,即血清学分类的信息,代表是2位的分型结果;如果最多给出了字段二,即对应的蛋白信息,代表是4位的分型结果;如果最多给出了字段三,即CDS区信息,代表是8位的分型结果;如果分型结果给出了最后的后缀,代表是9位的分型结果。
生信修炼手册
2020/05/11
2.1K0
生物结构变异分析软件meerkat 0.189使用笔记(一)
meerkat 0.189版本和以前的版本相比,支持bwa mem 输出的bam文件,还支持全外显子数据count SV。
用户1680321
2022/03/22
6800
生物结构变异分析软件meerkat 0.189使用笔记(一)
【直播】我的基因组52:X和Y染色体的同源区域探索
很久以前,我其实就遇到过通过NGS测序数据来判定性别的难题(搜索我博客即可查看详情),本次探究自己的基因组得到的统计结果与常识不符,所以我可以肯定是我们的常识太浅显了。 【直播】我的基因组48:我可能测了一个假的全基因组 【直播】我的基因组49:Y染色体的SNV不能用常规流程来找? 【直播】我的基因组50:从测序深度和位点间距来看SNV分布情况 通过自己的测序数据的详细分析,我才知道PAR(pseudoautosomal region)。这样的X,Y染色体大量同源,说到底是测序片段压根无法准确定位,所以说所
生信技能树
2018/03/08
2K0
【直播】我的基因组52:X和Y染色体的同源区域探索
组装结果纠错
由于三代 nanopore 测序质量比较低,原始数据中存在大量测序错误,即使拼接前进行了纠错,组装结果中仍会存在错误,用长读长或短读长的数据对组装结果进行矫正可以,提高准确率,减少 Miscalls,Indels,改善由错装(mis-assemblies)导致的低比对区域。因此,序列拼接完需要对拼接结果进行优化,根据文献报道,经过 polish 之后,拼接结果与真实基因组(其他测序数据拼接结果)的一致性可以达到 99.99%以上。即使组装工具带有纠错功能,仍建议再次进行一轮或多轮的矫正。
生信喵实验柴
2022/10/25
2K0
组装结果纠错
生信分析过程中这些常见文件的格式以及查看方式你都知道吗?
生信分析过程中,会与很多不同格式的文件打交道,除了原始测序数据fastq之外,还需要准备基因组文件fasta格式和基因注释文件gtf格式。在分析的过程中还会有众多中间文件的生成,如bed、bed12、sam、bam、wig、bigwig、bedgraph等,生成后我们一般会查看下内容了解文件每一列的含义,以此来决定需要提取哪些有用信息列来进行下一步分析。
生信宝典
2019/10/14
2.6K0
生信分析过程中这些常见文件的格式以及查看方式你都知道吗?
序列比对之BWA
BWA是一个用于将DNA序列(特别是低差异性序列)映射到大型参考基因组(例如人类基因组)上的工具。它在基因组学和生物信息学研究中尤为重要。因为它能有效处理高通量测序数据,常常集成于WES分析流程,被广泛应用于基因组学研究,如在寻找与疾病相关的基因变异、理解种系发育关系等领域。
生信菜鸟团
2023/11/22
1.6K0
序列比对之BWA
文献笔记四十三:不同形态的南瓜重测序探索与形态和有价值的农艺性状有关的基因组变异
Whole-genome resequencing of Cucurbita pepo morphotypes to discover genomic variants associated with morphology and horticulturally valuable traits
用户7010445
2020/03/03
1K0
Sentieon BWA-Meth流程:甲基化WGBS数据分析速度与精确性的完美结合
全基因组甲基化测序(WGBS)是一种研究DNA甲基化的方法,以全面了解在基因组水平上的表观遗传变化。在进行WGBS数据分析时,通常需要使用专门的比对工具,因为这些工具需要能够处理亚硫酸盐转化后的数据。
毅硕科技
2023/04/15
1.1K0
Sentieon BWA-Meth流程:甲基化WGBS数据分析速度与精确性的完美结合
推荐阅读
相关推荐
数据分析-cuttag分析流程分享1-linux代码流程分析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档