Text string localization

Text string localization allows image catalogs to contain multiple locale-specific representations for the same string value.

The server returns to the client the representation matching the locale specified with locale=, thereby avoiding client-side localization and allowing applications to switch locales simply by sending the appropriate locale= value with the IS text requests.

Scope

Text string localization is applied to all string elements which include the localization token ^loc= *locId*^ in the following catalog fields:

Catalog field String element in field

catalog::ImageSet

Any sub-element containing a translatable string (delimited by any combination of separators ',' ';' ':' and/or the start/end of the field).

A 0xrrggbb color value at the beginning of a localizable field is excluded from localization and passed through without modification.

catalog::Map

Any single- or double-quoted attribute value, except the values of the coords= and shape= attributes.

catalog::Targets

The value of any target.*.label and target.*.userdata property.

catalog::UserData

The value of any property.

String syntax

Localization-enabled string elements in the image catalog consist of one or more localized strings, each preceded by a localization token.

stringElement

[ defaultString ]*{ localizationToken localizedString }

localizationToken

^loc= locStr ^

locId

Internal locale ID for the localizedString following this localizationToken .

localizedString

Localized string.

defaultString

String to be used for unknown locales.

locId must be ASCII and may not include ‘^’.

‘^’ may occur anywhere in sub-strings with or without HTTP-encoding. The server matches the entire localizationToken ^loc=locId^ pattern to separate substrings.

stringElements which do not include at least one localizationToken are not considered for localization.

The translation map

attribute::LocaleStrMap defines the rules used by the server to determine which localizedStrings to return to the client. It consists of a list of input locales (matching the values specified with locale=), each with none or more internal locale ids ( locId). For example:

attribute::LocaleStrMap= en,E|nl,N|de,D|,

Empty locId values indicate that the defaultString should be returned, if available.

Refer to the description of attribute::LocaleStrMap for details.

The translation process

Given the example translation map above and the request /is/image/myCat/myItem?req=&locale=nl, the server first looks for " nl" in the locale map. The matched entry nl,N indicates that for each stringElement, the localizedString marked with ^loc=N^ should be returned. If this localizationToken is not present in the stringElement, an empty value is returned.

Let’s say catalog::UserData for myCat/myItem contains the following (line breaks inserted for clarity):

val1=111?? str1=Default1^loc=N^Dutch1^loc=D^German1?? val2=value2?? str2=^loc=E^English2^loc=N^Dutch2^loc=D^German2?? str3=Default3^loc=N^Dutch3^loc=D^German3

The server would return the following in response to our example request:

val1=111 str1=Dutch1 val2=value2 str2=Dutch2 str3=Dutch3

Unknown locales

In the above example, attribute::LocaleStrMap has an entry with an empty locale value. The server uses this entry to handle all locale= values which are not explicitly specified otherwise in the translation map.

The example translation map specifies that in such a case the defaultString should be returned if available. Thus, the following would be returned if this translation map were applied to the request /is/image/myCat/myItem?req=&locale=ja:

val1=111 str1=Default1 val2=value2 str2= str3=Default3

Examples

Language families

Multiple locId values may be associated with each locale in the translation map. This allows supporting country-specific or region-specific variations (e.g US English vs UK English) for select stringElements while handling most contents with common base locales (e.g. International English).

For our example, we want to add support for US-specific English ( *locId* EUS) and UK-specific English ( *locId* EUK), to support the occasional alternative spelling. If EUK or EUS do not exist, we would fall back to E. Similarly, Austrian-specific German variants ( DAT) could be made available where needed while returning common German localizedStrings (marked with D) most of the time.

attribute::LocaleStrMap would look like this:

en,E|en_us,EUS,E|en_uk,EUK,E|de,D|de_at,DAT,D|de_de,D

The following table describes the output for some representative stringElement and locale combinations:

stringElement locale

Output string

^loc=E^English^loc=D^German

en, en_us, en_uk

de, de_at, de_de

all others

English

German

-

^loc=E^English^loc=UKE^UK-English^loc=D^German^loc=DAT^Austrian

en, en_us

en_uk

de, de_de

de_at

all others

English

UK-English

German

Austrian

-

^ loc=en^English^loc=USE^US-English^loc=D^German^loc=DDE^Deutsch

Note that for this example the locId DDE does not exist in attribute::LocaleStrMap , and thus the substring associated with this locId is never returned.

en, en_uk

en_us

de, de_at, de_de

all others

English

US-English

German

-

On this page