Browse Source

feat(i18n): 新增越南语、老挝语语言包

resources/lang/{vi,lo} 全量补齐 11 个文件,键名与 en 完全对齐;
config/mint.php 注册两种语言,语言切换器与浏览器语言识别自动生效。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01F7AFuL8wggc2P543gPA88y
visuddhinanda 2 weeks ago
parent
commit
bb41fd8828

+ 2 - 0
api-v13/config/mint.php

@@ -20,6 +20,8 @@ return [
         'my' => 'မြန်မာဘာသာ',
         'th' => 'ภาษาไทย',
         'si' => 'සිංහල',
+        'vi' => 'Tiếng Việt',
+        'lo' => 'ພາສາລາວ',
     ],
     'default_language' => 'en',
     'library' => [

+ 20 - 0
api-v13/resources/lang/lo/auth.php

@@ -0,0 +1,20 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Authentication Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used during authentication for various
+    | messages that we need to display to the user. You are free to modify
+    | these language lines according to your application's requirements.
+    |
+    */
+
+    'failed' => 'ຂໍ້ມູນເຂົ້າສູ່ລະບົບບໍ່ກົງກັບຂໍ້ມູນຂອງພວກເຮົາ.',
+    'password' => 'ລະຫັດຜ່ານບໍ່ຖືກຕ້ອງ.',
+    'throttle' => 'ພະຍາຍາມເຂົ້າສູ່ລະບົບຫຼາຍເກີນໄປ. ກະລຸນາລອງໃໝ່ໃນອີກ :seconds ວິນາທີ.',
+
+];

+ 6 - 0
api-v13/resources/lang/lo/buttons.php

@@ -0,0 +1,6 @@
+<?php
+
+return [
+    'more' => 'ເພີ່ມເຕີມ',
+    'online-read' => 'ອ່ານອອນລາຍ',
+];

+ 199 - 0
api-v13/resources/lang/lo/grammar.php

@@ -0,0 +1,199 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | site Language Lines
+    |--------------------------------------------------------------------------
+    |
+    |
+    */
+
+    'n' => 'ຄຳນາມ',
+    'n.short' => 'ນ',
+    'ti' => 'ສາມລິງ',
+    'ti.short' => '3ລ',
+    'v' => 'ຄຳກິລິຍາ',
+    'v.short' => 'ກ',
+    'v:ind' => 'ກິລິຍາບໍ່ປ່ຽນຮູບ',
+    'v:ind.short' => 'ກ.ຄງ',
+    'ind' => 'ຄຳບໍ່ປ່ຽນຮູບ',
+    'ind.short' => 'ຄງ',
+    'm' => 'ປຸງລິງ',
+    'm.short' => 'ປ',
+    'nt' => 'ນະປຸງສະກະລິງ',
+    'nt.short' => 'ນປ',
+    'f' => 'ອິດຖີລິງ',
+    'f.short' => 'ອ',
+    'sg' => 'ເອກະພົດ',
+    'sg.short' => 'ອກ',
+    'pl' => 'ພະຫູພົດ',
+    'pl.short' => 'ພຫ',
+    'nom' => 'ປະຖະມາວິພັດ (ຜູ້ກະທຳ)',
+    'nom.short' => 'ປຖ',
+    'acc' => 'ທຸຕິຍາວິພັດ (ກຳ)',
+    'acc.short' => 'ທຕ',
+    'gen' => 'ສາມີສຳພັນ (ຂອງ)',
+    'gen.short' => 'ສາມີ',
+    'dat' => 'ຈະຕຸດຖີວິພັດ (ແກ່)',
+    'dat.short' => 'ຈຕ',
+    'inst' => 'ຕະຕິຍາວິພັດ (ດ້ວຍ)',
+    'inst.short' => 'ຕຕ',
+    'voc' => 'ອາລະປະນະ (ຮ້ອງເອີ້ນ)',
+    'voc.short' => 'ອາລ',
+    'abl' => 'ປັນຈະມີວິພັດ (ຈາກ)',
+    'abl.short' => 'ປຈ',
+    'loc' => 'ສັດຕະມີວິພັດ (ໃນ)',
+    'loc.short' => 'ສຕ',
+    'base' => 'ຮາກສັບ',
+    'base.short' => 'ຮາກ',
+    'imp' => 'ຄຳສັ່ງ',
+    'imp.short' => 'ສັ່ງ',
+    'cond' => 'ເງື່ອນໄຂ',
+    'cond.short' => 'ເງື່ອນ',
+    'opt' => 'ຄວາມເປັນໄປໄດ້',
+    'opt.short' => 'ອາດ',
+    'pres' => 'ປັດຈຸບັນ',
+    'pres.short' => 'ປັດຈຸ',
+    'aor' => 'ອະດີດ',
+    'aor.short' => 'ອະດີດ',
+    'pf' => 'ສົມບູນ',
+    'pf.short' => 'ສມບ',
+    'fut' => 'ອະນາຄົດ',
+    'fut.short' => 'ອະນາ',
+    'act' => 'ກັດຕຸວາຈົກ (ປະທານ)',
+    'act.short' => 'ກັດ',
+    'refl' => 'ສະທ້ອນຕົນ',
+    'refl.short' => 'ສະທ້ອນ',
+    '1p' => 'ບຸລຸດທີ 1',
+    '1p.short' => 'ບ1',
+    '2p' => 'ບຸລຸດທີ 2',
+    '2p.short' => 'ບ2',
+    '3p' => 'ບຸລຸດທີ 3',
+    '3p.short' => 'ບ3',
+    'prp' => 'ກິລິຍາວິເສດປັດຈຸບັນ',
+    'prp.short' => 'ກວປ',
+    'prpp' => 'ກິລິຍາວິເສດປັດຈຸບັນ ກຳມະວາຈົກ',
+    'prpp.short' => 'ກວປກ',
+    'pp' => 'ກິລິຍາວິເສດອະດີດ',
+    'pp.short' => 'ກວອ',
+    'ppa' => 'ກິລິຍາວິເສດອະດີດ ກັດຕຸວາຈົກ',
+    'ppa.short' => 'ກວອກ',
+    'ppp' => 'ກິລິຍາວິເສດອະດີດ ກຳມະວາຈົກ',
+    'ppp.short' => 'ກວອກມ',
+    'futp' => 'ກິລິຍາວິເສດອະນາຄົດ',
+    'futp.short' => 'ກວອນ',
+    'fpa.short' => 'fpa',
+    'grd' => 'ກິລິຍາທີ່ຄວນເຮັດ',
+    'grd.short' => 'ຄວນ',
+    'pass' => 'ກຳມະວາຈົກ (ຖືກກະທຳ)',
+    'pass.short' => 'ກຳ',
+    'caus' => 'ເຫດຸກັດຕາ (ໃຫ້ເຮັດ)',
+    'caus.short' => 'ເຫດ',
+    'desid' => 'ຄວາມປາຖະໜາ',
+    'desid.short' => 'ປາຖ',
+    'intens' => 'ເນັ້ນຄວາມ',
+    'intens.short' => 'ເນັ້ນ',
+    'denom' => 'ແປງຈາກຄຳນາມ',
+    'denom.short' => 'ແປງນາມ',
+    'ger' => 'ນາມກິລິຍາ',
+    'ger.short' => 'ນກ',
+    'abs' => 'ກິລິຍາຕໍ່ເນື່ອງ',
+    'abs.short' => 'ຕໍ່',
+    'inf' => 'ຮູບເດີມ (ເພື່ອ)',
+    'inf.short' => 'ເດີມ',
+    'adj' => 'ຄຳຄຸນນາມ',
+    'adj.short' => 'ຄຸນ',
+    'pron' => 'ຄຳສັບພະນາມ',
+    'pron.short' => 'ສັບພ',
+    'num' => 'ຄຳຈຳນວນ',
+    'num.short' => 'ຈຳນວນ',
+    'adv' => 'ຄຳວິເສດ',
+    'adv.short' => 'ວິເສດ',
+    'conj' => 'ຄຳສັນທານ',
+    'conj.short' => 'ສັນ',
+    'prep' => 'ຄຳບຸບພະບົດ',
+    'prep.short' => 'ບຸບ',
+    'interj' => 'ຄຳອຸທານ',
+    'interj.short' => 'ອຸທ',
+    'pre' => 'ອຸປະສັກ (ໜ້າ)',
+    'pre.short' => 'ໜ້າ',
+    'suf' => 'ປັດໄຈ (ຫຼັງ)',
+    'suf.short' => 'ຫຼັງ',
+    'end' => 'ວິພັດ (ທ້າຍ)',
+    'end.short' => 'ທ້າຍ',
+    'part' => 'ອົງປະກອບ',
+    'part.short' => 'ອົງ',
+    'un' => 'ສົນທິ',
+    'un.short' => 'ສົນທິ',
+    'none' => 'ບໍ່ມີ',
+    'none.short' => '_',
+    'null' => 'ຫວ່າງເປົ່າ',
+    'null.short' => '_',
+    '?' => '?',
+    '?.short' => '?',
+    'ti:base' => 'ຮາກສັບສາມລິງ',
+    'ti:base.short' => '3ລ.ຮາກ',
+    'n:base' => 'ຮາກຄຳນາມ',
+    'n:base.short' => 'ນ.ຮາກ',
+    'v:base' => 'ຮາກຄຳກິລິຍາ',
+    'v:base.short' => 'ກ.ຮາກ',
+    'adj:base' => 'ຮາກຄຳຄຸນນາມ',
+    'adj:base.short' => 'ຄຸນ.ຮາກ',
+    'fpp' => 'ກິລິຍາວິເສດອະນາຄົດ ກຳມະວາຈົກ',
+    'fpp.short' => 'ກວອນກ',
+    'cp.short' => 'ສະມາດ',
+    'cp' => 'ອົງປະກອບຂອງສະມາດ',
+    'indconj.short' => 'ສັນ',
+    'indconj' => 'ຄຳສັນທານບໍ່ປ່ຽນຮູບ',
+    'pron:base.short' => 'ສັບພ.ຮາກ',
+    'pron:base' => 'ຮາກຄຳສັບພະນາມ',
+    'note.short' => 'ໝາຍເຫດ',
+    'note' => 'ໝາຍເຫດ',
+    'vind.short' => 'ກ.ຄງ',
+    'vind' => 'ກິລິຍາບໍ່ປ່ຽນຮູບ',
+    'vdn.short' => 'ນ.ກ',
+    'vdn' => 'ນາມທີ່ມາຈາກກິລິຍາ',
+    'relations.iad.label' => 'ຄຳຂະຫຍາຍປະກອບ',
+    'relations.asv.label' => 'ຜູ້ກະທຳ → ກິລິຍາ',
+    'relations.aov.label' => 'ກຳ → ກິລິຍາ',
+    'relations.daso-p.label' => 'ປະທານ → ກິລິຍາເຊື່ອມ',
+    'relations.daso-s.label' => 'ພາກສະແດງ → ກິລິຍາເຊື່ອມ',
+    'relations.nio.label' => 'ສິ່ງທີ່ຖືກອະທິບາຍ (ປະທານ) → ຄຳຂະຫຍາຍ (ພາກສະແດງ)',
+    'relations.nid.label' => 'ສິ່ງທີ່ຖືກຕັ້ງຊື່ → ຊື່ທີ່ຕັ້ງ',
+    'relations.dasd-p.label' => '<ການຕັ້ງຊື່> ປະທານ → ກິລິຍາເຊື່ອມ',
+    'relations.dasd-s.label' => '<ການຕັ້ງຊື່> ພາກສະແດງ → ກິລິຍາເຊື່ອມ',
+    'relations.dao-p.label' => 'ກຳສອງຊັ້ນ ກຳມະວາຈົກ - ຫຼັກ',
+    'relations.dao-s.label' => 'ກຳສອງຊັ້ນ ກຳມະວາຈົກ - ຮອງ',
+    'relations.iov.label' => 'ກຳ → ກິລິຍາ',
+    'relations.dio-p.label' => 'ກຳສອງຊັ້ນ <ຫຼັກ> → ກິລິຍາ',
+    'relations.dio-s.label' => 'ກຳສອງຊັ້ນ <ຮອງ> → ກິລິຍາ',
+    'relations.dis-p.label' => 'ປະທານ → ກິລິຍາເຊື່ອມ (ກຳມະວາຈົກ)',
+    'relations.dis-s.label' => 'ພາກສະແດງ → ກິລິຍາເຊື່ອມ (ກຳມະວາຈົກ)',
+    'relations.stc.label' => 'ບໍລິບົດເວລາ-ສະຖານທີ່ → ການກະທຳທີ່ດຳເນີນຢູ່',
+    'relations.adv.label' => 'ຄຳຂະຫຍາຍກິລິຍາ → ກິລິຍາ',
+    'relations.imp.label' => 'ລັກສະນະການກະທຳ → ກິລິຍາ',
+    'relations.soe.label' => 'ການໄປນຳກັນ <ມີຄຳສັນທານ>',
+    'relations.soi.label' => 'ການໄປນຳກັນ <ບໍ່ມີຄຳສັນທານ>',
+    'relations.isv.label' => 'ຜູ້ກະທຳ <ບໍ່ແມ່ນປະຖະມາວິພັດ> → ກິລິຍາ',
+    'relations.cau.label' => 'ເຫດ → ຜົນ / ການອ້າງອີງ',
+    'relations.iov-c.label' => 'ກຳຂອງເຫດຸກັດຕາ → ກິລິຍາ',
+    'relations.adj.label' => 'ຄຳຂະຫຍາຍນາມ → ຄຳທີ່ຖືກຂະຫຍາຍ',
+    'relations.rec.label' => 'ຜູ້ຮັບ → ການໃຫ້',
+    'relations.pur.label' => 'ຈຸດປະສົງ → ກິລິຍາ',
+    'relations.det.label' => 'ຈຸດເລີ່ມຕົ້ນ → ການຈາກໄປ',
+    'relations.coc.label' => 'ການແຍກຄວາມແຕກຕ່າງ / ການປຽບທຽບ',
+    'relations.pos.label' => 'ເຈົ້າຂອງ → ສິ່ງທີ່ຖືກຄອບຄອງ',
+    'relations.coi.label' => 'ສ່ວນລວມ [ກຸ່ມ] → ສ່ວນຍ່ອຍ / ກຸ່ມ → ສະມາຊິກ',
+    'relations.lov.label' => 'ພາຊະນະ → ກິລິຍາ / ພາຊະນະ → ສິ່ງທີ່ບັນຈຸ',
+    'relations.mot.label' => 'ການສະແດງອອກ → ຜູ້ທີ່ມີການສະແດງອອກ',
+    'relations.whp.label' => 'ສ່ວນລວມ → ສ່ວນຍ່ອຍ',
+    'relations.def.label' => 'ລັກສະນະທີ່ນິຍາມ',
+    'relations.ac.label' => 'ອະນຸປະໂຫຍກອິດສະລະ',
+    'relations.avc.label' => 'ອະນຸປະໂຫຍກອິດສະລະຕາມວາຈົກ',
+    'relations.qus.label' => 'ພາຍໃນເຄື່ອງໝາຍອ້າງອີງ → ເຄື່ອງໝາຍອ້າງອີງ',
+    'relations.qum.label' => 'ເຄື່ອງໝາຍອ້າງອີງ → ພາຍນອກເຄື່ອງໝາຍອ້າງອີງ',
+    'relations.enu.label' => 'ການລຳດັບ → ຂີດກາງ',
+    'relations.enm.label' => 'ຂີດກາງ → ສິ່ງທີ່ຖືກລຳດັບ',
+];

