# Localize Ms

> Use when translating or localizing UI strings, marketing copy, documentation, or any source text into Malay (Bahasa Melayu) for Malaysia, Brunei, and Singapore. Malay is NOT Indonesian — different tech vocabulary (muat naik/muat turun/tetapan not unggah/unduh/pengaturan), 1,234.56 format, RM Ringgit, and dangerous false friends (butuh, pusing, sulit differ). Enforces the affix system with nasal a…

- **Type:** Skill
- **Install:** `agentstack add skill-i18n-agent-i18nstack-localize-ms`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [i18n-agent](https://agentstack.voostack.com/s/i18n-agent)
- **Installs:** 0
- **Category:** [Agent Skills](https://agentstack.voostack.com/c/agent-skills)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [i18n-agent](https://github.com/i18n-agent)
- **Source:** https://github.com/i18n-agent/i18nstack/tree/main/localize-ms
- **Website:** https://i18nagent.ai

## Install

```sh
agentstack add skill-i18n-agent-i18nstack-localize-ms
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# Localize: Malaysian / Malay (ms → Bahasa Melayu)

You are translating source text into Malaysian / Malay for Malaysia, Brunei, and Singapore Malay-speaking audiences. This skill captures grammar, register, UI conventions, formatting, and Malaysian-specific failure modes — with critical disambiguation from its sister language Indonesian (Bahasa Indonesia / id).

## Scope & Variants

**Primary standards:**
- **ms-MY** — Bahasa Melayu / Bahasa Malaysia as used in Malaysia. Official language of Malaysia.
- **ms-BN** — Malay as used in Brunei. Closely follows Malaysian standard with minor differences.
- **ms-SG** — Malay as a co-official language of Singapore. Also closely follows Malaysian standard.

For UI, write **standard Malaysian** (bahasa baku) which works for all three audiences.

**Native names:**
- **Bahasa Melayu** — the language (older / general / pan-Malay name)
- **Bahasa Malaysia** — the language as defined by Malaysia (post-1969, emphasizes national identity)

In modern Malaysian usage, both terms are interchangeable in practice. Government documents prefer "Bahasa Malaysia"; linguistic / regional contexts prefer "Bahasa Melayu".

## Identity Guardrail — NOT Indonesian (CRITICAL)

**Malaysian (ms) and Indonesian (id) are sister languages with ~85% lexical overlap but distinct standards.** They are mutually intelligible to a degree but have **systematically different vocabulary in tech, UI, and modern domains** because they were standardized separately:

- **Malaysian** — heavy Arabic / Islamic and English influence; less Dutch influence.
- **Indonesian** — heavy Dutch colonial influence (kantor, sepatu, jendela), plus Javanese, Sanskrit, Arabic.

**Mixing the two is a quality failure**, especially in tech UI. NEVER translate Malaysian content via Indonesian intermediaries or vice versa.

### Tech Vocabulary Disambiguation Table (the most important table in this skill)

| English | Malaysian (USE) | Indonesian (DO NOT USE for Malaysian) |
|---|---|---|
| Upload | **muat naik** | unggah |
| Download | **muat turun** | unduh |
| Settings | **tetapan** | pengaturan / setelan |
| Update | **kemas kini** | perbarui |
| Window | **tetingkap** | jendela |
| Message | **mesej** | pesan |
| Delete | **padam** | hapus |
| Paste | **tampal** | tempel |
| File | **fail** | file / berkas |
| Browse (files) | **semak imbas** | jelajahi / telusuri |
| Browse (web) | **melayari** (web-surf only — NOT files) | (different word) |
| Office | **pejabat** | kantor (Indonesian — in Malaysian "kantor" is rare/foreign) |
| Pharmacy | **farmasi** | apotek |
| Cinema | **pawagam** | bioskop |
| Hospital | **hospital** | rumah sakit |
| Money | **wang** / duit | uang |
| Car | **kereta** | mobil |
| Train | **keretapi** | kereta api (Indonesian, with space) |
| Police | **polis** | polisi (Indonesian) |
| Can / able | **boleh** | bisa (Indonesian — DANGEROUS in Malaysian: see false friends) |

### File Browse vs Web Surf — A Critical Malaysian Distinction (severity 1.5)

Malaysian has **TWO distinct words** for English "browse":

| Context | Word | Example |
|---|---|---|
| **File browsing** (file picker, upload dialog) | **semak imbas** | "Klik untuk semak imbas fail" (Click to browse files) |
| **Web browsing** (surfing the internet) | **melayari** | "Melayari internet" (browsing the internet); "pelayar web" (web browser) |

- ❌ "Klik untuk melayari" (in file-upload context) — means "click to surf the web"
- ✅ "**Klik untuk semak imbas**" (correct file context)
- ❌ "Semak imbas internet" — wrong
- ✅ "**Melayari internet**" (correct web context)

This distinction does NOT exist in Indonesian (which uses jelajahi/telusuri for both). Malaysian translators get this wrong constantly.

### DANGEROUS False Friends with Indonesian (severity 2.5)

**These words exist in BOTH languages but mean different things.** Using the Indonesian sense in Malaysian text is a serious error.

| Word | Malaysian meaning | Indonesian meaning | What to use in Malaysian |
|---|---|---|---|
| **butuh** | **VULGAR (genitalia)** | need (standard verb) | Use **perlu** instead |
| **pusing** | to spin / turn around | dizzy / headache | For "dizzy" use **pening** |
| **punggung** | **buttocks** | back (body part) | For "back" use **belakang** |
| **sulit** | confidential / secret | difficult | For "difficult" use **susah** / **sukar** |
| **kereta** | car (everyday) | train (short for "kereta api") | "kereta" = car in Malaysian |
| **comel** | cute (common) | (rare; sometimes pretty) | OK to use |
| **abang** | older brother / boyfriend | older brother | Context-dependent |
| **buncit** | (round/pot-bellied) | (round/pot-bellied) | mostly same |
| **kacau** | disturb / mess up | confusing / mixed up | mostly same |

**Critical takeaway:** NEVER use `butuh` in Malaysian text — it's vulgar. Use `perlu` (need) or `memerlukan` (to need).

### Day Names — DIFFER from Indonesian

| Day | Malaysian | Indonesian |
|---|---|---|
| Monday | **Isnin** | Senin |
| Tuesday | Selasa | Selasa (same) |
| Wednesday | Rabu | Rabu (same) |
| Thursday | **Khamis** | Kamis |
| Friday | **Jumaat** | Jumat |
| Saturday | Sabtu | Sabtu (same) |
| Sunday | **Ahad** | Minggu (Indonesian — in Malaysian "Minggu" means "week", NEVER "Sunday") |

`Minggu` in Malaysian = week only. `Ahad` = Sunday. Confusing them is a quality failure.

### Times of Day — 3 periods (NOT 4 like Indonesian)

| Period | Malaysian | Approximate time | Greeting |
|---|---|---|---|
| Morning | **pagi** | 04:00–12:00 | Selamat pagi |
| Afternoon / Evening | **petang** | 12:00–19:00 | Selamat petang |
| Night | **malam** | 19:00–04:00 | Selamat malam |

(Indonesian uses 4: pagi / siang / sore / malam. Malaysian does NOT use "siang" or "sore" in formal time-of-day distinction; "petang" covers both.)

### Number Format — Anglo / English-influenced

- **Decimal separator: period** (3**.**14)
- **Thousands separator: comma** (1**,**000**,**000)
- Format: `1,234,567.89`
- ❌ 3,14 (European) → ✅ **3.14**
- ❌ 1.000.000 (Indonesian) → ✅ **1,000,000**
- This is the **OPPOSITE** of Indonesian.

### Currency: MYR Ringgit

- **Malaysia uses the ringgit (RM / MYR).** NOT Indonesian rupiah.
- Format: **`RM 1,000`** or **`RM1,000`** or **`RM 1,234.56`** (comma thousands, period decimal)
- Subdivision: 100 sen (rarely shown in everyday UI for amounts ≥ RM 1)
- ❌ Rp 1.000.000 (Indonesian) → ✅ **RM ...** (different currency entirely)
- ❌ RM 1.000,00 (Indonesian format) → ✅ **RM 1,000.00**

Brunei: BND (Brunei dollar, B$ or BND); equivalent to SGD 1:1 by peg.
Singapore Malay: SGD (S$). When translating for Brunei or Singapore audiences, adjust currency accordingly.

## Register

**Default level: FORMAL (Anda)** for software UI, errors, documentation, marketing.

| Level | Pronoun | Use case |
|---|---|---|
| Formal | **Anda** (capitalized) | Business UI, professional software, customer-facing |
| Standard polite | **awak** | General polite peer-level usage |
| Familiar | **kamu** | Casual, friends, peers |
| Honorifics | **Tuan** (Mr/Sir), **Puan** (Mrs/Madam), **Encik** (Mr), **Cik** (Miss / unmarried) | Direct address with name |
| Very formal | **Datuk** (titled), **Datin** (wife of Datuk), **Dato'**, **Tan Sri**, **Tun** | Royal/honorific titles |

**Politeness marker:** `Sila` (please) — used frequently for polite requests.

- "**Sila** tunggu" (Please wait)
- "**Sila** masukkan kata laluan" (Please enter the password)
- "**Sila** klik di sini" (Please click here)

**Rules:**
- Choose ONE pronoun level per file.
- Do NOT mix BM (Bahasa Melayu) with BI (Bahasa Inggeris / English) or with Indonesian within the same sentence.
- Use `Sila` liberally for polite UI requests.

**Examples:**
- ❌ "Anda nak delete tak?" (formal Anda + colloquial nak + English delete + colloquial tak) → ✅ "**Adakah anda ingin memadam fail ini?**"
- ❌ "kamu boleh + Sila anda" (mixed pronouns) → ✅ "**Sila masukkan kata laluan anda**"

### Formal vs Colloquial Vocabulary (severity 1.5)

Professional UI must use **bahasa baku (standard formal Malay)**:

| Colloquial (AVOID) | Formal (USE) | Meaning |
|---|---|---|
| tak | **tidak** | not |
| nak | **hendak** / **mahu** | want |
| je / jer | **sahaja** | only |
| dah | **sudah** | already |
| kat | **di** / **pada** | at |
| ni / tu | **ini** / **itu** | this / that |
| sikit | **sedikit** | a little |
| macam | **seperti** | like / similar to |
| sebab | **kerana** | because |
| camne / macam mana | **bagaimana** | how |
| dapat | **memperoleh** / **mendapat** | get / obtain (context) |
| boleh tak | **bolehkah** | can (you)? |

## Critical Hard Rules

### Affix System: me- / di- / ber- / -kan / -i (severity 2.0)

Malaysian grammar runs on **affixation** — same system as Indonesian:

| Affix | Function | Example |
|---|---|---|
| **me-** | active transitive verb | menulis (write), membaca (read), mengirim (send) |
| **di-** | passive | ditulis (was written), dibaca (was read) |
| **ber-** | intransitive / stative | berlari (run), berdiri (stand) |
| **ke-** | nominal | kebersihan (cleanliness) |
| **pe-** | agent noun | penulis (writer) |
| **-kan** | transitive / causative | menggunakan (use, with object) |
| **-i** | intensive / locative | memenuhi (fulfill) |
| **-an** | abstract noun | bulanan (monthly), tulisan (writing) |

### Nasal Assimilation with me- (severity 1.5)

The `me-` prefix changes form based on the **initial consonant of the root**:

| Root consonant | Becomes | Example |
|---|---|---|
| **p, b, f** | mem- | padam → **mem**adam (delete) |
| **t, d** | men- | tulis → **men**ulis (write) |
| **k, g, h** | meng- | kemas → **meng**emas (tidy), guna → **meng**guna (use) |
| **s** | meny- | simpan → **meny**impan (save) |
| **vowels** | meng- | ambil → **meng**ambil (take) |
| **l, m, n, r, w, y, ng, ny** | me- (no change) | larang → **me**larang (forbid) |

**Common errors:**
- ❌ mepadam → ✅ **memadam** (p → m)
- ❌ metulis → ✅ **menulis** (t → n)
- ❌ mekemas → ✅ **mengemas** (k → ng)
- ❌ mesimpan → ✅ **menyimpan** (s → ny)

### Transitive -kan Suffix (severity 2.0)

**Verbs with direct objects, or in imperative/suggestion contexts, MUST use the -kan suffix.**

| Wrong | Correct |
|---|---|
| Pertimbang untuk membetulkan | **Pertimbangkan** untuk membetulkan |
| Guna pemboleh ubah | **Gunakan** pemboleh ubah |
| Tambah kandungan | **Tambahkan** kandungan |

### "untuk" + Verb Requires me- Prefix (severity 2.0)

When `untuk` (to / in order to) introduces a verb phrase, the verb MUST be in the me- prefixed form.

| Wrong | Correct |
|---|---|
| untuk **muat naik** | untuk **memuat naik** |
| untuk **edit** dokumen | untuk **mengedit** dokumen |
| untuk **tukar** format | untuk **menukar** format |

Note: `muat naik` (upload) takes me- → `memuat naik`. The compound stays intact; only the first verb takes the prefix.

### Reduplication for Plurality (severity 2.0)

Malaysian has **no grammatical number marker**. Plural is marked by **reduplication** — but ONLY when no number is present.

| Context | Form | Example |
|---|---|---|
| Plural, no number | **reduplication** | "Upload Files" → "Muat naik **fail-fail**" |
| Plural, no number | **reduplication** | "View books" → "Lihat **buku-buku**" |
| With number | **NO reduplication** | "5 files" → "5 **fail**" (NOT "5 fail-fail") |
| ICU with # | **NO reduplication** | `{count, plural, other {# fail}}` |

ICU pattern (Malaysian has only `other` effectively):
```icu
{count, plural,
  other {# fail}
}
```

### Adverb Placement — After the Verb (severity 1.5)

Manner adverbs (`secara X` / `dengan X`) follow the **main verb**:

| Wrong (adverb before verb) | Correct (adverb after verb) |
|---|---|
| akan **secara automatik** mengesan | akan mengesan **secara automatik** |
| **secara automatik** akan mengesan | akan mengesan **secara automatik** |

## UI Conventions

### Button Labels — Short Imperative

| English | Malaysian | NOT (Indonesian) |
|---|---|---|
| Save | **Simpan** | (same) |
| Delete | **Padam** | Hapus |
| Cancel | **Batal** | (same) |
| Submit | **Hantar** | Kirim |
| Upload | **Muat naik** | Unggah |
| Download | **Muat turun** | Unduh |
| Search | **Cari** | (same) |
| Edit | **Edit** / **Sunting** | |
| Copy | **Salin** | (same) |
| Paste | **Tampal** | Tempel |
| Close | **Tutup** | (same) |
| Open | **Buka** | (same) |
| Browse (files) | **Semak imbas** | Jelajahi / Telusuri |
| OK / Confirm | **OK** / **Sahkan** | |

❌ "Menyimpan" (progressive form, not imperative) on a button → ✅ "**Simpan**"
❌ "Penyimpanan" (nominalization) on a button → ✅ "**Simpan**"

### Status Messages — Impersonal Progressive

Use **me- prefix** or **sedang + verb** for ongoing status:

| Wrong (first person) | Correct (impersonal) |
|---|---|
| Saya sedang memuatkan... | **Memuatkan...** / **Sedang memuatkan...** |
| Kami menyimpan... | **Menyimpan...** |

### Drag-and-Drop Vocabulary

- **seret** = drag (same as Indonesian — one of the few shared tech terms)
- **lepas** / **lepaskan** = drop / release
- ❌ "drag" / "drop" (English) — wrong

```
✅ Seret fail ke sini                       (drag files here)
✅ Seret dan lepas fail ke sini             (drag and drop files here)
✅ Lepaskan untuk memuat naik               (release to upload)
❌ Drag fail ke sini
❌ Release untuk muat naik
```

### Error Messages — Polite, Direct

- ❌ "Anda salah" (you are wrong — too direct)
- ✅ "**Maaf, terdapat ralat**" (Sorry, there is an error — polite)
- ✅ "**Fail tidak dapat disimpan**" (File cannot be saved — direct predicate)
- ✅ "**Sila cuba sekali lagi**" (Please try again)

Malaysian culture values harmony and indirect communication. Add `Sila` (please) and `Maaf` (sorry) liberally in error/instruction text.

### Redundant Word Patterns

| Wrong (calque) | Correct |
|---|---|
| sekurang-kurangnya {min} aksara **panjang** | sekurang-kurangnya {min} aksara |
| 5 minit **panjang** | 5 minit |

`panjang` (long) is implicit in length/duration — don't translate it literally from English.

## Punctuation, Numbers, Dates, Currency

### Quotation Marks
- Standard double quotes `"..."` — most common
- Single quotes `'...'` for nested

### Numbers (Anglo format — opposite of Indonesian)
- Decimal separator: **period** (3.14)
- Thousands separator: **comma** (1,000,000)
- Format: `1,234,567.89`
- ❌ 3,14 → ✅ **3.14**
- ❌ 1.000.000 → ✅ **1,000,000**

### Dates — DD/MM/YYYY
- Numeric: **15/01/2024**
- Word form: **15 Januari 2024** or **15hb Januari 2024** (`hb` = haribulan = "day-of-month", optional)
- Long form: **Isnin, 15 Januari 2024**

Malaysian months (capitalized):
Januari, Februari, Mac, April, Mei, Jun, Julai, Ogos, September, Oktober, November, Disember.

**Note month spelling differences from Indonesian:**

| Month | Malaysian | Indonesian |
|---|---|---|
| March | **Mac** | Maret |
| June | **Jun** | Juni |
| July | **Julai** | Juli |
| August | **Ogos** | Agustus |
| December | **Disember** | Desember |

### Time
- 24-hour: `14:30`
- 12-hour common in spoken: `2:30 petang` (2:30 PM in afternoon period)
- AM/PM equivalents: pagi (AM), petang (PM afternoon), malam (PM night)

### Currency: MYR Ringgit
- Format: **`RM 1,000`** or **`RM1,000`** or **`RM 1,234.56`**
- ❌ Rp ... → ✅ **RM ...**

### Comma Rules

**NO comma before coordinating conjunctions** (atau, dan):
- ❌ "Seret fail ke sini, atau klik untuk semak imbas" → ✅ "Seret fail ke sini atau klik untuk semak imbas"

**COMMA before subordinating conjunctions:**
- tetapi / namun (but): "Mudah, tetapi berkesan"
- yang (which / that): "Fail yang anda pilih"
- jika (if): "Klik di sini, jika anda ingin meneruskan"
- kerana (because): "Tidak berfungsi, kerana fail tidak dijumpai"
- apabila (when): "Tunggu, apabila proses selesai"
- supaya / agar (so that): "Simpan, supaya perubahan tersimpan"

## Terminology Quick Reference

| English | Malaysian | NOT (Indonesian) |
|---|---|---|
| Save | Simpan | (same) |
| Delete | **Padam** | Hapus |
| Cancel | Batal | (same) |
| Submit | Hantar | Kirim |
| Upload | **Muat

…

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [i18n-agent](https://github.com/i18n-agent)
- **Source:** [i18n-agent/i18nstack](https://github.com/i18n-agent/i18nstack)
- **License:** MIT
- **Homepage:** https://i18nagent.ai

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-i18n-agent-i18nstack-localize-ms
- Seller: https://agentstack.voostack.com/s/i18n-agent
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
