Đa ngôn ngữ trong ứng dụng laravel + Vue.js
Trong một ứng dụng được viết bằng laravel chắc chúng ta đều quen với việc laravel support ngôn ngữ một cách vô cùng dễ dang, chỉ cần copy nhiều thư mục /resources/lang ra và đổi tên mong muốn là laravel có thể hiểu được ngôn ngữ bạn đang muốn sử dụng. ví dụ trong laralve bạn chỉ cần ...
Trong một ứng dụng được viết bằng laravel chắc chúng ta đều quen với việc laravel support ngôn ngữ một cách vô cùng dễ dang, chỉ cần copy nhiều thư mục /resources/lang ra và đổi tên mong muốn là laravel có thể hiểu được ngôn ngữ bạn đang muốn sử dụng.
ví dụ trong laralve bạn chỉ cần viết
1 2 3 4 |
{{ trans('label.user.login') }} |
là ứng dụng sẽ hiểu được ngôn ngữ của bạn muốn dùng, nhưng với vuejs, các component được việt trong file .vue thì nó sẽ không thể hiểu được cú pháp của laravel, hôm nay mình sẽ giới thiệu một cách chi tiết các bạn có thể dùng để kết hợp đa ngôn ngữ trong vuejs và laravel.
Cài đặt
- đầu tiên ta phải cài đặt những package, module để hỗ trợ việc đã ngôn ngữ:
Đối với laravel:
- Chúng ta sẽ sữ dụng package martinlindhe/laravel-vue-i18n-generatorđể tạo ra file js của ngôn ngữ
Trong thư mục project của bạn chạy lệnh sau:
1 2 3 4 |
composer require martinlindhe/laravel-vue-i18n-generator |
Trong file config/app.php thêm vào dòng sau ở providers:
1 2 3 4 |
MartinLindhe<span class="token package">VueInternationalizationGenerator<span class="token punctuation"></span>GeneratorProvider</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token keyword">class</span><span class="token punctuation">,</span> |
publish config:
1 2 3 4 |
php artisan vendor:publish --provider="MartinLindheVueInternationalizationGeneratorGeneratorProvider" |
trong file config này bạn có thể thay đổi một số cấu hình như tên thư mục, tên file, đường đẫn tới file …
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
<span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">return</span> <span class="token punctuation">[</span> <span class="token comment">/* |-------------------------------------------------------------------------- | Laravel translations path |-------------------------------------------------------------------------- | | The default path where the translations are stored by Laravel. | Note: the path will be prepended to point to the App directory. | */</span> <span class="token single-quoted-string string">'langPath'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'/resources/lang'</span><span class="token punctuation">,</span> <span class="token comment">/* |-------------------------------------------------------------------------- | Laravel translation files |-------------------------------------------------------------------------- | | You can choose which translation files to be generated. | Note: leave this empty for all the translation files to be generated. | */</span> <span class="token single-quoted-string string">'langFiles'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token punctuation">[</span> <span class="token comment">/* 'pagination', 'passwords' */</span> <span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token comment">/* |-------------------------------------------------------------------------- | Output file |-------------------------------------------------------------------------- | | The javascript path where I will place the generated file. | Note: the path will be prepended to point to the App directory. | */</span> <span class="token single-quoted-string string">'jsPath'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'/resources/assets/js/admin/languages/'</span><span class="token punctuation">,</span> <span class="token single-quoted-string string">'jsFile'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'/resources/assets/js/admin/languages/vue-i18n-locales.generated.js'</span><span class="token punctuation">,</span> <span class="token comment">/* |-------------------------------------------------------------------------- | i18n library |-------------------------------------------------------------------------- | | Specify the library you use for localization. | Options are vue-i18n or vuex-i18n. | */</span> <span class="token single-quoted-string string">'i18nLib'</span> <span class="token operator">=</span><span class="token operator">></span> <span class="token single-quoted-string string">'vue-i18n'</span><span class="token punctuation">,</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> </span> |
để chuyển đổi file trans từ php sang js chạy lệnh sau:
1 2 3 4 |
php artisan vue-i18n:generate |
Với vueJs
- Chúng ta sẽ sử dụng package vue-i18n để trans
Chạy lệnh sau để cài đặt:
1 2 3 4 |
npm i --save vue-i18n |
Hoặc
1 2 3 4 |
yarn add vue-i18n |
Trong file main js của bạn thêm vào đoạn sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<span class="token keyword">import</span> Vue <span class="token keyword">from</span> <span class="token string">'vue'</span><span class="token punctuation">;</span> <span class="token keyword">import</span> VueInternationalization <span class="token keyword">from</span> <span class="token string">'vue-i18n'</span><span class="token punctuation">;</span> <span class="token keyword">import</span> Locale <span class="token keyword">from</span> <span class="token string">'./vue-i18n-locales.generated.js'</span><span class="token punctuation">;</span> Vue<span class="token punctuation">.</span><span class="token function">use</span><span class="token punctuation">(</span>VueInternationalization<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">const</span> i18n <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">VueInternationalization</span><span class="token punctuation">(</span><span class="token punctuation">{</span> locale<span class="token punctuation">:</span> document<span class="token punctuation">.</span>head<span class="token punctuation">.</span><span class="token function">querySelector</span><span class="token punctuation">(</span><span class="token string">'meta[name="locale"]'</span><span class="token punctuation">)</span><span class="token punctuation">.</span>content<span class="token punctuation">,</span> messages<span class="token punctuation">:</span> Locale <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">const</span> app <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Vue</span><span class="token punctuation">(</span><span class="token punctuation">{</span> el<span class="token punctuation">:</span> <
Có thể bạn quan tâm
0
|