+ 39 - 0
api-v13/resources/lang/lo/home.php

@@ -0,0 +1,39 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Home Page Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | 首页(/)文案:品牌 hero 与四张分流卡片。
+    |
+    */
+
+    'title' => 'WikiPāli · ສາລານຸກົມຄຳພີປາລີ',
+    'hero_title' => 'WikiPāli',
+    'hero_lead' => 'ສາລານຸກົມຄຳພີປາລີ — ຈາກງ່າຍໄປຫາຍາກ ເຂົ້າສູ່ໂລກແຫ່ງຄຳພີປາລີ',
+    'cards' => [
+        'library' => [
+            'title' => 'ຫໍສະໝຸດພຣະໄຕຣປິດົກ',
+            'lead' => 'ພຣະໄຕຣປິດົກ · ອັດຖະກະຖາ · ຕີກາ · ວັດຈະນານຸກົມ',
+            'cta' => 'ເຂົ້າສູ່ຫໍສະໝຸດ',
+        ],
+        'course' => [
+            'title' => 'ຫຼັກສູດຕາມລຳດັບ',
+            'lead' => 'ເລີ່ມຈາກສູນ ສຶກສາເທື່ອລະຄຳພີ',
+            'cta' => 'ເລີ່ມຮຽນ',
+        ],
+        'workspace' => [
+            'title' => 'ບ່ອນເຮັດວຽກແປ',
+            'lead' => 'ຄຳສັບ, ການຮ່ວມມື, ການກວດແກ້, ການເຜີຍແຜ່',
+            'cta' => 'ເຂົ້າສູ່ບ່ອນເຮັດວຽກ',
+        ],
+        'development' => [
+            'title' => 'ການພັດທະນາຕໍ່ຍອດ',
+            'lead' => 'API · MCP · GitHub',
+            'cta' => 'ຈະມາໃນໄວໆນີ້',
+        ],
+    ],
+];

+ 32 - 0
api-v13/resources/lang/lo/labels.php

@@ -0,0 +1,32 @@
+<?php
+
+return [
+    'home' => 'ໜ້າຫຼັກ',
+    'translation' => 'ຄຳແປ',
+    'original' => 'ຕົ້ນສະບັບ',
+    'nissaya' => 'ນິສສະຍະ',
+
+    'script_convertor' => 'ຕົວແປງອັກສອນປາລີ',
+    'input_script' => 'ອັກສອນຕົ້ນທາງ',
+    'output_script' => 'ອັກສອນປາຍທາງ',
+    'paste_here' => 'ວາງຂໍ້ຄວາມທີ່ນີ້...',
+    'converted_text' => 'ຂໍ້ຄວາມທີ່ແປງແລ້ວຈະສະແດງທີ່ນີ້...',
+    'niggahita_label' => 'ṃ / ṁ / ŋ ປ່ຽນເປັນ',
+    'script_roman' => 'Pāli Roman Unicode',
+    'script_sangayana' => 'Sangayana',
+    'script_sinhala' => 'ສິງຫົນ',
+    'script_sinhala_traditional' => 'ສິງຫົນ (ດັ້ງເດີມ)',
+    'script_sinhala_modern' => 'ສິງຫົນ (ສະໄໝໃໝ່)',
+    'script_myanmar' => 'ມຽນມາ',
+    'script_tai_tham' => 'ໄຕທັມ (ລ້ານນາ)',
+    'script_tai_old' => 'ໄຕທັມ (ແບບເກົ່າ ບໍ່ແມ່ນ Unicode)',
+    'script_thai' => 'ໄທ',
+    'script_chinese_detail' => 'ສຽງອ່ານຈີນ (ລະອຽດ)',
+    'script_chinese_simple' => 'ສຽງອ່ານຈີນ (ຫຍໍ້)',
+    'script_chinese_pinyin' => 'ພິນອິນຈີນ',
+    'script_telugu' => 'ເຕລູກູ',
+
+    'toolbox' => 'ກ່ອງເຄື່ອງມື',
+    'tool_script_convertor' => 'ແປງອັກສອນ',
+    'tool_script_convertor_desc' => 'ແປງຂໍ້ຄວາມປາລີລະຫວ່າງລະບົບອັກສອນ',
+];

+ 10 - 0
api-v13/resources/lang/lo/language.php

@@ -0,0 +1,10 @@
+<?php
+
+return [
+    'en' => 'English',
+    'pali' => 'pali',
+    'zh' => '中文',
+    'zh-Hans' => '简体中文',
+    'zh-Hant' => '繁体中文',
+    'my' => 'မြန်မာဘာသာ',
+];

