Enhancing Angular Applications with Internationalization and Localization
Techniques for implementing internationalization and localization to support multiple languages and regions in Angular projects.
0 likes
189 views
Rule Content
{
"title": "Enhancing Angular Applications with Internationalization and Localization",
"description": "Techniques for implementing internationalization and localization to support multiple languages and regions in Angular projects.",
"category": "Angular Cursor Rules",
"rules": [
{
"id": "angular-i18n-001",
"description": "Plan for internationalization from the project's inception to avoid retrofitting challenges.",
"severity": "warning",
"recommendation": "Incorporate Angular's i18n capabilities early by marking text for translation using the `i18n` attribute in templates.",
"example": {
"before": "<h1>Welcome to our website!</h1>",
"after": "<h1 i18n>Welcome to our website!</h1>"
}
},
{
"id": "angular-i18n-002",
"description": "Avoid hardcoding locale-sensitive data such as dates, times, and currencies.",
"severity": "error",
"recommendation": "Utilize Angular's built-in pipes like `DatePipe` and `CurrencyPipe` to format data according to the user's locale.",
"example": {
"before": "<p>Today's date is: 2025-06-03</p>",
"after": "<p>Today's date is: {{ today | date:'longDate' }}</p>"
}
},
{
"id": "angular-i18n-003",
"description": "Provide context for translators to ensure accurate translations.",
"severity": "warning",
"recommendation": "Use the `i18n` attribute with descriptions and custom IDs to give translators necessary context.",
"example": {
"before": "<button>Ship</button>",
"after": "<button i18n=\"@@shipButton|Button label for shipping products\">Ship</button>"
}
},
{
"id": "angular-i18n-004",
"description": "Use interpolation for dynamic content to maintain flexibility in translations.",
"severity": "warning",
"recommendation": "Implement Angular's interpolation syntax (`{{ }}`) instead of string concatenation for dynamic content.",
"example": {
"before": "<p>{{ userName }} has {{ itemCount }} items in their cart.</p>",
"after": "<p i18n=\"@@cartStatus\">{{ userName }} has {{ itemCount }} items in their cart.</p>"
}
},
{
"id": "angular-i18n-005",
"description": "Handle pluralization and gender-specific translations appropriately.",
"severity": "error",
"recommendation": "Utilize Angular's ICU message format to manage complex linguistic rules.",
"example": {
"before": "<p>{{ itemCount }} items found.</p>",
"after": "<p i18n=\"@@itemsFound\">{itemCount, plural, =0 {No items found.} =1 {One item found.} other {# items found.}}</p>"
}
},
{
"id": "angular-i18n-006",
"description": "Ensure support for right-to-left (RTL) languages.",
"severity": "error",
"recommendation": "Implement RTL support by adjusting layouts and styles to accommodate languages like Arabic and Hebrew.",
"example": {
"before": "/* No RTL support */",
"after": "[dir='rtl'] .example-class { transform: scaleX(-1); }"
}
},
{
"id": "angular-i18n-007",
"description": "Avoid hardcoding text within TypeScript files.",
"severity": "warning",
"recommendation": "Use Angular's `$localize` function to mark strings for translation in TypeScript code.",
"example": {
"before": "const message = 'Welcome to our application!';",
"after": "const message = $localize`:@@welcomeMessage:Welcome to our application!`;"
}
},
{
"id": "angular-i18n-008",
"description": "Manage translation files efficiently to support multiple languages.",
"severity": "warning",
"recommendation": "Organize translation files systematically and consider using libraries like `@ngx-translate/core` for dynamic language loading.",
"example": {
"before": "/* Unorganized translation files */",
"after": "assets/i18n/en.json, assets/i18n/es.json, assets/i18n/fr.json"
}
},
{
"id": "angular-i18n-009",
"description": "Test the application comprehensively across all supported languages.",
"severity": "error",
"recommendation": "Perform localization testing to identify and fix issues related to layout, functionality, and translation accuracy.",
"example": {
"before": "/* No localization testing */",
"after": "/* Conducted localization testing for en, es, fr locales */"
}
},
{
"id": "angular-i18n-010",
"description": "Consider cultural differences in design and content.",
"severity": "warning",
"recommendation": "Adapt UI/UX elements, images, and content to align with cultural norms and preferences of target locales.",
"example": {
"before": "/* Generic images */",
"after": "/* Culturally relevant images for each locale */"
}
}
]
}