SORU
29 Mayıs 2011, Pazar


i18n Çoğullaştırma

Rails i18n içinde pluralized dizeleri çevirmek mümkün olmak istiyorum. Bir dize olabilir :

You have 2 kids 
or 
You have 1 kid

Pluralize yardımcı yöntem kullanabilirsiniz biliyorum, ama benim görüşlerim ile gelecekte herhangi bir noktada uğraşmak zorunda değilim ki i18n çeviriler bu gömmek istiyorum. :Sayım bir şekilde çoğul çevirileri için kullanılır, ama hayata ne kadar ilgili hiçbir kaynak bulamıyorum okudum.

Çeviri bir dize bir değişken geçmek biliyorum, dikkat edin. Ben de böyle bir şey denedim :

<%= "#{t 'misc.kids', :kids_num => pluralize(1, 'kid') }" %>

Gayet iyi çalışıyor, ama aynı fikri temel bir sorun vardır. String 'çocuk' pluralize Yardımcısı. belirtmek gerek Gelecekte görüntülemek sorunlara yol açacaktır, çünkü bunu yapmak istemiyorum. Bunun yerine çeviri her şeyi tutmak ve görünümünde bir şey istiyorum.

Bunu nasıl yapabilirim ?

CEVAP
29 Mayıs 2011, Pazar


Bunu deneyin:

en.yml :

en:
  misc:
    kids:
      zero: no kids
      one: 1 kid
      other: %{count} kids

Bir görünüm:

You have <%= t('misc.kids', :count => 4) %>

Birden fazla çoğullaştırma (Raylar 3.0.7 ile test): diller için güncelleştirilmiş bir cevap

Dosyaconfig/initializers/pluralization.rb:

require "i18n/backend/pluralization" 
I18n::Backend::Simple.send(:include, I18n::Backend::Pluralization)

Dosyaconfig/locales/plurals.rb:

{:ru => 
  { :i18n => 
    { :plural => 
      { :keys => [:one, :few, :other],
        :rule => lambda { |n| 
          if n == 1
            :one
          else
            if [2, 3, 4].include?(n % 10) && 
               ![12, 13, 14].include?(n % 100) && 
               ![22, 23, 24].include?(n % 100)

              :few 
            else
              :other 
            end
          end
        } 
      } 
    } 
  } 
}

#More rules in this file: https://github.com/svenfuchs/i18n/blob/master/test/test_data/locales/plurals.rb
#(copy the file into `config/locales`)

Dosyaconfig/locales/en.yml:

en:
  kids:
    zero: en_zero
    one: en_one
    other: en_other

Dosyaconfig/locales/ru.yml:

ru:
  kids:
    zero: ru_zero
    one: ru_one
    few: ru_few
    other: ru_other

Test:

$ rails c
>> I18n.translate :kids, :count => 1
=> "en_one"
>> I18n.translate :kids, :count => 3
=> "en_other"
>> I18n.locale = :ru
=> :ru
>> I18n.translate :kids, :count => 1
=> "ru_one"
>> I18n.translate :kids, :count => 3
=> "ru_few"  #works! yay! 
>> I18n.translate :kids, :count => 5
=> "ru_other"  #works! yay! 

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BDGcustoms

    BDGcustoms

    24 NİSAN 2011
  • BigBoyTV

    BigBoyTV

    25 EYLÜL 2013
  • The Onion

    The Onion

    14 Mart 2006