+ 160 - 0
api-v13/resources/lang/lo/library.php

@@ -0,0 +1,160 @@
+<?php
+
+return [
+    // index.blade.php
+    'portal_title' => 'WikiPāli · ຫໍສະໝຸດປາລີ',
+    'portal_hero_title' => 'ຫໍສະໝຸດປາລີ WikiPāli',
+    'portal_hero_subtitle' => 'ສຳຫຼວດພຣະໄຕຣປິດົກ · ປະຕູສູ່ປັນຍາ',
+    'search_placeholder_home' => 'ຄົ້ນຫາພຣະສູດ, ຄຳສັບ, ຊຸດບົດຄວາມ…',
+    'section_tipitaka' => 'ພຣະໄຕຣປິດົກ',
+    'enter_tipitaka' => 'ເຂົ້າສູ່ພຣະໄຕຣປິດົກ',
+    'more' => 'ເພີ່ມເຕີມ',
+    'section_recent' => 'ຄຳແປໃໝ່',
+    'updating_badge' => 'ກຳລັງອັບເດດ',
+    'view_all' => 'ເບິ່ງທັງໝົດ',
+    'badge_new' => 'ໃໝ່',
+    'badge_updated' => 'ອັບເດດແລ້ວ',
+
+    // search.blade.php
+    'search_results_title' => 'ຜົນການຄົ້ນຫາ',
+    'search_title' => 'ຄົ້ນຫາ',
+    'search_placeholder' => 'ຄົ້ນຫາຄຳສັບ, ປາລີ, ສັນສະກຣິດ…',
+    'searching' => 'ຄົ້ນຫາ',
+    'results_found_prefix' => ', ພົບ',
+    'results_found_suffix' => 'ລາຍການ',
+    'page_prefix' => '(ໜ້າ',
+    'page_suffix' => ')',
+    'no_results' => ', ບໍ່ພົບຜົນການຄົ້ນຫາ',
+    'try_other_keywords' => 'ກະລຸນາລອງຄຳຄົ້ນອື່ນ',
+    'filter_by' => 'ກັ່ນຕອງຕາມ ',
+    'filter' => '',
+    'all' => 'ທັງໝົດ',
+    'did_you_mean' => 'ທ່ານໝາຍເຖິງ',
+    'browse_categories' => 'ເບິ່ງຕາມໝວດໝູ່',
+
+    // download.blade.php
+    'download' => 'ດາວໂຫຼດ',
+    'offline_packets' => 'ຊຸດຂໍ້ມູນອອບໄລນ໌ຂອງແອັບ',
+    'packet_count_suffix' => 'ຊຸດ',
+    'no_packets' => 'ບໍ່ມີຊຸດຂໍ້ມູນ',
+    'no_packets_desc' => 'ຍັງບໍ່ມີຊຸດຂໍ້ມູນອອບໄລນ໌ໃຫ້ດາວໂຫຼດ.',
+    'col_name' => 'ຊື່ຊຸດຂໍ້ມູນ',
+    'col_size' => 'ຂະໜາດໄຟລ໌',
+    'col_min_version' => 'ເວີຊັນຕ່ຳສຸດ',
+    'created_at' => 'ວັນທີສ້າງ',
+    'col_links' => 'ລິ້ງດາວໂຫຼດ',
+    'no_links' => 'ບໍ່ມີລິ້ງ',
+    'min_version_prefix' => 'ເວີຊັນຕ່ຳສຸດ ',
+
+    // wiki blade files
+    'wiki_encyclopedia' => 'ສາລານຸກົມພຸດທະສາສະໜາ',
+    'wiki_subtitle' => 'ສຳຫຼວດພຣະທຳ · ປະຕູສູ່ການຕື່ນຮູ້',
+    'wiki_search_placeholder' => 'ຄົ້ນຫາຄຳສັບ, ຄຳພີ, ບຸກຄົນ...',
+    'hot' => 'ຍອດນິຍົມ: ',
+    'wiki_language_divider' => 'ອ່ານສາລານຸກົມພຸດທະສາສະໜາໃນພາສາຂອງທ່ານ',
+    'articles' => 'ບົດ',
+    'today_updates' => 'ອັບເດດມື້ນີ້',
+    'contributors_suffix' => 'ຜູ້ຮ່ວມສ້າງ',
+    'today_entry' => 'ຄຳສັບປະຈຳມື້',
+    'read_full_entry' => 'ອ່ານທັງໝົດ →',
+    'featured_entries' => 'ຄຳສັບແນະນຳ',
+    'statistics' => 'ສະຖິຕິ',
+    'total_entries' => 'ຈຳນວນຄຳສັບທັງໝົດ',
+    'this_month' => 'ເດືອນນີ້',
+    'contributors' => 'ຜູ້ຮ່ວມສ້າງ',
+    'quality_level' => 'ລະດັບຄຸນນະພາບ',
+    'other_versions' => 'ເວີຊັນອື່ນ',
+    'toc' => 'ສາລະບານ',
+    'expand_all' => 'ຂະຫຍາຍທັງໝົດ',
+    'collapse_toc' => 'ຫຍໍ້ລົງ',
+    'entry_info' => 'ຂໍ້ມູນຄຳສັບ',
+    'category' => 'ໝວດໝູ່',
+    'quality' => 'ຄຸນນະພາບ',
+    'recent_updates' => 'ອັບເດດຫຼ້າສຸດ',
+
+    // anthology
+    'site_name' => 'ຫໍສະໝຸດປາລີ',
+    'home' => 'ໜ້າຫຼັກ',
+    'anthology' => 'ຊຸດບົດຄວາມ',
+    'anthology_subtitle' => 'ອັດຖະກະຖາ · ຄູ່ມືກຳມະຖານ · ສົນທະນາທຳ',
+    'no_anthology' => 'ຍັງບໍ່ມີຊຸດບົດຄວາມ',
+    'search_anthology' => 'ຄົ້ນຫາຊຸດບົດຄວາມ…',
+    'author' => 'ຜູ້ຂຽນ',
+    'anthology_count_suffix' => 'ຊຸດ',
+    'last_updated' => 'ອັບເດດຄັ້ງລ່າສຸດ',
+    'chapter_count' => 'ຈຳນວນບົດ',
+    'chapters' => 'ບົດ',
+    'read_online' => 'ອ່ານອອນລາຍ',
+    'open_in_editor' => 'ເປີດໃນຕົວແກ້ໄຂ',
+    'about_anthology' => 'ກ່ຽວກັບຊຸດບົດຄວາມນີ້',
+    'anthology_info' => 'ຂໍ້ມູນຊຸດບົດຄວາມ',
+    'language' => 'ພາສາ',
+    'current_channel' => 'ຊ່ອງປັດຈຸບັນ',
+    'created' => 'ວັນທີສ້າງ',
+    'updated' => 'ວັນທີອັບເດດ',
+    'related_anthology' => 'ຊຸດບົດຄວາມທີ່ກ່ຽວຂ້ອງ',
+    'articles_suffix' => 'ບົດ',
+
+    // tipitaka & reader
+    'tipitaka' => 'ພຣະໄຕຣປິດົກ',
+    'categories' => 'ໝວດໝູ່',
+    'search_tipitaka' => 'ຄົ້ນຫາຄຳພີແລະຄຳແປພຣະໄຕຣປິດົກ',
+    'type' => 'ປະເພດ',
+    'clear_filters' => 'ລ້າງຕົວກັ່ນຕອງ',
+    'total_prefix' => 'ລວມທັງໝົດ',
+    'book_unit' => 'ຫົວ',
+    'sort' => 'ຈັດລຽງ',
+    'weekly_picks' => 'ຄັດສັນປະຈຳອາທິດ',
+    'active_authors' => 'ຜູ້ຂຽນທີ່ຫ້າວຫັນ',
+    'publisher' => 'ຜູ້ຈັດພິມ',
+    'pali' => 'ປາລີ',
+    'book_info' => 'ຂໍ້ມູນໜັງສື',
+    'editor' => 'ຕົວແກ້ໄຂ',
+    'settings' => 'ຕັ້ງຄ່າ',
+    'versions' => 'ເວີຊັນ',
+    'logout' => 'ອອກຈາກລະບົບ',
+    'select_version' => 'ເລືອກເວີຊັນ',
+    'no_content' => 'ບໍ່ມີເນື້ອຫາ',
+    'prev_article' => 'ກ່ອນໜ້າ',
+    'next_article' => 'ຕໍ່ໄປ',
+    'tags' => 'ປ້າຍກຳກັບ',
+    'reading_settings' => 'ຕັ້ງຄ່າການອ່ານ',
+    'show_original' => 'ສະແດງຕົ້ນສະບັບ',
+    'toggle_original' => 'ເປີດ/ປິດ ການສະແດງຕົ້ນສະບັບ',
+    'ui_language' => 'ພາສາໜ້າຈໍ',
+    'auto' => 'ອັດຕະໂນມັດ',
+    'lang_zh_hans' => 'ຈີນຕົວຫຍໍ້',
+    'lang_en' => 'ອັງກິດ',
+    'pali_script' => 'ອັກສອນປາລີ',
+    'script_roman' => 'ໂຣມັນ',
+    'script_myanmar' => 'ມຽນມາ',
+    'script_thai' => 'ໄທ',
+    'commentary_version' => 'ເວີຊັນອັດຖະກະຖາ',
+    'none' => 'ບໍ່ມີ',
+    'cancel' => 'ຍົກເລີກ',
+    'confirm' => 'ຕົກລົງ',
+    'no_toc' => 'ໜັງສືເຫຼັ້ມນີ້ບໍ່ມີສາລະບານ',
+
+    // course (course/index.blade.php + course/history.blade.php)
+    'course' => 'ຫຼັກສູດ',
+    'course_hero_title' => 'ຫຼັກສູດ',
+    'course_hero_subtitle' => 'ສຶກສາຄຳພີກັບຜູ້ຊ່ຽວຊານປາລີຈາກທົ່ວໂລກ',
+    'course_search_placeholder' => 'ຄົ້ນຫາຫຼັກສູດ, ຄູສອນ…',
+    'course_stat_total' => 'ຫຼັກສູດສາທາລະນະ',
+    'course_stat_open' => 'ກຳລັງເປີດຮັບສະໝັກ',
+    'course_stat_closed' => 'ຈົບແລ້ວ',
+    'course_section_latest' => 'ຫຼັກສູດຫຼ້າສຸດ',
+    'course_section_open' => 'ກຳລັງເປີດຮັບສະໝັກ',
+    'course_section_history' => 'ຫຼັກສູດທີ່ຜ່ານມາ',
+    'course_view_all' => 'ເບິ່ງທັງໝົດ',
+    'course_status_open' => 'ຮັບສະໝັກ',
+    'course_status_closed' => 'ສິ້ນສຸດແລ້ວ',
+    'course_period' => 'ຮຸ່ນທີ :n',
+    'course_members' => 'ຜູ້ຮຽນ :n ຄົນ',
+    'course_signup' => 'ສະໝັກຮຽນ',
+    'course_no_latest' => 'ຍັງບໍ່ມີຫຼັກສູດ',
+    'course_no_open' => 'ບໍ່ມີຫຼັກສູດທີ່ເປີດຮັບສະໝັກ',
+    'course_no_history' => 'ຍັງບໍ່ມີຫຼັກສູດທີ່ຜ່ານມາ',
+    'course_history_title' => 'ຫຼັກສູດທີ່ຜ່ານມາ',
+    'course_history_subtitle' => 'ຫຼັກສູດສາທາລະນະທີ່ຈົບແລ້ວ — ທົບທວນກຸ່ມສຶກສາທີ່ຜ່ານມາ',
+];

