{"id":17645818,"url":"https://github.com/masreplay/ckb_localizations","last_synced_at":"2026-05-05T00:38:27.372Z","repository":{"id":218383856,"uuid":"746288932","full_name":"masreplay/ckb_localizations","owner":"masreplay","description":"Support for localization of the Sorani language in Flutter applications.","archived":false,"fork":false,"pushed_at":"2024-07-06T10:32:59.000Z","size":300,"stargazers_count":1,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-05T09:20:33.133Z","etag":null,"topics":["ckb","dart","flutter","i18n","intl","ku","kurdish","l10n","localization"],"latest_commit_sha":null,"homepage":"https://pub.dev/packages/ckb_localizations","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/masreplay.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-01-21T16:23:24.000Z","updated_at":"2024-12-04T01:37:36.000Z","dependencies_parsed_at":"2024-06-11T07:42:18.987Z","dependency_job_id":"5dcc6b06-efa4-4808-b10b-c90bed50bbd1","html_url":"https://github.com/masreplay/ckb_localizations","commit_stats":null,"previous_names":["masreplay/ckb_localizations"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/masreplay%2Fckb_localizations","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/masreplay%2Fckb_localizations/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/masreplay%2Fckb_localizations/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/masreplay%2Fckb_localizations/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/masreplay","download_url":"https://codeload.github.com/masreplay/ckb_localizations/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246285816,"owners_count":20752958,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ckb","dart","flutter","i18n","intl","ku","kurdish","l10n","localization"],"created_at":"2024-10-23T10:59:41.185Z","updated_at":"2026-05-05T00:38:27.367Z","avatar_url":"https://github.com/masreplay.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ckb_localizations\n\n**پشتیوانی لە زمانێکی کوردی (سۆرانی) بۆ ئەپەکانی Flutter.**\nSupport for localization of the **Kurdish (Sorani)** language in Flutter applications.\n\n[![pub package](https://img.shields.io/pub/v/ckb_localizations.svg)](https://pub.dev/packages/ckb_localizations)\n\n---\n\n## What is this?\n\n`ckb_localizations` adds first-class **Kurdish Sorani (ckb)** support to Flutter apps.\nIt complements `flutter_localizations` and `intl` so your app can show Kurdish text, layout direction (RTL), and locale-aware formatting properly.\n\n---\n\n## Features\n\n* ✅ Adds **Sorani (ckb)** to your app’s localization stack\n* ✅ Works alongside `flutter_localizations` \u0026 generated `AppLocalizations`\n* ✅ Simple, drop-in delegates for Material/Cupertino widgets and Sorani strings\n* ✅ RTL-aware (Sorani uses Arabic script → right-to-left)\n\n---\n\n## Requirements\n\n* Flutter 3.x+\n* `flutter_localizations` and `intl` in `pubspec.yaml`\n* Using Flutter’s [Internationalization](https://docs.flutter.dev/ui/accessibility-and-internationalization/internationalization) workflow (gen-l10n)\n\n---\n\n## Installation\n\nAdd the package:\n\n```sh\nflutter pub add ckb_localizations\n```\n\nMake sure you have (usually auto-added by Flutter):\n\n```yaml\n# pubspec.yaml (excerpt)\ndependencies:\n  flutter:\n    sdk: flutter\n  flutter_localizations:\n    sdk: flutter\n  intl: any\n  ckb_localizations: any\n```\n\n---\n\n## Project setup (gen-l10n)\n\nYou can initialize localization in **two ways**:\n\n### Option A: Flutter official docs\n\nFollow the official guide:\n[https://docs.flutter.dev/ui/accessibility-and-internationalization/internationalization](https://docs.flutter.dev/ui/accessibility-and-internationalization/internationalization)\n\n### Option B: Quick init with `l10n_lint` (optional helper)\n\n```sh\ndart pub global activate l10n_lint\nl10n --init\n```\n\nThis scaffolds:\n\n* `l10n.yaml`\n* `lib/l10n/app_en.arb`\n* Adds `flutter_localizations`/`intl` to your `pubspec.yaml` (if missing)\n\n---\n\n## Configure `l10n.yaml` (recommended)\n\nCreate or update `l10n.yaml` in your project root:\n\n```yaml\n# l10n.yaml\narb-dir: lib/l10n\ntemplate-arb-file: app_en.arb\noutput-localization-file: app_localizations.dart\noutput-class: AppLocalizations\nuntranslated-messages-file: l10n_untranslated.json\nsynthetic-package: true\nnullable-getter: false\nuse-deferred-loading: false\n```\n\n\u003e You can tweak names, but keep `arb-dir` and `template-arb-file` aligned with your files.\n\n---\n\n## Add ARB files\n\nCreate Sorani and English files:\n\n**`lib/l10n/app_en.arb`**\n\n```json\n{\n  \"@@locale\": \"en\",\n  \"appName\": \"My App\",\n  \"greeting\": \"Hello\"\n}\n```\n\n**`lib/l10n/app_ckb.arb`**\n\n```json\n{\n  \"@@locale\": \"ckb\",\n  \"appName\": \"ئەپی من\",\n  \"greeting\": \"سڵاو\"\n}\n```\n\n\u003e Key names must match across languages.\n\u003e The presence of `app_ckb.arb` registers **ckb** as a supported locale in `AppLocalizations.supportedLocales`.\n\n---\n\n## Wire up delegates (usage)\n\nUse the `ckb_localizations` delegates **in addition to** the generated/local Flutter delegates.\n\n\u003e Below is **your original example** kept as-is:\n\n```dart\nimport 'package:ckb_localizations/ckb_localizations.dart';\nimport 'package:example/main.dart';\nimport 'package:flutter/material.dart';\n\nexport \"package:flutter_gen/gen_l10n/app_localizations.dart\";\n\nvoid main() {\n  runApp(const MyApp());\n}\n\nclass MyApp extends StatelessWidget {\n  const MyApp({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      localizationsDelegates: const [\n        ...AppLocalizations.localizationsDelegates,\n        ...CkbLocalizations.localizationsDelegates,\n      ],\n      supportedLocales: AppLocalizations.supportedLocales,\n      onGenerateTitle: (context) =\u003e AppLocalizations.of(context).appName,\n      home: const HomePage(),\n    );\n  }\n}\n\nclass HomePage extends StatelessWidget {\n  const HomePage({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    final l10n = AppLocalizations.of(context);\n    return Scaffold(\n      appBar: AppBar(\n        title: Text(l10n.appName),\n      ),\n      body: Text(l10n.localeName),\n    );\n  }\n}\n```\n\n### Forcing Sorani during testing (optional)\n\nIf you want to force the app to run in Sorani while testing:\n\n```dart\nMaterialApp(\n  localizationsDelegates: const [\n    ...AppLocalizations.localizationsDelegates,\n    ...CkbLocalizations.localizationsDelegates,\n  ],\n  supportedLocales: AppLocalizations.supportedLocales,\n  locale: const Locale('ckb'), // Force Sorani\n)\n```\n\nOtherwise, leave `locale` unset to let the system/device locale decide.\n\n---\n\n## RTL notes\n\n* Sorani (`ckb`) uses Arabic script → Flutter will automatically apply **RTL** layout when `locale` is `ckb`.\n* If you use custom widgets that assume LTR, ensure they respect `Directionality.of(context)`.\n\n---\n\n## Verifying generation\n\nRun a clean build to ensure gen-l10n output is created/updated:\n\n```sh\nflutter clean\nflutter pub get\nflutter run\n```\n\nYou should be able to import:\n\n```dart\nimport 'package:flutter_gen/gen_l10n/app_localizations.dart';\n```\n\n(or use the `export` you already included).\n\n---\n\n## Troubleshooting\n\n* **“AppLocalizations not found”** → Ensure `l10n.yaml` is correct and ARB files are in `lib/l10n/`.\n* **Strings not changing** → Confirm your device/emulator language is set to Kurdish (Sorani) or set `locale: Locale('ckb')`.\n* **Layout direction issues** → Wrap custom layouts with `Directionality` or rely on `MaterialApp`/`CupertinoApp`.\n\n---\n\n## Example keys (plural/select) *(optional)*\n\n**Plural**\n\n```json\n{\n  \"messagesCount\": \"{count, plural, =0 {هیچ نامەیەک نییە} =1 {١ نامە} other {{count} نامە}}\",\n  \"@messagesCount\": {\n    \"placeholders\": {\"count\": {\"type\": \"num\"}}\n  }\n}\n```\n\n**Gender/select**\n\n```json\n{\n  \"welcomeUser\": \"{gender, select, male {بەخێربێیتەوە، کەسایەتیەکەمان} female {بەخێربێیتەوە، خاتون} other {بەخێربێیت}}\"\n}\n```\n\nUse with:\n\n```dart\nl10n.messagesCount(count);\nl10n.welcomeUser(gender);\n```\n\n---\n\n## Links\n\n* Package: [https://pub.dev/packages/ckb_localizations](https://pub.dev/packages/ckb_localizations)\n* Flutter i18n docs: [https://docs.flutter.dev/ui/accessibility-and-internationalization/internationalization](https://docs.flutter.dev/ui/accessibility-and-internationalization/internationalization)\n* Related Flutter issue (Kurdish support): [https://github.com/flutter/flutter/issues/161726#issuecomment-3133774071](https://github.com/flutter/flutter/issues/161726#issuecomment-3133774071)\n\n---\n\n## License\nMIT License\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmasreplay%2Fckb_localizations","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmasreplay%2Fckb_localizations","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmasreplay%2Fckb_localizations/lists"}