Localization with ActiveRecord and Decorator in Rails

work hard, rest well

zagdsuren.b
Unimedia Solutions
4 min readJul 9, 2019

--

Өмнөх нийтлэл дээрээ манай компани Rails дээр хөгжүүлэлт хийдэг тухай дурдсан билээ.

Энэ удаа Rails дээр localization буюу олон орны хэл дээр үзүүлэх програмын хөгжүүлэлт хийхэд анхаарах зүйлс байсан тул түүнийгээ хуваалцахаар шийдлээ.

Localization гэж юу вэ?

Localization нь хөгжүүлж буй програмыг олон орны хэл дээр үзүүлэхэд хялбар болгон хэрэглэгчид үзэгдэх текстийг тусад нь салган уншиж арчлахад хялбар болгодог.

Энэхүү аргачлалын тухай энгийн ашиглалтын талаар энд дурдалгүй өөр анхаарах зүйлсийн талаар бичих тул доорх линкээр дэлгэрэнгүйг уншаарай.

“Юу? Тэгвэл юуны тухай гэж?” та бодож байж магадгүй юм. Энд хэрхэн уншихад хялбар болон арчлахад амар байх талаар дурдана.

Localization дээр анхаарах зүйлс

Бид стандарт locale ашиглах үедээ өөрсдөд байгаа сонголтуудаа мэдэлгүй урсгалаараа хөгжүүлэлт хийснээр заримдаа доорх асуудлуудтай тулгардаг.

  • Нэг файлд бүх текстийг оруулснаас болж файлын хэмжээ их болох, хэрэгтэй зүйлээ хайж олох нь төвөгтэй болдог.
  • Нэг файлд зохион байгуулалт муутайгаас болж ижил текстийг олон давтах, эсвэл ижил текст боловч ашиглагдах хэлбэр нь тусдаа зүйлсийг хүчээр нэг болгон ашиглах зэрэг алдаанууд гаргадаг.

Localization-ийн файлыг хуваах

Locale-ийн файлыг зорилгоор нь хувааж өгснөөр хэрэгтэй мэдээллээ хайх болон шинэчлэхэд амар болдог. Ингэж хуваахын тулд эхлээд олон тусдаа файлуудыг нэгтгэн дуудах тохиргоог хийж өгнө.

i18n.rb гэсэн тохиргооны файлыг нэмж хэрэгцээнээс хамааран доорхтой төстэй код нэмж өгнө.

config/initializers/i18n.rb

Locale-ийн файлыг дараах байдлаар хавтасуудад хуваана.

Тус тусын орны хавтсанд зорилгоор нь салган текст файлуудыг байршуулна. Ингэснээр олон тусдаа зорилготой текст файлуудаас текст авах боломжтой болно. Дээрх текст файлуудын хуваарилалт нь миний хувийн өнцгөөс харж хуваасан хуваалт тул уншигч та өөртөө тохирохоор нэрлэн хуваагаарай.

Default locale файл ашиглах

Github дээр өргөн ашиглагддаг текстийг оруулсан байдаг бөгөөд үүнийг авч ашигласнаар ихэнх текст тухайн хэлээр харуулах боломжтой болно. Энэхүү файлыг https://raw.githubusercontent.com/svenfuchs/rails-i18n/master/rails/locale/mn.yml хаягаар авч болох бөгөөд файлын нэрийг default.yml болгож өөрчилж ашиглана. Мөн mn -ийг нь тухайн орны түлхүүр үгээр солиж хүссэн улсынхаа locale-ийг авч болно.

ActiveRecord-ийн текст ашиглах

Ruby On Rails i18n дээр ActiveRecord-ийн текстийг хэрхэн ашиглах тухай байдаг боловч тэрхүү ашиглах заавраар нь биш i18n-ээр дуудан ашиглах явдал элбэг гардаг. Үүнийг зааврын дагуу моделиор нь ашиглах хэрэгтэй.

Моделийн нэрийг авахдаа

Моделийн талбарын нэрийг авахдаа

гэж тус тус авна.

Жишээ нь доорх текст файл тодорхойлогдсон байг.

config/locales/mn/activerecord.yml

Доорх байдлаар код дотор текстийг авна.

Модель дээр enum ашиглах үед түүний тус тусын текст авахын тулд ApplicationRecord дээр текст гаргах аргыг тодорхойлоод хэрэглэх газар нь өгөгдлийн классын нэгэн хэсэг гэж ашиглана.

app/models/application_record.rb

Өгөгдлийн класс дээр enum тодорхойлно.

Доорх байдлаар код дотор текстийг авна.

ActiveRecord-ийг Decorator хийх

Өгөгдлийн утгаас хамаарч дэлгэцэд үзүүлэх текст болон загвар нь өөрчлөгдөх шаардлага гардаг ба түүнийг ихэнхдээ хуудсын код дотор нөхцөл шалган өөрчлөх код бичиж оруулдаг. Энэ нь ижил код давтан бичих, уншиж арчлахад төвөгтэй болгох зэрэг сөрөг үр дагавар дагуулдаг. Үүнийг шийдэхдээ helper class эсвэл helper method тодорхойлж өгөх нь байх боловч decorator ашиглах нь зөв шийдэл байдаг.

Decorator нь өгөгдлийн классын нэгэн хэсэг болж орж ирснээрээ ашиглахад ойлгомжтой болдог.

Decorator ашиглахдаа active_decorator gem ашигласан. Тиймээс gem-ийг Gemfile-д нэмж өгнө.

Энэхүү gem-ээ ажиллагаанд оруулахын тулд прожектдоо дараах командыг ажиллуулна.

Decorator файлаа app/decorators/ хавтсанд харгалзах моделийн класс нэр дээр decorator нэмэн үүсгэнэ.

app/decorators/book_decorator.rb

Доторх tr_style функц нь ном хэрэглэгч авсан эсэхээс хамааран мөрийн өнгийг доорхоор солиход ашиглана.

Харгалзах загварын файл нь доорхоор тодорхойлно.

Доорх байдлаар код дотор текстийг авна. book нь ном моделийн объект.

Төгсгөлд нь жишээ програмын файлуудыг цэгцлэн үзүүлье.

хавтасуудын байршил
config/locales/mn/activerecord.yml
config/locales/mn/general.yml
config/locales/mn/view.yml
app/views/books/index.hml.slim

index.html.slim дээр хэрхэн текстүүд авч байгааг товч тайлбар хийе.

  • 1-р мөрөнд гарчгийг авахдаа номын моделийн нэрийг оруулж ашиглаж байна.
  • 2-р мөрөнд view.yml-д тодорхойлсон хуудсанд зориулсан текст авч байгаа тул бичлэгийг богиносон бичиж ашиглаж байна.
  • 9, 10, 11-р мөрөнд моделийн талбарын нэрийг ашиглан хүснэгтийн толгойг гаргаж байна.
  • 15-р мөрөнд ном зээлсэн байдлаас хамаарч хүснэгтийн мөрийн классын текстийг decorator ашиглан оруулж байна.
  • 17-р мөрөнд ном зээлсэн байдлаас хамаарч enum-д харгалзах текстийг гаргаж байна.

Дээрх код үзүүлж байгаа дэлгэц нь доорх байдлаар харагдана.

Төгсгөлийн үг

Энэхүү locale ашиглах аргачлал нь олон янзаар ашиглаж үзсэний үр дүнд хамгийн ойлгомжтой гэж санагдсан хувилбар маань юм. Хэрэв уншигч танд илүү сайжруулах боломж байгаа санагдвал түүгээрээ сайжруулан ашиглаарай.

Эх сурвалжууд

--

--