+ 19 - 0
api-v13/resources/lang/lo/pagination.php

@@ -0,0 +1,19 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Pagination Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used by the paginator library to build
+    | the simple pagination links. You are free to change them to anything
+    | you want to customize your views to better match your application.
+    |
+    */
+
+    'previous' => '&laquo; ກ່ອນໜ້າ',
+    'next' => 'ຕໍ່ໄປ &raquo;',
+
+];

+ 22 - 0
api-v13/resources/lang/lo/passwords.php

@@ -0,0 +1,22 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Password Reset Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are the default lines which match reasons
+    | that are given by the password broker for a password update attempt
+    | has failed, such as for an invalid token or invalid new password.
+    |
+    */
+
+    'reset' => 'ລະຫັດຜ່ານຂອງທ່ານຖືກຕັ້ງໃໝ່ແລ້ວ!',
+    'sent' => 'ພວກເຮົາໄດ້ສົ່ງລິ້ງຕັ້ງລະຫັດຜ່ານໃໝ່ໄປທາງອີເມວຂອງທ່ານແລ້ວ!',
+    'throttled' => 'ກະລຸນາລໍຖ້າກ່ອນລອງໃໝ່.',
+    'token' => 'ລະຫັດຕັ້ງລະຫັດຜ່ານໃໝ່ນີ້ບໍ່ຖືກຕ້ອງ.',
+    'user' => 'ບໍ່ພົບຜູ້ໃຊ້ທີ່ມີອີເມວດັ່ງກ່າວ.',
+
+];

+ 33 - 0
api-v13/resources/lang/lo/site.php

@@ -0,0 +1,33 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | site Language Lines
+    |--------------------------------------------------------------------------
+    |
+    |
+    */
+
+    'logo' => '/logo.png',
+    'title' => 'wikipali',
+    'subhead' => 'wikipali',
+    'keywords' => ['pali', 'buddhistm'],
+    'description' => 'wikipali',
+    'copyright' => 'iapt 2022',
+    'author.name' => 'iapt',
+    'author.email' => 'visuddhindand@gmail.com',
+    'nav' => [
+        'home' => 'ໜ້າຫຼັກ',
+        'tipitaka' => 'ພຣະໄຕຣປິດົກ',
+        'wiki' => 'ສາລານຸກົມ',
+        'anthology' => 'ຊຸດບົດຄວາມ',
+        'course' => 'ຫຼັກສູດ',
+        'download' => 'ດາວໂຫຼດ',
+
+        'menu' => 'ເມນູ',
+        'open_menu' => 'ເປີດເມນູ',
+        'close_menu' => 'ປິດເມນູ',
+    ],
+];

+ 162 - 0
api-v13/resources/lang/lo/validation.php

