Welcome to the Netflix Partner Help Center. Have a question or need help with an issue? Send us a ticket and we'll help you to a resolution.

TABLE OF CONTENTS

     REQUIREMENTS FOR STRINGS

     REQUIREMENTS FOR CULTURAL FORMAT

     FONTS

     LANGUAGE SELECTOR

     SUPPORT

Our mission is to create a world-ready Netflix product, a product that feels truly local. For that to happen, the game needs to be developed with internationalization in mind.

Internationalization + Localization = Globalization

Internationalization lays a solid cultural data and software layer foundation so that translation can be done separately, and after translation is dropped in, the global product just works. Localization can be seen as the translation part (done by linguists and translators), Internationalization is everything else (done by engineers). Internationalization contributes heavily to best localized user experience.

Only when both internationalization and localization are done well, the goal of a world-ready Netflix product can be achieved.

This doc contains the internationalization requirements that gaming studios need to follow while developing the games.

REQUIREMENTS FOR STRINGS

EXTERNALIZE UI TEXT

UI text appearing in games need to be externalized in resource bundles for translation. English text hardcoded in game app source code or burned in an image won’t get translated.

USE CORRECT LANGUAGE CODE

Game has different localizable elements. After translations are back, put the translated text in resource bundles with correct language code.

Use the following language code for UI text resource bundles. Note that declaring the languages your app supports is required in order to list the supported languages correctly on Apple App Store. Please refer to the instructions here.

Language
Name
Language Code
(iOS App Store)
Language Code
(Android Google Play Store)
Language Code (Netflix Games UI String Resource Bundle)
Arabic (Modern Standard) ar ar ar
Chinese (Simplified script) zh-Hans zh-CN zh-Hans
Chinese (Traditional script) zh-Hant zh-TW zh-Hant
Croatian hr hr hr
Czech cs cs-CZ cs
Danish da da-DK da
Dutch nl nl-NL nl
English (U.S., Global) en en-US en
English (UK) en-GB en-GB en-GB
English (Australia) en-AU en-AU en-AU
English (India) en-IN en-IN en-IN
Finnish fi fi-FI fi
French (Global) fr fr-FR fr
French (Canada) fr-CA fr-CA fr-CA
German de de-DE de
Greek el el-GR el
Hebrew he iw-IL he
Hindi hi hi-IN hi
Hungarian hu hu-HU hu
Indonesian id id id
Italian it it-IT it
Japanese ja ja-JP ja
Korean ko ko-KR ko
Malay ms ms ms
Norwegian nb no-NO nb
Polish pl pl-PL pl
Portuguese (Brazilian) pt-BR pt-BR pt
Portuguese (Portugal) pt pt-PT pt-PT
Romanian ro ro ro
Russian ru ru-RU ru
Spanish (Latam) es-419 es-419 es
Spanish (Spain) es es-ES es-ES
Swedish sv sv-SE sv
Thai th th th
Turkish tr tr-TR tr
Ukrainian uk uk uk
Vietnamese vi vi vi

 

HOW TO WRITE ENGLISH TEXT

PROVIDE COMPLETE SENTENCE

Many languages have different positions for grammatical components than that of English. Concatenation would create situations difficult to translate for many languages.

Example:

Good:    

        • Key = Your plan will change to %1$d Screen on %2$s.

Avoid:

        • Key1 = Your plan will change to
        • Key2 = %1$d Screen
        • Key3 = on %1$s

USE DESCRIPTIVE VARIABLE NAME

Lack of context is a major source of translation errors. Descriptive names should include information about the type of the variable, would it be an integer or a string? For month name, would it be a full month name, or an abbreviated one? Etc.

Example:

Good: month_name_full, month_name_medium, month_name_short

Avoid: month

If it’s not possible to use a descriptive variable name, add comments to provide more context for translation.

USE INTENDED CASING

Many languages have different casing rules. Functions such as toUpperCase(), toLowerCase(), toCamelCase(), etc. often have problems for certain languages. Writing the casing as intended in the English strings allows translators to use proper casing for their language.

Example:

Good:    

      • Key = GAME ON

Avoid:

      • Key = game on 

And then programmatically call .toUpperCase() or a similar function to change it to “GAME ON”.

ALLOW GRAMMATICAL PLURAL TEXT

Many languages have various plural forms. Nouns in English have singular form when the number is one, and plural form when the number is not one. Please write text in a way that allows different translation for different number groups defined by the target language. For example, here is how you could write the English text on iOS

GENDER CONSIDERATION

For gendered languages in which gender is marked in adjectives, articles, nouns, verbs, etc., it is important to take gender into consideration when localizing UI strings that are addressed to a second person (i.e. the player), in order to provide inclusive and gender-neutral solutions as much as possible.

