当前位置: 首页 > news >正文

[Ruby on Rails系列]4、专题:Rails应用的国际化[i18n]

1. 什么是internationalization(i18n)?

国际化,英文简称i18n,按照维基百科的定义:国际化是指在设计软件,将软件与特定语言及地区脱钩的过程。当软件被移植到不同的语言及地区时,软件本身不用做内部工程上的改变或修正。

当然,官方的定义总是十分高大上。实际上,今天我们要做的并没有那么复杂。任务是为上次的系列3里的Web站点提供多语言支持。比如上次是英语网站,这次我们可以根据用户地点自动提供中文网站或其他语言网站。

 

2.如何实现i18n?

2.1 Step1: 登录Cloud9,进入上次的开发环境

cd firstDemo

2.2 Step2:准备多语言字典(locale material)

进入该网站:https://github.com/svenfuchs/rails-i18n/tree/master/rails/locale

该网站提供了各种语言的locale模版,这里我们需要以下2个文件(当然如果你需要支持其他国家语言,还需要准备其他文件):

[1]en.yml  (英语版本)

[2]zh-CN.yml  (简体中文版本)

2.3 Step3:编辑config/locales文件夹(1)

如上图,在该文件夹下我们看到只有一个文件:en.yml,将其打开发现只有2行代码如下:

en:
  hello: "Hello world"

这是一个yml文件模版,现在我们需要讲其换成上面的en.yml

点击进入:en.yml 打开文件,然后复制粘贴网页内容,将原来的en.yml文件内容覆盖

[注意点:正确的复制方法与错误的复制方法]

YML文件是通过key-value格式定义数据的文件,它是Ruby on Rails里的数据定义文件,特点是空格敏感!错误的复制方法会忽略空格进而导致语法错误。因此这里的操作非常重要。

[正确的复制方法]

如上图,点击红色区域的按钮,进入新的页面,然后再进行复制,即可保留空格。如果直接在该页面复制,会忽略空格导致语法错误!

2.4 Step3:编辑config/locales文件夹(2)

en.yml搞定以后,在config/locales文件夹下新建文件:zh.yml,再将zh-CN.yml下的内容同样复制过去

注意,zh.yml文件第一行应将zh-CN改成zh(去掉-CN)

 

接下来:我们需要对以上2个文件(en.yml和zh.yml)进行编辑,以适应我们的Web应用。

对于en.yml,我们需要在en:下一行,date:上一行区域输入以下代码(注意空格):

en:
  memo_title: My Memopad
  show: Show
  edit: Edit
  destroy: Destroy
  list_memo: Listing memos
  new_memo: New Memo
  date:

对于zh.yml,插入如下代码:

zh:
  memo_title: 我的记录
  show: 展示
  edit: 编辑
  destroy: 删除
  list_memo: 列表
  new_memo: 新建
  date:

2.5 Step4:修改views页面文件

[1]app/views/memos/index.html.erb文件第17~19行

将该3行代码改为如下代码:

<td><%= link_to (t 'show'), memo %></td>
<td><%= link_to (t 'edit'), edit_memo_path(memo) %></td>
<td><%= link_to (t 'destroy'), memo, method: :delete, data: { confirm: 'Are you sure?' } %></td>

<% (ruby表达式) %> 该符号表明可在标记中间插入ruby语句

<% =(ruby输出) %> 该符号可将ruby表达式的值转换成html输出结果

(t 'xxxx') t代表翻译函数,是translate的简写形式。该函数将输出引号所对应的值(参考前面的yml文件键值对理解)

[2]app/views/layouts/application.html.erb文件第4行

将改行改为下列代码:

<title><%= t 'memo_title' %></title>

[3]app/views/memos/index.html.erb文件第3行

将改行改为下列代码:

<h1><%=t 'memo_title' %></h1>

[4]app/views/memos/index.html.erb文件第27行

将改行改为下列代码:

<%= link_to (t 'new_memo'), new_memo_path %>

2.6 修改config/application.rb文件

取消第20行,第21行注释;并将'my'改为'config',将:de改为:zh,并添加一行代码config.encoding = 'utf-8',代码如下:

config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '*.{rb,yml}').to_s]
config.i18n.default_locale = :zh

config.encoding = 'utf-8'

这样,页面的默认显示语言就变为中文。

2.7 修改app/controllers/application_controller.rb文件

将文件代码改为以下代码:

class ApplicationController < ActionController::Base 
    protect_from_forgery 
    
    before_filter :set_locale 
    
    def set_locale 
      I18n.locale = params[:locale] || I18n.default_locale 
    end 
end 

至此,i18n配置完毕,现在已经实现了中英双语支持!

 

3 测试网页

3.1 启动服务器

$ rails server -b $IP -p $PORT 

3.2 测试默认网页

https://rails-tutorial-c9-lichcnpul.c9.io/memos,注意默认网页会自动转为中文页

3.3 测试英文网页

https://rails-tutorial-c9-lichcnpul.c9.io/memos?locale=en

3.4 测试中文网页

https://rails-tutorial-c9-lichcnpul.c9.io/memos?locale=zh

 

测试成功,至此本次国际化专题也就告一段落。敬请期待[Ruby on Rails系列]5(待定)

转载于:https://www.cnblogs.com/Kassadin/p/4012125.html

相关文章:

  • 去掉文本框的自动提示
  • oVirt专题:Hosted Engine之Engine Appliance使用(2)
  • MSA2000命令行配置信息
  • linux下的apache部署ssl证书
  • Ubuntu下deb包的安装方法
  • 个人网站转移
  • php获取post参数的几种方式
  • 开启虚拟化技术之旅----2虚拟化技术发展简史和虚拟化分类简介
  • Solr4.4的安装与配置
  • 445port入侵具体解释
  • VG.net矢量图和矢量动画开发平台拓扑图软件免费下载
  • java 线程Thread.Sleep详解(转载)
  • 解决Apache服务局域网内无法访问的情况
  • 通过分析 JDK 源代码研究 Hash 存储机制--转载
  • Linux虚机设备篇
  • 3.7、@ResponseBody 和 @RestController
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • Bootstrap JS插件Alert源码分析
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  •  D - 粉碎叛乱F - 其他起义
  • ES10 特性的完整指南
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • PAT A1017 优先队列
  • PAT A1120
  • PHP的类修饰符与访问修饰符
  • python_bomb----数据类型总结
  • Swoft 源码剖析 - 代码自动更新机制
  • 二维平面内的碰撞检测【一】
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 简单数学运算程序(不定期更新)
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​iOS安全加固方法及实现
  • # .NET Framework中使用命名管道进行进程间通信
  • (33)STM32——485实验笔记
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (LeetCode 49)Anagrams
  • (二)Linux——Linux常用指令
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (六)激光线扫描-三维重建
  • (数据结构)顺序表的定义
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (转)母版页和相对路径
  • (转)为C# Windows服务添加安装程序
  • (转载)PyTorch代码规范最佳实践和样式指南
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .NET Micro Framework初体验(二)
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .net网站发布-允许更新此预编译站点
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • [ vulhub漏洞复现篇 ] Apache APISIX 默认密钥漏洞 CVE-2020-13945