@@ -0,0 +1,162 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Validation Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines contain the default error messages used by
+    | the validator class. Some of these rules have multiple versions such
+    | as the size rules. Feel free to tweak each of these messages here.
+    |
+    */
+
+    'accepted' => 'ຕ້ອງຍອມຮັບ :attribute.',
+    'accepted_if' => 'ຕ້ອງຍອມຮັບ :attribute ເມື່ອ :other ເປັນ :value.',
+    'active_url' => ':attribute ບໍ່ແມ່ນ URL ທີ່ຖືກຕ້ອງ.',
+    'after' => ':attribute ຕ້ອງເປັນວັນທີຫຼັງ :date.',
+    'after_or_equal' => ':attribute ຕ້ອງເປັນວັນທີຫຼັງ ຫຼື ເທົ່າກັບ :date.',
+    'alpha' => ':attribute ຕ້ອງມີແຕ່ຕົວອັກສອນເທົ່ານັ້ນ.',
+    'alpha_dash' => ':attribute ຕ້ອງມີແຕ່ຕົວອັກສອນ, ຕົວເລກ, ຂີດກາງ ແລະ ຂີດລຸ່ມເທົ່ານັ້ນ.',
+    'alpha_num' => ':attribute ຕ້ອງມີແຕ່ຕົວອັກສອນ ແລະ ຕົວເລກເທົ່ານັ້ນ.',
+    'array' => ':attribute ຕ້ອງເປັນອາເຣ.',
+    'before' => ':attribute ຕ້ອງເປັນວັນທີກ່ອນ :date.',
+    'before_or_equal' => ':attribute ຕ້ອງເປັນວັນທີກ່ອນ ຫຼື ເທົ່າກັບ :date.',
+    'between' => [
+        'numeric' => ':attribute ຕ້ອງຢູ່ລະຫວ່າງ :min ຫາ :max.',
+        'file' => ':attribute ຕ້ອງມີຂະໜາດລະຫວ່າງ :min ຫາ :max ກິໂລໄບຕ໌.',
+        'string' => ':attribute ຕ້ອງມີຄວາມຍາວລະຫວ່າງ :min ຫາ :max ຕົວອັກສອນ.',
+        'array' => ':attribute ຕ້ອງມີລະຫວ່າງ :min ຫາ :max ລາຍການ.',
+    ],
+    'boolean' => 'ຊ່ອງ :attribute ຕ້ອງເປັນ true ຫຼື false.',
+    'confirmed' => 'ການຢືນຢັນ :attribute ບໍ່ກົງກັນ.',
+    'current_password' => 'ລະຫັດຜ່ານບໍ່ຖືກຕ້ອງ.',
+    'date' => ':attribute ບໍ່ແມ່ນວັນທີທີ່ຖືກຕ້ອງ.',
+    'date_equals' => ':attribute ຕ້ອງເປັນວັນທີເທົ່າກັບ :date.',
+    'date_format' => ':attribute ບໍ່ກົງກັບຮູບແບບ :format.',
+    'declined' => 'ຕ້ອງປະຕິເສດ :attribute.',
+    'declined_if' => 'ຕ້ອງປະຕິເສດ :attribute ເມື່ອ :other ເປັນ :value.',
+    'different' => ':attribute ແລະ :other ຕ້ອງແຕກຕ່າງກັນ.',
+    'digits' => ':attribute ຕ້ອງມີ :digits ຫຼັກ.',
+    'digits_between' => ':attribute ຕ້ອງມີລະຫວ່າງ :min ຫາ :max ຫຼັກ.',
+    'dimensions' => ':attribute ມີຂະໜາດຮູບພາບບໍ່ຖືກຕ້ອງ.',
+    'distinct' => 'ຊ່ອງ :attribute ມີຄ່າຊ້ຳກັນ.',
+    'email' => ':attribute ຕ້ອງເປັນທີ່ຢູ່ອີເມວທີ່ຖືກຕ້ອງ.',
+    'ends_with' => ':attribute ຕ້ອງລົງທ້າຍດ້ວຍໜຶ່ງໃນ: :values.',
+    'enum' => ':attribute ທີ່ເລືອກບໍ່ຖືກຕ້ອງ.',
+    'exists' => ':attribute ທີ່ເລືອກມີຢູ່ແລ້ວ.',
+    'file' => ':attribute ຕ້ອງເປັນໄຟລ໌.',
+    'filled' => 'ຊ່ອງ :attribute ຕ້ອງມີຄ່າ.',
+    'gt' => [
+        'numeric' => ':attribute ຕ້ອງຫຼາຍກວ່າ :value.',
+        'file' => ':attribute ຕ້ອງໃຫຍ່ກວ່າ :value ກິໂລໄບຕ໌.',
+        'string' => ':attribute ຕ້ອງຍາວກວ່າ :value ຕົວອັກສອນ.',
+        'array' => ':attribute ຕ້ອງມີຫຼາຍກວ່າ :value ລາຍການ.',
+    ],
+    'gte' => [
+        'numeric' => ':attribute ຕ້ອງຫຼາຍກວ່າ ຫຼື ເທົ່າກັບ :value.',
+        'file' => ':attribute ຕ້ອງໃຫຍ່ກວ່າ ຫຼື ເທົ່າກັບ :value ກິໂລໄບຕ໌.',
+        'string' => ':attribute ຕ້ອງຍາວກວ່າ ຫຼື ເທົ່າກັບ :value ຕົວອັກສອນ.',
+        'array' => ':attribute ຕ້ອງມີ :value ລາຍການຂຶ້ນໄປ.',
+    ],
+    'image' => ':attribute ຕ້ອງເປັນຮູບພາບ.',
+    'in' => ':attribute ທີ່ເລືອກບໍ່ຖືກຕ້ອງ.',
+    'in_array' => 'ຊ່ອງ :attribute ບໍ່ມີຢູ່ໃນ :other.',
+    'integer' => ':attribute ຕ້ອງເປັນຈຳນວນເຕັມ.',
+    'ip' => ':attribute ຕ້ອງເປັນທີ່ຢູ່ IP ທີ່ຖືກຕ້ອງ.',
+    'ipv4' => ':attribute ຕ້ອງເປັນທີ່ຢູ່ IPv4 ທີ່ຖືກຕ້ອງ.',
+    'ipv6' => ':attribute ຕ້ອງເປັນທີ່ຢູ່ IPv6 ທີ່ຖືກຕ້ອງ.',
+    'mac_address' => ':attribute ຕ້ອງເປັນທີ່ຢູ່ MAC ທີ່ຖືກຕ້ອງ.',
+    'json' => ':attribute ຕ້ອງເປັນຂໍ້ຄວາມ JSON ທີ່ຖືກຕ້ອງ.',
+    'lt' => [
+        'numeric' => ':attribute ຕ້ອງນ້ອຍກວ່າ :value.',
+        'file' => ':attribute ຕ້ອງນ້ອຍກວ່າ :value ກິໂລໄບຕ໌.',
+        'string' => ':attribute ຕ້ອງສັ້ນກວ່າ :value ຕົວອັກສອນ.',
+        'array' => ':attribute ຕ້ອງມີໜ້ອຍກວ່າ :value ລາຍການ.',
+    ],
+    'lte' => [
+        'numeric' => ':attribute ຕ້ອງນ້ອຍກວ່າ ຫຼື ເທົ່າກັບ :value.',
+        'file' => ':attribute ຕ້ອງນ້ອຍກວ່າ ຫຼື ເທົ່າກັບ :value ກິໂລໄບຕ໌.',
+        'string' => ':attribute ຕ້ອງສັ້ນກວ່າ ຫຼື ເທົ່າກັບ :value ຕົວອັກສອນ.',
+        'array' => ':attribute ຕ້ອງມີບໍ່ເກີນ :value ລາຍການ.',
+    ],
+    'max' => [
+        'numeric' => ':attribute ຕ້ອງບໍ່ຫຼາຍກວ່າ :max.',
+        'file' => ':attribute ຕ້ອງບໍ່ໃຫຍ່ກວ່າ :max ກິໂລໄບຕ໌.',
+        'string' => ':attribute ຕ້ອງບໍ່ຍາວກວ່າ :max ຕົວອັກສອນ.',
+        'array' => ':attribute ຕ້ອງມີບໍ່ເກີນ :max ລາຍການ.',
+    ],
+    'mimes' => ':attribute ຕ້ອງເປັນໄຟລ໌ປະເພດ: :values.',
+    'mimetypes' => ':attribute ຕ້ອງເປັນໄຟລ໌ປະເພດ: :values.',
+    'min' => [
+        'numeric' => ':attribute ຕ້ອງມີຄ່າຢ່າງໜ້ອຍ :min.',
+        'file' => ':attribute ຕ້ອງມີຂະໜາດຢ່າງໜ້ອຍ :min ກິໂລໄບຕ໌.',
+        'string' => ':attribute ຕ້ອງມີຢ່າງໜ້ອຍ :min ຕົວອັກສອນ.',
+        'array' => ':attribute ຕ້ອງມີຢ່າງໜ້ອຍ :min ລາຍການ.',
+    ],
+    'multiple_of' => ':attribute ຕ້ອງເປັນຜົນຄູນຂອງ :value.',
+    'not_in' => ':attribute ທີ່ເລືອກບໍ່ຖືກຕ້ອງ.',
+    'not_regex' => 'ຮູບແບບຂອງ :attribute ບໍ່ຖືກຕ້ອງ.',
+    'numeric' => ':attribute ຕ້ອງເປັນຕົວເລກ.',
+    'password' => 'ລະຫັດຜ່ານບໍ່ຖືກຕ້ອງ.',
+    'present' => 'ຕ້ອງມີຊ່ອງ :attribute.',
+    'prohibited' => 'ຊ່ອງ :attribute ຖືກຫ້າມ.',
+    'prohibited_if' => 'ຊ່ອງ :attribute ຖືກຫ້າມເມື່ອ :other ເປັນ :value.',
+    'prohibited_unless' => 'ຊ່ອງ :attribute ຖືກຫ້າມ ເວັ້ນເສຍແຕ່ :other ຢູ່ໃນ :values.',
+    'prohibits' => 'ຊ່ອງ :attribute ຫ້າມບໍ່ໃຫ້ມີ :other.',
+    'regex' => 'ຮູບແບບຂອງ :attribute ບໍ່ຖືກຕ້ອງ.',
+    'required' => 'ຕ້ອງຕື່ມຊ່ອງ :attribute.',
+    'required_if' => 'ຕ້ອງຕື່ມຊ່ອງ :attribute ເມື່ອ :other ເປັນ :value.',
+    'required_unless' => 'ຕ້ອງຕື່ມຊ່ອງ :attribute ເວັ້ນເສຍແຕ່ :other ຢູ່ໃນ :values.',
+    'required_with' => 'ຕ້ອງຕື່ມຊ່ອງ :attribute ເມື່ອມີ :values.',
+    'required_with_all' => 'ຕ້ອງຕື່ມຊ່ອງ :attribute ເມື່ອມີ :values ທັງໝົດ.',
+    'required_without' => 'ຕ້ອງຕື່ມຊ່ອງ :attribute ເມື່ອບໍ່ມີ :values.',
+    'required_without_all' => 'ຕ້ອງຕື່ມຊ່ອງ :attribute ເມື່ອບໍ່ມີຄ່າໃດໆໃນ :values.',
+    'same' => ':attribute ແລະ :other ຕ້ອງກົງກັນ.',
+    'size' => [
+        'numeric' => ':attribute ຕ້ອງເທົ່າກັບ :size.',
+        'file' => ':attribute ຕ້ອງມີຂະໜາດ :size ກິໂລໄບຕ໌.',
+        'string' => ':attribute ຕ້ອງມີ :size ຕົວອັກສອນ.',
+        'array' => ':attribute ຕ້ອງມີ :size ລາຍການ.',
+    ],
+    'starts_with' => ':attribute ຕ້ອງເລີ່ມຕົ້ນດ້ວຍໜຶ່ງໃນ: :values.',
+    'string' => ':attribute ຕ້ອງເປັນຂໍ້ຄວາມ.',
+    'timezone' => ':attribute ຕ້ອງເປັນເຂດເວລາທີ່ຖືກຕ້ອງ.',
+    'unique' => ':attribute ຖືກໃຊ້ໄປແລ້ວ.',
+    'uploaded' => 'ອັບໂຫຼດ :attribute ບໍ່ສຳເລັດ.',
+    'url' => ':attribute ຕ້ອງເປັນ URL ທີ່ຖືກຕ້ອງ.',
+    'uuid' => ':attribute ຕ້ອງເປັນ UUID ທີ່ຖືກຕ້ອງ.',
+
+    /*
+    |--------------------------------------------------------------------------
+    | Custom Validation Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify custom validation messages for attributes using the
+    | convention "attribute.rule" to name the lines. This makes it quick to
+    | specify a specific custom language line for a given attribute rule.
+    |
+    */
+
+    'custom' => [
+        'attribute-name' => [
+            'rule-name' => 'custom-message',
+        ],
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Custom Validation Attributes
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used to swap our attribute placeholder
+    | with something more reader friendly such as "E-Mail Address" instead
+    | of "email". This simply helps us make our message more expressive.
+    |
+    */
+
+    'attributes' => [],
+
+];

+ 20 - 0
api-v13/resources/lang/vi/auth.php

@@ -0,0 +1,20 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Authentication Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used during authentication for various
+    | messages that we need to display to the user. You are free to modify
+    | these language lines according to your application's requirements.
+    |
+    */
+
+    'failed' => 'Thông tin đăng nhập không khớp với dữ liệu của chúng tôi.',
+    'password' => 'Mật khẩu không đúng.',
+    'throttle' => 'Bạn đã đăng nhập sai quá nhiều lần. Vui lòng thử lại sau :seconds giây.',
+
+];

+ 6 - 0
api-v13/resources/lang/vi/buttons.php

@@ -0,0 +1,6 @@
+<?php
+
+return [
+    'more' => 'Xem thêm',
+    'online-read' => 'Đọc trực tuyến',
+];

+ 199 - 0
api-v13/resources/lang/vi/grammar.php

