Skip to content
r12a edited this page Apr 29, 2022 · 2 revisions

Internationalisation review checklist

Check marks indicate relevant issues. Add comments to describe conformance.

This checklist was created here.

Language

Language basics

  1. It should be possible to associate a language with any piece of localizable text or natural language content. more
    Comments_go_here
  2. Where possible, there should be a way to label natural language changes in inline text. more
    Comments_go_here
  3. Consider whether it is useful to express the intended linguistic audience of a resource, in addition to specifying the language used for text processing. more
    Comments_go_here
  4. A language declaration that indicates the text-processing language for a range of text must associate a single language value with a specific range of text. more
    Comments_go_here
  5. Use the HTML lang and XML xml:lang language attributes where appropriate to identify the text processing language, rather than creating a new attribute or mechanism. more
    Comments_go_here
  6. It should be possible to associate a metadata-type language declaration (which indicates the intended use of the resource rather than the language of a specific range of text) with multiple language values. more
    Comments_go_here
  7. Attributes that express the language of external resources should not use the HTML lang and XML xml:lang language attributes, but should use a different attribute when they represent metadata (which indicates the intended use of the resource rather than the language of a specific range of text). more
    Comments_go_here

Defining language values

  1. Values for language declarations must use BCP 47. more
    Comments_go_here
  2. Refer to BCP 47, not to RFC 5646. more
    Comments_go_here
  3. Be specific about what level of conformance you expect for language tags: BCP 47 defines two levels of conformance, "valid" and "well-formed". more
    Comments_go_here
  4. Specifications may require implementations to check if language tags are "valid", but in most circumstances should only require that the language tags be "well-formed". more
    Comments_go_here
  5. Specifications should require content and content authors to use "valid" language tags. more
    Comments_go_here
  6. Reference BCP47 for language tag matching. more
    Comments_go_here

Declaring language at the resource level

  1. The specification should indicate how to define the default text-processing language for the resource as a whole. more
    Comments_go_here
  2. Content within the resource should inherit the language of the text-processing declared at the resource level, unless it is specifically overridden. more
    Comments_go_here
  3. Consider whether it is necessary to have separate declarations to indicate the text-processing language versus metadata about the expected use of the resource. more
    Comments_go_here
  4. If there is only one language declaration for a resource, and it has more than one language tag as a value, it must be possible to identify the default text-processing language for the resource. more
    Comments_go_here

Establishing the language of a content block

  1. By default, blocks of content should inherit any text-processing language set for the resource as a whole. more
    Comments_go_here
  2. It should be possible to indicate a change in language for blocks of content where the language changes. more
    Comments_go_here

Establishing the language of inline runs

  1. It should be possible to indicate language for spans of inline text where the language changes. more
    Comments_go_here

Text direction

Basic requirements

  1. It must be possible to indicate base direction for each individual paragraph-level item of natural language text that will be read by someone. more
    Comments_go_here
  2. It must be possible to indicate base direction changes for embedded runs of inline bidirectional text for all localizable text. more
    Comments_go_here
  3. Annotating right-to-left text must require the minimum amount of effort for people who work natively with right-to-left scripts. more
    Comments_go_here

Background information

  1. Do not assume that direction can be determined from language information. more
    Comments_go_here

Base direction values

  1. Values for the default base direction should include left-to-right, right-to-left, and auto. more
    Comments_go_here

Handling direction in markup

  1. The spec should indicate how to define a default base direction for the resource as a whole, ie. set the overall base direction. more
    Comments_go_here
  2. The default base direction, in the absence of other information, should be LTR. more
    Comments_go_here
  3. The content author must be able to indicate parts of the text where the base direction changes. At the block level, this should be achieved using attributes or metadata, and should not rely on Unicode control characters. more
    Comments_go_here
  4. It must be possible to also set the direction for content fragments to auto. This means that the base direction will be determined by examining the content itself. more
    Comments_go_here
  5. If the overall base direction is set to auto for plain text, the direction of content paragraphs should be determined on a paragraph by paragraph basis. more
    Comments_go_here
  6. To indicate the sides of a block of text relative to the start and end of its contained lines, use 'block-start' and 'block-end', rather than 'top' and 'bottom'. more
    Comments_go_here
  7. To indicate the start/end of a line you should use 'start' and 'end', or 'inline-start' and 'inline-end', rather than 'left' and 'right'. more
    Comments_go_here
  8. Provide dedicated attributes for control of base direction and bidirectional overrides; do not rely on the user applying style properties to arbitrary markup to achieve bidi control. more
    Comments_go_here

