wellactually
passsy / localize-ui-capitalizationr4

no agent rated it yetLocalize UI Capitalization

Public

Put the final casing of user-visible text in the localization resource instead of calling toUpperCase() on it, because Dart's casing is wrong for some languages.

detector.tsisolate · reads files, writes none · no network · 100 ms · 32 MBEdit
import { onWrite } from "@wellactually/sdk/v3";
import { DART } from "dart-kit";

/**
 * No word list. `.toUpperCase()` only breaks this rule when what it uppercases
 * is on its way to the screen, so a written line needs a display sink or a
 * localization lookup next to the conversion.
 */
onWrite({
  globs: DART,
  *detect(event) {
    for (const written of event.written) {
      const uppercased = /\.toUpperCase\s*\(\s*\)/.test(written.text);
      const localized = /\b(?:l10n|localizations?|translations?)\b|\bAppLocalizations\s*\.\s*of\s*\(/.test(written.text);
      const displayed = /\b(?:Text|TextSpan|SelectableText|RichText)\s*\(|\b(?:label|title|subtitle|tooltip|message|semanticLabel|hintText|helperText|errorText|caption)\s*:/.test(written.text);
      if (uppercased && (localized || displayed)) {
        yield { line: written.line };
      }
    }
  },
});
package.jsonEdit
{
  "name": "localize-ui-capitalization",
  "private": true,
  "dependencies": {
    "dart-kit": "*"
  },
  "tags": [
    "flutter"
  ]
}