From da6225c32e14fbd0d93340db0145b5572ac50b5b Mon Sep 17 00:00:00 2001 From: Terry Raimondo Date: Thu, 14 Nov 2019 15:40:52 +0100 Subject: [PATCH] Update README --- README.md | 29 +++++++++++++++++++++-------- src/lib.rs | 5 ++--- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 8abed66..ca0af55 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,19 @@ # Locales -![LICENSE](https://img.shields.io/crates/l/locales) [![Crates.io Version](https://img.shields.io/crates/v/locales.svg)](https://crates.io/crates/locales) +![LICENSE](https://img.shields.io/crates/l/locales) [![Coverage Status](https://coveralls.io/repos/github/terry90/internationalization-rs/badge.svg?branch=master)](https://coveralls.io/github/terry90/internationalization-rs?branch=master) [![Build Status](https://travis-ci.org/terry90/internationalization-rs.svg?branch=master)](https://travis-ci.org/terry90/internationalization-rs) -An simple compile time i18n implementation in Rust. +A simple compile time i18n implementation in Rust. It throws a compilation error if the translation key is not present, but since the `lang` argument is dynamic it will panic if the language has not been added for the matching key. > API documentation [https://crates.io/crates/locales](https://crates.io/crates/locales) -## Usage +### Usage Have a `locales/` folder somewhere in your app, root, src, anywhere. with `.json` files, nested in folders or not. It uses a glob pattern: `**/locales/**/*.json` to match your translation files. - the files must look like this: ```json @@ -35,7 +34,6 @@ the files must look like this: ``` Any number of languages can be added, but you should provide them for everything since it will panic if a language is not found when queried for a key. - In your app, just call the `t!` macro ```rust @@ -44,11 +42,23 @@ use locales::t; fn main() { let lang = "en"; let res = t!("err.not_allowed", lang); - assert_eq!("You are not allowed to do this", res); } ``` +If the key is missing, your code will not compile + +```rust,compile_fail +use locales::t; + +fn main() { + let lang = "en"; + let res = t!("missing key", lang); + // Code will not compile +} + +``` + You can use interpolation, any number of argument is OK but you should note that they have to be sorted alphabetically. To use variables, call the `t!` macro like this: @@ -63,7 +73,7 @@ fn main() { } ``` -## Installation +### Installation Locales is available on [crates.io](https://crates.io/crates/locales), include it in your `Cargo.toml`: @@ -85,6 +95,9 @@ Or use the macro where you want to use it: use locales::t; ``` -## Note +### Note Locales will not work if no `PWD` env var is set at compile time. +It should work out of the box though + +License: MIT/Apache-2.0 diff --git a/src/lib.rs b/src/lib.rs index 35dda12..8fa9aff 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,11 +1,9 @@ -//! # Locales - //! [![Crates.io Version](https://img.shields.io/crates/v/locales.svg)](https://crates.io/crates/locales) //! ![LICENSE](https://img.shields.io/crates/l/locales) //! [![Coverage Status](https://coveralls.io/repos/github/terry90/internationalization-rs/badge.svg?branch=master)](https://coveralls.io/github/terry90/internationalization-rs?branch=master) //! [![Build Status](https://travis-ci.org/terry90/internationalization-rs.svg?branch=master)](https://travis-ci.org/terry90/internationalization-rs) //! -//! An simple compile time i18n implementation in Rust. +//! A simple compile time i18n implementation in Rust. //! It throws a compilation error if the translation key is not present, but since the `lang` argument is dynamic it will panic if the language has not been added for the matching key. //! > API documentation [https://crates.io/crates/locales](https://crates.io/crates/locales) @@ -101,6 +99,7 @@ //! ## Note //! Locales will not work if no `PWD` env var is set at compile time. +//! It should work out of the box though include!(concat!(env!("OUT_DIR"), "/i18n.rs"));