299Languages (i18n)
Text of each message key in each language. {0}, {1} are filled with arguments.
Try it
Translations
Spring MessageSource backed by SQL Server - missing text falls back to the default languageMatrix (orange = missing)
| Key | 🇬🇧 en (0 missing) | 🇹🇭 th (0 missing) | 🇯🇵 ja (5 missing) |
|---|---|---|---|
| app.title | Sales Portal | ระบบงานขาย | 販売ポータル |
| button.cancel | Cancel | ยกเลิก | キャンセル |
| button.delete | Delete | ลบ | missing |
| button.save | Save | บันทึก | 保存 |
| label.amount | Amount | จำนวนเงิน | 金額 |
| label.date | Date | วันที่ | missing |
| menu.customers | Customers | ลูกค้า | 顧客 |
| menu.dashboard | Dashboard | แดชบอร์ด | ダッシュボード |
| menu.reports | Reports | รายงาน | missing |
| msg.items | You have {0} new orders | คุณมีคำสั่งซื้อใหม่ {0} รายการ | missing |
| msg.saved | Saved successfully | บันทึกเรียบร้อย | missing |
| msg.welcome | Welcome back, {0}! | ยินดีต้อนรับกลับมา คุณ{0} | おかえりなさい、{0}さん |
Preview a page in one language
| getMessage(key, args) | Result |
|---|---|
| app.title | ระบบงานขาย |
| menu.dashboard | แดชบอร์ด |
| menu.reports | รายงาน |
| msg.welcome, [Somchai] | ยินดีต้อนรับกลับมา คุณSomchai |
| msg.items, [3] | คุณมีคำสั่งซื้อใหม่ 3 รายการ |
| button.save | บันทึก |
| button.delete | ลบ |
| label.date | วันที่ |
| # | Key | Language | Text | Status | |
|---|---|---|---|---|---|
| 1 | app.title | en - English | Sales Portal | Active | ✏️ |
| 3 | app.title | ja - Japanese | 販売ポータル | Active | ✏️ |
| 2 | app.title | th - Thai | ระบบงานขาย | Active | ✏️ |
| 15 | button.cancel | en - English | Cancel | Active | ✏️ |
| 17 | button.cancel | ja - Japanese | キャンセル | Active | ✏️ |
| 16 | button.cancel | th - Thai | ยกเลิก | Active | ✏️ |
| 18 | button.delete | en - English | Delete | Active | ✏️ |
| 19 | button.delete | th - Thai | ลบ | Active | ✏️ |
| 12 | button.save | en - English | Save | Active | ✏️ |
| 14 | button.save | ja - Japanese | 保存 | Active | ✏️ |
| 13 | button.save | th - Thai | บันทึก | Active | ✏️ |
| 27 | label.amount | en - English | Amount | Active | ✏️ |
| 29 | label.amount | ja - Japanese | 金額 | Active | ✏️ |
| 28 | label.amount | th - Thai | จำนวนเงิน | Active | ✏️ |
| 30 | label.date | en - English | Date | Active | ✏️ |
Showing 1–15 of 31
🎓 Learn: how this master is built table translation
Key points
- java.text.MessageFormat fills {0}: "Welcome back, {0}!" + ["Somchai"].
- UNIQUE (message_key, lang_code): one text per key and language.
Code
- Entity
domain/Translation.java- Repository
repo/TranslationRepository.java- Definition
MasterRegistry: "translations"- Page / form
web/MasterController.java- Try-it panel
templates/tools/i18n-matrix.html- REST API
GET /api/i18n/th/msg.welcome?args=Somchai
SQL to try in SSMS (database MasterDataLabDB)
-- keys that have no Thai text yet SELECT DISTINCT e.message_key FROM translation e WHERE e.lang_code = 'en' AND NOT EXISTS (SELECT 1 FROM translation t WHERE t.message_key = e.message_key AND t.lang_code = 'th');