beego的模块篇 - I18n国际化

1. i18n 安装导入

安装该模块:

go get github.com/beego/i18n

导入引用包:

import ("github.com/beego/i18n"
)

 conf 目录下就有 locale_en-US.ini 和 locale_zh-CN.ini 两个本地化文件。

本地化文件的文件名和后缀是随意的,不过建议采用与 beego 官网相同的风格来对它们命名。

2. 最简实例

2.1 i18n多语言配置

conf/locale_en-US.ini

hi = hello
bye = goodbye

conf/locale_zh-CN.ini

hi = 您好
bye = 再见

conf/app.conf:

## 本地化配置
[lang]
types = en-US|zh-CN

2.2 controller多语言加载

简单配置一个测试Controller,正式项目肯定会抽出一个BaseController,这里简单测试就MainController了

对于每个请求,beego 都会采用单独的 goroutine 来处理,因此可以对每个控制器匿名嵌入一个 i18n.Locale 结构用于处理当前请求的本地化响应。

接受请求之后,在 baseController 的 Prepare 方法内进行语言处理,这样便可应用后所有其它控制器内而无需重复编写代码。

import ("fmt"beego "github.com/beego/beego/v2/server/web""github.com/beego/i18n""strings"
)type MainController struct {beego.Controlleri18n.Locale
}// 初始化
func init() {// 自定义错误处理器beego.ErrorController(&ErrorController{})// 本地化设置setLocales()
}func (b *MainController) Prepare() {setLang(b)
}// 变量
// 指定、Cookies 和浏览器 Accept-Language 来获取用户语言选项,然后设置控制器级别的语言。
var (lang           = "lang"types          = "types"acceptLanguage = "Accept-Language"
)// 设置本地化
func setLocales() {SMH := "::"SX := "|"langTypes, _ := beego.AppConfig.String(lang + SMH + types)langTypeArr := strings.Split(langTypes, SX)for _, lang := range langTypeArr {if err := i18n.SetMessage(lang, "conf/"+"locale_"+lang+".ini"); err != nil {fmt.Println("本地化文件设置失败")return}}
}// 设置本地化语言
func setLang(b *MainController) {// 从url参数获取lang,url中没有,从请求头获取lang := b.GetString(lang)if len(lang) == 0 {al := b.Ctx.Request.Header.Get(acceptLanguage)if len(al) > 4 {lang = al[:5]}}// 检查lang是否在i18n中存在if !i18n.IsExist(lang) {lang = ""}// 默认为中文if len(lang) == 0 {lang = "zh-CN"}b.Lang = lang
}
func (c *MainController) Get() {fmt.Println(i18n.Tr(c.Lang, "hi"))c.Data["Website"] = "beego.vip " + i18n.Tr(c.Lang, "hi")c.Data["Email"] = "astaxie@gmail.com"c.TplName = "index.tpl"
}

ErrorController

// 自定义错误 API
type ErrorController struct {web.Controller
}func (e *ErrorController) Error400() {e.Data["json"] = "{}"e.ServeJSON()
}func (e *ErrorController) Error401() {e.Data["json"] = "{}"e.ServeJSON()
}func (e *ErrorController) Error404() {e.Data["json"] = "{}"e.ServeJSON()
}func (e *ErrorController) Error500() {e.Data["json"] = "{}"e.ServeJSON()
}

2.3 访问网页

​​​​​​​

3. 分区功能

针对不同页面,同一个键的名称很可能会对应不同的含义。因此,i18n 模块还利用 INI 格式配置文件的节特性来实现分区功能。

例如,同样是键名 about,在首页需要显示为 关于,而在关于页面需要显示为 关于我们,则可以通过分区功能来实现。

本地化文件中的内容:

about = About[about]
about = About Us

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/416443.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vector迭代器的失效

1.vector的底层 vector的底层就是由三个指针构成的 iterator _start 这个指针指向vector数据起始位置。 iterator _finish这个指针指向vector数据的结束位置。 iterator _end_of_shorage这个指针指向vector容量的位置。 2.迭代器失效的种类 2.1扩容引发的迭代器失效 例&…

【GitHub项目推荐--微软开源的可视化工具】【转载】

