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.mzph.cn/news/634925.shtml

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

相关文章

MySQL 索引(上)

🎉欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹 ✨博客主页:小小恶斯法克的博客 🎈该系列文章专栏:重拾MySQL-进阶篇 🍹文章作者技术和水平很有限,如果文中出现…

libpcap简明教程

文章目录 前言tcpdump的使用libpcap API的简单使用libpcap API的进阶使用 前言 因为之前简单写过wireshark入门指北,所以我知道基本的抓包流程。最近尝试调用libpcap的C API接口,顺道整理下。 本文实验如下: 使用tcpdump命令抓取目标地址为…

【漏洞复现】Hikvision SPON IP网络对讲广播系统命令执行漏洞(CVE-2023-6895)

文章目录 前言声明一、系统简介二、漏洞描述三、影响版本四、漏洞复现五、修复建议 前言 Hikvision Intercom Broadcasting System是中国海康威视(Hikvision)公司的一个对讲广播系统。 声明 请勿利用文章内的相关技术从事非法测试,由于传播…

[已解决]前端使用el-upload,后端使用文件上传阿里云报错:异常信息:java.lang.NullPointerException: null

前端使用el-upload,后端使用文件上传阿里云报错: 报错原因:前端image参数未传进去 解决方法:在el-upload添加属性 name"image" 文件传进去了!

回溯法:0-1背包问题

问题描述 给定种物品和一背包。 物品的重量是, 其价值为,背包的容量为 c。 问应该如何选择装入背包中的物品,使得装入背包中物品的总价值最大?注意物品不重复! 实例:物品价值V{12, 11, 9, 8}, 物品重量W{8, 6, 4, 3},…

手写Vue3源码

Vue3核心源码 B站视频地址:https://www.bilibili.com/video/BV1nW4y147Pd?p2&vd_source36bacfbaa95ea7a433650dab3f7fa0ae Monorepo介绍 Monorepo 是管理项目代码的一种方式,只在一个仓库中管理多个模块/包 一个仓库可以维护多个模块,…

Java API集合(2)

1.时间日期类 1.1 Date类(应用) 计算机中时间原点 1970年1月1日 00:00:00 时间换算单位 1秒 1000毫秒 Date类概述 Date 代表了一个特定的时间,精确到毫秒 Date类构造方法 方法名说明public Date()分配一个 Date对象,并初始化…

Fog-Aware Adaptive YOLO for Object Detection in Adverse Weather

Abstract 提出了一种雾自适应YOLO算法。使用一种雾评估算法将图片分为有雾和无雾图片,随后将标准的YOLO应用于正常图片,自适应YOLO应用于有雾图片。 Method 目前的除雾方法去除雾霾时不考虑其雾度和发生频率。例如,图像自适应YOLO算法[6]试…

大数据小白初探HDFS从零到入门(一)

目录 1. 前言 2. 大数据的诞生 3.发展趋势及应用 4.离线计算和实时计算 5.大数据的特性 1. 前言 前两天把Hbase的初级入门知识整理了下,在文章中提到了“HDFS”这个大数据的基础,有同事小伙伴想要了解下这方面的知识,今天我把之前整理的内容也给同事讲了下,顺便我把他…

【已解决】Qt Creator设计模式被禁用不能点的原因及解决方案

Qt Creator 下载地址(含历史版本):https://download.qt.io/official_releases/qtcreator/ 症状 Qt Creator 目前最新版为12.0.1,安装后打开.qml文件发现设计工具图标为禁用状态。 原因及解决方案 根据官网材料(Qt C…

二叉树的基本操作

二叉树的基本操作 前文对二叉树的递归遍历作了一定的介绍,本文中我们继续深入理解递归,实现二叉树的基本操作。 1、获取树中结点个数 对于这个问题,我们有两种解决的思路。 1、子问题思路 我们通过结点左字树和右字树的结点总数加1来计算…

机器视觉检测设备在连接器外观缺陷检测中的应用

作为传输电流或信号连接两个有源器件的器件,连接器被广泛应用于各个行业,从手机、平板、电脑,到冰箱、空调、洗衣机,再到汽车、国防、航空,处处是它的所在。每个电子产品少了连接器将无法运作,因此&#xf…

20个超实用的JavaScript高级技巧

1.Intersection Observer: 用途: 监听元素与其父元素或视口的交叉情况。使用场景: 懒加载图片、实现无限滚动。 const callback (entries, observer) > {entries.forEach(entry > {if (entry.isIntersecting) {console.log(Element is in the v…

Python——面向对象案列

1. class User(object):#重写__int__初始化方法,该方法用来初始化属,在构建方法的时候,这个方法会自动触发,用来初始化属性def __init__(self): #name “” 这是一个局部变量#self类似指针 this#self.name类的属性print("构…

计算机网络-甘晴void学习笔记

计算机网络 计科210X 甘晴void 202108010XXX 文章目录 计算机网络期中复习1计算机网络和因特网1.1 因特网1.2 网络边缘1.3 网络核心1.4 分组交换的时延/丢包和吞吐量1.5 协议层次与服务模型 2 应用层原理2.1 应用层协议原理2.2 Web和Http2.3 因特网中的电子邮件2.4 DNS&#x…

K8S--部署Nacos

原文网址:K8S--部署Nacos-CSDN博客 简介 本文介绍K8S部署Nacos的方法。Nacos版本是:2.2.3。 部署方案 本文为了简单,使用此部署方式:使用本地pvconfigmap,以embedded模式部署单机nacos。以nodePort方式暴露端口。 …

linux Vim编辑器使用以及文件权限修改,kill process

选择编辑器:select-editor vim命令 基本操作 1.vim 文件名 :进入一般模式(不能输入) 2.按下 i 从一般模式,进入到插入编辑模式 3.按下esc从插入模式,退出到一般模式 4.输入:wq,退出编辑。 普通模式下&…

vectorCast——Probe point 功能实现故障注入,局部变量打印,断点调试。

选择一个测试用例,选择coverage窗口进行查看。点击edit probe point,如图所示绿色的小圆圈。选代码中选择需要打断点的地方进行点击。黑色的小圆点都可以选。点击黑色小圆点,小圆点变绿,表示打断点成功。此时就可以根据自己的需求在打断点的位置编写一些C语言的命令语句。点…

QT+OSG/osgEarth编译之八十:ive+Qt编译(一套代码、一套框架,跨平台编译,版本:OSG-3.6.5插件库osgdb_ive)

文章目录 1、osgdb_ive介绍2、文件分析3、pro文件4、编译实践1、osgdb_ive介绍 通过osgdb_ive,OpenSceneGraph开源库能方便地读取ive格式的三维文件。 ive(Interchangeable Virtual Environment)是一种三维图形数据交换格式,主要用于虚拟现实和增强现实领域的场景数据交…

线程同步--生产者消费者模型--单例模式线程池

文章目录 一.条件变量pthread线程库提供的条件变量操作 二.生产者消费者模型生产者消费者模型的高效性基于环形队列实现生产者消费者模型中的数据容器基于生产者消费者模型实现单例线程池 一.条件变量 条件变量是线程间共享的全局变量,线程间可以通过条件变量进行同步控制条件…