为网站添加多种语言

摘要:
例如,您编写了西班牙语配置文件es.yml1es:2345store:6index:7title.html:“SuCatálogodePragmatic”8add_html:“A&ntide;adiralCarrito”这里的西班牙语需要使用转义字符来显示,键盘无法直接键入,如果您将变量名称写成title或add而不是title_html和add_html,它就无法解析实际的西班牙语!只需要等待A&ntide;adiralCarrito的原始文本输出到网页。回想起好了,现在是关于如何修改多语言环境的问题。切换的最简单方法是在网页中添加相应的后缀。例如,如果网站是localhost:3000,那么如果您想显示适当的版本,它是localhost:3000/en,中文后面自然是cn,但不方便直接在地址栏中输入和丢失!

首先在项目文件夹下的config\initializers增加一个i18n.rb的文件、i18n是什么、就是英文单词国际化的意思、为了日常方便而简写成i18n、因为这单词一共有20个字母、包括i和n、

1 #encoding: utf-8
2 I18n.default_locale = :en
3
4 LANGUAGES = [
5 ['English', 'en'],
6 ["Español".html_safe, 'es'],
7 ["中文", 'cn']
8 ]

在里面写下如下的内容、第一行是必须的、保证ruby解释器以utf-8来解析文字、而且要放在第一行、切记切记、第二行就是指定网站的默认文字选择、狠显然、这里默认是显示英文、之后LANGUAGES下面的是可以自己随便填的、并不是系统的特定关键字、到时做成语言切换器时就会显示前面的、后面那两个字母是缩写、比如['English', 'en']、前面是显示出来给别人看的、后面是为了写代码方便的简化符号、添加好需要加入的多国语言、然后保存、重启服务器、记得要重启、不然效果不会生效、

P.S.:对了第6行是西班牙语、直接用键盘打不出来、需要转义符号、其中的$ntilde;便是转义码、后面的.html_safe表示让浏览器使用转义器来显示出正常的西班牙文、

然后去config/routes.rb这里搞搞

 1 scope '(:locale)' do
2 resources :users
3 resources :orders
4 resources :line_items
5 resources :carts
6 resources :products do
7 get :who_bought, :on => :member
8 end
9 root :to => 'store#index', :as => 'store'
10 end

主要就是在迩需要切换国际化语言的页面上限定一个范围、这里从2到9行都是限定范围、使用scope '(:locale)' do和end来确定这个范围

然后再去app/controllers/application_controller.rb这里搞搞

 1 before_filter :set_i18n_locale_from_params
2 # ...
3 protected
4 def set_i18n_locale_from_params
5 if params[:locale]
6 if I18n.available_locales.include?(params[:locale].to_sym)
7 I18n.locale = params[:locale]
8 else
9 flash.now[:notice] =
10 "#{params[:locale]} translation not available"
11 logger.error flash.now[:notice]
12 end
13 end

对了、还漏了一段

def default_url_options
{:locale => I18n.locale}
end

这些里面是干啥就不深究了、照抄就是了

然后就无非是在app/view的各种模版页html.erb和config\locales下面的语言配置文件里添加各种语言了、这里举一个例子

 1 <% if notice %>
2 <p id="notice"><%= notice %></p>
3 <% end %>
4
5 <h1>Your Pragmatic Catalog</h1>
6
7 <% @products.each do |product| %>
8 <div class="entry">
9 <%= image_tag(product.image_url) %>
10 <h3><%= product.title %></h3>
11 <%= sanitize product.description %>
12 <div class="price_line">
13 <span class="price"><%= number_to_currency(product.price) %></span>
14
15
16 <%= button_to “Add to Cart”, line_items_path(:product_id => product),:remote => true %>
17 </div>
18 </div>
19 <% end %>

把这里的第5行和第16行改成

<h1><%= t('.title_html') %></h1>

<%= button_to t('.add_html'), line_items_path(:product_id => product),:remote => true %>

然后再在config\locales添加迩需要的语言配置文件、比如按本文的约定是西班牙文es、英文是en、中文是cn、所以就需要在这里分别创建cn.yml、en.yml、es.yml

英文的en.yml

1 en:
2
3 store:
4 index:
5 title_html: "Your Pragmatic Catalog"
6 add_html: "Add to Cart"

注意这个yml格式文件非常的娇气、迩需要严格的保持层次间的缩进、下级的一定要在上级的后面、不然程序对不上号说找不到就麻烦了、真跟Python一个脾气出来的、这里就比较好明白了、en:表示一个语言类别、必须放在最前的层级、下面就是store和index、这也是对应着文件的目录的、因为莪们修改的这个文件就在app\views\store、这回明白了吧、然后title_html就对应着在模版页修改的<h1><%= t('.title_html') %></h1>、t是限定语、不能随便改、title_html按理来说也是个随便迩自己起的变量名、但其实是有差别的!!比如迩写了西班牙文的配置文件