Handling base direction for strings

  1. Provide metadata constructs that can be used to indicate the base direction of any natural language string. more
    Comments_go_here
  2. Specify that consumers of strings should use heuristics, preferably based on the Unicode Standard first-strong algorithm, to detect the base direction of a string except where metadata is provided. more
    Comments_go_here
  3. Where possible, define a field to indicate the default direction for all strings in a given resource or document. more
    Comments_go_here
  4. Do NOT assume that a creating a document-level default without the ability to change direction for any string is sufficient. more
    Comments_go_here
  5. If metadata is not available due to legacy implementations and cannot otherwise be provided, specifications MAY allow a base direction to be interpolated from available language metadata. more
    Comments_go_here
  6. Specifications MUST NOT require the production or use of paired bidi controls. more
    Comments_go_here

Setting base direction for inline or substring text

  1. It must be possible to indicate spans of inline text where the base direction changes. If markup is available, this is the preferred method. Otherwise your specification must require that Unicode control characters are recognized by the receiving application, and correctly implemented. more
    Comments_go_here
  2. It must be possible to also set the direction for a span to auto. This means that the base direction will be determined by examining the content itself. A typical approach here would be to set the direction based on the first strong directional character outside of any markup. more
    Comments_go_here
  3. If users use Unicode bidirectional control characters, the isolating RLI/LRI/FSI with PDI characters must be supported by the application and recommended (rather than RLE/LRE with PDF) by the spec. more
    Comments_go_here
  4. Use of RLM/LRM should be appropriate, and expectations of what those controls can and cannot do should be clear in the spec. more
    Comments_go_here
  5. For markup, provide dedicated attributes for control of base direction and bidirectional overrides; do not rely on the user applying style properties to arbitrary markup to achieve bidi control. more
    Comments_go_here
  6. For markup, allow bidi attributes on all inline elements in markup that contain text. more
    Comments_go_here
  7. For markup, provide attributes that allow the user to (a) create an embedded base direction or (b) override the bidirectional algorithm altogether; the attribute should allow the user to set the direction to LTR or RTL or the aforementioned Auto in either of these two scenarios. more
    Comments_go_here

Characters

Choosing a definition of 'character'

  1. Specifications SHOULD use specific terms, when available, instead of the general term 'character'. more
    Comments_go_here
  2. When specifications use the term 'character' the specifications MUST define which meaning they intend, and SHOULD explicitly define the term 'character' to mean a Unicode code point. more
    Comments_go_here
  3. Specifications, software and content MUST NOT require or depend on a one-to-one relationship between characters and units of physical storage. more
    Comments_go_here
  4. Specifications, software and content MUST NOT require or depend on a one-to-one correspondence between characters and the sounds of a language. more
    Comments_go_here
  5. Specifications, software and content MUST NOT require or depend on a one-to-one mapping between characters and units of displayed text. more
    Comments_go_here
  6. Specifications and software MUST NOT require nor depend on a single keystroke resulting in a single character, nor that a single character be input with a single keystroke (even with modifiers), nor that keyboards are the same all over the world. more
    Comments_go_here

