[![TravisCI Build Status](https://travis-ci.org/rust-locale/locale_config.svg?branch=master)](https://travis-ci.org/rust-locale/locale_config) [![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/13100wtqs80tyink/branch/master?svg=true)](https://ci.appveyor.com/project/jan-hudec/locale-config/branch/master) [![Crates.io Version](https://img.shields.io/crates/v/locale_config.svg)](https://crates.io/crates/locale_config) [![Docs.rs](https://docs.rs/locale_config/badge.svg)](https://docs.rs/locale_config/) # `locale_config` Remembers locale configuration per-thread and per-process and initializes the values by inspecting the system for user preferences. ## Installation You can depend on this library by adding `locale_config` to your Cargo dependencies: ```toml [dependencies] locale_config = "*" ``` Usually it is not recommended to depend on `*`, but in this case it is important that incompatible version requirements don't cause multiple versions to be pulled in the final binary, so I do recommend it here and promise I will maintain good compatibility. Just please don't add traits to the types defined here to avoid conflicts with potential future methods. ## Using Usually you want to use this indirectly via a localization crate like `locale`. However if you need to work with the identifier itself, or you need to override it, use ```rust Locale::current() ``` to find what you should be using at any given point in the application, ```rust Locale::set_current() ``` to override it for current thread and ```rust Locale::set_global_default() ``` to override it for new threads. In case you need to access the initial value, you'll find it under ```rust Locale::user_default() ``` The value may contain language tags specific for various localization aspects, called categories, and fallbacks. The `Locale::tags_for` method will take care of selecting relevant tags for you. For preferred language of translations, use ```rust Locale::current().tags_for("messages") ``` For formatting, use categories `"numeric"` for numbers, `"time"` for date and time and `"monetary"` for money amounts. And use `"collate"` for collation. Note that this crate does not itself provide any translation, formatting nor collation functionality. Formatting and collation will be provided by `locale` crate, translation has multiple available implementations. See full documentation on [![Docs.rs](https://docs.rs/locale_config/badge.svg)](https://docs.rs/locale_config/) or [github](https://rust-locale.github.io/locale_config/locale_config/). ## Supported systems * **Unix:** Using the POSIX standard environment variables `LANG`, `LC_*` and `LANGUAGES`. The variables are recognized on all systems and take precedence on most of them. * **Windows:** Vista and newer - Uses API available from Vista and Server 2008 only. - The `GetUserPreferredUILanguages` is only available for desktop, but not store applications. Store applications should have equivalent functionality, but I didn't try accessing it from Rust yet. - Customization to individual locale elements done in “Regional and Language options” (digits, calendar, decimal and thousand separator etc.) are not detected (yet). - Not well tested. * **OS X:** Reads setting from `NSLocale`, can be overridden by setting the Unix environment variables. * **CGI:** The `HTTP_ACCEPT_LANGUAGE` environment variable is used if detected. Hopefully it is specific enough to the CGI environment that it can be used whenever detected. ## Changelog ### 0.3.0 * Support OS X `NSLocale`. Thanks Sophie Tauchert (@999eagle). ### 0.2.3 * Try support getting locale in emscripten targets in browser. Unfortunately the emscripten targets seem to have broken in cross meanwhile, so they are not being tested. * Update to winapi 0.3. * Update ro regex 1.0. ### 0.2.2 * Update dependencies: regex 0.2. ### 0.2.1 * Interpret some overrides that can be set on Windows in Region and Language dialog, namely: group, decimal and list separators, first day of week, 12/24-hour time, measurement system, (decimal) number system, to an extent negative monetary value format (only whether to use parenthesized format or not) and to an extent date format (if ISO-8601 variant is selected). ### 0.2.0 * Changed error handling to proper error type. ### 0.1.1 * Added basic Windows support. ### 0.1.0 * Initial version, with Unix and CGI support.