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.Controller
	i18n.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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙HarmonyOS实战-ArkTS语言(基本语法)

🚀一、ArkTS语言基本语法 🔎1.简介 HarmonyOS的ArkTS语言是一种基于TypeScript开发的语言,它专为HarmonyOS系统开发而设计。ArkTS语言结合了JavaScript的灵活性和TypeScript的严谨性,使得开发者能够快速、高效地开发出高质量的Har…

tx2开发板升级JetPack至最新

最近一个项目用到了tx2, 上面的jetpack太老了需要更新,很久没和开发板打交道了,记录一下。中间没怎么截图,所以可能文字居多。 准备工作 Ubuntu 18.04的机器,避免有坑,不要使用虚拟机,一定要是物理机&…

上海智慧岛大数据云计算中心项目正式封顶!

上海智慧岛大数据云计算中心封顶仪式现场 1月15日,云端股份在上海智慧岛大数据云计算中心举行封顶仪式。云之端网络(江苏)股份有限公司(以下称“云端股份”)总经理贡伟力先生,常务副总张靖先生等公司成员&…

孚盟云 多处SQL注入漏洞复现

0x01 产品简介 上海孚盟软件有限公司是一家外贸SaaS服务提供商,也是专业的外贸行业解决方案专业提供商。 全新的孚盟云产品,让用户可以用云模式实现信息化管理,让用户的异地办公更加流畅,大大降低中小企业在信息化上成本,用最小的投入享受大型企业级别的信息化服务,使中…

[绍棠] docxtemplater实现纯前端导出word

1.下载需要的依赖 2.util文件夹下创建doc.js文件 doc.js import docxtemplater from docxtemplater import PizZip from pizzip import JSZipUtils from jszip-utils import { saveAs } from file-saver import ImageModule from "docxtemplater-image-module-free"…

值得分享的几个免费数据采集软件

在当今信息时代,获取大量有价值的数据对于企业决策、学术研究或个人项目都至关重要。而数据采集软件的出现为用户提供了便捷、高效的方式,可以从各种来源采集所需信息。本文将专心分享六个免费的数据采集软件,其中强调的是147采集软件&#x…

使用Sqoop从Oracle数据库导入数据

在大数据领域,将数据从关系型数据库(如Oracle)导入到Hadoop生态系统是一项常见的任务。Sqoop是一个强大的工具,可以帮助轻松完成这项任务。本文将提供详细的指南,以及丰富的示例代码,帮助了解如何使用Sqoop…

Linux系统——学不动了 玩一玩

你的城市下雨了吗 curl http://wttr.in 艺术字 [rootlocalhost ~]#yum install figlet -y 已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile* base: mirrors.bfsu.edu.cn* epel: mirror.nyist.edu.cn* extras: mirrors.nju.edu.…

禅道安装使用以及整个流程的泳道图

目录 1.禅道的安装地址 2.禅道的安装 3.禅道的使用 3.1.产品经历的角色 3.2项目经理角色 3.3测试主管的角色 3.4研发角色 4.泳道图 1.禅道的安装地址 安装地址:项目管理软件 开源项目管理软件 免费项目管理软件 IPD管理软件 - 禅道开源项目管理软件 wind…

Java线程池实现原理及其在美团业务中的实践

Java线程池实现原理及其在美团业务中的实践 随着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流。使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器。J.U.C提供的线程池:ThreadPoolExecutor类,帮助开发人员…

如何用“CentOS7 安装Mysql”?

1、 yum安装更方便 yum install wget 2、 新建文件夹 [rootlocalhost bin]# cd /usr/local/ [rootlocalhost local]# mkdir mysql [rootlocalhost local]# cd mysql [rootlocalhost mysql]# 3、 下载并安装MySQL官方的 Yum Repository wget http://dev.mysql.com/get/mys…

【LGR-172-Div.4】洛谷入门赛 #19(A—H,c++详解!)

文章目录 【LGR-172-Div.4】洛谷入门赛 #19A.分饼干 I题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示样例解释 1样例解释 2数据范围与约定思路: 代码 B.分饼干 II题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样…

网络安全与人工智能的交叉点

网络安全和人工智能 (AI) 的联系日益紧密,人工智能在增强网络安全措施方面发挥着重要作用。这种集成并不新鲜,但随着技术的进步和网络威胁变得更加复杂,它已经随着时间的推移而发展。 在网络安全的早期,防火墙和防病毒软件等传统…

禅道的基本使用

目录 一.概述 1.1 禅道简介 1.2 禅道的特点 二.禅道的下载与安装 2.1 下载 2.2 安装 三.禅道的使用 3.1 公司名修改 3.2 添加部门 3.3 添加用户 3.4 查看权限 四.产品经理使用禅道 4.1 添加产品 4.2 添加产品模块 4.3 添加产品计划 4.4 添加产品需求 4.5 创建项目 4.6 设置…

Qt之使用图片填充QLabel

文章目录 前言实现步骤 前言 本文记录一下使用 QLabel 实现在我们设计的 ui 界面上显示指定的图片,即使用 label 插入图片。 实现步骤 1、右键项目,选择 Add New 2、在弹出对话框中选择“Qt Resource File” 3、命名 qrc 文件并选择添加的文件路径。…

强缓存、协商缓存(浏览器的缓存机制)是么子?

文章目录 一.为什么要用强缓存和协商缓存?二.什么是强缓存?三.什么是协商缓存?四.总结 一.为什么要用强缓存和协商缓存? 为了减少资源请求次数,加快资源访问速度,浏览器会对资源文件如图片、css文件、js文…

Vue四个阶段,八个钩子函数

- 创造阶段:创建Vue实例和初始化数据事件,数据代理,监测watch - beforeCreate,只是创建实例,不能this.$el,this.msg,this.方法名() - created,数据代理了,能v…

MATLAB - 使用 RRT 进行挖掘机运动规划

系列文章目录 前言 本例演示了如何使用运动规划器在包含障碍物的环境中为挖掘机规划路径。在此示例中,您将以运动树的简化形式为挖掘机建模,然后使用基于采样的运动规划器确定挖掘机在存在障碍物的两个姿势之间的可行路径。在 Simscape™ 多体™ 模型中…

SpringBoot(三层框架Controller,Mapper,Service)中遇到的一些注解整理

本文主要从Controller层,Service层,Mapper层这三层架构中记录用到的各种注解 还有一些MyBatis用到的注解 持续更新到本人的毕设做完为止,太多了太多了根本学不完哈哈哈 1.Controller层 1.1GetMapping/PostMapping/DeleteMapping/PutMapping 用于建立HTTP请求与处理方法之间的…

削峰填谷与应用间解耦:分布式消息中间件在分布式环境下并发流量控制的应用

这是《百图解码支付系统设计与实现》专栏系列文章中的第(18)篇,也是流量控制系列的第(4)篇。点击上方关注,深入了解支付系统的方方面面。 本篇重点讲清楚分布式消息中间件的特点,常见消息中间件…