Viblo Code
0

I18n Với human attibutes

Tổng quan##

Thế nào là một website hoàn hảo và thân thiện với người dùng?

Đây đều là đắn đo chung của lập trình viên và nhà phát triển khi tiến hành xây dựng một sản phẩm công nghệ thông tin. Ý tưởng là tất yếu tuy nhiên sau khi thành công ở bước cơ bản và có được sản phẩm thì làm thế nào để duy trì lượng người dùng, phát triển sản phẩm ngày càng rộng lại là vấn đề thứ yếu. Một phần quan trọng trong đó là rào cản về ngôn ngữ, nếu phá vỡ được rào cản này không chỉ là trải nghiệm của người dùng mà môi trường phải triển của sản phẩm cũng được tăng mạnh.

Tại sao sử dụng Human Attributes##

Trong khi xây dựng framework hiện đại ngày nay nhà phát triển thường tích hợp sẵn những công cụ giúp giải quyết vấn đề về ngôn ngữ. Human Attributes là một phần trong I18n để định nghĩa lại tên những object kế thừa từ class active record như model, attributes ... của framework nổi tiếng Ruby on Rails(RoR). Với I18n tất cả mọi thứ đều có thể định nghĩa tuy nhiên trong bài viết này chỉ đề cập tới human attributes giúp lập trình viên tận dụng tối đa sức mạnh của I18n, không định nghĩa thừa gây khó quản lý code.

Cài đặt##

RoR mặc định sẽ sử dụng file locals en (tiếng Anh) làm cài đặt mặc định cho ngôn ngữ của ứng dụng.

Để cài đặt một ngôn ngữ config lại trong file application.rb như sau:

config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
config.i18n.default_locale = :es

Với "es" là key tương ứng của ngôn ngữ muốn dùng.

Ví dụ:

Tiếng Anh: en
Tiếng Nhật: ja

Cách khai báo trong file locals##

Định nghĩa các biến trong locals/en.yml như dưới đây.

  • Model name
en:
  hello: "Hello world"
  activerecord:
    models:
      student: Hoc Sinh

"Student" là tên model được tạo ở file migrate.

  • Attributes
en:
  hello: "Hello world"
  activerecord:
    attributes:
      student:
        name: First Name

"name" là attributes muốn định nghĩa, thường là tên của trường trong table Student.

Cách sử dụng##

Sau khi đã định nghĩa trong file locals như trên có thể gọi ra ở bất kỳ đâu trong project với cú pháp như sau.

  • Model name
2.1.5 :011 > Student.model_name.human
 => "Hoc Sinh"
  • Attributes

2.1.5 :012 > Student.human_attribute_name("name")
 => "First Name"

Mở rộng với Nested Attributes##

Khai báo với cú pháp là model/attribute


en:
  activerecord:
    attributes:
      user/gender:
        female: "Female"
        male: "Male"

Khi đó sẽ được sử dụng như sau.

User.human_attribute_name("gender.female")

Sẽ cho ra kết quả là "Female"

Kết Luận##

Phát triển sản phẩm nói chung cũng như website nói riêng trên nền tảng đa ngôn ngữ đã, đang và sẽ luôn luôn là nhu cầu tất yếu để sản phẩm trở nên hoàn hảo. Hãy tận dụng tối đa những công cụ xây dựng sản phẩm để phát huy triệt để sức mạnh của nó.

Thank you for reading!####


All Rights Reserved