@hi18n/core
Version:
Message internationalization meets immutability and type-safety - core runtime
225 lines (145 loc) • 5.52 kB
Markdown
# `@hi18n/core`
## 0.2.4
### Patch Changes
- da85d77: fix(core): transpile class static initialization blocks
## 0.2.3
### Patch Changes
- ccb20f3: fix(core): check template escape correctness
## 0.2.2
### Patch Changes
- 7ab7369: fix(core): add missing export of tag
## 0.2.1
### Patch Changes
- 28fb275: feat(core): add new message builder
## 0.2.0
### Migration Guide
#### Removed deprecated Catalog constructor overload
Now you cannot do this:
```typescript
const catalogEn = new Catalog<Vocabulary>({
"example/greeting": msg("Hello, {name}!"),
});
```
Instead, put the language tag in the first argument.
It should match the tag used when building the Book instance.
```typescript
const catalogEn = new Catalog<Vocabulary>("en", {
"example/greeting": msg("Hello, {name}!"),
});
```
#### Use of `msg()` is now mandatory when building a Catalog
Now you cannot do this:
```javascript
import { Catalog } from "@hi18n/core";
const catalogEn = new Catalog("en", {
"example/greeting": "Hello, {name}!",
});
```
Instead, you must wrap the message in `msg()` utility.
```javascript
import { Catalog, msg } from "@hi18n/core";
const catalogEn = new Catalog("en", {
"example/greeting": msg("Hello, {name}!"),
});
```
### Minor Changes
- 1ddccf8: BREAKING CHANGE: remove deprecated Catalog constructor overload
- d44fd6d: feat(core)!: require use of msg()
## 0.1.16
### Patch Changes
- e40e31c: chore(ts): enable verbatimModuleSyntax and isolatedDeclarations
- 40b5c82: chore(ts): import ts files as \*.ts
## 0.1.15
### Patch Changes
- c478ab5: feat(eslint): support ESLint 9
## 0.1.14
### Patch Changes
- 9a55438: chore(build): Use TypeScript to build packages
## 0.1.13
### Patch Changes
- 19e0ca6: chore(build): bump TypeScript to 5.9
## 0.1.12
### Patch Changes
- d3f3120: chore(misc): migrate from Jest to Vitest
## 0.1.11
### Patch Changes
- bafd25f: chore(misc): Test in Node.js 22
- fbe729b: Align CHANGELOG format with Changesets
- 38253a0: chore(misc): use pnpm mode
- 6a5c0bd: chore(misc): set up Changesets to manage releases
## 0.1.10
### Patch Changes
- Prevent minifier from changing error name
## 0.1.9
### Patch Changes
- New APIs for dynamically loading Catalogs of specific languages.
- Generalized `Book` constructor. Now you can pass lazy-loading function `() => import("...")` where a catalog object has been expected.
- `preloadCatalogs(book, locales)` to start loading catalogs. There is also `Book.prototype.loadCatalog()` but the former is preferred.
- `getTranslator` accepts a new `throwPromise` option. When `throwPromise` is true, it throws a Promise instance instead of a "catalog not loaded" error. This is used to support React Suspense in `@hi18n/react`.
## 0.1.8
### Patch Changes
- Implement fallbacks in case of missing Intl in the following cases:
- If `Intl.NumberFormat` is missing, it falls back to `toString` in `{arg,number}` and `{arg,number,integer}`.
- If `Intl.PluralRules` is missing, it falls back to the "other" branch in `{arg,plural,...}`.
- Exact matches like `=0` are still valid.
## 0.1.7
### Patch Changes
- Add `handleError` option to `new Book`.
The option can be passed as part of a second argument to the constructor.
With this option, you can ignore certain errors and report it in background instead.
- Add `implicitLocale` option to `new Book`.
The option can be passed as part of a second argument to the constructor.
This option can be used in conjunction with `handleError` to fall back to English (or another language of your option)
in case someone forgets to configure locales before rendering.
- Refactored error class hierarchy. Now the following classes are exposed:
- `MessageError`
- `MissingTranslationError`
- `NoLocaleError`
- `MissingLocaleError`
- `ParseError`
- `MessageEvaluationError`
- `MissingArgumentError`
- `ArgumentTypeError`
## 0.1.6
### Patch Changes
- Add a new overload for `new Catalog` constructor. It accepts a locale identifier as the first argument.
- Please make sure to update the ESLint plugin / CLI too to support the new format.
- The old overload is deprecated.
## 0.1.5
### Patch Changes
- Include less polyfills from core-js.
- Reduce polyfill for matchAll and Array.prototype.includes.
- Fix error when Date is mocked in a certain way like `@sinonjs/fake-timers`.
## 0.1.4
### Patch Changes
- Support `offset:` parameter in plural translations.
- Fix bug where date skeletons `{foo,date,::MMMMdjmm}` is not actually applied.
## 0.1.3
### Patch Changes
- Support `#` in plural translations.
- Implement `{foo,number,integer}` and `{foo,number,percent}` formats.
- Implement the following date/time formats:
- `{foo,date}`
- `{foo,date,short}`
- `{foo,date,medium}`
- `{foo,date,long}`
- `{foo,date,full}`
- `{foo,date,::MMMMdjmm}`, etc. where `MMMMdjmm` is a format string called skeleton.
- `{foo,time}`
- `{foo,time,short}`
- `{foo,time,medium}`
- `{foo,time,long}`
- `{foo,time,full}`
- Add `msg.todo`.
## 0.1.2
### Patch Changes
- Add prepack script. It allows you to use unreleased versions from git with yarn v2 or later.
- Add `"sideEffects": false` for better tree-shaking.
- Accept multiple locales in `getTranslator`. For now, only the first element is relevant.
## 0.1.1
### Patch Changes
- Add `translationId` and `t.dynamic` for dynamically selecting translations
- Add `t.todo` for bootstrapping new translations
## 0.1.0
### Patch Changes
Initial release.