Defining a Reference Processing Model

  1. Textual data objects defined by protocol or format specifications MUST be in a single character encoding. more
    Comments_go_here
  2. All specifications that involve processing of text MUST specify the processing of text according to the Reference Processing Model described by the rest of the recommendations in this list. more
    Comments_go_here
  3. Specifications MUST define text in terms of Unicode characters, not bytes or glyphs. more
    Comments_go_here
  4. For their textual data objects specifications MAY allow use of any character encoding which can be transcoded to a Unicode encoding form. more
    Comments_go_here
  5. Specifications MAY choose to disallow or deprecate some character encodings and to make others mandatory. Independent of the actual character encoding, the specified behavior MUST be the same as if the processing happened as follows: (a) The character encoding of any textual data object received by the application implementing the specification MUST be determined and the data object MUST be interpreted as a sequence of Unicode characters - this MUST be equivalent to transcoding the data object to some Unicode encoding form, adjusting any character encoding label if necessary, and receiving it in that Unicode encoding form, (b) All processing MUST take place on this sequence of Unicode characters, (c) If text is output by the application, the sequence of Unicode characters MUST be encoded using a character encoding chosen among those allowed by the specification. more
    Comments_go_here
  6. If a specification is such that multiple textual data objects are involved (such as an XML document referring to external parsed entities), it MAY choose to allow these data objects to be in different character encodings. In all cases, the Reference Processing Model MUST be applied to all textual data objects. more
    Comments_go_here

Including and excluding character ranges

  1. Specifications SHOULD NOT arbitrarily exclude code points from the full range of Unicode code points from U+0000 to U+10FFFF inclusive. more
    Comments_go_here
  2. Specifications MUST NOT allow code points above U+10FFFF. more
    Comments_go_here
  3. Specifications SHOULD NOT allow the use of codepoints reserved by Unicode for internal use. more
    Comments_go_here
  4. Specifications MUST NOT allow the use of surrogate code points. more
    Comments_go_here
  5. Specifications SHOULD exclude compatibility characters in the syntactic elements (markup, delimiters, identifiers) of the formats they define. more
    Comments_go_here
  6. Specifications SHOULD allow the full range of Unicode for user-defined values. more
    Comments_go_here

Using the Private Use Area

  1. Specifications MUST NOT require the use of private use area characters with particular assignments. more
    Comments_go_here
  2. Specifications MUST NOT require the use of mechanisms for defining agreements of private use code points. more
    Comments_go_here
  3. Specifications and implementations SHOULD NOT disallow the use of private use code points by private agreement. more
    Comments_go_here
  4. Specifications MAY define markup to allow the transmission of symbols not in Unicode or to identify specific variants of Unicode characters. more
    Comments_go_here
  5. Specifications SHOULD allow the inclusion of or reference to pictures and graphics where appropriate, to eliminate the need to (mis)use character-oriented mechanisms for pictures or graphics. more
    Comments_go_here

Choosing character encodings

  1. Specifications MUST either specify a unique character encoding, or provide character encoding identification mechanisms such that the encoding of text can be reliably identified. more
    Comments_go_here
  2. When designing a new protocol, format or API, specifications SHOULD require a unique character encoding. more
    Comments_go_here
  3. When basing a protocol, format, or API on a protocol, format, or API that already has rules for character encoding, specifications SHOULD use rather than change these rules. more
    Comments_go_here
  4. When a unique character encoding is required, the character encoding MUST be UTF-8, or UTF-16. more
    Comments_go_here
  5. Specifications SHOULD avoid using the terms 'character set' and 'charset' to refer to a character encoding, except when the latter is used to refer to the MIME charset parameter or its IANA-registered values. The term 'character encoding', or in specific cases the terms 'character encoding form' or 'character encoding scheme', are RECOMMENDED. more
    Comments_go_here
  6. If the unique encoding approach is not taken, specifications SHOULD require the use of the IANA charset registry names, and in particular the names identified in the registry as 'MIME preferred names', to designate character encodings in protocols, data formats and APIs. more
    Comments_go_here
  7. Character encodings that are not in the IANA registry SHOULD NOT be used, except by private agreement. more
    Comments_go_here
  8. If an unregistered character encoding is used, the convention of using 'x-' at the beginning of the name MUST be followed. more
    Comments_go_here
  9. If the unique encoding approach is not chosen, specifications MUST designate at least one of the UTF-8 and UTF-16 encoding forms of Unicode as admissible character encodings and SHOULD choose at least one of UTF-8 or UTF-16 as required encoding forms (encoding forms that MUST be supported by implementations of the specification). more
    Comments_go_here
  10. Specifications that require a default encoding MUST define either UTF-8 or UTF-16 as the default, or both if they define suitable means of distinguishing them. more
    Comments_go_here

