Internationalisation
Présentation
Si toutes les applications doivent être internationalisées, un grand nombre d'entre elles seront également localisées (ce qui, pour nos besoins, correspond essentiellement à une traduction). Si vous ne l’internationalisez pas correctement, la localisation complète devient difficile, voire impossible.
Jutro met à votre disposition un service d'assistance à l'internationalisation et à la localisation, mais vous devez gérer également l'implémentation.
Nous traitons la langue, les paramètres régionaux, le pays et la devise comme des variables entièrement indépendantes :
- Langue : elle couvre les chaînes de caractères ordinaires de l'interface utilisateur.
- Les applications peuvent configurer une série de
availableLanguageset unpreferredLanguage(par défaut)
- Les applications peuvent configurer une série de
- Paramètre régional : également connu sous le nom de format régional, il régit la façon dont les dates, les heures, les nombres et les calendriers sont formatés Notez que toutes les chaînes classiques de l'interface utilisateur (régie par la langue) qui comprennent une variable de date, d'heure ou de nombre doivent être formatées en fonction des paramètres régionaux.
- Les applications peuvent configurer une série de
availableLocaleset unpreferredLocale(par défaut)
- Les applications peuvent configurer une série de
- Pays : régit le comportement des composants de numéro de téléphone ou d'adresse
- Les applications peuvent définir un
defaultCountryCode, qui, à moins qu'il ne soit écrasé au niveau du composant, sera utilisé par des composants tels queIntlPhoneNumberFieldetAddresspour définir le pays par défaut
- Les applications peuvent définir un
- Devise : la devise ne doit pas être déduite de la langue, du pays ou des paramètres régionaux d'un utilisateur
- La devise est simplement une propriété d'une transaction
- Les applications peuvent configurer une
defaultCurrency, qui, à moins d'être écrasée au niveau du composant, sera utilisée pour configurer des composants tels queCurrencyInput
Avant de commencer
L'application exemple Jutro vous propose les éléments suivants :
- Toutes les chaînes de l'interface utilisateur sont marquées de manière à pouvoir être extraites dans le fichier
lang.json, puis traduites - Le processus de développement crée automatiquement notre pseudo-langage, connu sous le nom de Sherlock
- Tous les composants sensibles au paramètre régional comme le sélecteur de date et la saisie de la devise se comportent automatiquement de manière correcte
Prise en charge de l'internationalisation (i18n) dans Jutro
react-intl: une bibliothèque qui fournit des composants React tels queFormattedDateetFormattedNumber, ainsi que des API pour formater les dates, les nombres et les chaînes et gérer les traductions. Certains de nos composants, commeCurrencyInput, englobent les composants fournis parreact-intl.jutro: cet utilitaire de ligne de commande fournit une sous-commande qui simplifie la gestion du texte traduisible. Pour en savoir plus, reportez-vous aux sections correspondantes sur les commandes CLI de la plate-forme Jutro.jutro-locale: package Jutro qui contient, entre autres, les éléments suivants :GlobalizationProvider: définit le contexte d'internationalisation d'une application au moyen du composantIntlProviderdereact-intl- La globalisation stocke les données en fonction de zustand, que vous pouvez utiliser pour interagir avec les préférences des paramètres régionaux de l'utilisateur et les modifications apportées à la langue, aux paramètres régionaux, à la devise et au pays
jutro-components: contient une variété de composants qui tiennent compte des paramètres régionaux, tels que la combinaison suivante de champs de saisie et d'affichage de valeurs :CurrencyInput,CurrencyValueSimpleDate,DateRange,DateTime,DateTimeZoneInputNumber,NumberValueIntlPhoneNumberField,PhoneNumberValueGlobalizationChooser: widget vous permettant de sélectionnerlocaleetlanguageindépendamment l'un de l'autreLanguageSelector: similaire àGlobalizationChooser, mais présente uniquement un sélecteur de langue
Votre structure de dossiers
i18n/src/*: fichiers temporaires générés automatiquement qui contiennent uniquement les chaînes de l'interface utilisateur ayant été extraites desrc/**. Ne les modifiez pas manuellement et ne les enregistrez pas dans le système de contrôle source..gitignoreest déjà configuré de façon à ignorer ces fichiers.src/i18n/lang.json: le fichier de traduction généré (vous pouvez en changer danspackage.jsonen modifiant les options de commandejutro). De même, ne modifiez pas manuellement ce fichier, car il est ajouté à.gitignore. Les traducteurs utiliseront ce fichier comme base de départ pour leurs traductions ultérieures. Ils ajouteront d'autres fichiers de langue dans le même dossier, par exempleru.json,fr.json
Forme de chaîne
Jutro fournit un type intlMessageShape, qui possède les propriétés suivantes :
id: doit être unique dans l'applicationdefaultMessage: texte réel de l'interface utilisateur. Il s'agit également de la chaîne de secours en l'absence de traductiondescription(facultatif) : aide le traducteur à comprendre le contexte dans lequel la chaîne apparaît.args(facultatif) : permet la transmission de valeurs d'argument. Voir Interpolation de variable
Les chaînes doivent respecter cette forme, sinon il n'est pas possible de les extraire en vue de leur traduction.
Voir également : intlMessageShape
Internationalisation de votre application
react-intl fournit la plupart des composants d'internationalisation dont vous avez besoin pour les applications Jutro.
Note : Si vous utilisez l'application exemple livrée avec Jutro, vous bénéficierez gratuitement de la plupart des éléments ci-dessous, si ce n'est tous.
Ajouter le composant du fournisseur d’internationalisation
Si vous n'utilisez pas la fonction Jutro start, vous pouvez ajouter des fonctionnalités de globalisation Jutro à votre application à l'aide de GlobalizationProvider.
À la racine de votre application, vous devez ajouter le composant GlobalizationProvider de Jutro à partir de jutro-locale. Celui-ci fournit un contexte d'internationalisation pour tout ce qu'il englobe. Il utilise le composant IntlProvider de la bibliothèque react-intl.
IntlProvider définit deux propriétés clés :
locale: élément qui affecte le comportement de tous les composants sensibles aux paramètres régionaux, tels que ceux utilisés pour la saisie et l'affichage de la date, du calendrier, de l'heure et du nombremessages: la série de traductions à utiliser par les composants inclus
Notez que locale et messages sont indépendants l'un de l'autre. Cela signifie que vous pouvez définir locale sur fr-FR, mais que la série messages peut contenir des traductions en allemand, par exemple.
Configurer les paramètres régionaux
Vous pouvez définir localeSettings dans src/config/config.json. Par exemple :
{
"localeSettings": {
"availableLocales": ["en-US", "es-ES", "es-MX", "de-DE", "pl"],
"availableLanguages": ["en", "es", "de", "pl", "yy"],
"preferredLocale": "en-US",
"preferredLanguage": "en",
"defaultCountryCode": "US",
"defaultCurrency": "USD"
}
}
Si localeSettings ou une partie de celui-ci ne figure pas dans votre configuration, l'application restaurera les valeurs par défaut suivantes :
{
"localeSettings": {
"availableLocales": ["en-US"],
"availableLanguages": ["en"],
"preferredLocale": "en-US",
"preferredLanguage": "en",
"defaultCountryCode": "US",
"defaultCurrency": "USD"
}
}
Fournir aux utilisateurs un moyen de sélectionner la langue et les paramètres régionaux
Vous disposez de quelques options pour permettre aux utilisateurs de sélectionner la langue et les paramètres régionaux, ainsi que pour stocker ces sélections.
Composant de sélecteur d'internationalisation
GlobalizationChooser permet à l'utilisateur de sélectionner la langue et les paramètres régionaux séparément. Ce composant accepte les propriétés suivantes :
className: noms de classe supplémentaires pour le composant (PropTypes.string)containerStyle: noms de classe supplémentaires pour le conteneur du composant (PropTypes.string)localeId: ID de l'élément « select » des paramètres régionaux (PropTypes.string)languageId: ID de l'élément « select » de la langue (PropTypes.string)localeValue: paramètres régionaux sélectionnés (PropTypes.string)languageValue: langue sélectionnée (PropTypes.string)languageLabelText: clé de message pour l'étiquette de langue (intlMessageShape)localeLabelText: clé de message pour l'étiquette des paramètres régionaux (intlMessageShape)availableLanguageValues: langues disponibles pour la sélection (PropTypes.arrayOf(PropTypes.string))availableLocaleValues: paramètres régionaux disponibles pour la sélection (PropTypes.arrayOf(PropTypes.string))onLocaleValueChange: rappel appelé lors d'une modification des paramètres régionaux (PropTypes.func)onLanguageValueChange: rappel appelé lors d'une modification de la langue (PropTypes.func)renderLocaleLabel: propriété d'affichage pour afficher les paramètres régionaux dans les options (PropTypes.func)renderLanguageLabel: propriété d'affichage pour afficher la langue dans les options (PropTypes.func)showLocaleLabel: indicateur permettant d'afficher ou de masquer l'étiquette des paramètres régionaux (PropTypes.bool)showLanguageLabel: indicateur permettant d'afficher ou de masquer l'étiquette de la langue (PropTypes.bool)showLocaleSelect: indicateur permettant d'afficher/de masquer la sélection des paramètres régionaux (PropTypes.bool)showLanguageSelect: indicateur permettant d'afficher/de masquer la sélection de la langue (PropTypes.bool)readOnly: si la valeur est « true », les listes déroulantes sont en lecture seule et ignorées dans Storybook (PropTypes.bool)skipPropagation: si la valeur est « true », la configuration n'est pas mise à jour lors de la modification de valeur et GlobalizationChooser devient un composant contrôlé (PropTypes.bool)
Composant de sélecteur de langue
Ce composant présente uniquement un menu de sélection de la langue. La valeur de langue sélectionnée sera également utilisée pour définir la valeur des paramètres régionaux. La sélection n'est pas conservée dans localStorage.
La dépendance @jutro/router et ses dépendances homologues telles que
history et les packages react-router-dom sont désormais facultatives pour
les packages de composants. Pour le composant LanguageSelector , il est toutefois nécessaire d'ajouter la dépendance à vos dépendances d'application afin de pouvoir l'utiliser.
Comment Jutro détermine la langue et le paramètre régional à utiliser
Lorsqu'un utilisateur charge une application Jutro, les événements suivants se produisent :
- L'application lit la préférence linguistique du navigateur de l'utilisateur (
navigator.language) - La langue par défaut de l'application correspond à la préférence du navigateur de l'utilisateur, si cette préférence se trouve également dans
availableLanguages, sinon l'application est définie par défaut surpreferredLanguage - Le paramètre régional de l'application sera également défini par défaut en fonction de la préférence linguistique du navigateur de l'utilisateur si cette préférence se trouve également dans
availableLocales; dans le cas contraire, il sera défini par défaut surpreferredLocale
Si la fonction createG11nLocalStorageStore est utilisée, les préférences de l'utilisateur sont également enregistrées dans localStorage et mémorisées d'une session à l'autre.
accept-language du protocole HTTP. Au lieu de cela, le JS côté client lit la propriété navigator.language.Alors que accept-language peut contenir une liste ordonnée de préférences, navigator.language ne contient qu'une seule valeur. La première valeur dans accept-language sera identique à la valeur unique dans navigator.language.
Interaction avec le magasin g11n
Le magasin de globalisation (g11n) est activé dans le fichier src/startApp.js. Par défaut, il est initialisé à l'aide des paramètres régionaux de src/config/config.json. Reportez-vous à la section sur la configuration pour en savoir plus.
Vous pouvez utiliser l'une des fonctions suivantes pour initialiser le magasin :
createG11nMemoryStore: gère les paramètres régionaux en mémoire. Ce magasin correspond au paramètre par défaut. Cela signifie que les modifications apportées au magasin sont réinitialisées lorsque la page est actualisée et que vous revenez à votre configuration.createG11nLocalStorageStore: gère les paramètres régionaux dans le stockage local, de sorte que les préférences de l'utilisateur soient conservées dans toutes les sessions. Reportez-vous à la section sur la persistance du choix de l'utilisateur pour en savoir plus.
Lorsque vous utilisez l'une de ces fonctions, vous pouvez remplacer les paramètres par défaut en transmettant un objet avec les propriétés suivantes :
const g11nStore = createG11nMemoryStore({
country: 'PL',
currency: 'PLN',
language: 'pl',
locale: 'pl-PL',
locales: ['en-GB', 'pl-PL'],
timeZone: 'Europe/Warsaw',
languages: ['en', 'pl'],
});
Ensuite, vous devez transmettre le magasin à la fonction startApp :
startApp({
g11nStore,
// ... other settings
});
Réaction aux modifications des paramètres régionaux
Si vous souhaitez réagir aux modifications des paramètres régionaux et de la langue, n'importe où dans votre application React, vous pouvez utiliser les crochets useLanguage et useLocale. Voici un exemple :
import { useLanguage, useLocale } from '@jutro/locale';
const MyPanel = () => {
const {
availableLocales,
dateLocale,
locale,
defaultTimeZone,
localeOnChangeCallback,
} = useLocale();
const { availableLanguages, language, languageOnChangeCallback } =
useLanguage();
return <div>Functionality coming soon, I promise!</div>;
};
Vous pouvez utiliser localeOnChangeCallback et languageOnChangeCallback pour forcer une modification des paramètres régionaux ou de la langue. Par exemple, vous pouvez les utiliser dans les gestionnaires de clics de bouton :
return (
<>
<button onClick={() => languageOnChangeCallback('lang')}>
Change language to "lang"
</button>
<button onClick={() => localeOnChangeCallback('loc')}>
Change locale to "loc"
</button>
</>
);
Interaction avec le magasin en dehors de l'arborescence React
Si vous souhaitez accéder au magasin en dehors de l'arborescence React, vous pouvez utiliser l'une des fonctions createG11n*Store dans le fichier src/startApp.js.
Chaque fois que l'utilisateur modifie l'un des paramètres régionaux, le magasin est mis à jour. Vous pouvez vous abonner à ces modifications en appelant subscribe et en transmettant une fonction de rappel. Ce rappel sera appelé chaque fois que les paramètres régionaux changeront.
import { createG11nMemoryStore } from '@jutro/locale';
import { loadConfiguration } from '@jutro/config';
import appConfig from './config/config.json';
// load the configuration from the config.json file
// because globalization store gets defaults from this config
loadConfiguration(appConfig);
// create a store that will save changes in memory
const g11nStore = createG11nMemoryStore({});
// subscribe to all changes
g11nStore.subscribe((state) => {
console.log('G11n store changed', state);
});
// subscribe to language changes specifically
g11nStore.subscribe(
(state) => state.language,
(language) => {
console.log('Language changed to: ', language);
window.location.reload();
}
);
export const startApp = () => {
start(Jutro, {
// pass your new local store here
g11nStore,
// ... other options
});
};
Persistance du choix de l'utilisateur
Pour conserver le choix de l'utilisateur, vous pouvez utiliser la fonction createG11nLocalStorageStore à partir de jutro-locale. Il met automatiquement à jour les paramètres régionaux dans localStorage.
- Créez un magasin à l'aide de
createG11nLocalStorageStore. Ce magasin enregistre les modifications dans le magasin local du navigateur. Dans l'exemple ci-dessous, nous appelons ce magasing11nStore. - Transmettez
g11nStoreà la fonction de démarrage de votre application.
import { createG11nLocalStorageStore } from '@jutro/locale';
import { loadConfiguration } from '@jutro/config';
import appConfig from './config/config.json';
// load the configuration from the config.json file
// because globalization store gets defaults from this config
loadConfiguration(appConfig);
// create a store that will save changes in the browser's local store
const g11nStore = createG11nLocalStorageStore({
name: 'unique-store-name',
});
export const startApp = () => {
start(Jutro, {
// pass your new local store here
g11nStore,
// ... other options
});
};
Marquer les messages nécessitant une traduction
Il s'agit d'un aspect que les développeurs doivent prendre en compte début le début.
Voir également :
Pour les composants définis dans JSX
Importez la fonction defineMessages à partir de @jutro/locale pour définir les chaînes à traduire.
Placez-les dans un fichier correspondant à votre composant (par exemple, MyPage.messages.js), puis exportez-les :
import { defineMessages } from '@jutro/locale';
export default defineMessages({
clickMe: {
id: 'jutro-app.pages.myPage.clickMe',
defaultMessage: 'Click me!',
description: 'Action message',
},
thanks: {
id: 'pages.myPage.thanks',
defaultMessage: 'Thanks for clicking me!',
description: 'Result message that appears when user clicks a button',
},
});
Importez les messages dans votre fichier .js correspondant et référencez-les :
import { useTranslator } from '@jutro/locale';
import messages from './MyPage.messages';
...
const translator = useTranslator();
...
const handleClick = () => {
// eslint-disable-next-line no-alert
alert(translator(messages.thanks));
};
...
<Button onClick={handleClick}>
{translator(messages.clickMe)}
</Button>
Pourquoi utiliser un fichier distinct pour les messages JSX ?
Ce n'est pas obligatoire, mais c'est plus propre. (L'idéal serait de faire quelque chose de similaire pour les chaînes basées sur JSON5 également. Mais pour l'instant, ce n'est pas possible. Dans les fichiers de métadonnées/JSON5, les chaînes doivent y être déclarées directement.)
Lorsque les chaînes sont plus isolées du code, il est plus facile de les modifier sans risquer de casser le code.
Utilisation de la syntaxe de format de message pour les arguments formatés
react-intl (en particulier intl-messageformat) prend en charge la syntaxe MessageFormat de la bibliothèque ICU4J. Au lieu de vous contenter d'intégrer une variable/un argument dans une chaîne en utilisant la syntaxe MessageFormat, vous pouvez également déclarer le type d'un argument et son style de formatage.
Exemples :
Your premium is due on {someDate, date}- Formatera
someDatedans un style abrégé (ce n'est généralement pas une bonne idée, car le format est ambigu)
- Formatera
Your premium is due on {someDate, date, long}- Formatera
someDatedans le stylelong, comme pouren-US:February 17, 2019
- Formatera
You've had {numClaims, number} on this policy- Formatera
numClaimsen tant que nombre. C'est-à-dire qu'il utilisera les séparateurs décimaux et de groupe appropriés au paramètre régional
- Formatera
Your premium will increase by {somePercent, number, percent}- Formatera
somePercentsous forme de chaîne de pourcentage
- Formatera
Pour en savoir plus, reportez-vous à la page FormatJS consacrée aux arguments formatés.
Syntaxe des messages et arguments relatifs aux devises
Pour formater les devises au moyen de MessageFormat, vous devez utiliser la syntaxe suivante :
Your next payment is for {someAmount, number, :: currency/EUR}.
Le problème dans ce cas est que votre chaîne déclare la devise. Vous devez donc connaître la devise à l'avance. Cette approche ne pourra vraiment fonctionner que pour les applications qui n'utilisent qu'une seule devise
Gestion du texte de l'interface utilisateur traduisible
Une fois que le texte de l'interface utilisateur a été correctement marqué dans le code, il doit être extrait et fusionné dans un seul fichier. Ce fichier peut ensuite être traduit.
Script d’internationalisation
Le fichier package.json de votre application contient le script i18n. Ce script exécute jutro generate:i18n. Par défaut, cette opération effectue les opérations suivantes :
- Extrait le texte correctement marqué des fichiers correspondant à ces modèles :
src/**/*.metadata.json5, src/**/*.{ts,tsx,js,jsx}- Le texte est extrait dans le répertoire temporaire
./i18n/src/
- Le texte est extrait dans le répertoire temporaire
- Fusionne tout le texte de l'interface utilisateur à partir des différents fichiers présents dans
./i18n/srcdans./src/i18n/lang.json - Le fichier
src/i18n/lang.jsonest pseudo-traduit ensrc/i18n/yy.json. Ce point est abordé plus en détail ci-dessous
Pour en savoir plus sur la commande jutro generate:i18n, reportez-vous à la section « Générer des traductions d’internationalisation » de la documentation CLI.
Veillez à extraire toutes les chaînes
Les développeurs laissent souvent des chaînes codées en dur/intégrées dans les applications, ce qui rend la traduction impossible. C'est dans cet esprit que nous avons élaboré le langage Sherlock.
« Sherlock » : le / faux / pseudo langage
Qu'est-ce que c'est ?
Il s'agit d'un langage généré automatiquement qui convertit des chaînes de Codeless Form en [2zqq25_Codeless Form]. Cette option est incluse dans la configuration par défaut de l'application exemple.
Notre configuration par défaut possède yy dans availableLanguages. Cela permet à « Sherlock » d'apparaître dans le menu des langues du composant GlobalizationChooser. À proprement parler, dans le monde réel, yy n'est pas un code de langue valide. Cependant, notre logiciel fait correspondre ce code de langue à notre propre langage fictif « Sherlock ». Il doit être supprimé des configurations de production.
Quelle valeur cela apporte-t-il ?
- Toutes les chaînes qui apparaissent sans crochet ni hachage préétabli n'ont pas été correctement extraites. Cela signifie que votre code contient un bug. Évidemment, les chaînes de données client apparaissent normalement.
- Le hachage lui-même : il peut sembler aléatoire, mais il est unique pour chaque paire clé/valeur.
Chaînes d'interface utilisateur et prévisualisation en direct
Lorsque vous démarrez votre application en utilisant npm start, celle-ci passe en mode « aperçu en direct ». Cela signifie que les modifications que vous apportez à votre code sont immédiatement reflétées dans votre navigateur.
Malheureusement, les modifications apportées aux chaînes sources existantes ne sont pas mises à jour dans l'aperçu en direct. Il est nécessaire de relancer le pseudo-cycle d'extraction et de fusion au moyen de npm run i18n. La reconstruction de l'application appellera également ce script.
Traduire votre application
La langue source par défaut est l'anglais, avec le code de langue en.
Par défaut, conformément à l'exemple d'application, ces chaînes se trouveront dans le fichier ./src/i18n/lang.json. Ce fichier est ajouté à .gitignore, les traducteurs doivent plutôt copier le fichier et le traduire dans d'autres langues, par ex. en.json, de.json...
N'oubliez pas non plus que seul npm run i18n (ou build) peut garantir que toutes les chaînes seront extraites du code et fusionnées dans ce fichier.
Vos fichiers de traduction doivent être ajoutés au même répertoire que le fichier lang.json.
Texte de l'interface utilisateur à partir de la structure Jutro
Comme toute infrastructure d'interface utilisateur, Jutro comporte du texte d'interface utilisateur, distinct de celui de votre application. Votre application exposera probablement au moins une partie de ce texte. Ce texte couvre des chaînes telles que « OK », « Suivant », « Annuler » et « Soumettre ». Les composants qui exposent ce type de texte vous permettent souvent de remplacer le texte par défaut. Cependant, certains ne le font pas, comme la liste des pays à choisir dans le composant IntlPhoneNumberField.
Outre l'anglais de base (États-Unis), le texte-cadre est traduit dans les langues suivantes : danois, allemand, espagnol (Espagne), espagnol (États-Unis), français, italien, japonais, néerlandais, norvégien, portugais, russe et chinois simplifié.
Cela peut ne pas être suffisant pour vous.
Remplacement de chaînes d'infrastructure ou fourniture de vos propres traductions
Supposons que vous rencontriez l'un des scénarios suivants :
- Vous souhaitez modifier le texte par défaut utilisé par nos composants
- Vous souhaitez modifier certaines des traductions que nous fournissons
- Vous souhaitez traduire le cadre au-delà des langues que nous prenons en charge
Voici ce que vous faites :
- Quelque part en dessous de
./src, créez un fichierframework.messages.js, similaire à ce qui est décrit ici - Copiez la liste des chaînes d'infrastructure source à partir de
node_modules/@jutro/translations/lang-data/en.json - Dans le
framework.messages.jscréé ci-dessus, ajoutez toutes ces chaînes d'infrastructure (ou seulement certaines d'entre elles) à l'aide de la forme de type paireidetdefaultMessage. Si vous souhaitez modifierdefaultMessagepour une chaîne particulière, faites-le ici - Lors de la reconstruction, vous verrez que ces chaînes ont maintenant été ajoutées au fichier
./src/i18n/lang.json - Vous pouvez maintenant traduire les chaînes de la structure comme vous le feriez pour les chaînes de votre application
Composants sensibles aux paramètres régionaux
Des éléments tels que l'affichage, le formatage des dates, des heures, des nombres, des calendriers, des montants monétaires et des pourcentages varient selon les paramètres régionaux. Jutro propose plusieurs composants qui respectent les paramètres régionaux de l'utilisateur.
Dates, heures, calendriers
Jutro offre une variété d'options de date, d'heure et de calendrier.
Composants
Ils sont tous disponibles depuis @jutro/components.
DateField : affiche un élément de saisie de type sélecteur de date. Il offre un système complet pour la saisie et la sélection de la date et de l'heure, ainsi qu'un mode de lecture seule.
FormattedDate : affiche une date formatée intégrée (sans <div>). Prend en charge un certain nombre de formats prédéfinis :
| Paramètres régionaux | short | long | abbreviated | full |
|---|---|---|---|---|
| en-US | Aug 30, 2018 | August 30, 2018 | Thu, Aug 30, 2018 | Thursday, August 30, 2018 |
| fr-FR | 30 août 2018 | 30 août 2018 | jeu. 30 août 2018 | jeudi 30 août 2018 |
| pl-PL | 30 sie 2018 | 30 sierpnia 2018 | czw., 30 sierpnia 2018 | czwartek, 30 sierpnia 2018 |
DateValue : affiche une date formatée au moyen de la propriété tag pour envelopper la valeur.
FormattedDateRange : similaire à FormattedDate, mais pour une plage de dates plutôt que pour une seule date.
Tous ces éléments sont présentés en fonction des paramètres régionaux.
API
Disponible à partir de @jutro/components
formatDate et formatDateRange : API impératives pour le formatage des dates et des heures au moyen du paramètre régional.
Nombres (et non montants monétaires)
Composants
Disponible à partir de @jutro/components
InputNumberField : affiche un élément de saisie pour les champs numériques. Dispose également d'une option en lecture seule.
FormattedNumber : prend en charge le mode lecture seule et les notifications intégrées.
NumberValue : affiche une devise formatée au moyen de la propriété tag pour envelopper la valeur.
| Paramètres régionaux | Sortie formatée |
|---|---|
| en-US | 23,234.34 |
| fr-FR | 23 234,34 |
| de-DE | 23.234,34 |
API
Disponible à partir de @jutro/components
formatNumber : API impérative pour le formatage des nombres au moyen du paramètre régional
Montants monétaires
Composants
Disponible à partir de @jutro/components
CurrencyInput : permet de saisir ou d'afficher une valeur monétaire. Le formatage est basé sur les paramètres régionaux. Prend en charge les modes de saisie et de lecture seule.
FormattedCurrency : affiche une valeur de devise formatée intégrée. (Sans <div>).
CurrencyValue : affiche une devise formatée au moyen de la propriété tag pour envelopper la valeur.
Les composants ci-dessus vous permettent de définir la propriété currencyDisplay. Pour un montant en dollars américains, exprimé avec le paramètre régional en-US, si vous définissez la propriété currencyDisplay sur code, vous obtiendrez USD, alors que si vous la définissez sur symbol, vous obtiendrez $.
La devise elle-même (USD ou EUR, par exemple) est fournie en tant que propriété du composant et n'est absolument pas liée au paramètre régional ni au pays de l'utilisateur.
Le paramètre régional détermine la façon dont le montant de la devise est formaté, mais pas la devise elle-même.
| Paramètres régionaux | Sortie formatée (code) | Sortie formatée (symbol) |
|---|---|---|
| en-US | USD 23,234.34 | $23,234.34 |
| fr-FR | 23 234,34 USD | 23 234,34 $US |
| de-DE | 23.234,34 USD | 23,234.34 $ |
API
Disponible à partir de @jutro/components
formatCurrency : API impérative pour le formatage des valeurs monétaires au moyen du paramètre régional actuel
Définition de la valeur de devise par défaut pour les composants liés à une devise
Il n'y a pas de paramètre defaultCurrency global pour les composants liés à la devise.
Cela signifie que vous devez transmettre la devise ou la devise par défaut à utiliser aux composants liés à la devise CurrencyInput, FormattedCurrency et CurrencyValue :
<CurrencyInput
availableCurrencies={['USD']}
label="Currency input component"
/>
Dans le cas de CurrencyValue, si defaultCurrency n'est pas défini, le composant est défini par défaut sur dollars US ou USD. Vous pouvez également lire cette valeur en appelant la fonction getDefaultCurrency à partir du package de paramètres régionaux de Jutro afin de la récupérer, puis de la transmettre au composant correspondant.
import { getDefaultCurrency } from '@jutro/locale';
Tri/classement
Le classement de texte, également appelé tri, est spécifique à chaque langue. Chaque langue possède ses propres règles de tri.
Fuseau horaire
Par défaut, toutes les dates accompagnées d'une heure sont stockées en tant que date UTC et converties dans le fuseau horaire local de l'utilisateur lors de l'affichage. Vous pouvez remplacer ce comportement en définissant defaultTimeZone dans localeSettings dans src/config/config.json.
"localeSettings": {
...
"defaultTimeZone": "Atlantic/Faroe"
}
Lorsque defaultTimeZone est activé, toutes les dates accompagnées d'une heure sont converties en fuseau horaire defaultTimeZone lors de l'affichage (mais elles restent stockées sous la forme de dates UTC). La seule exception concerne le composant DateTimeZoneField, pour lequel l'utilisateur peut sélectionner un fuseau horaire dans la liste. Dans ce cas, defaultTimeZone est utilisé en tant que fuseau horaire par défaut.
La valeur de defaultTimeZone doit être un fuseau horaire IANA valide.
Noms au pluriel dans le texte de l'interface utilisateur
Les noms au pluriel sont un problème linguistique délicat que Jutro résout grâce à son utilisation de la bibliothèque react-intl.
Utilisez ce pseudo-code :
if (numPolicies === 1) print('You have 1 policy with us');
else print('You have {numPolicies} policies with us');
Le code ci-dessus fonctionne pour l'anglais, mais la logique échoue pour de nombreuses autres langues.
De nombreuses langues possèdent des règles beaucoup plus complexes au sujet des noms au pluriel. Même le français présente des règles différentes de celles de l'anglais. (Le français utilise la forme singulière lorsque la quantité équivaut à 1 ou 0).
Certaines langues ont trois (polonais), quatre (russe) voire six (arabe) formes plurielles, toutes dépendantes de la valeur de l'entier qui ne peut être connue qu'au moment de l'exécution. Cette page Unicode CLDR explique la logique mathématique autour des pluriels pour de nombreuses langues.
Prise en charge de la pluralisation dans Jutro
Reportez-vous à la documentation FormatJS et au guide de syntaxe ICU MessageFormat.
- La syntaxe au pluriel n'est pas entièrement intuitive, ni pour les développeurs ni pour les traducteurs.
- En cas de traduction, assurez-vous que vos fournisseurs d'outils de traduction comprennent et prennent en charge cette syntaxe.