2011-01-20 80 views
3

我是ruby &的新手,並已開始構建應用程序。國際化最佳實踐/ Rails應用程序

我的目標是通過一種方式來構建此應用程序,我可以輕鬆地翻譯rails應用程序的內容,並在註冊用戶首選的區域顯示網站內容。

欣賞任何關於某些最佳實踐或對任何文檔的引用來閱讀的建議,以構建一個易於翻譯的Web應用程序?

謝謝, 克里希。

回答

4

查看Rails Internationalization (I18n) API。它完成你所描述的一切。

+0

感謝idlefingers。這有幫助。你有任何建議/監督/鏈接轉載的特定語言,如中文/越南/日本等,? – happyfeet 2011-01-20 10:57:02

+0

這只是某種你好的世界。 當你有完全不同的語言(比如說:英語,俄語,阿拉伯語,中文)時,沒有描述如何組織文件/後端/ locale_data的實踐 - 這是一個非常複雜的問題,我猜(英文很簡單,不像其他語言那些)。 – DeTeam 2013-04-26 09:34:49

3

也檢查出Globalize3,它成爲模型翻譯的標準。很有用。

+0

將檢查出Mirko。謝謝! – happyfeet 2011-01-20 13:14:01

3

您可以使用ready_for_i18n插件將您的erb轉換爲所需的形式。它可以節省一些時間。

+0

肯定會試試艾瑪。這看起來很有趣。謝謝! – happyfeet 2011-01-20 13:13:32

0

下面是我通過Rails應用程序的國際化工作,同時注意一些小技巧或最佳實踐。 (有些可能現在已經過時)。

在我進入名單這裏的本地化和翻譯之間的一些澄清,這是對我很有幫助:

定義:

應用本地化和翻譯模型是分開的擔憂。找出你需要的是哪一個(或兩者)。

我在這裏用他們的方式:

  • 應用本地化:本地化您的應用程序的語言環境。

  • 模型翻譯:將您的模型/數據翻譯成語言。

例子:給我資源的法語翻譯(模型轉換)在我的西班牙語網站(應用本地化)

我用Globalize爲模型的翻譯。

溫馨提示/最佳實踐:

以下一些顯然只是有用的技巧在Rails的全球化時代+的環境中工作的同時,他們中的一些可能比...可能是最佳做法的詳細。

  • I18n.locale引用並設置應用的區域設置。使用全球化時,Globalize.locale引用並設置模型/數據轉換的區域設置。

  • 對每個請求都設置I18n.localeGlobalize.locale。由於這些變量設置爲Thread,它將避免一些難以複製的錯誤。

  • Globalize.locale設置爲I18n.locale剛好在設置I18n.locale之後。這允許模型翻譯默認爲應用程序的語言環境。 (在我的西班牙網站上,我預計數據默認爲西班牙文)。

  • 更改Globalize.locale(而不是I18n.locale)更改模型翻譯。

  • 重置I18n.localeGlobalize.locale每次測試後。在rspec的

    RSpec.configure do |config| 
        config.after(:each) do 
        I18n.locale = :en 
        Globalize.locale = :en 
        end 
    end 
    
  • 要麼使用子域名,或在URL子文件夾指的是應用程序的語言環境。

  • 使用語言參數來指定數據的語言。

  • 當您在Rails應用程序時,您可能會使用default_url_options使用I18n.locale爲您的路線/路徑的助手默認的語言環境參數。但是這在測試中不起作用。我在rspec-rails上找到了一個來自this github問題的解決方案。

    我猴子補丁ActionDispatch::Routing::RouteSet像這樣:

    class ActionDispatch::Routing::RouteSet 
        def url_for_with_locale_fix(options={}) 
        url_for_without_locale_fix(options.merge(:locale => I18n.locale)) 
        end 
    
        alias_method_chain :url_for, :locale_fix 
    end 
    
  • 建立一個翻譯助手t周圍的I18n.t方法的包裝

    module I18nHelper 
        def t string, options = {} 
        I18n.t string, options 
        end 
    end 
    
    RSpec.configure do |config| 
        config.include I18nHelper 
    end 
    
相關問題