Cloanto    Home      Products & Services      Purchase      Support      Search: Go
Currency System :: Support :: Internationalization (I18N)
System Overview
Currency Server
Managed Services
Web Tools
:: Overview
:: FAQ
:: Troubleshooting
:: White Papers
:: Internationalization
:: The Euro
:: Currency Codes
:: Web Links
:: Support Plans
:: Contact

Internationalization (I18N)

Related Links
The process of adapting a product or service to the needs of different regions and cultures is known as internationalization. The term is sometimes abbreviated as "i18n", where the number 18 refers to the number of letters omitted.

The Currency System family of software and services was designed to offer complete support for the internationalization of currency-related applications, both when deployed or implemented as a stand-alone solution, and when integrated as part of a broader internationalization effort.

The internationalization of a currency-enabled application, such as a database or an e-commerce system, is most likely to require support for more than just the conversion of currency amounts from one unit to another. Regardless of whether you need to build a simple list of daily reference rates, or if instead you have to convert thousands of prices in a database, you will probably want to take into account rules such as those which apply to the formatting of currency amounts, which vary from locale to locale.


A locale is a set of cultural preferences which are assigned to a given region. Within a specific locale the same settings apply, i.e. a locale defines the largest possible region sharing the same country name, currency name, language and other localization settings.

A locale does not necessarily exactly match with a language or with a country. For example, the English language is used in multiple countries and regions (e.g. United States, Canada, United Kingdom, Australia, etc.) which are covered by multiple locales. Even when the language is the same, details such as currency symbols and the formatting of currency amounts may change between one locale and another. Similarly, countries may have multiple locales, e.g. Canada has different locales for its English and French language regions, where not only currency names change, but also other settings, e.g. the placement of the currency symbol relative to the amount. Associating the user selection of languages and/or locales to flag graphics, as is sometimes seen on websites, shows neither equal respect for different countries where the same language is spoken, nor consideration for the fact that a country may have more than one official language.

Currency Server not only fully supports the Windows locale functionality, which it uses to set the default initial software configuration, but it also adds software-specific properties to each locale (e.g. currency names, capitalization style, etc.)

Non-Localized Properties and Rules

Locales are independent from exchange rate data. Exchange rates and numerical results are not affected by locale settings. If you only use the software to obtain numerical results, you do not need to use locales at all. If you only use Currency Server to output formatted currency amounts on an English language website you can in general use the default locale and settings without further changes.

Locale Identifiers

When Currency Server COM and Web service (.NET and SOAP) clients need to reference a specific locale (e.g. as an argument to a method returning a localized currency name), the recommended identifier for the desired locale is the Windows locale identifier, or LCID, which is a 32-bit numerical value, as used in the Windows National Language Support API (NLSAPI). The LCID of US English is 1033 (decimal).

In addition to numerical LCID codes, Currency Server also supports the referencing of locales by means of three-character Windows locale codes (e.g. "DEU", i.e. two-character ISO 639-1 Alpha-2 language codes plus an additional character, as specified for use with the Windows "LOCALE_SABBREVLANGNAME" type, which is not necessarily the same as the three-character ISO 639-2 Alpha-3 standard). Two-letter ISO 639-2 Alpha-2 language codes (e.g. "de") are also supported, however they should only be used as a last resort, because there can be multiple locales for a given language, in which case Currency Server would resort to the first matching locale.

Currency Names, Symbols and Custom Data

Currency Server supports the following localized properties for each currency:

  • Currency Name (e.g. "Swiss franc", "Schweizer Franken", "Franco svizzero", etc.);
  • Currency Symbol (e.g. "$" or "US$");
  • Custom String (e.g. "usd.gif" to indicate the location of a flag image file).

For example, the US English locale contains all US English names for all currencies of the world. It also contains the currency symbols of all currencies of the world, as used in the United States (the same currency may be referenced using a different symbol in different regions).

Each currency may also have a localized custom string, which is undefined by default, and which may be set as required by the application.

Other Currency Properties

Currency Server also associates a unique currency code (e.g. "USD") with each currency. Unlike currency symbols (which are localized, i.e. different locales may use different symbols for the same currency, e.g. "öS" vs. "S" for the Austrian schilling), currency codes are standard, and are not localized (they are the same all over the world). Be sure not to confuse localized currency symbols, which are meant for presentation purposes only, with standard currency codes, which can be used both to uniquely identify currencies and for presentation purposes.