Identifying character encodings

  1. Specifications MUST NOT propose the use of heuristics to determine the encoding of data. more
    Comments_go_here
  2. Specifications MUST define conflict-resolution mechanisms (e.g. priorities) for cases where there is multiple or conflicting information about character encoding. more
    Comments_go_here

Designing character escapes

  1. Specifications should provide a mechanism for escaping characters, particularly those which are invisible or ambiguous. more
    Comments_go_here
  2. Specifications SHOULD NOT invent a new escaping mechanism if an appropriate one already exists. more
    Comments_go_here
  3. The number of different ways to escape a character SHOULD be minimized (ideally to one). more
    Comments_go_here
  4. Escape syntax SHOULD require either explicit end delimiters or a fixed number of characters in each character escape. Escape syntaxes where the end is determined by any character outside the set of characters admissible in the character escape itself SHOULD be avoided. more
    Comments_go_here
  5. Whenever specifications define character escapes that allow the representation of characters using a number, the number MUST represent the Unicode code point of the character and SHOULD be in hexadecimal notation. more
    Comments_go_here
  6. Escaped characters SHOULD be acceptable wherever their unescaped forms are; this does not preclude that syntax-significant characters, when escaped, lose their significance in the syntax. In particular, if a character is acceptable in identifiers and comments, then its escaped form should also be acceptable. more
    Comments_go_here

Storing text

  1. Protocols, data formats and APIs MUST store, interchange or process text data in logical order. more
    Comments_go_here
  2. Independent of whether some implementation uses logical selection or visual selection, characters selected MUST be kept in logical order in storage. more
    Comments_go_here
  3. Specifications of protocols and APIs that involve selection of ranges SHOULD provide for discontiguous logical selections, at least to the extent necessary to support implementation of visual selection on screen on top of those protocols and APIs. more
    Comments_go_here

Defining 'string'

  1. Specifications SHOULD NOT define a string as a 'byte string'. more
    Comments_go_here
  2. The 'character string' definition SHOULD be used by most specifications. more
    Comments_go_here

Referring to Unicode characters

  1. Use U+XXXX syntax to represent Unicode code points in the specification. more
    Comments_go_here

Referencing the Unicode Standard

  1. Since specifications in general need both a definition for their characters and the semantics associated with these characters, specifications SHOULD include a reference to the Unicode Standard, whether or not they include a reference to ISO/IEC 10646. more
    Comments_go_here
  2. A generic reference to the Unicode Standard MUST be made if it is desired that characters allocated after a specification is published are usable with that specification. A specific reference to the Unicode Standard MAY be included to ensure that functionality depending on a particular version is available and will not change over time. more
    Comments_go_here
  3. All generic references to the Unicode Standard MUST refer to the latest version of the Unicode Standard available at the date of publication of the containing specification. more
    Comments_go_here
  4. All generic references to ISO/IEC 10646 MUST refer to the latest version of ISO/IEC 10646 available at the date of publication of the containing specification. more
    Comments_go_here

Text-processing

Choosing text units for segmentation, indexing, etc.

  1. The character string is RECOMMENDED as a basis for string indexing. more
    Comments_go_here
  2. Grapheme clusters MAY be used as a basis for string indexing in applications where user interaction is the primary concern. more
    Comments_go_here
  3. Specifications that define indexing in terms of grapheme clusters MUST either: (a) define grapheme clusters in terms of extended grapheme clusters as defined in Unicode Standard Annex #29, Unicode Text Segmentation (UTR #29), or (b) define specifically how tailoring is applied to the indexing operation. more
    Comments_go_here
  4. The use of byte strings for indexing is NOT RECOMMENDED. more
    Comments_go_here
  5. A UTF-16 code unit string is NOT RECOMMENDED as a basis for string indexing, even if this results in a significant improvement in the efficiency of internal operations when compared to the use of character string. more
    Comments_go_here
  6. Specifications that need a way to identify substrings or point within a string SHOULD consider ways other than string indexing to perform this operation. more
    Comments_go_here
  7. Specifications SHOULD understand and process single characters as substrings, and treat indices as boundary positions between counting units, regardless of the choice of counting units. more
    Comments_go_here
  8. Specifications of APIs SHOULD NOT specify single characters or single 'units of encoding' as argument or return types. more
    Comments_go_here
  9. When the positions between the units are counted for string indexing, starting with an index of 0 for the position at the start of the string is the RECOMMENDED solution, with the last index then being equal to the number of counting units in the string. more
    Comments_go_here

