Rails 訊息資源的國際化(I18n)
一、概述
Rails 已經完成了資源國際化的內部實現,我們只需要在配置檔案中開啟 I18n,並寫相應語種的資原始檔就可以了。
二、例子演示
1、開啟I18n
建立一個配置檔案,用於存放本地化的資訊( RailsProject> config/initializers/i18n.rb),檔案內容如下:
I18n.default_locale = 'zh'
LOCALES_DIRECTORY = "#{RAILS_ROOT}/config/locales/"
LANGUAGES = {
'English' => 'en',
'Chinese' => 'zh'
}
引數解釋:
I18n.default_locale 指定預設的本地語言
LOCALES_DIRECTORY 指定存放多國語言檔案的目錄
LANGUAGES 儲存所支援語種
2、在layout檔案中加入一個下拉框,給用於提供語種選擇(RailsProject> app/views/layouts/base.rhtml ),新增程式碼如下:
<% form_tag '', :method => 'GET', do %>
<%= select_tag 'locale', options_for_select(LANGUAGES, I18n.locale),
:on
Rails 已經完成了資源國際化的內部實現,我們只需要在配置檔案中開啟 I18n,並寫相應語種的資原始檔就可以了。
二、例子演示
1、開啟I18n
建立一個配置檔案,用於存放本地化的資訊( RailsProject> config/initializers/i18n.rb),檔案內容如下:
I18n.default_locale = 'zh'
LOCALES_DIRECTORY = "#{RAILS_ROOT}/config/locales/"
LANGUAGES = {
'English' => 'en',
'Chinese' => 'zh'
}
引數解釋:
I18n.default_locale 指定預設的本地語言
LOCALES_DIRECTORY 指定存放多國語言檔案的目錄
LANGUAGES 儲存所支援語種
2、在layout檔案中加入一個下拉框,給用於提供語種選擇(RailsProject> app/views/layouts/base.rhtml ),新增程式碼如下:
<% form_tag '', :method => 'GET', do %>
<%= select_tag 'locale', options_for_select(LANGUAGES, I18n.locale),
:on
change => 'this.form.submit()' %>
<%= submit_tag 'submit' %>
<% end %>
註解:LANGUAGES 就是剛在配置檔案中宣告的LANGUAGES
3、建立一個前置過濾器,用於設定本地化語言(RailsProject> app/controllers/application.rb),程式碼如下:
class ApplicationController < ActionController::Base
<%= submit_tag 'submit' %>
<% end %>
註解:LANGUAGES 就是剛在配置檔案中宣告的LANGUAGES
3、建立一個前置過濾器,用於設定本地化語言(RailsProject> app/controllers/application.rb),程式碼如下:
class ApplicationController < ActionController::Base
layout "base"
before_filter :set_locale
...........
protected
def set_locale
session[:locale] = params[:locale] if params[:locale]
I18n.locale = session[:locale] || I18n.default_locale
locale_path = "#{LOCALES_DIRECTORY}#{I18n.locale}.yml"
unless I18n.load_path.include? locale_path
I18n.load_path << locale_path
I18n.backend.send(:init_translations)
end
rescue Exception => err
logger.error err
flash.now[:notice] = "#{I18n.locale} translation not available"
I18n.load_path -= [locale_path]
I18n.locale = session[:locale] = I18n.default_locale
end
end
4、用I18n.translate方法(簡寫I18n.t,甚至t),將頁面中寫死的字串替換掉(RailsProject> app/views/layouts/base.rhtml),程式碼如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
5、在存放多國語言目錄下加入各種語種檔案
RailsProject> config/locales/zh.yml 程式碼如下
zh:
base:
title: "演示Rails的國際化支援"
RailsProject> config/locales/en.yml 程式碼如下
en:
base:
title: "Show Rails internationalization support"
至此,重啟伺服器,你就可以看到雙語網站了。
before_filter :set_locale
...........
protected
def set_locale
session[:locale] = params[:locale] if params[:locale]
I18n.locale = session[:locale] || I18n.default_locale
locale_path = "#{LOCALES_DIRECTORY}#{I18n.locale}.yml"
unless I18n.load_path.include? locale_path
I18n.load_path << locale_path
I18n.backend.send(:init_translations)
end
rescue Exception => err
logger.error err
flash.now[:notice] = "#{I18n.locale} translation not available"
I18n.load_path -= [locale_path]
I18n.locale = session[:locale] = I18n.default_locale
end
end
4、用I18n.translate方法(簡寫I18n.t,甚至t),將頁面中寫死的字串替換掉(RailsProject> app/views/layouts/base.rhtml),程式碼如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
<html>
<head>
<title><%= I18n.t 'base.title' %></title>
</head>
<body>
............
</body>
</html>
<head>
<title><%= I18n.t 'base.title' %></title>
</head>
<body>
............
</body>
</html>
5、在存放多國語言目錄下加入各種語種檔案
RailsProject> config/locales/zh.yml 程式碼如下
zh:
base:
title: "演示Rails的國際化支援"
RailsProject> config/locales/en.yml 程式碼如下
en:
base:
title: "Show Rails internationalization support"
至此,重啟伺服器,你就可以看到雙語網站了。
相關文章
- MasaFramework -- i18n (國際化)Framework
- jquery i18n(前端國際化)jQuery前端
- Laravel 後臺如何返回國際化的訊息Laravel
- nuxt2 國際化i18n使用UX
- 對國際化 i18n 專案的一點思考
- Android中的資源與國際化!Android
- vue中如何使用i18n實現國際化Vue
- Java Struts2 本地化/國際化(i18n)淺析Java
- 現代 Vue 工程之「國際化 i18n 開發」Vue
- springMVC專案國際化(i18n)實現方法SpringMVC
- Angular primeNg i18n 國際化多語言處理Angular
- 使用spring實現資源國際化Spring
- NG客制專案下的I18n國際化標準方案
- Angular 18+ 高階教程 – 國際化 Internationalization i18n (Draft)AngularRaft
- 使用Vue i18n對前端頁面進行國際化處理Vue前端
- 使用Angular-CLI釋出一個i18n(國際化)應用(譯)Angular
- ActiveMQ 訊息資料持久化MQ持久化
- Struts2【UI標籤、資料回顯、資源國際化】UI
- 從原始碼MessageSource的三個實現出發實戰spring·i18n國際化原始碼Spring
- 讓資料不只限於資料庫,國際化開源團隊需要你的加入資料庫
- 黃東旭提出:“最好的國產化是國際化。” 而開源社群
- java國際資源化檔案配置j2se+j2eeJava
- Java中的國際化Java
- Struts框架的國際化框架
- ActiveMQ持久化訊息MQ持久化
- 國際化思考
- ios國際化iOS
- 訊息驅動bean使用資料來源問題Bean
- ActiveMQ 中的訊息持久化(二)MQ持久化
- ActiveMQ 中的訊息持久化(一)MQ持久化
- JAVA的國際化機制Java
- 常見開源訊息系統
- Java 國際化(一)Java
- Android國際化Android
- Jsf國際化JS
- vue3國際化、vue3實現多語言切換、vue3使用i18nVue
- iOS 國際化 && 本地化iOS
- iOS國際化(本地化)iOS