@@ -0,0 +1,199 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | site Language Lines
+    |--------------------------------------------------------------------------
+    |
+    |
+    */
+
+    'n' => 'danh từ',
+    'n.short' => 'n',
+    'ti' => 'ba giống',
+    'ti.short' => '3g',
+    'v' => 'động từ',
+    'v.short' => 'v',
+    'v:ind' => 'động từ bất biến',
+    'v:ind.short' => 'v.ind',
+    'ind' => 'bất biến từ',
+    'ind.short' => 'ind',
+    'm' => 'giống đực',
+    'm.short' => 'm',
+    'nt' => 'giống trung',
+    'nt.short' => 'nt',
+    'f' => 'giống cái',
+    'f.short' => 'f',
+    'sg' => 'số ít',
+    'sg.short' => 'sg',
+    'pl' => 'số nhiều',
+    'pl.short' => 'pl',
+    'nom' => 'chủ cách',
+    'nom.short' => 'nom',
+    'acc' => 'đối cách',
+    'acc.short' => 'acc',
+    'gen' => 'sở thuộc cách',
+    'gen.short' => 'gen',
+    'dat' => 'tặng cách',
+    'dat.short' => 'dat',
+    'inst' => 'công cụ cách',
+    'inst.short' => 'ins',
+    'voc' => 'hô cách',
+    'voc.short' => 'voc',
+    'abl' => 'xuất xứ cách',
+    'abl.short' => 'abl',
+    'loc' => 'vị trí cách',
+    'loc.short' => 'loc',
+    'base' => 'thân từ',
+    'base.short' => 'thân',
+    'imp' => 'mệnh lệnh cách',
+    'imp.short' => 'imp',
+    'cond' => 'điều kiện cách',
+    'cond.short' => 'cond',
+    'opt' => 'khả năng cách',
+    'opt.short' => 'opt',
+    'pres' => 'hiện tại',
+    'pres.short' => 'pres',
+    'aor' => 'quá khứ đơn',
+    'aor.short' => 'aor',
+    'pf' => 'hoàn thành',
+    'pf.short' => 'pf',
+    'fut' => 'tương lai',
+    'fut.short' => 'fut',
+    'act' => 'chủ động',
+    'act.short' => 'act',
+    'refl' => 'phản thân',
+    'refl.short' => 'refl',
+    '1p' => 'ngôi thứ nhất',
+    '1p.short' => '1p',
+    '2p' => 'ngôi thứ hai',
+    '2p.short' => '2p',
+    '3p' => 'ngôi thứ ba',
+    '3p.short' => '3p',
+    'prp' => 'hiện tại phân từ',
+    'prp.short' => 'prp',
+    'prpp' => 'hiện tại phân từ bị động',
+    'prpp.short' => 'prpp',
+    'pp' => 'quá khứ phân từ',
+    'pp.short' => 'pp',
+    'ppa' => 'quá khứ phân từ chủ động',
+    'ppa.short' => 'ppa',
+    'ppp' => 'quá khứ phân từ bị động',
+    'ppp.short' => 'ppp',
+    'futp' => 'tương lai phân từ',
+    'futp.short' => 'futp',
+    'fpa.short' => 'fpa',
+    'grd' => 'phân từ khả năng',
+    'grd.short' => 'grd',
+    'pass' => 'bị động',
+    'pass.short' => 'pass',
+    'caus' => 'sai khiến',
+    'caus.short' => 'caus',
+    'desid' => 'ý muốn',
+    'desid.short' => 'desid',
+    'intens' => 'tăng cường',
+    'intens.short' => 'intens',
+    'denom' => 'phái sinh từ danh từ',
+    'denom.short' => 'denom',
+    'ger' => 'danh động từ',
+    'ger.short' => 'ger',
+    'abs' => 'bất biến phân từ',
+    'abs.short' => 'abs',
+    'inf' => 'nguyên mẫu',
+    'inf.short' => 'inf',
+    'adj' => 'tính từ',
+    'adj.short' => 'adj',
+    'pron' => 'đại từ',
+    'pron.short' => 'pron',
+    'num' => 'số từ',
+    'num.short' => 'num',
+    'adv' => 'trạng từ',
+    'adv.short' => 'adv',
+    'conj' => 'liên từ',
+    'conj.short' => 'conj',
+    'prep' => 'giới từ',
+    'prep.short' => 'prep',
+    'interj' => 'thán từ',
+    'interj.short' => 'interj',
+    'pre' => 'tiền tố',
+    'pre.short' => 'pre',
+    'suf' => 'hậu tố',
+    'suf.short' => 'suf',
+    'end' => 'vĩ tố',
+    'end.short' => 'end',
+    'part' => 'thành phần',
+    'part.short' => 'tp',
+    'un' => 'liên âm (sandhi)',
+    'un.short' => 'sandhi',
+    'none' => 'không',
+    'none.short' => '_',
+    'null' => 'rỗng',
+    'null.short' => '_',
+    '?' => '?',
+    '?.short' => '?',
+    'ti:base' => 'thân từ ba giống',
+    'ti:base.short' => '3g.thân',
+    'n:base' => 'thân danh từ',
+    'n:base.short' => 'n.thân',
+    'v:base' => 'thân động từ',
+    'v:base.short' => 'v.thân',
+    'adj:base' => 'thân tính từ',
+    'adj:base.short' => 'adj.thân',
+    'fpp' => 'tương lai phân từ bị động',
+    'fpp.short' => 'fpp',
+    'cp.short' => 'tp',
+    'cp' => 'thành phần hợp từ',
+    'indconj.short' => 'conj',
+    'indconj' => 'liên từ bất biến',
+    'pron:base.short' => 'pron.thân',
+    'pron:base' => 'thân đại từ',
+    'note.short' => 'ghi chú',
+    'note' => 'ghi chú',
+    'vind.short' => 'v.ind',
+    'vind' => 'động từ bất biến',
+    'vdn.short' => 'v.n',
+    'vdn' => 'danh từ động từ',
+    'relations.iad.label' => 'bổ ngữ phụ thuộc',
+    'relations.asv.label' => 'chủ thể → động từ',
+    'relations.aov.label' => 'tân ngữ → động từ',
+    'relations.daso-p.label' => 'chủ ngữ → hệ từ',
+    'relations.daso-s.label' => 'vị ngữ → hệ từ',
+    'relations.nio.label' => 'được mô tả (chủ ngữ) → định ngữ (vị ngữ)',
+    'relations.nid.label' => 'được gọi tên → tên gọi',
+    'relations.dasd-p.label' => '<tên gọi> chủ ngữ → hệ từ',
+    'relations.dasd-s.label' => '<tên gọi> vị ngữ → hệ từ',
+    'relations.dao-p.label' => 'tân ngữ kép bị động - chính',
+    'relations.dao-s.label' => 'tân ngữ kép bị động - phụ',
+    'relations.iov.label' => 'tân ngữ → động từ',
+    'relations.dio-p.label' => 'tân ngữ kép <chính> → động từ',
+    'relations.dio-s.label' => 'tân ngữ kép <phụ> → động từ',
+    'relations.dis-p.label' => 'chủ ngữ → hệ từ (bị động)',
+    'relations.dis-s.label' => 'vị ngữ → hệ từ (bị động)',
+    'relations.stc.label' => 'bối cảnh không gian - thời gian → hành động đang diễn ra',
+    'relations.adv.label' => 'bổ ngữ của động từ → động từ',
+    'relations.imp.label' => 'cách thức → động từ',
+    'relations.soe.label' => 'đi kèm <có liên từ>',
+    'relations.soi.label' => 'đi kèm <không liên từ>',
+    'relations.isv.label' => 'chủ thể <không ở chủ cách> → động từ',
+    'relations.cau.label' => 'nguyên nhân → kết quả / quy thuộc',
+    'relations.iov-c.label' => 'tân ngữ của sai khiến → động từ',
+    'relations.adj.label' => 'định ngữ của danh từ → từ được bổ nghĩa',
+    'relations.rec.label' => 'người nhận → sự cho',
+    'relations.pur.label' => 'mục đích → động từ',
+    'relations.det.label' => 'điểm xuất phát → sự rời đi',
+    'relations.coc.label' => 'phân biệt / so sánh',
+    'relations.pos.label' => 'sở hữu chủ → vật sở hữu',
+    'relations.coi.label' => 'toàn thể [tập hợp] → bộ phận được chứa / tập hợp → phần tử',
+    'relations.lov.label' => 'vật chứa → động từ / vật chứa → vật được chứa',
+    'relations.mot.label' => 'biểu hiện → cái có biểu hiện',
+    'relations.whp.label' => 'toàn thể → bộ phận',
+    'relations.def.label' => 'đặc tính định nghĩa',
+    'relations.ac.label' => 'mệnh đề tuyệt đối',
+    'relations.avc.label' => 'mệnh đề tuyệt đối theo thể',
+    'relations.qus.label' => 'bên trong trích dẫn → dấu trích dẫn',
+    'relations.qum.label' => 'dấu trích dẫn → bên ngoài trích dẫn',
+    'relations.enu.label' => 'liệt kê → dấu gạch ngang',
+    'relations.enm.label' => 'dấu gạch ngang → cái được liệt kê',
+];

+ 39 - 0
api-v13/resources/lang/vi/home.php

@@ -0,0 +1,39 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Home Page Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | 首页(/)文案:品牌 hero 与四张分流卡片。
+    |
+    */
+
+    'title' => 'WikiPāli · Bách khoa Thánh điển Pāli',
+    'hero_title' => 'WikiPāli',
+    'hero_lead' => 'Bách khoa Thánh điển Pāli — từ dễ đến khó, bước vào thế giới kinh điển Pāli',
+    'cards' => [
+        'library' => [
+            'title' => 'Thư viện Tam Tạng',
+            'lead' => 'Tam Tạng · Chú giải · Phụ chú giải · Từ điển',
+            'cta' => 'Vào thư viện',
+        ],
+        'course' => [
+            'title' => 'Khóa học theo thứ lớp',
+            'lead' => 'Bắt đầu từ số không, học từng bộ một',
+            'cta' => 'Bắt đầu học',
+        ],
+        'workspace' => [
+            'title' => 'Bàn làm việc dịch thuật',
+            'lead' => 'Thuật ngữ, cộng tác, hiệu đính, xuất bản',
+            'cta' => 'Vào bàn làm việc',
+        ],
+        'development' => [
+            'title' => 'Phát triển mở rộng',
+            'lead' => 'API · MCP · GitHub',
+            'cta' => 'Sắp ra mắt',
+        ],
+    ],
+];

+ 32 - 0
api-v13/resources/lang/vi/labels.php

@@ -0,0 +1,32 @@
+<?php
+
+return [
+    'home' => 'Trang chủ',
+    'translation' => 'Bản dịch',
+    'original' => 'Nguyên bản',
+    'nissaya' => 'Nissaya',
+
+    'script_convertor' => 'Bộ chuyển tự Pāli',
+    'input_script' => 'Chữ viết nguồn',
+    'output_script' => 'Chữ viết đích',
+    'paste_here' => 'Dán văn bản vào đây...',
+    'converted_text' => 'Văn bản sau khi chuyển sẽ hiện ở đây...',
+    'niggahita_label' => 'ṃ / ṁ / ŋ chuyển thành',
+    'script_roman' => 'Pāli Roman Unicode',
+    'script_sangayana' => 'Sangayana',
+    'script_sinhala' => 'Sinhala',
+    'script_sinhala_traditional' => 'Sinhala (truyền thống)',
+    'script_sinhala_modern' => 'Sinhala (hiện đại)',
+    'script_myanmar' => 'Miến Điện',
+    'script_tai_tham' => 'Tai Tham (Lanna)',
+    'script_tai_old' => 'Tai Tham (cổ, không Unicode)',
+    'script_thai' => 'Thái',
+    'script_chinese_detail' => 'Phiên âm Hán ngữ (chi tiết)',
+    'script_chinese_simple' => 'Phiên âm Hán ngữ (giản lược)',
+    'script_chinese_pinyin' => 'Bính âm Hán ngữ',
+    'script_telugu' => 'Telugu',
+
+    'toolbox' => 'Hộp công cụ',
+    'tool_script_convertor' => 'Chuyển tự',
+    'tool_script_convertor_desc' => 'Chuyển văn bản Pāli giữa các hệ chữ viết',
+];