Matching string identity for identifiers and syntactic content

  1. String identity matching for identifiers and syntactic content should involve the following steps: (a) Ensure the strings to be compared constitute a sequence of Unicode code points (b) Expand all character escapes and includes (c) Perform any appropriate case-folding and Unicode normalization step (d) Perform any additional matching tailoring specific to the specification, and (e) Compare the resulting sequences of code points for identity. more
    Comments_go_here
  2. The default recommendation for matching strings in identifiers and syntactic content is to do no normalization (ie. case folding or Unicode Normalization) of content. more
    Comments_go_here
  3. 'ASCII case fold' and 'Unicode canonical case fold' approaches should only be used in special circumstances. more
    Comments_go_here
  4. A 'Unicode compatibility case fold' approach should not be used. more
    Comments_go_here
  5. Specifications of vocabularies MUST define the boundaries between syntactic content and character data as well as entity boundaries (if the language has any include mechanism). more
    Comments_go_here

Working with Unicode Normalization

  1. Specifications SHOULD NOT specify a Unicode normalization form for encoding, storage, or interchange of a given vocabulary. more
    Comments_go_here
  2. Implementations MUST NOT alter the normalization form of textual data being exchanged, read, parsed, or processed except when required to do so as a side-effect of text transformation such as transcoding the content to a Unicode character encoding, case folding, or other user-initiated change, as consumers or the content itself might depend on the de-normalized representation. more
    Comments_go_here
  3. Specifications SHOULD NOT specify compatibility normalization forms (NFKC, NFKD). more
    Comments_go_here
  4. Specifications MUST document or provide a health-warning if canonically equivalent but disjoint Unicode character sequences represent a security issue. more
    Comments_go_here
  5. Where operations can produce denormalized output from normalized text input, specifications MUST define whether the resulting output is required to be normalized or not. Specifications MAY state that performing normalization is optional for some operations; in this case the default SHOULD be that normalization is performed, and an explicit option SHOULD be used to switch normalization off. more
    Comments_go_here
  6. Specifications that require normalization MUST NOT make the implementation of normalization optional. more
    Comments_go_here
  7. Normalization-sensitive operations MUST NOT be performed unless the implementation has first either confirmed through inspection that the text is in normalized form or it has re-normalized the text itself. Private agreements MAY be created within private systems which are not subject to these rules, but any externally observable results MUST be the same as if the rules had been obeyed. more
    Comments_go_here
  8. A normalizing text-processing component which modifies text and performs normalization-sensitive operations MUST behave as if normalization took place after each modification, so that any subsequent normalization-sensitive operations always behave as if they were dealing with normalized text. more
    Comments_go_here
  9. Specifications that perform comparison or matching of string values SHOULD specify the appropriate note or warning regarding Unicode normalization. more
    Comments_go_here

Case folding

  1. Specifications and implementations that define string matching as part of the definition of a format, protocol, or formal language (which might include operations such as parsing, matching, tokenizing, etc.) MUST define the criteria and matching forms used. These MUST be one of: (a) case-sensitive (b) Unicode case-insensitive using Unicode full case-folding (c) ASCII case-insensitive. more
    Comments_go_here
  2. Case-sensitive matching is RECOMMENDED for matching syntactic content, including user-defined values. more
    Comments_go_here
  3. Specifications that define case-insensitive matching in vocabularies that include more than the Basic Latin (ASCII) range of Unicode MUST specify Unicode full casefold matching. more
    Comments_go_here
  4. Specifications that define case-insensitive matching in vocabularies limited to the Basic Latin (ASCII) subset of Unicode MAY specify ASCII case-insensitive matching. more
    Comments_go_here
  5. If language-sensitive case-sensitive matching is specified, Unicode case mappings SHOULD be tailored according to language and the source of the language used for each tailoring MUST be specified. more
    Comments_go_here
  6. Specifications that define case-insensitive matching in vocabularies SHOULD NOT specify language-sensitive case-insensitive matching. more
    Comments_go_here

