# I18n support

**URL:** <https://forum.developer.roku.com/t/i18n-support/11592>\
**Category:** Roku Developer Program\
**Created:** [September 23, 2026, 8:53pm UTC](https://forum.developer.roku.com/t/i18n-support/11592 "2026-09-23T20:53:46Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![yosiasz](https://sea3.discourse-cdn.com/roku/user_avatar/forum.developer.roku.com/yosiasz/32/171_2.png) [@yosiasz](https://forum.developer.roku.com/u/yosiasz)\
**Post date:** [September 23, 2026, 8:53pm UTC](https://forum.developer.roku.com/t/i18n-support/11592/1 "2026-09-23T20:53:46Z")

</div>

Greetings,

What can I contribute to make i18n support on Roku devices possible?

Thanks!

---

<div class="post-metadata">

**Author:** ![RokuBen](https://sea3.discourse-cdn.com/roku/user_avatar/forum.developer.roku.com/rokuben/32/61_2.png) [@RokuBen](https://forum.developer.roku.com/u/RokuBen)\
**Post date:** [September 24, 2026, 5:37am UTC](https://forum.developer.roku.com/t/i18n-support/11592/2 "2026-09-24T05:37:49Z")

</div>

To be honest, the main obstacle is that our devices have very limited flash memory space, so including fonts to cover non-Western languages is prohibitive. Many of our currently shipping devices have only 512MB of flash, which has to include the recovery image, main OS image, and space for downloaded applications. Even if we could include more language coverage, there would need to be a major effort to update and validate our text drawing code to handle the requirements for the new languages. We aren’t using a web browser engine, this is all custom code in Roku OS.

---

<div class="post-metadata">

**Author:** ![yosiasz](https://sea3.discourse-cdn.com/roku/user_avatar/forum.developer.roku.com/yosiasz/32/171_2.png) [@yosiasz](https://forum.developer.roku.com/u/yosiasz)\
**Post date:** [September 26, 2026, 1:32pm UTC](https://forum.developer.roku.com/t/i18n-support/11592/3 "2026-09-26T13:32:52Z")

</div>

thanks @RokuBen ! Well it is what it is since 512MB is pretty small and requires an overhaul of existing code base. how about with the soon to come support for typescript, the new SDK they were talking about. Also there is no sort of compression of the fonts?

Anyways you have answered my question and I appreciate it

---

<div class="post-metadata">

**Author:** ![RokuBen](https://sea3.discourse-cdn.com/roku/user_avatar/forum.developer.roku.com/rokuben/32/61_2.png) [@RokuBen](https://forum.developer.roku.com/u/RokuBen)\
**Post date:** [September 26, 2026, 5:41pm UTC](https://forum.developer.roku.com/t/i18n-support/11592/4 "2026-09-26T17:41:47Z")

</div>

RSG SDK 2.0 doesn’t change the underlying rendering mechanism of the devices, just what language can drive it.

We do compress fonts in both the system image and in package files, but even with that, the non-Western fonts are just too large. Noto Sans JP with just support for Japanese characters compresses to 3.5MB, while Noto Sans, the font with support for most Western languages, is about 350K compressed.

---

<div class="post-metadata">

**Author:** ![Addison](https://avatars.discourse-cdn.com/v4/letter/a/49beb7/32.png) [@Addison](https://forum.developer.roku.com/u/Addison)\
**Post date:** [September 28, 2026, 5:21am UTC](https://forum.developer.roku.com/t/i18n-support/11592/5 "2026-09-28T05:21:50Z")

</div>

could the audio/video nodes provide a field that emits the currently-rendered caption? 🤔

for such use-cases as trying to support a language that needs a custom/app-provided font?  
they’d have to download their own 3.5MB file at runtime since that’s too big for the app pkg

.. _maybeeee_ we can use streamingSegment’s segUrl and segType to fetch captions text ourselves.. but that seems prone to error

---

<div class="post-metadata">

**Author:** ![yosiasz](https://sea3.discourse-cdn.com/roku/user_avatar/forum.developer.roku.com/yosiasz/32/171_2.png) [@yosiasz](https://forum.developer.roku.com/u/yosiasz)\
**Post date:** [September 28, 2026, 2:24pm UTC](https://forum.developer.roku.com/t/i18n-support/11592/6 "2026-09-28T14:24:25Z")

</div>

so I am confused now. I built a small sample roku app.

 ![image](https://us1.discourse-cdn.com/roku/original/1X/a5c665988c5da6ef7aabd4c6ba707c71facf310b.png)

here are the fonts I am using and the sizes

 ![image](https://us1.discourse-cdn.com/roku/original/1X/3ea7a0b4cf8c8f62ff2117eba8477b8a45d04a70.png)

The manifest file is 304 KB but still does not display the Amharic (Ethiopian Language) text I embedded. But still the Amharic text does not show when installed on my Roku stick

---

<div class="post-metadata">

**Author:** ![RokuBen](https://sea3.discourse-cdn.com/roku/user_avatar/forum.developer.roku.com/rokuben/32/61_2.png) [@RokuBen](https://forum.developer.roku.com/u/RokuBen)\
**Post date:** [September 28, 2026, 2:59pm UTC](https://forum.developer.roku.com/t/i18n-support/11592/7 "2026-09-28T14:59:55Z")

</div>

How are you referencing those fonts in your application? I would expect this to work unless the font file is relying on features unsupported by the the versions of FreeType and Harfbuzz that we’ve compiled in.

---

<div class="post-metadata">

**Author:** ![yosiasz](https://sea3.discourse-cdn.com/roku/user_avatar/forum.developer.roku.com/yosiasz/32/171_2.png) [@yosiasz](https://forum.developer.roku.com/u/yosiasz)\
**Post date:** [September 28, 2026, 3:25pm UTC](https://forum.developer.roku.com/t/i18n-support/11592/8 "2026-09-28T15:25:12Z")

</div>

> **[GitHub - GojjoLabs/kimem: Amharic Roku app](https://github.com/GojjoLabs/kimem)**
>
> Amharic Roku app

I just following the documentation and claude as

```auto
    if fs.Exists("pkg:/fonts/NotoSansEthiopic.ttf")
        WriteLog("SUCCESS: Ethiopic font exists")
    else
        WriteLog("ERROR: Ethiopic font NOT found")
    end if

```

From what I understand about FreeType and Harfbuzz, they are specifically designed for non Roman scripts and should be able to handle Amharic Geez font types such as Abyssinica SIL.

It just stunning for such a world renowned product Roku is stuck at non-Western languages in this day and age.

---

<div class="post-metadata">

**Author:** ![RokuBen](https://sea3.discourse-cdn.com/roku/user_avatar/forum.developer.roku.com/rokuben/32/61_2.png) [@RokuBen](https://forum.developer.roku.com/u/RokuBen)\
**Post date:** [September 28, 2026, 7:49pm UTC](https://forum.developer.roku.com/t/i18n-support/11592/9 "2026-09-28T19:49:37Z")

</div>

I was able to get your code working (after removing the WriteLog recursion), by changing your MainScene.xml to:

```auto
<?xml version="1.0" encoding="utf-8" ?>

<component name="MainScene" extends="Scene">

    <children>
        <Label
            id="amharicLabel" text="ሰላም ዓለም"
            translation="[200,200]" width="1000" height="100">
        <Font role="font" id="ethiopic-font" uri="pkg:/fonts/NotoSansEthiopic.ttf" size="24" />
        </Label>

    </children>

</component>

```

The font attribute on label only allows specifying internal fonts. You need a Font child node (see [Font](https://developer.roku.com/dev/docs/font)) to specify an font in your package.

The docs don’t really explain this well outside of [a quick note on an unrelated page](https://developer.roku.com/dev/docs/children), but the `role="font"` atttribute is essential. That’s telling the XML reader the child Font node is applied to the “font” field of the parent. Without that, you don’t get the connection and it doesn’t apply.

---

<div class="post-metadata">

**Author:** ![yosiasz](https://sea3.discourse-cdn.com/roku/user_avatar/forum.developer.roku.com/yosiasz/32/171_2.png) [@yosiasz](https://forum.developer.roku.com/u/yosiasz)\
**Post date:** [September 28, 2026, 11:53pm UTC](https://forum.developer.roku.com/t/i18n-support/11592/10 "2026-09-28T23:53:18Z")

</div>

Looks promising. Using `https://lvcabral.com/brs/` and uploading zip.

 ![image](https://us1.discourse-cdn.com/roku/original/1X/747744fe6d94fdce1b6e7872c3e05ebdedb2882d.png)

So now on to the next question: Can we make Amharic available in Settings / Languages drop down?

Thanks

---

<div class="post-metadata">

**Author:** ![RokuBen](https://sea3.discourse-cdn.com/roku/user_avatar/forum.developer.roku.com/rokuben/32/61_2.png) [@RokuBen](https://forum.developer.roku.com/u/RokuBen)\
**Post date:** [October 1, 2026, 8:08pm UTC](https://forum.developer.roku.com/t/i18n-support/11592/11 "2026-10-01T20:08:38Z")

</div>

We only provide global settings for language choice for languages that we support in our own OS translations. It would be confusing to consumers to have them pick a language and not have that show correctly in all of our internal UI. We do support many languages for default audio format.
