From 6bc7fc2a5be877ed18ed905fe9d3ea86a7382be0 Mon Sep 17 00:00:00 2001 From: Eemeli Aro Date: Mon, 8 Sep 2025 15:02:41 +0300 Subject: [PATCH 1/7] Add first draft of default attribute definitions --- spec/attributes/README.md | 232 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 232 insertions(+) create mode 100644 spec/attributes/README.md diff --git a/spec/attributes/README.md b/spec/attributes/README.md new file mode 100644 index 0000000000..03bdd8308b --- /dev/null +++ b/spec/attributes/README.md @@ -0,0 +1,232 @@ +## Expression, Markup, and Message Attributes + +> [!IMPORTANT] +> This part of the specification is under active development, +> and is non-normative. + +The Unicode MessageFormat syntax and data model allow for _attributes_ +to be defined on _expressions_ and _markup_. +These are REQUIRED to have no impact on the formatting of a message, +and are intended to be useful in informing translators and translator tooling +about the specific _expressions_ or _markup_ to which they are attached. + +While the specification does not define how an _attribute_ could be attached +to the _message_ as a whole, +this SHOULD be provided for by a resource container for Unicode MessageFormat messages. + +As all _attributes_ with _reserved identifiers_ are reserved, +definitions are provided here for common _attribute_ use cases. +Custom _attributes_ SHOULD use a _custom identifier_, +preferably one with an appropriate _namespace_. + +### Attribute Values + +_Attributes_ are not required to have a value. +For _attributes_ defined here that explicitly support `yes` as a value, +an _attribute_ with no value is considered synonymous +with the same _attribute_ with the value `yes`. + +### Expression Attributes + +#### @comment + +_Value_: A non-empty string. + +Associates a freeform comment with the _expression_. + +> For example: +> +> ``` +> The {$device @comment=|Possible values: Printer or Stacker|} has been enabled. +> ``` + +#### @example + +_Value_: A non-empty string. + +An example of the value the _expression_ might take. + +> For example: +> +> ``` +> Error: {$details @example=|Failed to fetch RSS feed.|} +> ``` + +#### @term + +_Value_: A non-empty string, or a URI. + +Identifies a well-defined term. +The value may be a short definition of the term, +or a URI pointing to such a definition. + +> For example: +> +> ``` +> He saw his {|doppelgänger| @term=|https://en.wikipedia.org/wiki/Doppelg%C3%A4nger|}. +> ``` + +#### @translate + +_Value:_ `yes` or `no`. + +Indicates whether the _expression_ is translatable or not. + +> For example: +> +> ``` +> He saw his {|doppelgänger| @translate=no}. +> ``` + +### Markup Attributes + +#### @can-copy + +_Value:_ `yes` or `no`. + +Indicates whether or not the _markup_ and its contents can be copied. + +> For example: +> +> ``` +> Have a {#span @can-copy}great and wonderful{/span @can-copy} birthday! +> ``` + +#### @can-delete + +_Value:_ `yes` or `no`. + +Indicates whether or not the _markup_ and its contents can be deleted. + +#### @can-overlap + +_Value:_ `yes` or `no`. + +Indicates whether or not the _markup_ and its contents where this _attribute_ is used +can enclose partial _markup_ +(i.e. a _markup-open_ without its corresponding _markup-end_, +or a _markup-end_ without its corresponding _markup-start_). + +#### #can-reorder + +_Value:_ `yes` or `no`. + +Indicates whether or not the _markup_ and its contents can be re-ordered. + +#### @comment + +_Value_: A non-empty string. + +Associates a freeform comment with the _markup_. + +> For example: +> +> ``` +> Click {#link @comment=|Rendered as a button|}here{/link} to continue. +> ``` + +#### @term + +_Value_: A non-empty string, or a URI. + +Identifies a well-defined term. +The value may be a short definition of the term, +or a URI pointing to such a definition. + +> For example: +> +> ``` +> He saw his {#span @term=|https://en.wikipedia.org/wiki/Doppelg%C3%A4nger|}doppelgänger{/span}. +> ``` + +#### @translate + +_Value:_ `yes` or `no`. + +Indicates whether the _markup_ and its contents are translatable or not. + +> For example: +> +> ``` +> He saw his {#span @translate=no}doppelgänger{/span}. +> ``` + +### Message Attributes + +#### @allow-empty + +_Value:_ `yes` or `no`. + +Explicitly mark a message with an empty _pattern_ as valid. + +Most empty messages are mistakes, +so being able to mark ones that can be empty is useful. + +Should be accompanied by an explanatory `@comment`. + +#### @max-length + +_Value:_ A strictly positive integer, followed by a space, followed by one of the following: +- `chars` +- `bytes` +- `lines` + +Limits the length of a _message_. + +#### @obsolete + +_Value:_ `yes` or `no`. + +Explicitly mark a _message_ as obsolete. + +This might be used in workflows where messages are not immediately removed +when they are no longer referenced by code, +but kept in to support patch releases for previous versions. +During translation, this can be used to de-prioritize such messages. + +> [!NOTE] +> The value could include a way to note some version or timestamp when the removal happened, +> or be paired with a second `@removed-in` or similar tag. + +#### @param + +_Value_: **TBD** + +Documents a _variable_. + +> [!NOTE] +> Having a well-defined structure for this tag is pretty important, +> at least to identify the variable its description is pertaining to. +> In addition to describing the variable in words, it could include: +> - The variable's type -- is it a string, a number, something else? +> - A default example value to use for the variable. + +#### @schema + +_Value:_ A valid URI. + +Identify the _functions_ and _markup_ supported by the _message_ formatter. + +#### @source + +_Value_: A string. + +Provides the _message_ in its source locale. + +#### @translate + +_Value:_ `yes` or `no` + +Indicates whether the _message_ is translatable or not. + +Some _messages_ may be required to have the same value in all locales. + +#### @version + +_Value_: A string. + +Explicitly versions a source string. + +This allows for differentiating typo fixes from actual changes in message contents. +The (message id, version) tuple can be used by tooling instead of just the message id +to uniquely identify a message and its translations. From 39911f260ab2dc30e61ea2a080b476ee4675401a Mon Sep 17 00:00:00 2001 From: Eemeli Aro Date: Tue, 9 Sep 2025 12:38:43 +0300 Subject: [PATCH 2/7] Apply suggestions from code review Co-authored-by: Addison Phillips --- spec/attributes/README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/spec/attributes/README.md b/spec/attributes/README.md index 03bdd8308b..22ba9f6fbb 100644 --- a/spec/attributes/README.md +++ b/spec/attributes/README.md @@ -6,9 +6,11 @@ The Unicode MessageFormat syntax and data model allow for _attributes_ to be defined on _expressions_ and _markup_. -These are REQUIRED to have no impact on the formatting of a message, -and are intended to be useful in informing translators and translator tooling +These MUST NOT have any impact on the formatting of a message, +and are intended to inform users, such as translators, and tools about the specific _expressions_ or _markup_ to which they are attached. +_Attributes_ MAY be stripped from _expressions_ and _markup_ +with no effect on the message's formatting. While the specification does not define how an _attribute_ could be attached to the _message_ as a whole, @@ -168,7 +170,6 @@ Should be accompanied by an explanatory `@comment`. _Value:_ A strictly positive integer, followed by a space, followed by one of the following: - `chars` -- `bytes` - `lines` Limits the length of a _message_. @@ -195,7 +196,7 @@ _Value_: **TBD** Documents a _variable_. > [!NOTE] -> Having a well-defined structure for this tag is pretty important, +> Having a well-defined structure for this attribute is pretty important, > at least to identify the variable its description is pertaining to. > In addition to describing the variable in words, it could include: > - The variable's type -- is it a string, a number, something else? From cf12529930bf4f9ed8ff58c5d333a50aa92e5cab Mon Sep 17 00:00:00 2001 From: Eemeli Aro Date: Mon, 22 Sep 2025 11:54:35 +0300 Subject: [PATCH 3/7] Update spec/attributes/README.md --- spec/attributes/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/attributes/README.md b/spec/attributes/README.md index 22ba9f6fbb..5aa052acc7 100644 --- a/spec/attributes/README.md +++ b/spec/attributes/README.md @@ -18,7 +18,7 @@ this SHOULD be provided for by a resource container for Unicode MessageFormat me As all _attributes_ with _reserved identifiers_ are reserved, definitions are provided here for common _attribute_ use cases. -Custom _attributes_ SHOULD use a _custom identifier_, +Use a _custom identifier_ for other (custom) _attributes_, preferably one with an appropriate _namespace_. ### Attribute Values From 50ec0b4b2079c5aa14bdf8c2da40efcfd52d176c Mon Sep 17 00:00:00 2001 From: Eemeli Aro Date: Mon, 22 Sep 2025 11:56:16 +0300 Subject: [PATCH 4/7] Update spec/attributes/README.md --- spec/attributes/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/attributes/README.md b/spec/attributes/README.md index 5aa052acc7..0caadde958 100644 --- a/spec/attributes/README.md +++ b/spec/attributes/README.md @@ -164,7 +164,7 @@ Explicitly mark a message with an empty _pattern_ as valid. Most empty messages are mistakes, so being able to mark ones that can be empty is useful. -Should be accompanied by an explanatory `@comment`. +Empty _messages_ SHOULD be accompanied by an explanatory `@comment`. #### @max-length From bc19885a1ff650f2a3a765ac1d74da75c5e9c06f Mon Sep 17 00:00:00 2001 From: Eemeli Aro Date: Mon, 15 Dec 2025 18:52:03 +0200 Subject: [PATCH 5/7] Refactor + Mark as incubation + Drop message @max-length, @source, and @version --- spec/attributes/README.md | 239 ++--------------------- spec/attributes/expression-and-markup.md | 114 +++++++++++ spec/attributes/message.md | 67 +++++++ 3 files changed, 200 insertions(+), 220 deletions(-) create mode 100644 spec/attributes/expression-and-markup.md create mode 100644 spec/attributes/message.md diff --git a/spec/attributes/README.md b/spec/attributes/README.md index 0caadde958..fadbabb78f 100644 --- a/spec/attributes/README.md +++ b/spec/attributes/README.md @@ -1,25 +1,28 @@ ## Expression, Markup, and Message Attributes > [!IMPORTANT] -> This part of the specification is under active development, -> and is non-normative. +> This part of the specification is under incubation by the MessageFormat WG, +> and may end up being finalized elsewhere. +> It is non-normative. -The Unicode MessageFormat syntax and data model allow for _attributes_ -to be defined on _expressions_ and _markup_. -These MUST NOT have any impact on the formatting of a message, -and are intended to inform users, such as translators, and tools -about the specific _expressions_ or _markup_ to which they are attached. -_Attributes_ MAY be stripped from _expressions_ and _markup_ -with no effect on the message's formatting. +### Expression and Markup Attributes -While the specification does not define how an _attribute_ could be attached -to the _message_ as a whole, -this SHOULD be provided for by a resource container for Unicode MessageFormat messages. +- [@can-copy](expression-and-markup.md#can-copy) +- [@can-delete](expression-and-markup.md#can-delete) +- [@can-overlap](expression-and-markup.md#can-overlap) (Markup only) +- [@can-reorder](expression-and-markup.md#can-reorder) (Markup only) +- [@comment](expression-and-markup.md#comment) +- [@example](expression-and-markup.md#example) (Expression only) +- [@term](expression-and-markup.md#term) +- [@translate](mexpression-and-markup.md#translate) -As all _attributes_ with _reserved identifiers_ are reserved, -definitions are provided here for common _attribute_ use cases. -Use a _custom identifier_ for other (custom) _attributes_, -preferably one with an appropriate _namespace_. +### Message Attributes + +- [@allow-empty](message.md#allow-empty) +- [@obsolete](message.md#obsolete) +- [@param](message.md#param) +- [@schema](message.md#schema) +- [@translate](message.md#translate) ### Attribute Values @@ -27,207 +30,3 @@ _Attributes_ are not required to have a value. For _attributes_ defined here that explicitly support `yes` as a value, an _attribute_ with no value is considered synonymous with the same _attribute_ with the value `yes`. - -### Expression Attributes - -#### @comment - -_Value_: A non-empty string. - -Associates a freeform comment with the _expression_. - -> For example: -> -> ``` -> The {$device @comment=|Possible values: Printer or Stacker|} has been enabled. -> ``` - -#### @example - -_Value_: A non-empty string. - -An example of the value the _expression_ might take. - -> For example: -> -> ``` -> Error: {$details @example=|Failed to fetch RSS feed.|} -> ``` - -#### @term - -_Value_: A non-empty string, or a URI. - -Identifies a well-defined term. -The value may be a short definition of the term, -or a URI pointing to such a definition. - -> For example: -> -> ``` -> He saw his {|doppelgänger| @term=|https://en.wikipedia.org/wiki/Doppelg%C3%A4nger|}. -> ``` - -#### @translate - -_Value:_ `yes` or `no`. - -Indicates whether the _expression_ is translatable or not. - -> For example: -> -> ``` -> He saw his {|doppelgänger| @translate=no}. -> ``` - -### Markup Attributes - -#### @can-copy - -_Value:_ `yes` or `no`. - -Indicates whether or not the _markup_ and its contents can be copied. - -> For example: -> -> ``` -> Have a {#span @can-copy}great and wonderful{/span @can-copy} birthday! -> ``` - -#### @can-delete - -_Value:_ `yes` or `no`. - -Indicates whether or not the _markup_ and its contents can be deleted. - -#### @can-overlap - -_Value:_ `yes` or `no`. - -Indicates whether or not the _markup_ and its contents where this _attribute_ is used -can enclose partial _markup_ -(i.e. a _markup-open_ without its corresponding _markup-end_, -or a _markup-end_ without its corresponding _markup-start_). - -#### #can-reorder - -_Value:_ `yes` or `no`. - -Indicates whether or not the _markup_ and its contents can be re-ordered. - -#### @comment - -_Value_: A non-empty string. - -Associates a freeform comment with the _markup_. - -> For example: -> -> ``` -> Click {#link @comment=|Rendered as a button|}here{/link} to continue. -> ``` - -#### @term - -_Value_: A non-empty string, or a URI. - -Identifies a well-defined term. -The value may be a short definition of the term, -or a URI pointing to such a definition. - -> For example: -> -> ``` -> He saw his {#span @term=|https://en.wikipedia.org/wiki/Doppelg%C3%A4nger|}doppelgänger{/span}. -> ``` - -#### @translate - -_Value:_ `yes` or `no`. - -Indicates whether the _markup_ and its contents are translatable or not. - -> For example: -> -> ``` -> He saw his {#span @translate=no}doppelgänger{/span}. -> ``` - -### Message Attributes - -#### @allow-empty - -_Value:_ `yes` or `no`. - -Explicitly mark a message with an empty _pattern_ as valid. - -Most empty messages are mistakes, -so being able to mark ones that can be empty is useful. - -Empty _messages_ SHOULD be accompanied by an explanatory `@comment`. - -#### @max-length - -_Value:_ A strictly positive integer, followed by a space, followed by one of the following: -- `chars` -- `lines` - -Limits the length of a _message_. - -#### @obsolete - -_Value:_ `yes` or `no`. - -Explicitly mark a _message_ as obsolete. - -This might be used in workflows where messages are not immediately removed -when they are no longer referenced by code, -but kept in to support patch releases for previous versions. -During translation, this can be used to de-prioritize such messages. - -> [!NOTE] -> The value could include a way to note some version or timestamp when the removal happened, -> or be paired with a second `@removed-in` or similar tag. - -#### @param - -_Value_: **TBD** - -Documents a _variable_. - -> [!NOTE] -> Having a well-defined structure for this attribute is pretty important, -> at least to identify the variable its description is pertaining to. -> In addition to describing the variable in words, it could include: -> - The variable's type -- is it a string, a number, something else? -> - A default example value to use for the variable. - -#### @schema - -_Value:_ A valid URI. - -Identify the _functions_ and _markup_ supported by the _message_ formatter. - -#### @source - -_Value_: A string. - -Provides the _message_ in its source locale. - -#### @translate - -_Value:_ `yes` or `no` - -Indicates whether the _message_ is translatable or not. - -Some _messages_ may be required to have the same value in all locales. - -#### @version - -_Value_: A string. - -Explicitly versions a source string. - -This allows for differentiating typo fixes from actual changes in message contents. -The (message id, version) tuple can be used by tooling instead of just the message id -to uniquely identify a message and its translations. diff --git a/spec/attributes/expression-and-markup.md b/spec/attributes/expression-and-markup.md new file mode 100644 index 0000000000..ef1a8c098e --- /dev/null +++ b/spec/attributes/expression-and-markup.md @@ -0,0 +1,114 @@ +## Expression and Markup Attributes + +> [!IMPORTANT] +> This part of the specification is under incubation by the MessageFormat WG, +> and may end up being finalized elsewhere. +> It is non-normative. + +The Unicode MessageFormat syntax and data model allow for _attributes_ +to be defined on _expressions_ and _markup_. +These MUST NOT have any impact on the formatting of a message, +and are intended to inform users, such as translators, and tools +about the specific _expressions_ or _markup_ to which they are attached. +_Attributes_ MAY be stripped from _expressions_ and _markup_ +with no effect on the message's formatting. + +As all _attributes_ with _reserved identifiers_ are reserved, +definitions are provided here for common _attribute_ use cases. +Use a _custom identifier_ for other (custom) _attributes_, +preferably one with an appropriate _namespace_. + +### @can-copy + +_Value:_ `yes` or `no`. + +Indicates whether or not the _expression_ or the _markup_ and its contents can be copied. + +> For example: +> +> ``` +> Have a {#span @can-copy}great and wonderful{/span @can-copy} birthday! +> ``` + +### @can-delete + +_Value:_ `yes` or `no`. + +Indicates whether or not the _expression_ or the _markup_ and its contents can be deleted. + +### @can-overlap (Markup only) + +_Value:_ `yes` or `no`. + +Indicates whether or not the _markup_ and its contents where this _attribute_ is used +can enclose partial _markup_ +(i.e. a _markup-open_ without its corresponding _markup-end_, +or a _markup-end_ without its corresponding _markup-start_). + +### @can-reorder (Markup only) + +_Value:_ `yes` or `no`. + +Indicates whether or not the _markup_ and its contents can be re-ordered. + +### @comment + +_Value_: A non-empty string. + +Associates a freeform comment with an _expression_ or _markup_. + +> For example: +> +> ``` +> The {$device @comment=|Possible values: Printer or Stacker|} has been enabled. +> ``` +> +> ``` +> Click {#link @comment=|Rendered as a button|}here{/link} to continue. +> ``` + +### @example (Expression only) + +_Value_: A non-empty string. + +An example of the value the _expression_ might take. + +> For example: +> +> ``` +> Error: {$details @example=|Failed to fetch RSS feed.|} +> ``` + +### @term + +_Value_: A non-empty string, or a URI. + +Identifies a well-defined term. +The value may be a short definition of the term, +or a URI pointing to such a definition. + +> For example: +> +> ``` +> He saw his {|doppelgänger| @term=|https://en.wikipedia.org/wiki/Doppelg%C3%A4nger|}. +> ``` +> +> ``` +> He saw his {#span @term=|https://en.wikipedia.org/wiki/Doppelg%C3%A4nger|}doppelgänger{/span}. +> ``` + +### @translate + +_Value:_ `yes` or `no`. + +Indicates whether the _expression_ or the _markup_ and its contents are translatable or not. + +> For example: +> +> ``` +> He saw his {|doppelgänger| @translate=no}. +> ``` +> +> ``` +> He saw his {#span @translate=no}doppelgänger{/span}. +> ``` diff --git a/spec/attributes/message.md b/spec/attributes/message.md new file mode 100644 index 0000000000..64127dc3ca --- /dev/null +++ b/spec/attributes/message.md @@ -0,0 +1,67 @@ +## Message Attributes + +> [!IMPORTANT] +> This part of the specification is under incubation by the MessageFormat WG, +> and may end up being finalized elsewhere. +> It is non-normative. + +This specification does not define a means of attaching an _attribute_ +to the _message_ as a whole. +In general, resource formats and containers of +Unicode MessageFormat _messages_ provide their own such mechanisms. + +At least for now, the syntax of message attributes is +outside the scope of this specification. + +### @allow-empty + +_Value:_ `yes` or `no`. + +Explicitly mark a message with an empty _pattern_ as valid. + +Most empty messages are mistakes, +so being able to mark ones that can be empty is useful. + +Empty _messages_ SHOULD be accompanied by an explanatory `@comment`. + +### @obsolete + +_Value:_ `yes` or `no`. + +Explicitly mark a _message_ as obsolete. + +This might be used in workflows where messages are not immediately removed +when they are no longer referenced by code, +but kept in to support patch releases for previous versions. +During translation, this can be used to de-prioritize such messages. + +> [!NOTE] +> The value could include a way to note some version or timestamp when the removal happened, +> or be paired with a second `@removed-in` or similar tag. + +### @param + +_Value_: **TBD** + +Documents a _variable_. + +> [!NOTE] +> Having a well-defined structure for this attribute is pretty important, +> at least to identify the variable its description is pertaining to. +> In addition to describing the variable in words, it could include: +> - The variable's type -- is it a string, a number, something else? +> - A default example value to use for the variable. + +### @schema + +_Value:_ A valid URI. + +Identify the _functions_ and _markup_ supported by the _message_ formatter. + +### @translate + +_Value:_ `yes` or `no` + +Indicates whether the _message_ is translatable or not. + +Some _messages_ may be required to have the same value in all locales. From 3a14cd3fc761b433406de2b6f4668773493587af Mon Sep 17 00:00:00 2001 From: Eemeli Aro Date: Mon, 15 Dec 2025 18:56:38 +0200 Subject: [PATCH 6/7] Linkify _formatting_ --- spec/attributes/expression-and-markup.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/attributes/expression-and-markup.md b/spec/attributes/expression-and-markup.md index ef1a8c098e..c58a1bc1ee 100644 --- a/spec/attributes/expression-and-markup.md +++ b/spec/attributes/expression-and-markup.md @@ -7,11 +7,11 @@ The Unicode MessageFormat syntax and data model allow for _attributes_ to be defined on _expressions_ and _markup_. -These MUST NOT have any impact on the formatting of a message, +These MUST NOT have any impact on the _formatting_ of a message, and are intended to inform users, such as translators, and tools about the specific _expressions_ or _markup_ to which they are attached. _Attributes_ MAY be stripped from _expressions_ and _markup_ -with no effect on the message's formatting. +with no effect on the message's _formatting_. As all _attributes_ with _reserved identifiers_ are reserved, definitions are provided here for common _attribute_ use cases. From ea472d5807d416045b8dac63b873a3b7214d826a Mon Sep 17 00:00:00 2001 From: Eemeli Aro Date: Mon, 15 Dec 2025 20:22:10 +0200 Subject: [PATCH 7/7] Add HTML, ITS 2 & XLIFF 2 correspondances --- spec/attributes/expression-and-markup.md | 25 ++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/spec/attributes/expression-and-markup.md b/spec/attributes/expression-and-markup.md index c58a1bc1ee..c346b926d8 100644 --- a/spec/attributes/expression-and-markup.md +++ b/spec/attributes/expression-and-markup.md @@ -24,6 +24,9 @@ _Value:_ `yes` or `no`. Indicates whether or not the _expression_ or the _markup_ and its contents can be copied. +This corresponds to +the [XLIFF 2 `canCopy` attribute](https://docs.oasis-open.org/xliff/xliff-core/v2.2/xliff-core-v2.2-part1.html#cancopy). + > For example: > > ``` @@ -36,6 +39,9 @@ _Value:_ `yes` or `no`. Indicates whether or not the _expression_ or the _markup_ and its contents can be deleted. +This corresponds to +the [XLIFF 2 `canDelete` attribute](https://docs.oasis-open.org/xliff/xliff-core/v2.2/xliff-core-v2.2-part1.html#candelete). + ### @can-overlap (Markup only) _Value:_ `yes` or `no`. @@ -45,18 +51,28 @@ can enclose partial _markup_ (i.e. a _markup-open_ without its corresponding _markup-end_, or a _markup-end_ without its corresponding _markup-start_). +This corresponds to +the [XLIFF 2 `canOverlap` attribute](https://docs.oasis-open.org/xliff/xliff-core/v2.2/xliff-core-v2.2-part1.html#canoverlap). + ### @can-reorder (Markup only) _Value:_ `yes` or `no`. Indicates whether or not the _markup_ and its contents can be re-ordered. +This corresponds to +the [XLIFF 2 `canReorder` attribute](https://docs.oasis-open.org/xliff/xliff-core/v2.2/xliff-core-v2.2-part1.html#canreorder). + ### @comment _Value_: A non-empty string. Associates a freeform comment with an _expression_ or _markup_. +This corresponds to +the [ITS 2 Localization Note data category](https://www.w3.org/TR/its20/#locNote-datacat), and +the [XLIFF 2 comment annotation](https://docs.oasis-open.org/xliff/xliff-core/v2.2/xliff-core-v2.2-part1.html#commentAnnotation). + > For example: > > ``` @@ -87,6 +103,10 @@ Identifies a well-defined term. The value may be a short definition of the term, or a URI pointing to such a definition. +This corresponds to +the [ITS 2 Terminology data category](https://www.w3.org/TR/its20/#terminology), and +the [XLIFF 2 term annotation](https://docs.oasis-open.org/xliff/xliff-core/v2.2/xliff-core-v2.2-part1.html#termAnnotation). + > For example: > > ``` @@ -103,6 +123,11 @@ _Value:_ `yes` or `no`. Indicates whether the _expression_ or the _markup_ and its contents are translatable or not. +This corresponds to +the [HTML `translate` attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/translate), +the [ITS 2 Translate data category](https://www.w3.org/TR/its20/#trans-datacat), and +the [XLIFF 2 translate annotation](https://docs.oasis-open.org/xliff/xliff-core/v2.2/xliff-core-v2.2-part1.html#translateAnnotation). + > For example: > > ```