Truncating or limiting the length of strings

  1. Specifications SHOULD NOT limit the size of data fields unless there is a specific practical or technical limitation. more
    Comments_go_here
  2. Specifications that limit the length of a string MUST specify which type of unit (extended grapheme clusters, Unicode code points, or code units) the length limit uses. more
    Comments_go_here
  3. Specifications that limit the length of a string SHOULD specify the length in terms of Unicode code points. more
    Comments_go_here
  4. If a specification sets a length limit in code units (such as bytes), it MUST specify that truncation can only occur on code point boundaries. more
    Comments_go_here
  5. Specifications that limit the length of a string SHOULD require truncation on grapheme boundaries, as truncation in the midst of a combining or joining sequence can alter the meaning of the string. more
    Comments_go_here
  6. If a specification specifies a length limit, it SHOULD specify that any string that is truncated include an indicator, such as ellipses, that the string has been altered. more
    Comments_go_here
  7. When specifying a length limitation in code units (such as bytes), specifications SHOULD set the maximum length in a way that accommodates users whose language requires multibyte code unit sequences. more
    Comments_go_here

Working with file and path names

  1. Specify the UTF-8 [Unicode] encoding for the storage and processing of file names and file paths. more
    Comments_go_here
  2. File names SHOULD be restricted to 255 bytes in length. more
    Comments_go_here
  3. Path names SHOULD be restricted to 65535 bytes in length. more
    Comments_go_here
  4. File name and path name definitions MUST NOT use the following Unicode code points. more
    Comments_go_here

Specifying sort and search functionality

  1. Software that sorts or searches text for users SHOULD do so on the basis of appropriate collation units and ordering rules for the relevant language and/or application. more
    Comments_go_here
  2. Where searching or sorting is done dynamically, particularly in a multilingual environment, the 'relevant language' SHOULD be determined to be that of the current user, and may thus differ from user to user. more
    Comments_go_here
  3. Software that allows users to sort or search text SHOULD allow the user to select alternative rules for collation units and ordering. more
    Comments_go_here
  4. Specifications and implementations of sorting and searching algorithms SHOULD accommodate text that contains any character in Unicode. more
    Comments_go_here

Resource identifiers

Basics

  1. Resource identifiers must permit the use of characters outside those of plain ASCII. more
    Comments_go_here
  2. Specifications MUST define when the conversion from IRI references to URI references (or subsets thereof) takes place, in accordance with Internationalized Resource Identifiers (IRIs). more
    Comments_go_here

Markup & syntax

Defining elements and attributes

  1. Do not define attribute values that will contain user readable content. Use elements for such content. more
    Comments_go_here
  2. If you do define attribute values containing user readable content, provide a means to indicate directional and language information for that text separately from the text contained in the element. more
    Comments_go_here
  3. Provide a way for authors to annotate arbitrary inline content using a span-like element or construct. more
    Comments_go_here

Defining identifiers

  1. Specifications that define application internal identifiers (which are never shown to users and are always used for matching or processing within an application or protocol) should limit the content to a printable subset of ASCII. ASCII case-insensitive matching is recommended. more
    Comments_go_here
  2. When identifiers are visible or potentially visible to users, specifications should allow the use of non-ASCII Unicode characters, in order to ensure that users in all languages can use the resulting document format or protocol with equal access. Case sensitivity (i.e. no case folding) is recommended. more
    Comments_go_here
  3. If application internal identifiers are not restricted to ASCII, specifications should define the characters that are allowed to start and be part of a valid identifier. more
    Comments_go_here
  4. Specifications should not allow surrogate code points (U+D800 to U+DFFF) or non-character code points in identifiers. more
    Comments_go_here
  5. Specifications should not allow the C0 (U+0000 to U+001F) and C1 (U+0080 to U+009F) control characters in identifiers. more
    Comments_go_here
  6. Identifiers should be case-sensitive when non-ASCII characters are allowed and case insensitive when only ASCII characters are allowed. more
    Comments_go_here
  7. Application internal identifier fields or values must be wrapped with a localizable display value when displayed to end-users. more
    Comments_go_here

