ការប្រើប្រាស់ Translation នៅក្នុង Symfony3

វគ្គ internationalization សំដៅទៅលើដំណើរការនៃ Abstracting strings និងចំណែកជាក់លាក់ផ្សេងទៀតនៃ application របស់អ្នក ទៅកាន់ស្រទាប់ដែលជាកន្លែងដែលពួកគេអាចធ្វើការបកប្រែនិងបានបំលែងដោយផ្អែកទៅលើមូលដ្ឋានអ្នកប្រើប្រាស់។

tran1

ក្នុងមេរៀននេះ អ្នកនឹងរៀនអំពីរបៀបនៃការប្រើប្រាស់ Translation component ក្នុង Symfony Framework ។ អ្នកអាចរៀនបន្ថែមទៀតតាមរយៈការអាននូវ Translation component documentation ។ ជាទូទៅ ដំណើរការគឺមានដំណាក់កាលមួយចំនួនដូចជា៖

ទី១ បើកនិងធ្វើការ configure នូវ translation service របស់ Symfony

ទី២ Abstract strings ដោយធ្វើការខ្ចប់ពួកវាទៅក្នុងការហៅ Translator (“Basic Translation”)

ទី៣ បង្កើត translation resources/ files សម្រាប់មូលដ្ឋានដែលគាំទ្រនីមួយៗដែលបកប្រែនូវសារនីមួយៗក្នុង application

ទី៤ កំណត់, ដាក់និងគ្រប់គ្រងនូវមូលដ្ឋាននៃអ្នកប្រើប្រាស់ សម្រាប់ការស្នើនិងជម្រើសរបស់អ្នកប្រើប្រាស់

១) ការ configuration

Translation គឺក្ដោបក្ដាប់ដោយtranslator service ដែលអោយអ្នកប្រើប្រាស់ធ្វើការរកមើលនិងបញ្ចូននូវសារដែលបានបកប្រែរួច។ មុននឹងប្រើវា សូមធ្វើការបើក translator ក្នុងconfiguration របស់អ្នក៖

tran2

២) មូលដ្ឋានគ្រឹះនៃ Translation

Translation នៃអត្ថបទគឺបញ្ចប់ដោយ translator service ។ ដើម្បីបកប្រែនូវប្លុកណាមួយនៃអត្ថបទគឺប្រើប្រាស់នូវ trans() method។ ឧបមាថាអ្នកកំពុងបកប្រែសារធម្មតាមួយពីក្នុង controller៖

tran3

ពេលដែលកូដនេះដំណើរការ Symfony នឹងប៉ងធ្វើការបកប្រែសារ “Symfony is great” ដោយផ្អែកលើ locale នៃអ្នកប្រើប្រាស់។ ដើម្បីអោយវាធ្វើការ អ្នកត្រូវប្រាប់ទៅ Symfony អំពីរបៀបបកប្រែនូវសារតាមរយៈ “translation resource” ដែលជាធម្មតា file ដែលផ្ទុកនូវការប្រមូលផ្ដុំនៃការបកប្រែ។ វចនានុក្រម នៃការបកប្រែនេះអាចបង្កើតបានក្នុងទម្រង់ផ្សេងគ្នាជាច្រើន ហើយទម្រង់ដែល គួរណែនាំនោះគឺ XLIFF៖

tran4

៣) ដំណើរការនៃការបកប្រែ

Symfony ប្រើប្រាស់ដំណើរការសាមញ្ញនៅក្នុងការបកប្រែសារគឺ៖

ទី១ Locale នៃអ្នកដែលទើបនឹងប្រើប្រាស់ គឺជាកន្លែងដែលរក្សាទុកនៅលើការស្នើនូវត្រូវបានកំណត់

ទី២ ក្រុមនៃសារដែលបានបកប្រែគឺយកពី translation resources កំណត់សម្រាប់ locale ។ សារពី fallback locale ក៏ត្រូវបានយកនិងបន្ថែមទៅកាន់ក្រុម ប្រសិនបើពួកគេមិនទាន់មាន។ លទ្ធផលចុងក្រោយគឺ វចនានុក្រមដ៏ធំ នៃការបកប្រែ។

ទី៣ ប្រសិនបើសារគឺស្ថិតក្នុងក្រុមនេះ គឺការបកប្រែគឺត្រូវបានបញ្ជូនត្រលប់មក តែបើអត់នោះ translator នឹងបញ្ជូនត្រលប់មកនូវសារដើមមកវិញ។

