63 lines
1.5 KiB
Markdown
63 lines
1.5 KiB
Markdown
# i18n Guidelines
|
|
|
|
**Version:** 1.8.4
|
|
**Last Updated:** 2026-03-24
|
|
**Location:** `specs/05-Engineering-Guidelines/05-08-i18n-guidelines.md`
|
|
|
|
---
|
|
|
|
## Code Comments & Documentation
|
|
|
|
- ✅ **Comments:** Write in Thai (for team understanding)
|
|
- ✅ **JSDoc:** Use Thai to explain business logic
|
|
- ✅ **Error messages:** Store as keys in i18n files, not hardcoded
|
|
|
|
---
|
|
|
|
## i18n Structure (Frontend)
|
|
|
|
```
|
|
locales/
|
|
├── th/
|
|
│ ├── common.json # General messages
|
|
│ ├── errors.json # Error messages
|
|
│ ├── forms.json # Form labels & validation
|
|
│ └── modules/
|
|
│ ├── correspondence.json
|
|
│ └── rfa.json
|
|
└── en/ # Reserved for future
|
|
```
|
|
|
|
---
|
|
|
|
## Validation Messages (Zod)
|
|
|
|
```typescript
|
|
// ✅ CORRECT — Use reference key
|
|
z.string().min(3, { message: 'errors:min_length_3' });
|
|
// Then resolve in frontend via i18n hook
|
|
|
|
// ❌ WRONG — Hardcode Thai in schema
|
|
z.string().min(3, 'กรุณากรอกอย่างน้อย 3 ตัวอักษร'); // Makes testing difficult
|
|
```
|
|
|
|
---
|
|
|
|
## Language Rules Summary
|
|
|
|
| Context | Language |
|
|
| --------------- | ---------- |
|
|
| Code (variables, functions, classes) | English |
|
|
| Comments | Thai |
|
|
| JSDoc | Thai |
|
|
| Error messages | i18n keys |
|
|
| UI labels | i18n files |
|
|
| Documentation | Thai |
|
|
|
|
---
|
|
|
|
## Reference
|
|
|
|
- [Frontend Guidelines](05-03-frontend-guidelines.md)
|
|
- [Glossary](../00-overview/00-02-glossary.md)
|