Working with plain text

  1. Avoid natural language text in elements or attribute values that only allow for plain text. more
    Comments_go_here
  2. Avoid defining attribute values whose content will be natural language text. more
    Comments_go_here
  3. Provide a span-like element that can be used for any text content to apply information needed for internationalization. more
    Comments_go_here

Typographic support

Text decoration

  1. Text decoration such as underline and overline should allow lines to skip ink. more
    Comments_go_here
  2. It should be possible to specify the distance of overlines and underlines from the text. more
    Comments_go_here

Vertical text

  1. It should be possible to render text vertically for languages such as Japanese, Chinese, Korean, Mongolian, etc. more
    Comments_go_here
  2. Vertical text must support line progression from LTR (eg. Mongolian) and RTL (eg. Japanese). more
    Comments_go_here
  3. By default, text decoration, ruby, and the like in vertical text where lines are stacked from left to right (eg. Mongolian) should appear on the same side as for CJK vertical text. Placement should not rely on the before and after line locations. more
    Comments_go_here
  4. Vertical writing modes that are equivalent to the vertical- values in CSS (only) should use UTR50 to apply default text orientation of characters. (This does not apply to writing modes that are equivalent to sideways- in CSS.) more
    Comments_go_here
  5. By default, glyphs of scripts that are normally horizontal should run along a line in vertical text such that the top of the character is toward the right side of the vertical line, but there should also be a mechanism to allow them to progress down the line in upright orientation. Such a mechanism should use grapheme clusters as a minimum text unit, but where necessary allow syllabic clusters to be treated as a unit when they involve more than one grapheme cluster. more
    Comments_go_here
  6. Upright Arabic text in vertical lines should use isolated letter forms and the order of text should read top to bottom. more
    Comments_go_here
  7. It should be possible for some sequences of characters (particularly digits) to run horizontally within vertical lines (tate chu yoko). more
    Comments_go_here
  8. Writing modes should provide values like sideways-lr and sideways-rl in CSS to allow for vertical rotation of lines of horizontal script text. UTR50 is not applicable for these cases. more
    Comments_go_here

Cursive text

  1. Overlaps should not be exposed when transparency is applied to the joined letters in cursive text, such as for Arabic, Mongolian, and N'Ko. more
    Comments_go_here
  2. When adding a text stroke or shadow, joined letters should not be separated from their neighbors in cursive script text. more
    Comments_go_here

Setting box positioning coordinates when text direction varies

  1. Box positioning coordinates must take into account whether the text is horizontal or vertical. more
    Comments_go_here

Ruby text annotations

  1. 'Ruby' style annotations alongside base text should be supported for Chinese, Japanese, Korean and Mongolian text, in both horizontal and vertical writing modes. more
    Comments_go_here
  2. Ruby implementations should support zhuyin fuhao (bopomofo) ruby for Traditional Chinese. more
    Comments_go_here
  3. Ruby implementations should support a tabular content model (such that ruby contents can be arranged in a sequence approximating to rb rb rt rt). more
    Comments_go_here
  4. Ruby implementations should make it possible to use an explicit element for ruby bases, like the rb element in HTML. more
    Comments_go_here
  5. Ruby implementations should allow annotations to appear on either or both sides of the base text. more
    Comments_go_here

Miscellaneous

  1. Line heights must allow for characters that are taller than English. more
    Comments_go_here
  2. Box sizes must allow for text expansion in translation. more
    Comments_go_here
  3. Line wrapping should take into account the special rules needed for non-Latin scripts. more
    Comments_go_here
  4. Avoid specifying presentational tags, such as b for bold, and i for italic. more
    Comments_go_here

Locales, date and time values, and locally affected formats