ពេលប្រើ trans() method គឺ Symfony មើលទៅលើ អក្សរដែលនៅខាងក្នុងក្រុមនៃសារនិងបញ្ជូនវាមក។

៤) កន្លែងដាក់សារ

ពេលខ្លះ សារកំពុងផ្ទុកនូវ អញ្ញតិដែលត្រូវការបកប្រែ៖

tran5

តែទោះជាយ៉ាងណា, ការបង្កើតការបកប្រែសម្រាប់អក្សរនេះគឺមិនអាចទៅរួចទេចាប់តាំងពី translator ព្យាយាមរកមើលសារពិតប្រាកដ បញ្ចូលនូវអថេរ (ឧទា៖ Hello Ryan រឺក៏ Hello Fabien)។

៥) ពហុវចនៈ

ផលវិបាកមួយទៀតគឺពេលអ្នកមានការបកប្រែដែលអាចនិងមិនអាចជាពហុវចន ដោយផ្អែកលើអថេរខ្លះ៖

tran6

ដើម្បីធ្វើដូចនេះគឺត្រូវប្រើ transChoice() method រឺ transchoice tag/filter ក្នុង template របស់អ្នក។ ដើម្បីលម្អិតអំពីវា សូមអាននូវ Pluralization ក្នុង Translation component documentation។

៦) ការបកប្រែក្នុង Templates

ក) Twig Templates

Symfony បានផ្ដល់នូវ Twig tags យ៉ាងជាក់លាក់ (trans និង transchoice) ដើម្បីជួយនូវការបកប្រែសារនៃប្លុកនៃអត្ថបទ។

tran7

Transchoice tag ទទួលនូវអថេរ %count% ដោយស្វ័យប្រវត្តិពីអត្ថបទបច្ចុប្បន្ននិងបោះវាទៅកាន់ translator ។ អ្នកអាចបញ្ជាក់អាស័យដ្ឋាននៃសារអោយបានជាក់លាក់និងបោះអថេរខ្លះទៅអោយវា។

tran8

Trans និង transchoice filters អាចនឹងប្រើដើម្បីបកប្រែ អថេរ និង កន្សោមដែលសាំញ៉ាំ៖

tran9

ខ) PHP Templates

Translator service គឺធ្វើការចូលទៅក្នុង PHP templates តាមរយៈ translator helper៖

tran10

៧) ប្រភពនៃ Translation / ឈ្មោះ file និងទីតាំង

Symfony មើលទៅឯកសារនៃសារ ក្នុងទីតាំងដូចខាងក្រោម៖

១) កញ្ចប់ app/Resources/translations

២) កញ្ចប់ app/Resources/<bundle name>/translations

៣) កញ្ចប់ Resources/translations/ ខាងក្នុង bundle

ទីតាំងដែល list នេះជាមួយនឹងអាទិភាពដំបូងគេ។ អ្នកអាចធ្វើការ override នូវការបកប្រែសារនៃ bundle ក្នុងកញ្ចប់២ខាងលើផ្សេងទៀត។

ឈ្មោះ file នៃ translation files គឺសំខាន់ណាស់ គឺfile នៃសារនីមួយៗត្រូវតែមានឈ្មោះស្របទៅនឹងទីតាំង ៖ domain.locale.loader

ក) domain ៖ ជាជម្រើសមួយដែលរៀបចំសារទៅក្នុងក្រុម

ខ) locale ៖ មូលដ្ឋានដែលស្ថិតនៅ ឧទាហរណ៏ដូចជា en_GB, en

គ) loader ៖ របៀបដែល Symfony គួរតែ load និង ញែក file

Loader អាចជាឈ្មោះនៃ loader ដែលបានចុះឈ្មោះរួច។ Symfony បានផ្ដល់នូវ loaders មួយចំនួនរួមមាន៖

ក) xlf ជា XLIFF file

ខ) php ជា PHP file

គ) yml ជា YAML file

ជម្រើសនៃការប្រើប្រាស់ loader ណាមួយគឺផ្អែកទៅអ្នកនិងក៏ជាបញ្ហាមួយដែរ។ ជម្រើសដែលណែនាំអោយប្រើនោះគឺ xlf សម្រាប់ ការបកប្រែ។