@concordance-wiki/i18n 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,33 +1,83 @@
1
- # @concordance-wiki/i18n
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/concordance-wiki/concordance/main/brand/concordance-mark.svg" width="72" alt="Concordance">
3
+ </p>
2
4
 
3
- Message catalogues of the generated site and their resolution at build time.
5
+ <h1 align="center">@concordance-wiki/i18n</h1>
4
6
 
5
- Every label of the site comes from a catalogue per language in ICU MessageFormat, stored as the JSON translation platforms exchange, one file per area of the site under `messages/<language>/`: an area is an identifier prefix (`home`, `entity`, `search`, `results`, `spaces`...), `messages/en/<area>.json` is its source, `{ "<id>": { "defaultMessage": "...", "description": "..." } }`, and `messages/<language>/<area>.json` its flat translation, `{ "<id>": "..." }`. Every key of a file is under the prefix the file is named after, and the keys are sorted. `en` and `fr` ship complete; a test checks that every locale carries every key of the source with the same variables and kinds.
7
+ <p align="center"><strong>Every string of the site, in English and French, resolved at build so the pages ship words and no machinery.</strong></p>
6
8
 
7
- Each area has a module under `src/areas/<area>.ts` that imports its two files and declares the ICU kind of every argument of every message of the area (`{ count: "plural" }`, `{}` for a message without any), checked by `satisfies` against the keys of the source file. `src/areas.ts` lists the areas in the order of their prefixes; the catalogue merges them in that order, so the identifiers read in sorted order. Identifiers are typed from that merge (`MessageId` is the union of the keys of every area), and `MessageArguments` derives the argument types from the declared kinds: an unknown identifier, a missing variable or an extra one does not compile. A unit test keeps the declared kinds aligned with what the ICU parser reads in the catalogue, and computes the number of messages from the files rather than pinning it.
9
+ <p align="center">
10
+ <a href="https://www.npmjs.com/package/@concordance-wiki/i18n"><img alt="npm" src="https://img.shields.io/npm/v/@concordance-wiki/i18n?style=flat-square"></a>
11
+ <a href="https://github.com/concordance-wiki/concordance/blob/main/LICENSE"><img alt="Licence" src="https://img.shields.io/badge/licence-GPL--3.0--or--later-16181B?style=flat-square"></a>
12
+ <a href="https://github.com/concordance-wiki/concordance/actions/workflows/ci.yml"><img alt="CI" src="https://img.shields.io/github/actions/workflow/status/concordance-wiki/concordance/ci.yml?branch=main&label=ci&style=flat-square"></a>
13
+ </p>
8
14
 
9
- ## Adding an area
15
+ <p align="center">
16
+ <a href="https://github.com/concordance-wiki/concordance/blob/main/docs/guides/getting-started.md">Getting started</a> ·
17
+ <a href="https://github.com/concordance-wiki/concordance/blob/main/docs/guides/configuration.md">Configuration</a> ·
18
+ <a href="https://github.com/concordance-wiki/concordance/blob/main/docs/guides/theming.md">Theming</a> ·
19
+ <a href="https://github.com/concordance-wiki/concordance/blob/main/packages/i18n/CHANGELOG.md">Changelog</a>
20
+ </p>
10
21
 
11
- A new page or part of the site gets its own prefix and its own files: `messages/en/<area>.json`, `messages/fr/<area>.json`, `src/areas/<area>.ts` declaring the arguments, and one line in the `AREAS` list of `src/areas.ts` at the place of its prefix. The tests reject a file whose keys leave the prefix or are unsorted, a module whose declared kinds differ from the parsed messages, and an area listed out of order.
22
+ ---
12
23
 