+ 10 - 0
api-v13/resources/lang/vi/language.php

@@ -0,0 +1,10 @@
+<?php
+
+return [
+    'en' => 'English',
+    'pali' => 'pali',
+    'zh' => '中文',
+    'zh-Hans' => '简体中文',
+    'zh-Hant' => '繁体中文',
+    'my' => 'မြန်မာဘာသာ',
+];

+ 160 - 0
api-v13/resources/lang/vi/library.php

@@ -0,0 +1,160 @@
+<?php
+
+return [
+    // index.blade.php
+    'portal_title' => 'WikiPāli · Thư viện Pāli',
+    'portal_hero_title' => 'Thư viện Pāli WikiPāli',
+    'portal_hero_subtitle' => 'Khám phá Tam Tạng · Cửa vào trí tuệ',
+    'search_placeholder_home' => 'Tìm kinh, thuật ngữ, tuyển tập…',
+    'section_tipitaka' => 'Tam Tạng',
+    'enter_tipitaka' => 'Vào Tam Tạng',
+    'more' => 'Xem thêm',
+    'section_recent' => 'Bản dịch mới',
+    'updating_badge' => 'Đang cập nhật',
+    'view_all' => 'Xem tất cả',
+    'badge_new' => 'Mới',
+    'badge_updated' => 'Đã cập nhật',
+
+    // search.blade.php
+    'search_results_title' => 'Kết quả tìm kiếm',
+    'search_title' => 'Tìm kiếm',
+    'search_placeholder' => 'Tìm mục từ, Pāli, Sanskrit…',
+    'searching' => 'Tìm kiếm',
+    'results_found_prefix' => ', tìm thấy',
+    'results_found_suffix' => 'kết quả',
+    'page_prefix' => '(trang',
+    'page_suffix' => ')',
+    'no_results' => ', không tìm thấy kết quả nào',
+    'try_other_keywords' => 'Vui lòng thử từ khóa khác',
+    'filter_by' => 'Lọc theo ',
+    'filter' => '',
+    'all' => 'Tất cả',
+    'did_you_mean' => 'Có phải bạn muốn tìm',
+    'browse_categories' => 'Duyệt theo phân loại',
+
+    // download.blade.php
+    'download' => 'Tải về',
+    'offline_packets' => 'Gói dữ liệu ngoại tuyến cho ứng dụng',
+    'packet_count_suffix' => 'gói',
+    'no_packets' => 'Không có gói nào',
+    'no_packets_desc' => 'Hiện chưa có gói dữ liệu ngoại tuyến nào.',
+    'col_name' => 'Tên gói',
+    'col_size' => 'Kích thước',
+    'col_min_version' => 'Phiên bản tối thiểu',
+    'created_at' => 'Ngày tạo',
+    'col_links' => 'Liên kết tải về',
+    'no_links' => 'Không có liên kết',
+    'min_version_prefix' => 'Phiên bản tối thiểu ',
+
+    // wiki blade files
+    'wiki_encyclopedia' => 'Bách khoa Phật học',
+    'wiki_subtitle' => 'Khám phá Chánh pháp · Cửa vào giác ngộ',
+    'wiki_search_placeholder' => 'Tìm thuật ngữ, kinh điển, nhân vật...',
+    'hot' => 'Nổi bật: ',
+    'wiki_language_divider' => 'Đọc Bách khoa Phật học bằng ngôn ngữ của bạn',
+    'articles' => 'bài',
+    'today_updates' => 'Cập nhật hôm nay',
+    'contributors_suffix' => 'người đóng góp',
+    'today_entry' => 'Mục từ hôm nay',
+    'read_full_entry' => 'Đọc toàn bộ mục từ →',
+    'featured_entries' => 'Mục từ tiêu biểu',
+    'statistics' => 'Thống kê',
+    'total_entries' => 'Tổng số mục từ',
+    'this_month' => 'Tháng này',
+    'contributors' => 'Người đóng góp',
+    'quality_level' => 'Mức chất lượng',
+    'other_versions' => 'Phiên bản khác',
+    'toc' => 'Mục lục',
+    'expand_all' => 'Mở rộng tất cả',
+    'collapse_toc' => 'Thu gọn',
+    'entry_info' => 'Thông tin mục từ',
+    'category' => 'Phân loại',
+    'quality' => 'Chất lượng',
+    'recent_updates' => 'Cập nhật gần đây',
+
+    // anthology
+    'site_name' => 'Thư viện Pāli',
+    'home' => 'Trang chủ',
+    'anthology' => 'Tuyển tập',
+    'anthology_subtitle' => 'Chú giải · Hướng dẫn thiền · Đàm luận Phật pháp',
+    'no_anthology' => 'Chưa có tuyển tập',
+    'search_anthology' => 'Tìm tuyển tập…',
+    'author' => 'Tác giả',
+    'anthology_count_suffix' => 'tuyển tập',
+    'last_updated' => 'Cập nhật lần cuối',
+    'chapter_count' => 'Số chương',
+    'chapters' => 'chương',
+    'read_online' => 'Đọc trực tuyến',
+    'open_in_editor' => 'Mở trong trình biên tập',
+    'about_anthology' => 'Giới thiệu tuyển tập',
+    'anthology_info' => 'Thông tin tuyển tập',
+    'language' => 'Ngôn ngữ',
+    'current_channel' => 'Kênh hiện tại',
+    'created' => 'Ngày tạo',
+    'updated' => 'Ngày cập nhật',
+    'related_anthology' => 'Tuyển tập liên quan',
+    'articles_suffix' => 'bài',
+
+    // tipitaka & reader
+    'tipitaka' => 'Tam Tạng',
+    'categories' => 'Phân loại',
+    'search_tipitaka' => 'Tìm kinh văn và bản dịch Tam Tạng',
+    'type' => 'Loại',
+    'clear_filters' => 'Xóa bộ lọc',
+    'total_prefix' => 'Tổng cộng',
+    'book_unit' => 'quyển',
+    'sort' => 'Sắp xếp',
+    'weekly_picks' => 'Tuyển chọn trong tuần',
+    'active_authors' => 'Tác giả tích cực',
+    'publisher' => 'Nhà xuất bản',
+    'pali' => 'Pāli',
+    'book_info' => 'Thông tin sách',
+    'editor' => 'Trình biên tập',
+    'settings' => 'Cài đặt',
+    'versions' => 'Phiên bản',
+    'logout' => 'Đăng xuất',
+    'select_version' => 'Chọn phiên bản',
+    'no_content' => 'Không có nội dung',
+    'prev_article' => 'Trước',
+    'next_article' => 'Sau',
+    'tags' => 'Thẻ',
+    'reading_settings' => 'Cài đặt đọc',
+    'show_original' => 'Hiện nguyên bản',
+    'toggle_original' => 'Bật/tắt hiển thị nguyên bản',
+    'ui_language' => 'Ngôn ngữ giao diện',
+    'auto' => 'Tự động',
+    'lang_zh_hans' => 'Tiếng Trung giản thể',
+    'lang_en' => 'Tiếng Anh',
+    'pali_script' => 'Chữ viết Pāli',
+    'script_roman' => 'La-tinh',
+    'script_myanmar' => 'Miến Điện',
+    'script_thai' => 'Thái',
+    'commentary_version' => 'Phiên bản chú giải',
+    'none' => 'Không',
+    'cancel' => 'Hủy',
+    'confirm' => 'Đồng ý',
+    'no_toc' => 'Sách này không có mục lục',
+
+    // course (course/index.blade.php + course/history.blade.php)
+    'course' => 'Khóa học',
+    'course_hero_title' => 'Khóa học',
+    'course_hero_subtitle' => 'Nghiên cứu kinh điển cùng các chuyên gia Pāli khắp thế giới',
+    'course_search_placeholder' => 'Tìm khóa học, giảng viên…',
+    'course_stat_total' => 'Khóa học công khai',
+    'course_stat_open' => 'Đang mở ghi danh',
+    'course_stat_closed' => 'Đã kết thúc',
+    'course_section_latest' => 'Khóa học mới nhất',
+    'course_section_open' => 'Đang mở ghi danh',
+    'course_section_history' => 'Khóa học đã qua',
+    'course_view_all' => 'Xem tất cả',
+    'course_status_open' => 'Đang ghi danh',
+    'course_status_closed' => 'Đã kết thúc',
+    'course_period' => 'Khóa :n',
+    'course_members' => ':n học viên',
+    'course_signup' => 'Ghi danh',
+    'course_no_latest' => 'Chưa có khóa học nào',
+    'course_no_open' => 'Không có khóa học nào đang mở ghi danh',
+    'course_no_history' => 'Chưa có khóa học đã qua',
+    'course_history_title' => 'Khóa học đã qua',
+    'course_history_subtitle' => 'Các khóa học công khai đã kết thúc — xem lại những nhóm học trước đây',
+];

+ 19 - 0
api-v13/resources/lang/vi/pagination.php

@@ -0,0 +1,19 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Pagination Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used by the paginator library to build
+    | the simple pagination links. You are free to change them to anything
+    | you want to customize your views to better match your application.
+    |
+    */
+
+    'previous' => '&laquo; Trước',
+    'next' => 'Sau &raquo;',
+
+];

+ 22 - 0
api-v13/resources/lang/vi/passwords.php