Currency Server supports several other currency-specific properties, such as the exchange rate, the regime, the smallest unit, etc., however these properties, like the currency code, are not locale-specific, but rather they are independent of the locale. They only have to be set once for each currency (and not once for each currency for all locales which are used).


Currency names are usually written in lower case as a rule. In some languages (e.g. German) all nouns, including currency names, are always capitalized (both in body text and in titles). In some languages (e.g. English) titles are capitalized, which style may also be appropriate in drop-down lists, etc. For example, the Currency Server user interface uses title style in most contexts.

Internally, Currency Server stores currency names using the singular form and body text style, i.e. without title capitalization (headline style). For example, the default internal US English name of the USD currency is "US dollar", not "US dollars" or "US Dollar". When a COM or Web service client requests the name of the USD currency indicating the US English locale (LCID 1033) and the desired title style (True or False), Currency Server returns either "US Dollar" or "US dollar", as requested by the client. In title style the word "dollar" is capitalized as specified by the Capitalize titles setting in the Edit Locale dialog, which is enabled by default for US English.

Character Sets

Currency Server supports both ISO 8859-1 (Latin 1) 8-bit encoding of the currency name, symbol and custom string, and Unicode (16-bit) encoding.

The COM and Web service methods which output formatted currency strings, i.e. ConvertToStr() and RateStr(), support the output of HTML character entity references instead of characters having decimal codes greater than 127 (e.g. "£ 12.34" instead of "£ 12.34").

The default currency names preset for the US English locale do not use Unicode characters. Unicode characters with no equivalent character in ISO 8859-1 encoding may be present in the currency names when certain Asian and certain other locales are used.

The default currency symbols preset for the US English locale use Unicode characters for some Asian and certain other currencies. If your application does not support Unicode, you may want to edit these currency strings in the properties of the locale(s) you plan to use.

Formatting of Currency Amounts

The formatting of currency amounts for presentation purposes depends on several locale-specific (not currency-specific) currency formatting settings. For example, the same dollar amount written as "$12,345.67" in the US would be "$ 12.345,67" in Italy. These regional options include the decimal symbol (also known as fractional separator), the digit grouping symbol (also known as group separator), the placement of the currency code or symbol (before or after the amount, with or without a separator) and the type of digit grouping (e.g. "123456789" vs. "123 456 789" vs. "12 34 56 789"). These preferences can be modified in the Edit Locale dialog.

The ConvertToStr() and RateStr() COM and Web service methods include powerful formatting functionality which takes into account both the requested locale and additional formatting options (e.g. output using standard currency code vs. localized currency symbol, etc.)

Locales, Countries, Domains and Currencies

The COM and Web service interfaces include internationalization functions such as LocaleToCurrency(), CountryToCurrency() and DomainToCurrency() which may make it easier for example to automatically set an initial default currency, e.g. on an e-commerce site based on the internet domain of the customer.

While useful, these functions have some limitations:

  • Since there is no exact relationship between locales and currencies (e.g. a two-letter language locale code may match different countries with different currencies, and a three-letter code may match a country which is in a transition between two currencies), the result may be approximate (especially if two-letter language codes are used, whereas LCID codes or three-letter Windows locale codes lead to more focused results). If the input string is empty or could not be resolved, the function returns a currency for the default locale set in Currency Server. If this default currency does not satisfy the ActiveOnly requirement, the first active currency (in alphabetical order sorted by ISO 4217 Alpha-3 code) is returned.
  • Since there is no exact relationship between countries and currencies (in some countries more than one currency may be in practical use, e.g. during the transition from an old currency to a new currency, or because a "stronger" currency is preferred), the result may be slightly approximate (but correct in most cases).
  • Since there is no exact relationship between internet Top Level Domains (TLDs) and countries and/or currencies (e.g. a currency or internet top level domain may be used in multiple countries), the result may be approximate.

In the worst case, i.e. if multiple or no matches occur, Currency Server either returns the first currency matching the argument, or the first currency for the default locale, or, as a last resort, the first active currency (in alphabetical order sorted by ISO 4217 Alpha-3 code).


For more in-depth information, we recommend that you have a look at the Internationalization section in the Working with Currencies chapter of the Currency Server software documentation.

© 1998-2022 Cloanto Corporation. All rights reserved.      Legal      Privacy