13
- ## Usage
24
+ ## Why
25
+
26
+ Concordance publishes a static site that speaks the language of your team, with your own words for its labels if you want them. You install [`@concordance-wiki/concordance`](https://www.npmjs.com/package/@concordance-wiki/concordance) for that. This package is the part of it that holds the strings: the message catalogues of the site, `en` and `fr`, in ICU MessageFormat, typed by identifier so that a missing variable does not compile, and resolved at build time so that a published page carries final text and no formatting library. Install it alone to build on the engine, or to word a theme component from a plugin.
27
+
28
+ ## Quick start
29
+
30
+ ```bash
31
+ npm install @concordance-wiki/i18n
32
+ ```
14
33
 
15
34
  ```ts
16
35
  import { formatMessage, loadCatalogue, textDirection } from "@concordance-wiki/i18n";
17
36
 
18
- const catalogue = loadCatalogue("fr-CA", { labels: theme.labels });
37
+ const catalogue = loadCatalogue("fr-CA");
19
38
  formatMessage(catalogue, "entity.mentionsCount", { count: 2 }); // "2 mentions"
20
- formatMessage(catalogue, "site.generatedAt", { date }); // "Généré le 5 mars 2024"
39
+ formatMessage(catalogue, "site.generatedAt", { date: new Date("2026-03-05T00:00:00Z") }); // "Généré le 5 mars 2026"
21
40
  textDirection(catalogue.locale); // "ltr", for the dir attribute of the page
22
41
  ```
23
42
 
43
+ An unknown identifier, a missing variable or an extra one does not compile: `MessageId` is the union of every key of the catalogue and `MessageArguments` derives the argument types from the declared kinds.
44
+
45
+ ## What you get
46
+
47
+ - **Two complete catalogues**, `en` and `fr`, picked by language subtag with fallback to the source language: `loadCatalogue`, `resolveLanguage`, `shippedLanguages`.
48
+ - **Plurals, numbers and dates done right**: `formatMessage` and `formatText` apply the plural rules and the `Intl` formats of the locale.
49
+ - **Your labels, checked first**: `validateLabels`, `validateOverride`, `validateOverrides` verify the `labels` block of a theme before any page renders.
50
+ - **Formatters for the rest**: `formatDate`, `formatDay`, `formatMonth`, `formatNumber`, `formatRelative`, `textDirection` for the values rendered outside a message.
51
+ - **Tools for a theme's tests**: `messageIds`, `messageArguments`, `argumentNames`, `parseMessage`, the identifiers, the declared kinds and the ICU parser.
52
+
53
+ ## Documentation
54
+
55
+ - [Theming](https://github.com/concordance-wiki/concordance/blob/main/docs/guides/theming.md), the `labels` block of a theme
56
+ - [Configuration reference](https://github.com/concordance-wiki/concordance/blob/main/docs/guides/configuration.md), `project.locale`
57
+ - [Home page](https://concordance-wiki.github.io/concordance/), the [demo wiki](https://concordance-wiki.github.io/demo-wiki/) and the [changelog](https://github.com/concordance-wiki/concordance/blob/main/packages/i18n/CHANGELOG.md)
58
+
59
+ Part of [Concordance](https://github.com/concordance-wiki/concordance), GNU GPL v3 or later.
60
+
61
+ <details>
62
+ <summary>Inside the package</summary>
63
+
64
+ Every label of the site comes from a catalogue per language in ICU MessageFormat, stored as the JSON translation platforms exchange, one file per area of the site under `messages/<language>/`: an area is an identifier prefix (`home`, `entity`, `search`, `results`, `spaces`...), `messages/en/<area>.json` is its source, `{ "<id>": { "defaultMessage": "...", "description": "..." } }`, and `messages/<language>/<area>.json` its flat translation, `{ "<id>": "..." }`. Every key of a file is under the prefix the file is named after, and the keys are sorted. `en` and `fr` ship complete; a test checks that every locale carries every key of the source with the same variables and kinds.
65
+
66
+ Each area has a module under `src/areas/<area>.ts` that imports its two files and declares the ICU kind of every argument of every message of the area (`{ count: "plural" }`, `{}` for a message without any), checked by `satisfies` against the keys of the source file. `src/areas.ts` lists the areas in the order of their prefixes; the catalogue merges them in that order, so the identifiers read in sorted order. Identifiers are typed from that merge (`MessageId` is the union of the keys of every area), and `MessageArguments` derives the argument types from the declared kinds: an unknown identifier, a missing variable or an extra one does not compile. A unit test keeps the declared kinds aligned with what the ICU parser reads in the catalogue, and computes the number of messages from the files rather than pinning it.
67
+
68
+ ### Adding an area
69
+
70
+ A new page or part of the site gets its own prefix and its own files: `messages/en/<area>.json`, `messages/fr/<area>.json`, `src/areas/<area>.ts` declaring the arguments, and one line in the `AREAS` list of `src/areas.ts` at the place of its prefix. The tests reject a file whose keys leave the prefix or are unsorted, a module whose declared kinds differ from the parsed messages, and an area listed out of order.
71
+
72
+ ### Resolution
73
+
24
74
  `loadCatalogue` picks the shipped catalogue by language subtag (`fr-CA` uses `fr` and formats numbers, dates and plurals with `fr-CA`) and falls back to the source language when a language ships no catalogue (`de` gets the `en` messages formatted in `en`, with `catalogue.fallback` set). A malformed tag raises a `CatalogueError`. Dates inside messages are formatted in UTC unless `timeZone` says otherwise, so that two builds of the same corpus agree.
25
75
 
26
76
  `formatDate`, `formatNumber` and `formatRelative` wrap `Intl.DateTimeFormat`, `Intl.NumberFormat` and `Intl.RelativeTimeFormat` for the values rendered outside a message; `formatRelative` picks the largest unit that fits and lets the platform say "yesterday" or "hier". `textDirection` reads the text information of `Intl.Locale` (`getTextInfo()` on engines that have it, the earlier `textInfo` accessor otherwise) and falls back to the likely script of the locale against a list of right-to-left scripts.
27
77
 
28
78
  Messages are resolved at build: `formatMessage` returns final strings and the published HTML contains no message, no catalogue and no formatting library. Nothing in this package touches the DOM or is meant to run in a browser; a test checks that the sources reference no browser global.
29
79
 
30
- ## Overriding a label
80
+ ### Overriding a label
31
81
 
32
82
  The `labels` block of `theme.yaml` overrides any message, by language of a shipped catalogue then by identifier:
33
83
 
@@ -38,17 +88,17 @@ labels:
38
88
  entity.mentionsCount: "{count, plural, one {# citation} other {# citations}}"
39
89
  ```
40
90
 
41
- An override uses the syntax of the message it replaces and must use exactly the variables of the source message. `validateLabels(theme.labels)` returns the configuration issues of the whole block, one per faulty key with the path `labels.<language>.<id>`: an unknown identifier, an ICU syntax error with the parser's message, or the missing and unknown variables. The theme validation of the command line is where to call it, so that a bad override is reported with the other theme errors before any rendering; `loadCatalogue` validates the block it applies as well and throws a `CatalogueError` carrying the same issues. Dependencies point from this package to `core`, never the other way, so `core` only describes the `labels` key in the theme schema.
91
+ An override uses the syntax of the message it replaces and must use exactly the variables of the source message. `validateLabels(theme.labels)` returns the configuration issues of the whole block, one per faulty key with the path `labels.<language>.<id>`: an unknown identifier, an ICU syntax error with the parser's message, or the missing and unknown variables. The theme validation of the command line is where to call it, so that a bad override is reported with the other theme errors before any rendering; `loadCatalogue(locale, { labels })` validates the block it applies as well and throws a `CatalogueError` carrying the same issues. Dependencies point from this package to `core`, never the other way, so `core` only describes the `labels` key in the theme schema.
42
92
 
43
- ## Adding a locale
93
+ ### Adding a locale
44
94
 
45
95
  1. Add `messages/<language>/<area>.json` for every area, with every key of `messages/en/<area>.json`, sorted, each value a translation that keeps the variables and kinds of the source message. Plural forms follow the CLDR categories of the language (`one`, `other`, ...).
46
- 2. Import each file in the module of its area under `src/areas/`, add the language to the `Area` type in `src/area.ts` and to `src/shipped.ts`, and to the `labels` key of [`theme.schema.json`](../core/schemas/theme.schema.json).
96
+ 2. Import each file in the module of its area under `src/areas/`, add the language to the `Area` type in `src/area.ts` and to `src/shipped.ts`, and to the `labels` key of `theme.schema.json` in the core package.
47
97
  3. Run the tests: the parity test lists any missing key or differing variable.
48
98
 
49
- ## Dependencies
99
+ ### Dependencies
50
100
 
51
101
  - `intl-messageformat` 11.2.15 (BSD-3-Clause, FormatJS): formats an ICU message with the plural rules, number and date formats of a locale through the platform `Intl` objects, without any locale data of its own.
52
102
  - `@formatjs/icu-messageformat-parser` 3.5.18 (MIT, FormatJS): the parser `intl-messageformat` already uses, needed on its own to read the variables of a message for the parity test and the validation of overrides.
53
103
 
54
- Part of [Concordance](../../README.md).
104
+ </details>
@@ -35,6 +35,10 @@
35
35
  "defaultMessage": "Domain",
36
36
  "description": "Label of the domain an entity belongs to."
37
37
  },
38
+ "entity.domainInferred": {
39
+ "defaultMessage": "Proposed by the build from the notes this page is close to; nothing declares it.",
40
+ "description": "Tooltip on the domain of an entity page when the build filed the note itself, from the graph, rather than a folder, a glob, the frontmatter or the lock file."
41
+ },
38
42
  "entity.edit": {
39
43
  "defaultMessage": "Edit this page",
40
44
  "description": "Link to the edit page of the note on its forge."
@@ -8,6 +8,7 @@
8
8
  "entity.correction": "Une correction à apporter ?",
9
9
  "entity.declaredAtTop": "{count, plural, one {# clé déclarée} other {# clés déclarées}}. Le reste du fichier est du texte libre.",
10
10
  "entity.domain": "Domaine",
11
+ "entity.domainInferred": "Proposé par le build d'après les notes dont cette page est proche ; rien ne le déclare.",
11
12
  "entity.edit": "Modifier cette page",
12
13
  "entity.editShort": "Modifier",
13
14
  "entity.groupedBy.declared": "déclarés dans le frontmatter",
@@ -36,6 +36,10 @@ export declare const entityMessages: {
36
36
  defaultMessage: string;
37
37
  description: string;
38
38
  };
39
+ "entity.domainInferred": {
40
+ defaultMessage: string;
41
+ description: string;
42
+ };
39
43
  "entity.edit": {
40
44
  defaultMessage: string;
41
45
  description: string;
@@ -179,6 +183,7 @@ export declare const entityMessages: {
179
183
  "entity.correction": string;
180
184
  "entity.declaredAtTop": string;
181
185
  "entity.domain": string;
186
+ "entity.domainInferred": string;
182
187
  "entity.edit": string;
183
188
  "entity.editShort": string;
184
189
  "entity.groupedBy.declared": string;
@@ -233,6 +238,7 @@ export declare const entityMessages: {
233
238
  readonly count: "plural";
234
239
  };
235
240
  readonly "entity.domain": {};
241
+ readonly "entity.domainInferred": {};
236
242
  readonly "entity.edit": {};
237
243
  readonly "entity.editShort": {};
238
244
  readonly "entity.groupedBy.declared": {};
@@ -1 +1 @@
1
- {"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../../../src/areas/entity.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+Ce,CAAC"}
1
+ {"version":3,"file":"entity.d.ts","sourceRoot":"","sources":["../../../src/areas/entity.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDe,CAAC"}
@@ -13,6 +13,7 @@ export const entityMessages = {
13
13
  "entity.correction": {},
14
14
  "entity.declaredAtTop": { count: "plural" },
15
15
  "entity.domain": {},
16
+ "entity.domainInferred": {},
16
17
  "entity.edit": {},
17
18
  "entity.editShort": {},
18
19
  "entity.groupedBy.declared": {},
@@ -1 +1 @@
1
- {"version":3,"file":"entity.js","sourceRoot":"","sources":["../../../src/areas/entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,+BAA+B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACrE,OAAO,EAAE,MAAM,+BAA+B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAIrE,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,EAAE;IACF,EAAE;IACF,SAAS,EAAE;QACT,sBAAsB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE;QACjF,oBAAoB,EAAE,EAAE;QACxB,mBAAmB,EAAE,EAAE;QACvB,mBAAmB,EAAE,EAAE;QACvB,gBAAgB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;QACtC,mBAAmB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;QACxC,mBAAmB,EAAE,EAAE;QACvB,sBAAsB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;QAC3C,eAAe,EAAE,EAAE;QACnB,aAAa,EAAE,EAAE;QACjB,kBAAkB,EAAE,EAAE;QACtB,2BAA2B,EAAE,EAAE;QAC/B,uBAAuB,EAAE,EAAE;QAC3B,2BAA2B,EAAE,EAAE;QAC/B,4BAA4B,EAAE,EAAE;QAChC,iCAAiC,EAAE,EAAE;QACrC,8BAA8B,EAAE,EAAE;QAClC,qBAAqB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE;QACjE,0BAA0B,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;QAC/C,kBAAkB,EAAE,EAAE;QACtB,gBAAgB,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;QACvC,sBAAsB,EAAE,EAAE;QAC1B,yBAAyB,EAAE,EAAE;QAC7B,sBAAsB,EAAE,EAAE;QAC1B,mBAAmB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;QACxC,iBAAiB,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;QACxC,iBAAiB,EAAE,EAAE;QACrB,sBAAsB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;QAC3C,uBAAuB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;QAC5C,mBAAmB,EAAE,EAAE;QACvB,mBAAmB,EAAE,EAAE;QACvB,wBAAwB,EAAE,EAAE;QAC5B,mBAAmB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;QACxC,kBAAkB,EAAE,EAAE;QACtB,yBAAyB,EAAE,EAAE;QAC7B,sBAAsB,EAAE,EAAE;QAC1B,iBAAiB,EAAE,EAAE;QACrB,iBAAiB,EAAE,EAAE;QACrB,gBAAgB,EAAE,EAAE;QACpB,kBAAkB,EAAE,EAAE;QACtB,eAAe,EAAE,EAAE;QACnB,aAAa,EAAE,EAAE;KAClB;CACuC,CAAC"}
1
+ {"version":3,"file":"entity.js","sourceRoot":"","sources":["../../../src/areas/entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,+BAA+B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACrE,OAAO,EAAE,MAAM,+BAA+B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAIrE,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,EAAE;IACF,EAAE;IACF,SAAS,EAAE;QACT,sBAAsB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE;QACjF,oBAAoB,EAAE,EAAE;QACxB,mBAAmB,EAAE,EAAE;QACvB,mBAAmB,EAAE,EAAE;QACvB,gBAAgB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;QACtC,mBAAmB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;QACxC,mBAAmB,EAAE,EAAE;QACvB,sBAAsB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;QAC3C,eAAe,EAAE,EAAE;QACnB,uBAAuB,EAAE,EAAE;QAC3B,aAAa,EAAE,EAAE;QACjB,kBAAkB,EAAE,EAAE;QACtB,2BAA2B,EAAE,EAAE;QAC/B,uBAAuB,EAAE,EAAE;QAC3B,2BAA2B,EAAE,EAAE;QAC/B,4BAA4B,EAAE,EAAE;QAChC,iCAAiC,EAAE,EAAE;QACrC,8BAA8B,EAAE,EAAE;QAClC,qBAAqB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE;QACjE,0BAA0B,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;QAC/C,kBAAkB,EAAE,EAAE;QACtB,gBAAgB,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;QACvC,sBAAsB,EAAE,EAAE;QAC1B,yBAAyB,EAAE,EAAE;QAC7B,sBAAsB,EAAE,EAAE;QAC1B,mBAAmB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;QACxC,iBAAiB,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;QACxC,iBAAiB,EAAE,EAAE;QACrB,sBAAsB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;QAC3C,uBAAuB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;QAC5C,mBAAmB,EAAE,EAAE;QACvB,mBAAmB,EAAE,EAAE;QACvB,wBAAwB,EAAE,EAAE;QAC5B,mBAAmB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;QACxC,kBAAkB,EAAE,EAAE;QACtB,yBAAyB,EAAE,EAAE;QAC7B,sBAAsB,EAAE,EAAE;QAC1B,iBAAiB,EAAE,EAAE;QACrB,iBAAiB,EAAE,EAAE;QACrB,gBAAgB,EAAE,EAAE;QACpB,kBAAkB,EAAE,EAAE;QACtB,eAAe,EAAE,EAAE;QACnB,aAAa,EAAE,EAAE;KAClB;CACuC,CAAC"}
@@ -850,6 +850,10 @@ export declare const AREAS: readonly [{
850
850
  defaultMessage: string;
851
851
  description: string;
852
852
  };
853
+ "entity.domainInferred": {
854
+ defaultMessage: string;
855
+ description: string;
856
+ };
853
857
  "entity.edit": {
854
858
  defaultMessage: string;
855
859
  description: string;
@@ -993,6 +997,7 @@ export declare const AREAS: readonly [{
993
997
  "entity.correction": string;
994
998
  "entity.declaredAtTop": string;
995
999
  "entity.domain": string;
1000
+ "entity.domainInferred": string;
996
1001
  "entity.edit": string;
997
1002
  "entity.editShort": string;
998
1003
  "entity.groupedBy.declared": string;
@@ -1047,6 +1052,7 @@ export declare const AREAS: readonly [{
1047
1052
  readonly count: "plural";
1048
1053
  };
1049
1054
  readonly "entity.domain": {};
1055
+ readonly "entity.domainInferred": {};
1050
1056
  readonly "entity.edit": {};
1051
1057
  readonly "entity.editShort": {};
1052
1058
  readonly "entity.groupedBy.declared": {};
@@ -1 +1 @@
1
- {"version":3,"file":"areas.d.ts","sourceRoot":"","sources":["../../src/areas.ts"],"names":[],"mappings":"AA6BA,6FAA6F;AAC7F,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6BR,CAAC"}
1
+ {"version":3,"file":"areas.d.ts","sourceRoot":"","sources":["../../src/areas.ts"],"names":[],"mappings":"AA6BA,6FAA6F;AAC7F,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6BR,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@concordance-wiki/i18n",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "Message catalogues of the generated site and their build-time resolution.",
5
5
  "license": "GPL-3.0-or-later",
6
6
  "repository": {
@@ -29,12 +29,12 @@
29
29
  "README.md",
30
30
  "LICENSE"
31
31
  ],
32
- "scripts": {
33
- "typecheck": "tsc -b tsconfig.json"
34
- },
35
32
  "dependencies": {
36
- "@concordance-wiki/core": "workspace:*",
37
33
  "@formatjs/icu-messageformat-parser": "3.5.18",
38
- "intl-messageformat": "11.2.15"
34
+ "intl-messageformat": "11.2.15",
35
+ "@concordance-wiki/core": "0.3.0"
36
+ },
37
+ "scripts": {
38
+ "typecheck": "tsc -b tsconfig.json"
39
39
  }
40
- }
40
+ }