NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #4001 most downloaded on crates.io
Traits and macros to conveniently embed localization assets into your application binary or library in order to localize it at runtime.
Last release 1 years ago
09 Jul 2025
Release timing varies
gaps range from 2 weeks to 11 months
Most releases are documented
notes for 41 of 50 stable releases
3 versions withdrawn
withdrawn after publishing
7 years old
53 releases · first in 2020
i18n-embed v0.16.0 i18n-build v0.10.3
locale_config dependency with sys-locale. Fixes #63 Cannot parse locale on Macos. Big thanks to @TristanDebrunner for this contribution!
gettext-system feature is enabled, locale_config is not entirely eliminated from the dependency tree as gettext-rs depends on it.fluent to 0.17 and fluent-syntax to 0.12.
One column per quarter.
Bump i18n-embed to v0.15.4 Bump i18n-embed-fl to v0.9.4
FluentLanguageLoader::with_fluent_message_and_bundle(). This method functions like with_fluent_message(), but it also returns the FluentBundle which owns the message. As part of implementation of #144. Many thanks to @cbs228 for this contribution.notify dependency to version 8.0.0.i18n-embed v0.15.3 i18n-build v0.10.1 i18n-embed-fl v0.9.3
lazy_static #135 thanks to @mrtryhard.Fix incorrect workspace package specification for i18n-embed-impl.
i18n-embed-impl.Fix for #97 Error when using workspace defined package metadata. Contributed by @Umio-Yasuno.
i18n-embed-impl crate.Remove deprecated methods for LanguageConfig, Please use lang(...).get_attr_args(...) etc instead.
autoreload crate feature.
RustEmbedNotifyAssets - A wrapper for rust_embed::RustEmbed that supports notifications when files have changed on the file system.FileSystemAssets::notify_changes_enabled() - A new method to enable watching for changes.AssetsMultiplexor - A way to multiplex implementations of [I18nAssets] where assets are multiplexed by a priority.I18nAssets trait.
LanguageConfig, Please use lang(...).get_attr_args(...) etc instead.
LanguageConfig::get_lang()LanguageConfig::get_lang_args_concrete()LanguageConfig::get_lang_args_fluent()LanguageConfig::get_lang_args()LanguageConfig::get_lang_attr()LanguageConfig::get_lang_attr_args_concrete()LanguageConfig::get_lang_attr_args_fluent()LanguageConfig::get_lang_attr_args()LanguageConfig::lang() - Please use select_languages(...) instead.DefaultLocalizer::new() (Send + Sync + 'static) to allow it to be used with autoreload feature.LanguageLoader::load_languages() now accepts &[unic_langid::LanguageIdentifier] instead of &[&unic_langid::LanguageIdentifier].LanguageLoader:reload() - Added a new trait method which is used to reload the currently loaded languages.std::env::var("CARGO_PKG_NAME") Fixes #97Nothing published for this version
Bump dependencies and use workspace dependencies.
Nothing published for this version
Made arc-swap an optional dependency, it's only required for fluent-system implementation.
arc-swap an optional dependency, it's only required for fluent-system implementation.FluentLanguageLoader::lang() is deprecated in favour of renamed FluentLanguageLoader::select_languages().
LanguageLoader::load_available_languages() method to load all available languages.FluentLanguageLoader::select_languages() method (renamed FluentLanguageLoader::lang()).FluentLanguageLoader::select_languages_negotiate() method to select languages based on a negotiation strategy using the available languages.FluentLanguageLoader::lang() is deprecated in favour of renamed FluentLanguageLoader::select_languages().FluentLanguageLoader::get_lang* methods have been deprecated in favour of FluentLanguageLoader::lang().
FluentLanguageLoader::lang() thanks to @bikeshedder!This methods allows creating a shallow copy of the FluentLanguageLoader which can than be used just like the original loader but with a different current language setting. That makes it possible to use the fl! macro without any changes and is a far more elegant implementation than adding multiple get_lang* methods as done in #84.
FluentLanguageLoader::get_lang* methods have been deprecated in favour of FluentLanguageLoader::lang().Support fluent attributes #98 thanks to @Almost-Senseless-Coder!
FluentLanguageLoader:get_attrget_attr_args_concreteget_attr_args_fluentget_attr_argsget_lang_attrget_lang_attr_args_concreteget_lang_attr_args_fluentget_lang_attr_argsenv_logger dev dependency to version 0.10.Implement FluentLanguageLoader::get_lang(...) methods. This enables the use of the fluent language loader without using the global current language se
FluentLanguageLoader::get_lang(...) methods. This enables the use of the fluent language loader without using the global current language setting, which is useful for web servers. Closes #59.Update rust-embed to 6.3 to address RUSTSEC-2021-0126.
rust-embed to 6.3 to address RUSTSEC-2021-0126.Use conditional compilation correctly for doctests.
parking_lot to version 0.12.New FluentLanguageLoader::with_bundles_mut() method to allow mutable access to bundles.
FluentLanguageLoader::with_bundles_mut() method to allow mutable access to bundles.pretty_assertions version 1.0.Update rust-embed to version 6.
rust-embed to version 6.fluent to version 0.16.Don't reference specific i18n-embed version number.
i18n-embed version number.Added `bin` example which explains how to consume the `lib-fluent` example library in a desktop CLI application.
bin example which explains how to consume the lib-fluent example library in a desktop CLI application.fluent to version 0.15.FluentLanguageLoader to use a thread safe IntlLangMemoizer as per the notes on FluentBundle's concurrency. This was required to solve a compilation error in i18n-embed-fl and may also fix problems for other downstream users who were expecting FluentLanguageLoader to be Send + Sync. It might impact performance for those who are not using this in multi-threaded context, please report this, and in which case support for switching the IntlLangMemoizer added.This was not the expected behaviour. This fix could be considered a breaking change for libraries that inadvertently relied on that behaviour.
fluent system, ensuring that the fallback language is loaded by default.LanguageRequester::add_listener() signature now using std::sync::Arc and std::sync::Weak.i18n-embed-fl loads i18n.toml from a different path to fluent_language_loader!(). For subcrates in a workspace previously fluent_language_loader!() and gettext_language_loader!() were searching for i18n.toml in the crate root of the workspace, rather than the current subcrate. This was not the expected behaviour. This fix could be considered a breaking change for libraries that inadvertently relied on that behaviour.LanguageRequester::add_listener() change the listener type to std::sync::Weak, to better support temporary dependencies that may come from another thread. This should not be a performance bottleneck. This also affects DesktopLanguageRequester and WebLanguageRequester.LanguageRequester::add_listener_ref() method to add permanent listeners of type &dyn Localizer. This also affects DesktopLanguageRequester and WebLanguageRequester.i18-embed-impl to version 0.7.0.Add workaround for #57 for until is solved.
Update references to i18n-embed version in readme and source code examples.
i18n-embed version in readme and source code examples.More gracefully handle the situation on Linux where LANG environment variable is not set due to rust-locale/locale_config#6. Fixes #49.
fluent dependency to version 0.14.Functionality to disable bidirectional isolation in Fluent with FluentLanguageLoader with a new set_use_isolating method #45.
Updated documentation for select() function.
select() function.### Fixes - Remove compiler warning.
Renamed argument in select() method for clarity.
select() method for clarity.select() method to use debug level instead of info level.Bumped version to reflect potential breaking changes present in the new version of fluent, 0.13 which is exposed in this crate's public API. And yanke…
fluent, 0.13 which is exposed in this crate's public API. And yanked previous versions of i18n-embed: 0.8.6 and 0.8.5.Update documentation and example to more accurately reflect the current state of LanguageRequester::poll() on various systems.
LanguageRequester::poll() on various systems.Fixes to address breaking changes in fluent-syntax version 0.10.
get_args_fluent() method to FluentLanguageLoader to allow arguments to be specified using fluent's new FluentArgs type.fluent to version 0.13.fluent-syntax version 0.10.A workaround for the fluent issue #191, where CRLF formatted localization files are not always successfully parsed by fluent.
Added a new with_message_iter() method to FluentLanguageLoader, to allow iterating over the messages available for a particular language.
with_message_iter() method to FluentLanguageLoader, to allow iterating over the messages available for a particular language.Default implementation for WebLanguageRequester.Fixed some mistakes in the docs.
Update version reference to i18n-embed in README, and docs.
i18n-embed in README, and docs.Changes to support the new i18n-embed-fl crate's fl!() macro, and some major cleanup/refactoring/simplification.
Changes to support the new i18n-embed-fl crate's fl!() macro, and some major cleanup/refactoring/simplification.
I18nAssets trait, to support situations where assets are not embedded.I18nAssets trait for types that implement RustEmbed.FileSystemAssets type (which is enabled using the crate feature filesystem-assets), which implements I18nAssets for loading assets at runtime from the file system.Debug trait on more types.has() and with_fluent_message() methods to FluentLanguageLoader.LanguageRequesterImpl available on default crate features. No longer requires gettext-system or fluent-system to be enabled.I18nEmbed trait, and derive macro, it was replaced with the new I18nAssets trait.domain and module arguments/variable inputs to FluentLanguageLoader and GettextLanguageLoader, and in the LanguageLoader trait with some renaming.'static bounds on types, methods and arguments.LanguageRequester::current_languages()'s return type now uses String as the HashMap key instead of &'static str.available_languages() implementation moved from I18nEmbed to LanguageLoader.i18n.toml location in both the gettext_language_loader!() and fluent_language_loader!() macros using find-crate.Fix broken documentation links when compiling with no features.
Fix broken documentation links.
Update to i18n-config version 0.3.0, contains breaking changes to i18n.toml configuration file format. See the i18n changelog for more details.
Changes for the support of the fluent localization system.
gettext-system and fluent-system to enable the new GettextLanguageLoader and FluentLanguageLoader types. See the README and docs for more details.i18n-config version 0.3.0, contains breaking changes to i18n.toml configuration file format. See the i18n changelog for more details.language_loader!() macro to gettext_language_loader!(), and change how it works a little to make it simpler. Most of the functionality has been moved into the new GettextLanguageLoader type. See the docs.gettext-system is no longer included in the default crate features.Only re-export optional dependencies when they're actually enabled in the crate features (#26 thanks to @jplatte.)
Changed the argument for LanguageRequester::add_listener() to use a std::Weak instead of std::Rc to make it more obvious that it is the caller's respo
LanguageRequester::add_listener() to use a std::rc::Weak instead of std::rc::Rc to make it more obvious that it is the caller's responsibility to hold on to the Rc in order to maintain the reference.LanguageRequester::set_language_override().Refactored I18nEmbedError::Multiple(Box >) to I18nEmbedError::Multiple(Vec ), removing the useless box (and complaining Clippy lint).
I18nEmbedError::Multiple(Box<Vec<I18nEmbedError>>) to I18nEmbedError::Multiple(Vec<I18nEmbedError>), removing the useless box (and complaining Clippy lint).select() method to use slice argument instead of &Vec<LanguageIdentifier>.LanguageRequester::add_listener(&mut self, localizer: &Rc<Box<dyn Localizer<'a>>>) to add_listener(&mut self, localizer: &Rc<dyn Localizer<'a>>) removing the unnecessary Box.Default implementation for DesktopLanguageRequester.Update fluent-langneg dependency to version 0.13.
fluent-langneg dependency to version 0.13.unic-langid dependency to version 0.9.Nothing published for this version
Mostly a refactor of LanguageLoader and I18nAssets to solve issue #15.
Mostly a refactor of LanguageLoader and I18nAssets to solve issue #15.
LanguageLoader with a new language_loader!(StructName) which creates a new struct with the specified StructName and implements LanguageLoader for it. This was done because LanguageLoader now needs to store state for the currently selected language, and deriving this automatically would be complicated.I18nAssets to move the load_language_file responsibility into LanguageLoader and add a new load_language method to LanguageLoader.I18nAssetsDyn to also expose the RustEmbed#get() method, required for the new LanguageLoader changes.LanguageLoader as a static now requires lazy_static or something similar because the StructName#new() constructor which is created for it in language_loader!(StructName) is not const.Updated link to this changelog in the crate README.
Bump i18n-config dependency in i18n-embed-impl version to 0.2.
i18n-config dependency in i18n-embed-impl version to 0.2.Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →