Teaching a UI library to speak Nepali
I translated Syncfusion's Essential JS 2, 64 components and over four thousand strings, into Nepali. These are the choices that made it read like Nepali and not like a dictionary.
· 2 min read
Syncfusion's Essential JS 2 is a big UI library: grids, schedulers, a spreadsheet, a word processor, a PDF viewer. It shipped in a few dozen languages. Nepali wasn't one of them.
I needed it for a product used by people who think in Nepali. So in January 2024 I translated it: 64 components and 4,355 strings, about three thousand lines, on my own. Syncfusion took it into the library, and ne-NP now ships with it.
The hard part isn't vocabulary
Any dictionary will give you a word for Insert. The hard part is choosing the word a Nepali speaker would actually expect to see on a button. I set myself a few rules before writing a line.
Use the words people already use. Nepali has borrowed a lot of computing words from English, and many are now just Nepali. A file is फाइल, not a coined Sanskrit term nobody says. Where the borrowed word is the everyday one, I used it, spelt the established way.
Use the formal register for technical terms. Mathematical, scientific and technical words came from their established Sanskrit-derived forms. A spreadsheet function or a statistics term should read like a textbook, not like slang.
Translate the meaning, not the words. Some English UI strings make no sense word for word. Where a literal translation would confuse someone, I rewrote it to say what the control does. The grid's empty state, "No records to display", became प्रदर्शन गर्न कुनै रेकर्ड छैन, which is how you'd actually say it.
What I deliberately left alone
Knowing what not to translate mattered as much:
- Key names in tooltips and shortcuts: Space, Alt, A, B. People read them off the keyboard.
- Formulas and their parameters. A spreadsheet formula is code.
- Units and their symbols, and paper sizes. A4 is A4.
- Abbreviations, apart from a few that are well known.
- Font names, other than everyday ones like Times New Roman.
- Compound CamelCase identifiers like
ThinThickSmallGap, where any translation would be guesswork.
Why it was worth it
Localisation is usually treated as a chore you hand to a vendor at the end. It's really product work: every string is a tiny bit of interface design. Doing it by hand across a whole library taught me more about how these components behave than reading their docs ever did.
I also tightened the Nepali messages in vee-validate, the Vue form library (#4642), so validation errors read formally and correctly.
Source: syncfusion/ej2-locale#192.