@@ -0,0 +1,22 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Password Reset Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are the default lines which match reasons
+    | that are given by the password broker for a password update attempt
+    | has failed, such as for an invalid token or invalid new password.
+    |
+    */
+
+    'reset' => 'Mật khẩu của bạn đã được đặt lại!',
+    'sent' => 'Chúng tôi đã gửi liên kết đặt lại mật khẩu qua email của bạn!',
+    'throttled' => 'Vui lòng đợi một lát trước khi thử lại.',
+    'token' => 'Mã đặt lại mật khẩu này không hợp lệ.',
+    'user' => 'Không tìm thấy người dùng nào với địa chỉ email này.',
+
+];

+ 33 - 0
api-v13/resources/lang/vi/site.php

@@ -0,0 +1,33 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | site Language Lines
+    |--------------------------------------------------------------------------
+    |
+    |
+    */
+
+    'logo' => '/logo.png',
+    'title' => 'wikipali',
+    'subhead' => 'wikipali',
+    'keywords' => ['pali', 'buddhistm'],
+    'description' => 'wikipali',
+    'copyright' => 'iapt 2022',
+    'author.name' => 'iapt',
+    'author.email' => 'visuddhindand@gmail.com',
+    'nav' => [
+        'home' => 'Trang chủ',
+        'tipitaka' => 'Tam Tạng',
+        'wiki' => 'Bách khoa',
+        'anthology' => 'Tuyển tập',
+        'course' => 'Khóa học',
+        'download' => 'Tải về',
+
+        'menu' => 'Menu',
+        'open_menu' => 'Mở menu',
+        'close_menu' => 'Đóng menu',
+    ],
+];

+ 162 - 0
api-v13/resources/lang/vi/validation.php

@@ -0,0 +1,162 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Validation Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines contain the default error messages used by
+    | the validator class. Some of these rules have multiple versions such
+    | as the size rules. Feel free to tweak each of these messages here.
+    |
+    */
+
+    'accepted' => 'Bạn phải chấp nhận :attribute.',
+    'accepted_if' => 'Bạn phải chấp nhận :attribute khi :other là :value.',
+    'active_url' => ':attribute không phải là một URL hợp lệ.',
+    'after' => ':attribute phải là ngày sau :date.',
+    'after_or_equal' => ':attribute phải là ngày sau hoặc bằng :date.',
+    'alpha' => ':attribute chỉ được chứa chữ cái.',
+    'alpha_dash' => ':attribute chỉ được chứa chữ cái, chữ số, dấu gạch ngang và gạch dưới.',
+    'alpha_num' => ':attribute chỉ được chứa chữ cái và chữ số.',
+    'array' => ':attribute phải là một mảng.',
+    'before' => ':attribute phải là ngày trước :date.',
+    'before_or_equal' => ':attribute phải là ngày trước hoặc bằng :date.',
+    'between' => [
+        'numeric' => ':attribute phải nằm trong khoảng :min đến :max.',
+        'file' => ':attribute phải nằm trong khoảng :min đến :max kilobyte.',
+        'string' => ':attribute phải có độ dài từ :min đến :max ký tự.',
+        'array' => ':attribute phải có từ :min đến :max phần tử.',
+    ],
+    'boolean' => 'Trường :attribute phải là true hoặc false.',
+    'confirmed' => 'Xác nhận :attribute không khớp.',
+    'current_password' => 'Mật khẩu không đúng.',
+    'date' => ':attribute không phải là ngày hợp lệ.',
+    'date_equals' => ':attribute phải là ngày bằng :date.',
+    'date_format' => ':attribute không đúng định dạng :format.',
+    'declined' => ':attribute phải bị từ chối.',
+    'declined_if' => ':attribute phải bị từ chối khi :other là :value.',
+    'different' => ':attribute và :other phải khác nhau.',
+    'digits' => ':attribute phải có :digits chữ số.',
+    'digits_between' => ':attribute phải có từ :min đến :max chữ số.',
+    'dimensions' => ':attribute có kích thước hình ảnh không hợp lệ.',
+    'distinct' => 'Trường :attribute có giá trị trùng lặp.',
+    'email' => ':attribute phải là một địa chỉ email hợp lệ.',
+    'ends_with' => ':attribute phải kết thúc bằng một trong các giá trị: :values.',
+    'enum' => ':attribute đã chọn không hợp lệ.',
+    'exists' => ':attribute đã chọn đã tồn tại.',
+    'file' => ':attribute phải là một tập tin.',
+    'filled' => 'Trường :attribute phải có giá trị.',
+    'gt' => [
+        'numeric' => ':attribute phải lớn hơn :value.',
+        'file' => ':attribute phải lớn hơn :value kilobyte.',
+        'string' => ':attribute phải dài hơn :value ký tự.',
+        'array' => ':attribute phải có nhiều hơn :value phần tử.',
+    ],
+    'gte' => [
+        'numeric' => ':attribute phải lớn hơn hoặc bằng :value.',
+        'file' => ':attribute phải lớn hơn hoặc bằng :value kilobyte.',
+        'string' => ':attribute phải dài hơn hoặc bằng :value ký tự.',
+        'array' => ':attribute phải có :value phần tử trở lên.',
+    ],
+    'image' => ':attribute phải là một hình ảnh.',
+    'in' => ':attribute đã chọn không hợp lệ.',
+    'in_array' => 'Trường :attribute không tồn tại trong :other.',
+    'integer' => ':attribute phải là một số nguyên.',
+    'ip' => ':attribute phải là một địa chỉ IP hợp lệ.',
+    'ipv4' => ':attribute phải là một địa chỉ IPv4 hợp lệ.',
+    'ipv6' => ':attribute phải là một địa chỉ IPv6 hợp lệ.',
+    'mac_address' => ':attribute phải là một địa chỉ MAC hợp lệ.',
+    'json' => ':attribute phải là một chuỗi JSON hợp lệ.',
+    'lt' => [
+        'numeric' => ':attribute phải nhỏ hơn :value.',
+        'file' => ':attribute phải nhỏ hơn :value kilobyte.',
+        'string' => ':attribute phải ngắn hơn :value ký tự.',
+        'array' => ':attribute phải có ít hơn :value phần tử.',
+    ],
+    'lte' => [
+        'numeric' => ':attribute phải nhỏ hơn hoặc bằng :value.',
+        'file' => ':attribute phải nhỏ hơn hoặc bằng :value kilobyte.',
+        'string' => ':attribute phải ngắn hơn hoặc bằng :value ký tự.',
+        'array' => ':attribute không được có nhiều hơn :value phần tử.',
+    ],
+    'max' => [
+        'numeric' => ':attribute không được lớn hơn :max.',
+        'file' => ':attribute không được lớn hơn :max kilobyte.',
+        'string' => ':attribute không được dài hơn :max ký tự.',
+        'array' => ':attribute không được có nhiều hơn :max phần tử.',
+    ],
+    'mimes' => ':attribute phải là tập tin thuộc loại: :values.',
+    'mimetypes' => ':attribute phải là tập tin thuộc loại: :values.',
+    'min' => [
+        'numeric' => ':attribute phải ít nhất là :min.',
+        'file' => ':attribute phải ít nhất :min kilobyte.',
+        'string' => ':attribute phải có ít nhất :min ký tự.',
+        'array' => ':attribute phải có ít nhất :min phần tử.',
+    ],
+    'multiple_of' => ':attribute phải là bội số của :value.',
+    'not_in' => ':attribute đã chọn không hợp lệ.',
+    'not_regex' => 'Định dạng :attribute không hợp lệ.',
+    'numeric' => ':attribute phải là một số.',
+    'password' => 'Mật khẩu không đúng.',
+    'present' => 'Trường :attribute phải tồn tại.',
+    'prohibited' => 'Trường :attribute bị cấm.',
+    'prohibited_if' => 'Trường :attribute bị cấm khi :other là :value.',
+    'prohibited_unless' => 'Trường :attribute bị cấm trừ khi :other nằm trong :values.',
+    'prohibits' => 'Trường :attribute không cho phép :other xuất hiện.',
+    'regex' => 'Định dạng :attribute không hợp lệ.',
+    'required' => 'Trường :attribute là bắt buộc.',
+    'required_if' => 'Trường :attribute là bắt buộc khi :other là :value.',
+    'required_unless' => 'Trường :attribute là bắt buộc trừ khi :other nằm trong :values.',
+    'required_with' => 'Trường :attribute là bắt buộc khi có :values.',
+    'required_with_all' => 'Trường :attribute là bắt buộc khi có tất cả :values.',
+    'required_without' => 'Trường :attribute là bắt buộc khi không có :values.',
+    'required_without_all' => 'Trường :attribute là bắt buộc khi không có bất kỳ giá trị nào trong :values.',
+    'same' => ':attribute và :other phải giống nhau.',
+    'size' => [
+        'numeric' => ':attribute phải bằng :size.',
+        'file' => ':attribute phải bằng :size kilobyte.',
+        'string' => ':attribute phải có :size ký tự.',
+        'array' => ':attribute phải chứa :size phần tử.',
+    ],
+    'starts_with' => ':attribute phải bắt đầu bằng một trong các giá trị: :values.',
+    'string' => ':attribute phải là một chuỗi ký tự.',
+    'timezone' => ':attribute phải là một múi giờ hợp lệ.',
+    'unique' => ':attribute đã được sử dụng.',
+    'uploaded' => 'Tải lên :attribute thất bại.',
+    'url' => ':attribute phải là một URL hợp lệ.',
+    'uuid' => ':attribute phải là một UUID hợp lệ.',
+
+    /*
+    |--------------------------------------------------------------------------
+    | Custom Validation Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify custom validation messages for attributes using the
+    | convention "attribute.rule" to name the lines. This makes it quick to
+    | specify a specific custom language line for a given attribute rule.
+    |
+    */
+
+    'custom' => [
+        'attribute-name' => [
+            'rule-name' => 'custom-message',
+        ],
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Custom Validation Attributes
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used to swap our attribute placeholder
+    | with something more reader friendly such as "E-Mail Address" instead
+    | of "email". This simply helps us make our message more expressive.
+    |
+    */
+
+    'attributes' => [],
+
+];