es.yml

1 es:
2
3
4
5 store:
6 index:
7 title_html: "Su Cat&aacute;logo de Pragmatic"
8 add_html: "A&ntilde;adir al Carrito"

这里的西班牙文由于需要用到转义字符来显示、键盘直接打不打出的、如果迩的变量名写成title或者add而不是title_html和add_html、它是解析不出实际的西班牙文的!而是照着把A&ntilde;adir al Carrito原文输出到网页中、切记啊!!



好了、现在关于怎么修改多语言环境也差不多了、讲一下最简单的切换方法、就是在网页中加入相应的后缀、比如网站是localhost:3000、那么想显示应该版便是localhost:3000/en、中文自然是跟cn、可总不能这样直接在地址栏里输来输去、不方便!所以莪们做个切换的菜单、

打开app\views\layouts的application.html.erb、添加以下的代码

1   <%= form_tag store_path, :class => 'locale' do %>
2 <%= select_tag 'set_locale',
3 options_for_select(LANGUAGES, I18n.locale.to_s),
4 :onchange => 'this.form.submit()' %>
5 <%= submit_tag 'submit' %>
6 <%= javascript_tag "$$('.locale input').each(Element.hide)" %>
7 <% end %>

放在相应的地方就行了、比较好看的是放在上面顶端、容易让人看到、就会产生了一个下拉的菜单栏、而菜单栏里的内容取决于迩在项目文件夹下的config\initializers的i18n.rb文件、LANGUAGES里的内容就是在这里控制的、至于为什么放在application.html.erb、这个地球人都知道了、因为这个是所有模版的母版页、也就是说在任何本站的页面都可以使用这个下拉切换菜单、但这步只是做个样子、还没实际的作用、还要在controller页添加相关的逻辑、

打开app/controllers/store_controller.rb文件、把里面的index方法修改一下

1   def index
2 if params[:set_locale]
3 redirect_to store_path(:locale => params[:set_locale])
4 else
5 @products = Product.all
6 @cart = current_cart
7 end
8 end

OK、大功告成、试下吧、觉得这位置不满意就去css样式表那里改




免责声明:文章转载自《为网站添加多种语言》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇解决sublime安装插件被墙失败的方法百度竞价门再跟踪:违规医疗广告数量仍大幅增加下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

flask的配置设置的几种方式

Flask的配置对象(config)是一个字典(dict)的子类(subclass),所以你可以把配置用键值对的方式存储进去。 1、一些重要的配置,可以设置在系统环境变量里,又或者放到某个服务器里,用的时候下载配置文件并读取配置 #在linux系统里设置环境变量 export MAIL_USERNAME=me@greyli.com #用的时候取环境变量...

WORD转HTML-python第三方包Mammoth(官方文档翻译)

Mammoth 官方 Mammoth可用于将.docx文档(比如由Microsoft Word创建的)转换为HTML。Mammoth致力于通过文档中的语义信息生成简洁的HTML,而忽略一些其他细节。例如,Mammoth会把带有“Heading 1”样式的所有段落转换为“h1”元素,而不是试图精确地复制标题的所有样式(字体、字号、颜色等)。 .docx使用的...

python基础整理6——爬虫基础知识点

 爬虫基础 什么是爬虫: 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。 通用爬虫和聚焦爬虫 根据使用场景,网络爬虫可分为 通用爬虫 和 聚焦爬虫 两种. 通用爬虫 通用网络爬虫 是 捜索引擎抓取系...

为npm设置代理

npm全称为Node Packaged Modules。它是一个用于管理基于node.js编写的package的命令行工具。其本身就是基于node.js写的,这有点像gem与ruby的关系。 在我们的项目中,需要使用一些基于node.js的javascript库文件,就需要npm对这些依赖库进行方便的管理。由于我们的开发环境由于安全因素在访问一些网站时需要...

python3 爬去QQ音乐

1 import requests 2 import re 3 import json 4 import os 5 6 7 8 def get_name(singer): 9 url = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp' 10...

kernel编译

Linux内核编译与安装 Linux内核介绍 Linux内核是一个用C语言写成的,符合POSIX标准的类Unix操作系统。内核是操作系统中最基本的一部分,提供了众多应用程序访问计算机硬件的机制。Linux内核的一大特点就是采用了整体式结构,有很多过程组成,每个过程都可以独立编译,其模块机制又湿得内核保持独立而又易于扩充。Linux发行版实在Linux内核的...