Working with time

  1. When defining calendar and date systems, be sure to allow for dates prior to the common era, or at least define handling of dates outside the most common range. more
    Comments_go_here
  2. When defining time or date data types, ensure that the time zone or relationship to UTC is always defined. more
    Comments_go_here
  3. Provide a health warning for conversion of time or date data types that are "floating" to/from incremental types, referring as necessary to the Time Zones WG Note. more
    Comments_go_here
  4. Allow for leap seconds in date and time data types. more
    Comments_go_here
  5. Use consistent terminology when discussing date and time values. Use 'floating' time for time zone independent values. more
    Comments_go_here
  6. Keep separate the definition of time zone from time zone offset. more
    Comments_go_here
  7. Use IANA time zone IDs to identify time zones. Do not use offsets or LTO as a proxy for time zone. more
    Comments_go_here
  8. Use a separate field to identify time zone. more
    Comments_go_here
  9. When defining rules for a "week", allow for culturally specific rules to be applied. more
    Comments_go_here
  10. When defining rules for week number of year, allow for culturally specific rules to be applied. more
    Comments_go_here
  11. When non-Gregorian calendars are permitted, note that the "month" field can go to 13 (undecimber). more
    Comments_go_here

Working with personal names

  1. Check whether you really need to store or access given name and family name separately. more
    Comments_go_here
  2. Avoid placing limits on the length of names, or if you do, make allowance for long strings. more
    Comments_go_here
  3. Try to avoid using the labels 'first name' and 'last name' in non-localized contexts. more
    Comments_go_here
  4. Consider whether it would make sense to have one or more extra fields, in addition to the full name field, where users can provide part(s) of their name that you need to use for a specific purpose. more
    Comments_go_here
  5. Allow for users to be asked separately how they would like you be addressed when someone contacts them. more
    Comments_go_here
  6. If parts of a person's name are captured separately, ensure that the separate items can capture all relevant information. more
    Comments_go_here
  7. Be careful about assumptions built into algorithms that pull out the parts of a name automatically. more
    Comments_go_here
  8. Don't assume that a single letter name is an initial. more
    Comments_go_here
  9. Don't require that people supply a family name. more
    Comments_go_here
  10. ​ Don't forget to allow people to use punctuation such as hyphens, apostrophes, etc. in names. more
    Comments_go_here
  11. Don't require names to be entered all in upper case. more
    Comments_go_here
  12. Don't normalize the casing in names. more
    Comments_go_here
  13. Allow the user to enter a name with spaces. more
    Comments_go_here
  14. Don't assume that members of the same family will share the same family name. more
    Comments_go_here
  15. It may be better for a form to ask for 'Previous name' rather than 'Maiden name' or 'née'. more
    Comments_go_here
  16. You may want to store the name in both Latin and native scripts, in which case you probably need to ask the user to submit their name in both native script and Latin-only form, as separate items. more
    Comments_go_here
  17. In standards and standards related documents containing examples that include names of persons, use a variety of names to reflect a global audience. Avoid a bias of names specific to certain regions. more
    Comments_go_here

Designing forms

  1. When defining email field validation, allow for EAI (smtputf8) names. more
    Comments_go_here

Working with numbers

  1. When parsing user input of numeric values, allow for digit shaping (non-ASCII digits). more
    Comments_go_here
  2. When formatting numeric values for display, allow for culturally sensitive display, including the use of non-ASCII digits (digit shaping). more
    Comments_go_here

Localization

  1. APIs and protocols SHOULD include language and base direction metadata for all natural language messages and data fields. more
    Comments_go_here
  2. All natural language fields or messages, including error messages, defined by a given API or protocol SHOULD be localized into the preferred locale of the user or, if that language is not available, supplied with a suitable fallback or default. more
    Comments_go_here
  3. Specifications for APIs or protocols SHOULD define how the user's locale is determined (this is sometimes called language negotiation). more
    Comments_go_here
  4. Specifications MAY define a specific default language for messages or errors in an API or protocol. more
    Comments_go_here
  5. APIs and protocols SHOULD provide language independent identifiers for errors. more
    Comments_go_here
  6. Natural language error message fields, when provided, SHOULD be optional and SHOULD include language and direction metadata. more
    Comments_go_here
  7. Natural language error message fields, when provided, SHOULD match the user interface language negotiated for the request when possible. more
    Comments_go_here

Navigation

Providing for content negotiation based on language

  1. In a multilingual environment it must be possible for the user to receive text in the language they prefer. This may depend on implicit user preferences based on the user's system or browser setup, or on user settings explicitly negotiated with the user. more
    Comments_go_here
Clone this wiki locally