>

rails는 파싱 된 모든 번역 yml 파일을 일종의 배열/해시에 저장한다고 추측합니다. 액세스 할 수있는 방법이 있습니까?

예를 들어 파일이있는 경우 :

en:
  test_string: "testing this"
  warning: "This is just an example

I18n.translations_store [: en] [: test_string] 같은 것을 할 수 있습니까? yml 파일을 YAML :: load로 구문 분석 할 수 있지만, 제 경우에는 yml 파일을 구성을 위해 하위 폴더로 분할했으며, 레일이 이미 모든 파일을 구문 분석했음을 확신합니다.

  • 답변 # 1

    백엔드에서 개인 메서드를 호출해야합니다. 다음과 같은 방법으로 액세스 할 수 있습니다.

    translations = I18n.backend.send(:translations)
    translations[:en][:test_string] # => "testing this"
    
    

  • 답변 # 2

    8xx8의 의견에 따라 더 간단한 버전 :

    I18n.t(:foo)
    I18n.backend.send(:translations)[:en][:test_string]
    
    

    I18n.t(".")[:test_string]
    
    

    이로 인해 번역을 미리로드하거나 로케일을 지정하지 않아도됩니다.

  • 답변 # 3

    I18n::Fallbacks 를 사용하는 경우  불행히도 I18n.t('.') 를 사용할 수 없습니다  현재 로케일 (예 : 'en-GB')의 내용을 반환하고 대체 로케일 (예 : 'en')의 ​​아무것도 반환하지 않습니다. 이 문제를 해결하려면 폴백을 반복하고 deep_merge! 를 사용하십시오.  그들을 결합하기 위해.

    module I18n
      class << self
        def all
          fallbacks[I18n.locale].reverse.reduce({}) do |translations, fallback|
            translations.deep_merge!(backend.translate(fallback, '.'))
          end
        end
      end
    end
    
    

  • 답변 # 4

    기본 I18n 백엔드는 I18n :: Backend :: Simple이며 번역을 표시하지 않습니다. (I18.backend.translations는 보호 된 방법입니다.)

    이것은 일반적으로 좋은 생각은 아니지만 실제로이 정보가 필요하고 파일을 구문 분석 할 수없는 경우 백엔드 클래스를 확장 할 수 있습니다.

    class I18n::Backend::Simple
      def translations_store
        translations
      end
    end
    
    

    그런 다음 I18n.backend.translations_store 를 호출 할 수 있습니다  구문 분석 된 번역을 가져옵니다. 아마도 이것을 장기 전략으로 사용해서는 안되지만 지금 당장 필요한 정보를 얻을 수 있습니다.

  • 답변 # 5

    레이크 작업에서이 작업을 수행하는 경우 환경을 포함해야합니다. 그렇지 않으면 config/locales/ 에 사는 자신의 로케일을로드하지 않습니다.

    require "./config/environment.rb" # Do not forget this
    namespace :i18n do
      desc "Import I18n to I18n_active_record"
      task :setup do
        I18n.t(:foo)
        translations = I18n.backend.send(:translations)
      end
    end
    
    

  • 이전 rails는 activerecord - : recordnotfound를 받고 있습니다
  • 다음 c# - 파일 이름이 Excel 형식인지 알 수있는 방법이 있습니까?