https://github.com/mclander/angular-custom-locale
Module for customization angular 4-8 locale
https://github.com/mclander/angular-custom-locale
Last synced: about 1 year ago
JSON representation
Module for customization angular 4-8 locale
- Host: GitHub
- URL: https://github.com/mclander/angular-custom-locale
- Owner: mclander
- License: mit
- Created: 2019-10-07T16:58:30.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2019-10-09T09:59:46.000Z (over 6 years ago)
- Last Synced: 2025-06-16T09:55:46.085Z (about 1 year ago)
- Language: JavaScript
- Size: 7.81 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# angular-custom-locale
Helps to customization Angular 5.x-8.x locale
# Usage
Imagine that we need to change view of numbers, in whole project. And this project already use some locale.
I.e. our components uses in declaration `providers: {provide: LOCALE_ID, useValue: 'ru'}`.
So let is magic begin.
```typescript
// app.module.component.ts
// Boilerplate
import customizeLocale from 'angular-custom-locale';
import { registerLocaleData } from '@angular/common';
// Imports russian locale: where numbers outputs like 1234.56 => 1 234,56
import localeRu from '@angular/common/locales/ru';
// clone locale for safe use
import cloneDeep from 'cloneDeep';
let customizedLocaleRu = cloneDeep(localeRu);
// Some hacks (i.e. magic): mutate locale (I plan to change this beehaviour in latest versions)
customizeLocale(customizedLocaleRu, {
numbers: {
decimal: '.', // decimal separator, was ','
group: '', // number group separator, was ' '
nan: '-' // not a number message, was 'не число' (not a number), but I not sure, that it uses anywhere
}
});
// And now numbers output will be like 1234.56 => 1234.56. Just a magic for no magic)
registerLocaleData(customizedLocaleRu);
// If we need change locale settings for whole project without declare locale providers, here is really dirty hack
// We can change default locale. If you know right way let me know)
registerLocaleData(customizedLocaleRu, 'en');
```
# Parameter
This is Objech where first level of keys means group name of changing
items, 2nd level - means items names. All not case sensitive.
Now supported only one section '**number**'. If you need more group, drop me a line.
List of items:
* **decimal** - decimal separator
* **group** - digits group separator
* **list** - list separator
* **percentSign** - % (percent sign)
* **plusSign** - + (plus sign)
* **minusSign** - - (minus sign)
* **exponential** - exponential
* **superscriptingExponent** - superscripting exponent
* **perMille** - ‰ (per-mille)
* **infinity** - ∞ (infinity sign)
* **nan** - not a number string
* **timeSeparator** - time separator>
# Is it legal? Or (at least) good practice?
I hope so. Angular trought 5 to 8 versions has no changes... in format of locales files.
Of course, I can't guarantee it will not changed in Angular 9 (or even 8.xx).
I just can promise to add some hack in this module if it will fired.
# Naming
Angular imports data for locales from [CLDR](http://cldr.unicode.org). So I just use
names from xml (e.g. [here](https://github.com/unicode-org/cldr/blob/release-36/common/main/ru.xml))
```xml
...
...
,
;
%
+
-
E
×
‰
∞
не число
:
...
```
# Plans
* Add more sections (on demand)
* Change mutation behaviour to safe
* Fixes this README (ough, my English)
* Write descriptions for "internal" but exported functions setItem & getItem
* Add warnings (or restictions for Angular 9+)
Just write me if I'll can help you,.. or you can help me (pull request or any advises) mclander@list.ru.