Example:

English UI String

Localization considerations

How do you feel?

TIRED

HAPPY

ANGRY

For gendered-languages consider how adjectives/verbs, as applicable, can be handled to provide a gender neutral solution when possible. For example, is it possible to use nouns in this question instead of adjectives in the localized version?

What do you feel?

TIREDNESS

HAPPINESS

ANGER

For gendered languages, it is common to find the use of the gendered (masculine) treatment to hint neutrality in established terminology such as game labels. While this use of the masculine may still be valid, we should be looking for organically gender-neutral and inclusive solutions that could be used instead (even when this means introducing new terminology), whenever possible*. 

Example:

English UI String

Localization considerations

Multiplayer

“Multiplayer” and “Single Player” are common labels in games, but their localized versions may be gendered. In such cases consider if there’s alternative terminology that can be used. E.g. “Group” and “Individual”.

*Note: This should be done if meaning is not obscured and context allows. If finding a neutral alternative obstructs the meaning, conflicts with character limitations, or in any other way harms the gaming experience, the use of the generic masculine may still be justified.

Single Player

 

KEEP LOCALIZATION IN MIND

EXPECT TEXT TO EXPAND HORIZONTALLY

For example, German text might expand when compared to English source text. Generally expect around 40% expansion, shorter text may have bigger expansion. Some languages might contract, for example, Chinese. Usually expansion is more challenging for the UI than contraction. In design and development, allow text field width to auto-expand, or allow wrap into multiple lines.

EXPECT TEXT TO EXPAND VERTICALLY

Some languages need more vertical space. Languages with diacritics could expand vertically, for example, expect Thai text to expand vertically up or down as much as 70%.

USE PSEUDO-LOC EARLY IN DESIGN & DEVELOPMENT PHASE

Pseudo localization is a fake translation, to simulate certain localization language characteristics while maintaining the readability of the UI. Pseudo loc detects localization issues early. Following are some major localization issues that pseudo loc detects.

DETECT STRING CONCANETATION

String concatenation should be avoided by following the requirement of “Provide complete sentence”. Pseudo loc can detect string concatenation if the above requirement is not followed.

Example of string concatenation (avoid):

  • Key1 = Your plan will change to
  • Key2 = %1$d Screen
  • Key3 = on %1$s.

With pseudo loc, the final sentence appearing on the UI could be something like [Ýoổuǚr ρlaǻñ ŵiîlļ çhaǻñgeễ ţoổ] [%1$d Šcŕeễeễñ] [oổñ %2$s.] A complete sentence separated by pairs of [] indicates string concatenation. Different platforms may have different pseudo localization patterns, but principles stay the same.

In the case of a complete sentence “Your plan will change to %1$d Screen on %1$s.”, the pseudo localized final sentence could look like the following: [Ýoổuǚr ρlaǻñ ŵiîlļ çhaǻñgeễ ţoổ %1$d Šcŕeễeễñ oổñ %2$s.] Notice the whole sentence is inside one pair of [].

SIMULATE STRING EXPANSION

Pseudo loc also expands string by a certain percentage to simulate string length expansion. If pseudo localized strings get truncated or overlap each other on the UI, it indicates localized UI will have similar issues. This needs to be fixed by UI design and implementation as soon as it appears.

UNITY PSEUDO-LOC TESTING

For games developed with Unity, please follow this guideline to enable and test with pseudo localization.

 

REQUIREMENTS FOR CULTURAL FORMAT

Cultural formats include Date, Time, Calendar, Timezone, Number, Currency, Phone number, Sorting, etc. See a list of examples here

Cultural formats vary around the world, depending on the user's language and location. For example,

Date:

  • English in US               (en-US):           Tuesday, January 5, 2020
  • French in France        (fr-FR):             mardi 5 janvier 2020
  • Japanese in Japan     (ja-JP):            2020年1月5日火曜日

Currency:

  • English in US               (en-US):           $1,234.56
  • French in France        (fr-FR):             1 234,56 €
  • German in Germany   (de-DE):          1.234,56 €

Notice the difference in above currency formats for thousands separator, decimal point, the position of the currency symbol, and the space in between currency symbol and the number amount.

USE I18N LIBRARY TO FORMAT

The good news is that all these cultural data have been collected and stored in a data repository called CLDR (Unicode Common Locale Data Repository). And internationalization (i18n) libraries use CLDR to format the cultural data for the user. On both iOS and Android, there are a rich set of readily available i18n API and functions that you can use to format the cultural data.

