Internationalization & Localization

Internationalization (i18n) is the process of designing software applications so that it can be adapted to various languages and regions without engineering changes. Localization (l10n) is the process of adapting internationalized software for a specific region or language by adding locale-specific components and translating text.

Here are a number of guidelines for designing content with international audiences in mind:

Flags

Avoid using flags to represent languages, language and country are different concepts. Flags are symbols that represent countries or nations while languages represent a shared method of communication between people. For example, Spanish is spoken in 29 countries and Spain is only one of them. Countries like Canada have more than 1 official language, hence is not suitable to be represented by a single flag.

When designing a language selector, use plain text despite its lack of visual appeal. Only use flags to represent countries, not languages.

<<Include recommended pattern for language name localization>>

Right to Left

In certain languages like Arabic and Hebrew, text is read from right-to-left (RTL) necessitating your entire design to be flipped. A modular design approach will come in handy while accommodating RTL languages. For example, the application below is designed to flip neatly for Hebrew and other RTL languages as shown below:

When localizing for RTL, the elements below should be mirrored:

the elements below should not be mirrored:

Most of the recent native frameworks are now mirroring aware, making it easier to create a mirrored layout with very limited code changes.

Text Expansion

Always design with text expansion in mind. When English text gets translated to another language, the translated text can be as much as three times longer. Make UI components expandable whenever possible. Do not assign a fixed-width or height to your UI component unless you have a good reason to.

For longer text, wrapping is a good solution. Be aware of the potential vertical expansion since translated text will take more lines. Truncation with hover text can be a compromise. Be aware that this brings the risk of making the UI less effective.

Length and Size

The general rule for text expansion is: “the shorter the English text, the longer the translated text is likely to be”. The following table shows the average text expansion rate for different English text lengths:

English Text Length

Expansion

1 - 10

100 - 200%

11 - 20

80 - 100%

21 - 30

60 - 80%

31 - 50

40 - 60%

51 - 70

50 - 70%

71+

30%

English word expansion guidelines

In addition to English text length, the target language also has an impact upon the amount of expansion. The following table shows the expansion factor for the English text “Share” into various languages:

Language

“Share”

Expansion Factor

English

Share

1.0

German

Freigeben

1.8

French

Partager

1.5

Spanish

Compartir

1.8

Italian

Condividi

1.7

Japanese

共有

0.8

Chinese

共享

0.8

Korean

공유

0.7

Expansion factor for the English word “Share”

In general, Asian languages are more space-friendly since they tend to be more compact than European languages.

Date and Time

Date and Time should always be stored in UTC to allow it to be converted and displayed in multiple time zones. LUX components and guidelines follow the conventions detailed below by default:

All applications built for Verint should allow the above defaults to be automatically changed based on the users specified browser locale (or manual setting if an application allows it). Details of country and region specific conventions are available here.

Many frameworks and libraries (such as Moment.js) offer full and constantly updated internalization features for easy localization of dates and times.

Decimals

Despite being the conventional standard (and the LUX default) Great Britain and the United States are two of the few places in the world that use a period to indicate the decimal place. Many other countries use a comma instead. Likewise, while the UK and US use a comma to separate groups of thousands, many other countries use a period instead, and some countries separate thousands groups with a space.

As with Date and Time above, all applications built for Verint should allow the decimal character defaults to be automatically changed based on the users specified browser locale (or manual setting if an application allows it). Details of country and region specific conventions are available here.

Headers

Content Headers

Headers are titles and subtiles used to illustrate the importance of a section or page. The underlying heading order is used to index the structure and content of your applications pages for assistive tools.

In LUX, all headers should be at the same size as its corresponding section text using the matrix below. Headers one stop higher (two at most) than the section text may be used when there is no exact match or extra emphasis is required for that specific section.

Header

rem

px

<style>
	@import url('https://rsms.me/inter/inter.css');
	html { font-family: 'Inter' !important; }
</style>
<h1 style="font-family: 'Inter', arial; margin: 0; font-size: 32px;">Huge Header</h1>

2rem

32px

<style>
	@import url('https://rsms.me/inter/inter.css');
	html { font-family: 'Inter' !important; }
</style>
<h2 style="font-family: 'Inter', arial; margin: 0;  font-size: 24px;">Large Header</h2>

1.5rem

24px

<style>
	@import url('https://rsms.me/inter/inter.css');
	html { font-family: 'Inter' !important; }
</style>
<h3 style="font-family: 'Inter', arial; margin: 0;  font-size: 16px;">Medium Header</h3>

1rem

16px

<style>
	@import url('https://rsms.me/inter/inter.css');
	html { font-family: 'Inter' !important; }
</style>
<h4 style="font-family: 'Inter', arial; margin: 0;  font-size: 12px;">Small Header</h4>

0.75rem

12px

<style>
	@import url('https://rsms.me/inter/inter.css');
	html { font-family: 'Inter' !important; }
</style>
<h5 style="font-family: 'Inter', arial; margin: 0;  font-size: 8px;">Tiny Header</h5>

0.5rem

8px


Accessibility

To add to our general compliance information in Fundamentals - Accessibility, here are a few extra factors to follow for accessible headers:

Labels

Effective form labelling helps users understand what information to enter into a form Input. Using a placeholder text as a label is often applied as a space-saving method. However, this is not recommended because it hides context and can present accessibility issues. Use of placeholder labels should be restricted to forms in which field purpose is a universal standard and accessibility can be guaranteed e.g. login forms.

Required fields

It’s well known that users don’t always read instructions, and they are particularly less likely to read instructions at the top of a form. Form fields are primarily self-sufficient and each field has a specific instruction — its label, hence all required fields should be marked in close proximity with its associated label.

Accessibility

To add to our general compliance information in Fundamentals - Accessibility, here are a few extra factors to follow for accessible labels:

Capitalization

We use different capitalization styles for different types of content to improve scannability, organize information, and guide users to key actions.

When building new LUX products, also align capitalization practices with platform conventions to match user expectations (e.g. IOS specific conventions).

Styles

Title Case (Most Words Are Capitalized)

Use title case for menu labels, buttons, navigation, and section headers.

Do capitalize

Don’t capitalize

Sentence Case (Most words are lowercase)

Use sentence case for all body copy, image captions, and secondary, editorial subheadings.

Only capitalize the first word of the text element, as well as any proper nouns.