@npm-questionpro/wick-ui-i18n
v0.6.0
Published
Auto-translation AST wrapper for Wick UI
Downloads
191
Readme
Wick UI Auto I18n
Build-time extractor that wraps static strings in <WuTranslate> and generates a JSON dictionary.
Quick Start
import wickuiI18nPlugin from "@npm-questionpro/wick-ui-i18n";
export default {
plugins: [wickuiI18nPlugin({ debug: true })],
};🛠 Attributes
data-i18n-wrapper: Forces extraction on non-Wu components (e.g.,<div data-i18n-wrapper>Text</div>).data-i18n-key="custom.key": Overrides the default "text-as-key" behavior.data-i18n-skip: Prevents the plugin from touching the element or its children.
📖 Rules & Logic
- Auto-Detection: Targets all
Wu*prefixed components by default. - Supported: Static
JSXText,{"Strings"}, and non-dynamic{Template Literals}. - Ignored: Any expression containing variables (e.g.,
{Hello ${name}}). - Output: Generates
dist/wick_extracted_strings.jsonduring bundle phase.
🔄 Logic Map (Pseudo-code)
FOR each File in the Project:
IF File matches IncludeFilter AND contains "Wu":
PARSE File into an AST (Abstract Syntax Tree)
INITIALIZE MagicString (for non-destructive editing)
TRAVERSE the AST:
// 1. IMPORT CHECK
IF Node is an Import from '@wick-ui-lib':
MARK 'WuTranslate' as already imported if found
// 2. STRING DISCOVERY
IF Node is JSXText OR (JSXExpressionContainer WITH StaticString):
SET CandidateText = Node.Value
// 3. HIERARCHY EVALUATION (The "shouldTranslate" logic)
WALK UP from Node to Parents:
IF Parent has [data-skip] attribute:
ABORT (Don't translate this node)
IF Parent has [data-i18n-wrapper] attribute:
MARK as "Valid Target" and STOP walking up
IF Parent.Name starts with "Wu" OR is in CustomList:
IF Parent.Name is NOT in IgnoreList:
MARK as "Valid Target" and STOP walking up
// 4. TRANSFORMATION
IF "Valid Target" was found:
GET ExplicitKey from [data-i18n-key] OR USE CandidateText
STORE { Key, CandidateText } in GlobalDictionary
OVERWRITE original code with:
`<WuTranslate __i18nKey="Key">OriginalText</WuTranslate>`
SET NeedsImport = True
// 5. FINAL ASSEMBLY
IF NeedsImport AND NOT 'WuTranslate' Imported:
PREPEND import statement to top of file
RETURN Modified Code + Source Maps