Locale is a way to identify cultural formats. The key is to use the user locale properly.

FORMAT BASED ON USER LOCALE

Every user has a user locale that reflects their language and culture. Always use the i18n functions that take a display locale for cultural format, and pass user locale as the display locale to these formatting functions.

USE LATIN NUMBER SYSTEM

Netflix products standardize on using Latin number system for all locales, make sure you set the number system of the user locale to latn. One effective way to do that is to add “-u-nu-latn” to user locale before formatting.

For example, for Arabic, Netflix products use Latin numbers (0, 1, 2, …), not Eastern Arabic numbers (٠١٢٣٤٥٦٧٨٩).

USE GREGORIAN CALENDAR

Netflix standardizes on using Gregorian Calendar for all locales, make sure you set the Calendar of the user locale to Gregorian. One effective way to do that is to add “-u-ca-gregory” to the user locale before formatting.

For example, for Thai, Netflix products use Gregorian Calendar (2021), not Buddhist Calendar (2564).

 

FONTS

CUSTOM FONTS

If you are in search of the custom fonts for some of the non-English languages to carry the look and feel of the English font sets you use for your game, we recommend the following services to find the open-source or licensed fonts that work for your intended design.

Both services support preview of the input text, as well as language selector to filter the fonts that support desired target languages. For any additional assistance, please reach out to your Localization Producer at Netflix.

PRODUCT FONTS

The table below is provided only as a reference. Netflix products use the following fonts for UI text on iOS and Android, should you wish to mirror the Netflix look and feel, please use these.

Language Name

iOS

Android

Arabic (Modern Standard)

Handset Sans Kufi

Handset Sans Kufi

Chinese (Simplified script)

(System sans serif font)

(System sans serif font)

Chinese (Traditional script)

(system sans serif font)

(system sans serif font)

Croatian

Netflix Sans

Netflix Sans

Czech

Netflix Sans

Netflix Sans

Danish

Netflix Sans

Netflix Sans

Dutch

Netflix Sans

Netflix Sans

English (Global)

Netflix Sans

Netflix Sans

English (UK)

Netflix Sans

Netflix Sans

English (Australia)

Netflix Sans

Netflix Sans

English (India)

Netflix Sans

Netflix Sans

Finnish

Netflix Sans

Netflix Sans

French (Global)

Netflix Sans

Netflix Sans

French (Canada)

Netflix Sans

Netflix Sans

German

Netflix Sans

Netflix Sans

Greek

Netflix Sans

Netflix Sans

Hebrew

(system sans serif font)

(system sans serif font)

Hindi

(system sans serif font)

(system sans serif font)

Hungarian

Netflix Sans

Netflix Sans

Indonesian

Netflix Sans

Netflix Sans

Italian

Netflix Sans

Netflix Sans

Japanese

(system sans serif font)

(system sans serif font)

Korean

(system sans serif font)

(system sans serif font)

Malay

Netflix Sans

Netflix Sans

Norwegian

Netflix Sans

Netflix Sans

Polish

Netflix Sans

Netflix Sans

Portuguese (Brazilian)

Netflix Sans

Netflix Sans

Portuguese (Portugal)

Netflix Sans

Netflix Sans

Romanian

Netflix Sans

Netflix Sans

Russian

Netflix Sans

Netflix Sans

Spanish (Latam)

Netflix Sans

Netflix Sans

Spanish (Spain)

Netflix Sans

Netflix Sans

Swedish

Netflix Sans

Netflix Sans

Thai

Graphik TH

Graphik TH

Turkish

Netflix Sans

Netflix Sans

Ukrainian

Netflix Sans

Netflix Sans

Vietnamese

Netflix Sans

Netflix Sans

 

SUBTITLE FONTS

The table below is provided only as a reference. Netflix uses the following fonts for subtitles, should you wish to mirror the Netflix look and feel, please use these.

Language Name

Font

Arabic (Modern Standard)

HandsetNaskhArabic-Regular

Chinese (Simplified script)

MHeiM18030_CForNetflix

Chinese (Traditional script)

MHeiM-B5HK_CForNetflix

Croatian

Netflix Sans

Czech

Netflix Sans

Danish

Netflix Sans

Dutch

Netflix Sans

English (Global)

Netflix Sans

English (UK)

Netflix Sans

English (Australia)

Netflix Sans

English (India)

Netflix Sans

Finnish

Netflix Sans

French (Global)

Netflix Sans

French (Canada)

Netflix Sans

German

Netflix Sans

Greek

Netflix Sans

Hebrew

Hebrew_for_Netflix-R

Hindi

HandsetSansDevanagari

Hungarian

Netflix Sans

Indonesian

