23/12/2018, 23:14

Rails I18n?

Giới thiệu t ( 'my.messages.hello' ) # same as 'my.messages.hello' t ( :hello , scope : 'my.messages' ) t ( :hello , scope : [ :my , :messages ] ) t ( 'my.messages.hello' , default : "Hello" ) Có lẽ khi gặp nhưng đoạn code trên sẽ là ...

Giới thiệu

t('my.messages.hello')

# same as 'my.messages.hello'
t(:hello, scope: 'my.messages')
t(:hello, scope: [:my, :messages])

t('my.messages.hello', default: "Hello")

Có lẽ khi gặp nhưng đoạn code trên sẽ là quen thuộc nếu ai đã và đang làm việc việc với Rails (có gi đó sai sai). Nhưng có nhưng thứ có thể chúng ta vẫn chưa thực sự hiểu về nó hay có thể áp dụng nó 1 cách dễ dàng vậy hôm nay mình sẽ tổng hợp 1 cách đơn giản nhất để mọi người có thể áp dụng nó ngay được.

I18n là gi?

Việc các trang web hiển thị với nhiều ngôn ngữ khác nhau là rất cần thiết. Quốc tế hóa trong tiếng Anh gọi là Internationalization, vì có 18 chữ cái ở giữa chữ cái i và chữ cái n nên hay được gọi ngắn gọn là i18n.

Các cách sử dụng i18n.

1. Interpolation

  • Truyền biến vào trong i18n
t('hello', name: "John")
hello: "Hello %{name}"

2. Lazy lookup

  • Bình thường chúng ta thường phải gọi i18n 1 cách dài dòng như là I18n.t books.index.title nhưng cách đó xưa rồi Rails đã hỗ trợ chúng ta việc lazy trong i18n từ đó ta có thể gọi ngắn gọn như sau:
# from the 'books/index' view
t('.title')
en:
  books:
    index:
      title: "Ruby on Rails sun *"

3. Plural

Thật thú vị đó là trong rails hỗ trợ việc tự động chia số nhiều điều đó không thể ở trong model, và nó còn thể hiện ở việc i18n:

t(:inbox, count: 1)  #=> 'one message'
t(:inbox, count: 2)  #=> '2 messages'
inbox:
  one: 'one message',
  other: '%{count} messages'

4. Time

Không nhưng phục vụ cho việc đa ngôn ngữ rails cung cấp cho chúng ta việc có thể fomat time như sau:

l(Time.now)
l(Time.now, format: :short)
en:
  time:
    formats:
      default: "%a, %d %b %Y %H:%M:%S %z"
      long: "%B %d, %Y %H:%M"
      short: "%d %b %H:%M"

5. Date

Và Date cũng vậy.

l(Date.today)
en:
  date:
    formats:
      default: "%Y-%m-%d" # 2015-06-25
      long: "%B %d, %Y"   # June 25, 2015
      short: "%b %d"      # Jun 25
NOTE: Chị có Fan cuồng mới có thể nhận ra 1 điều thú vị là đó là rails không đặt cách gọi tùy ý đó là 2 cú pháp ta thường gặp sau:             </div>
            
            <div class=
0