说到数据可视化,大家都很熟悉了,设计师、数据分析师、数据科学家等,都需要用各种方式各种途径做着数据可视化的工作.....当然许多程序员在工作中有时也需要用到一些数据可视化工具,如果工具用得好,就可以把原本枯燥凌乱…

智能驾驶新浪潮:SSD与UFS存储技术如何破浪前行?- SSD篇

随着汽车行业的不断发展,对存储的需求也在不断的变化中。早期阶段的汽车对存储的需求主要是收音机、播放器、导航仪等,有些还可以支持光盘和U盘的外接播放。中期阶段,也是当前主流的燃油车行车记录、多媒体、车联网的需求,对存储性…

Jmeter 性能 —— 压测常遇问题+解决!

1、测试过程中CPU过高 用vmstat实时监控cpu使用情况。很小的压力AP cpu却到了80%多,指标是不能超过60%。vmstat 2 (每二秒显示一次系统内存的统计信息) 分析是use cpu过高还是sys cpu过高,常见的是use cpu使用过高。如果是sys cpu使用过高,先…

【内存管理】flink内存管理(一):内存管理概述:flink主动管理内存原理、flink内存模型

文章目录 一.flink为什么自己管理内存1. 处理大数据时JVM内存管理的问题2. flink主动管理内存逻辑2.1. Flink内存管理方面2.2. 序列化、反序列化说明 3. Flink主动管理内存的好处 二. Flink内存模型1. 堆内存2. 非堆内存2.1. 托管内存2.2.直接内存2.3. JVM特定内存 本节从整体使…

深入探索 Android 中的 Runtime

深入探索 Android 中的 Runtime 一、什么是 Runtime二、Android 中的 Runtime 类型2.1. Dalvik Runtime2.2. ART(Android Runtime) 三、Runtime 的作用和特点3.1. 应用程序执行环境3.2. 跨平台支持3.3. 性能优化3.4. 应用程序优化 四、与应用开发相关的重…

第十四章 MyBatis

第十四章 MyBatis 1.入门-课程介绍2.入门-快速入门程序3.配置SQL提示4.入门-JDBC5.入门-数据库连接池6.入门-lombok工具包介绍7.基础操作-环境准备8.基础操作-删除9.基础操作-删除(预编译SQL)10.基础操作-新增11.基础操作-新增(主键返回&…

ctfshow命令执行(web29-web52)

目录 web29 web30 web31 web32 web33 web34 web35 web36 web37 web38 web39 web40 web41 web42 web43 web44 web45 web46 web47 web48 web49 web50 web51 web52 web29 <?php error_reporting(0); if(isset($_GET[c])){$c $_GET[c];if(!preg_match…

Leveraging Unlabeled Data for Crowd Counting by Learning to Rank

无标签人群技术&#xff0c;作者引入了一种排名。 利用的是一个图的人群数量一定小于等于包含这个图的图 生成排名数据集 作者提出了一种自监督任务&#xff0c;利用的是一个图的人群数量一定小于等于包含这个图的图 流程&#xff1a; 1.以图像中心为中心&#xff0c;划分一…

CentOS安装Flume

CentOS安装Flume 一、简介二、安装1、下载2、解压3、创建配置文件4、启动flume agent5、验证 一、简介 Flume is a distributed, reliable, and available service for efficiently collecting, aggregating, and moving large amounts of log data. It has a simple and flexi…

使用 Swift 代码优化项目编译速度

引言 软件的性能是评价一个软件质量的重要指标&#xff0c;尤其在今天这个时代&#xff0c;性能已成为大型项目不可或缺的考虑因素之一。对于用户量极大的软件&#xff0c;如网银系统、在线购物商城等&#xff0c;更是必须保证其高效稳定的性能。在这种背景下&#xff0c;优化…

K8S--安装Nginx

原文网址&#xff1a;K8S--安装Nginx-CSDN博客 简介 本文介绍K8S安装Nginx的方法。 1.创建Nginx目录及配置文件 mkdir -p /work/devops/k8s/app/nginx/{config,html} 在config目录下创建nginx.conf配置文件&#xff0c;内容如下&#xff1a; # events必须要有 events {wo…