Netflix Sans

Italian

Netflix Sans

Japanese

HeiseiMaruGoth213_CForNetflix

Korean

YDGothic120ProForNetflix

Malay

Netflix Sans

Norwegian

Netflix Sans

Polish

Netflix Sans

Portuguese (Brazilian)

Netflix Sans

Portuguese (Portugal)

Netflix Sans

Romanian

Netflix Sans

Russian

Netflix Sans

Spanish (Latam)

Netflix Sans

Spanish (Spain)

Netflix Sans

Swedish

Netflix Sans

Thai

HandsetSansThai-Regular

Turkish

Netflix Sans

Ukrainian

Netflix Sans

Vietnamese

Netflix Sans

 

FONT ISSUES ON UNITY AND WORKAROUNDS

Unity has some platform limitations with font rendering for a few languages. Here are some of the font issues on Unity and the suggested workarounds.

 

Language Symptom Workaround
Arabic Characters appear disjointed.

Unity lacks proper capability for Arabic support, the suggested workaround is to use the following third party plugin: https://github.com/pnarimani/RTLTMPro

* This plugin by default selects the Farsi replacement option, which would replace Arabic “Yeh” incorrectly with Farsi “Yeh”, resulting in this issue. Make sure to uncheck theFarsi option in the inspector.

* About font: The license for the plugin itself is MIT license, however the license for the fonts packaged with this plugin is not clear, so we recommend the studio to use NotoSansArabic font. If the studio wants to use something else for stylistic reasons, please let us know and we can work together to find something else that works from a technical, and licensing perspective.

* Please generate the font asset the usual way: Under Resources > Font, right click and select “Import New Asset…” to import new font asset; thenselect the newly imported font asset, right click and choose Create > TextMeshPro > Font Asset. 

* This plugin’s font asset generation direction will NOT work, do NOT follow this: https://github.com/pnarimani/RTLTMPro#how-to-create-font-assets
Thai Overlap of vowels with long-stemmed characters.

Unity3D font renderer lacks support for GPOS and GSUB, which Thai font rendering heavily depends on. There is a ThaiFontAdjuster Unity package that can be used to workaround this issue.

* About font: The license for the plugin itself is MIT license, however the license for the NECTEC National Fonts (Garuda, Loma, Kinnari, Norasi) is not clear, so we recommend the studio to use the NotoSansThai font packaged in the third party plugin.

Note these are just workarounds, the ultimate solution relies on Unity to fix these issues on the platform.

 

IN-GAME LANGUAGE SELECTOR

Allow your players to select the language they wish to play your game in by adding the in-game language selector in the main menu. Below is the table of how you should display the languages regardless of the language selected to help players be able to navigate to their desired language in case they accidentally land in a language they cannot read.

English Version Display Version (FULL) Len Display Version (SHORT) Len
Arabic العربية 7 العربية 7
Chinese (Simplified) 简体中文 4 简体中文 4
Chinese (Traditional) 繁體中文 4 繁體中文 4
Croatian Hrvatski 8 Hrvatski 8
Czech Čeština 7 Čeština 7
Danish Dansk 5 Dansk 5
Dutch Nederlands 10 Nederlands 10
English (US) English 7 English 7
Filipino Filipino 8 Filipino 8
Finnish Suomi 5 Suomi 5

French

Français 8 Français 8
German Deutsch 7 Deutsch 7
Greek Ελληνικά 8 Ελληνικά 8
Hebrew עברית 5 עברית 5
Hindi हिंदी 6 हिंदी 6
Hungarian Magyar 6 Magyar 6
Indonesian Bahasa Indonesia 16 Indonesia 9
Italian Italiano 8 Italiano 8
Japanese 日本語 3 日本語 3
Korean 한국어 3 한국어 3
Malay Bahasa Melayu 13 Melayu 6
Norwegian Norsk 5 Norsk 5
Polish Polski 6 Polski 6
Portuguese (Brazil) Português (Brasil) 18 Português (BR) 14
Portuguese Português (Portugal) 20 Português (PT) 14
Romanian Română 6 Română 6
Russian Русский 7 Русский 7
Spanish (Castilian) Español (España) 16 Español (ES) 12
Spanish (Latin America) Español (Latino) 16 Español (LA) 12
Swedish Svenska 7 Svenska 7
Thai ไทย 3 ไทย 3
Turkish Türkçe 6 Türkçe 6
Ukrainian Українська 10 Українська 10
Vietnamese Tiếng Việt 10 Tiếng Việt 10

 

SUPPORT

Please direct any i18n questions to your Localization Producer at Netflix.

Was this article helpful?
8 out of 8 found this helpful