{"id":15478103,"url":"https://github.com/bdlukaa/get_localization","last_synced_at":"2025-10-23T02:21:08.910Z","repository":{"id":56831204,"uuid":"334007579","full_name":"bdlukaa/get_localization","owner":"bdlukaa","description":"Localize your app easily entirely in flutter using dart getters. No need for code generation.","archived":true,"fork":false,"pushed_at":"2024-11-04T11:35:01.000Z","size":74,"stargazers_count":6,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-02T00:36:03.818Z","etag":null,"topics":["dart","flutter","localization"],"latest_commit_sha":null,"homepage":"https://pub.dev/packages/get_localization","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bdlukaa.png","metadata":{"files":{"readme":"README-PT.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}},"created_at":"2021-01-29T01:50:18.000Z","updated_at":"2024-11-04T11:35:34.000Z","dependencies_parsed_at":"2022-08-28T21:02:35.994Z","dependency_job_id":null,"html_url":"https://github.com/bdlukaa/get_localization","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bdlukaa%2Fget_localization","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bdlukaa%2Fget_localization/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bdlukaa%2Fget_localization/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bdlukaa%2Fget_localization/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bdlukaa","download_url":"https://codeload.github.com/bdlukaa/get_localization/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241726735,"owners_count":20009965,"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":["dart","flutter","localization"],"created_at":"2024-10-02T04:02:07.704Z","updated_at":"2025-10-23T02:21:03.584Z","avatar_url":"https://github.com/bdlukaa.png","language":"Dart","funding_links":["https://www.buymeacoffee.com/bdlukaa","https://img.buymeacoffee.com/button-api/?text=Me"],"categories":[],"sub_categories":[],"readme":"\u003cdiv\u003e\n  \u003ch1 align=\"center\"\u003eget_localization\u003c/h1\u003e\n  \u003cp align=\"center\" \u003e\n    \u003ca title=\"Pub\" href=\"https://pub.dartlang.org/packages/get_localization\" \u003e\n      \u003cimg src=\"https://img.shields.io/pub/v/get_localization.svg?style=popout\u0026include_prereleases\" /\u003e\n    \u003c/a\u003e\n    \u003ca title=\"Licença\"\u003e\n      \u003cimg src=\"https://img.shields.io/github/license/bdlukaa/get_localization\" /\u003e\n    \u003c/a\u003e\n    \u003ca title=\"PRs são bem-vindos\"\u003e\n      \u003cimg src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\" /\u003e\n    \u003c/a\u003e\n  \u003cdiv\u003e\n  \u003cp align=\"center\"\u003e\n    \u003ca title=\"Me compre um café\" href=\"https://www.buymeacoffee.com/bdlukaa\"\u003e\n      \u003cimg src=\"https://img.buymeacoffee.com/button-api/?text=Me compre um café\u0026emoji=\u0026slug=bdlukaa\u0026button_colour=FF5F5F\u0026font_colour=ffffff\u0026font_family=Lato\u0026outline_colour=000000\u0026coffee_colour=FFDD00\"\u003e\n    \u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\nTraduza seu app facílmente e puramente em Flutter usando getters. Sem necessidade de geração de código.\n\n[English](README.md) | Português\n\n# Comece\n\nAdicione o pacote em `pubspec.yaml`:\n\n```yaml\ndependencies:\n  get_localization: 2.0.0\n```\n\nE execute `flutter pub get` no terminal\n\n## Crie sua classe BaseLocalization e os getters de tradução\n\nNão esqueça de fazer a classe `abstract` (abstrata).\n\n```dart\nabstract class BaseLocalization extends Localization {\n  BaseLocalization({\n    @required String code,\n    @required String name,\n    String country,\n  }) : super(\n          code: code,\n          name: name,\n          country: country,\n        );\n\n  // Adicione seus getters aqui:\n\n  String get appName;\n}\n\nclass EnglishLocalization extends BaseLocalization {\n  EnglishLocalization() : super(code: 'en', name: 'English');\n\n  String get appName =\u003e 'Example App';\n}\n\nclass PortugueseLocalization extends BaseLocalization {\n  PortugueseLocalization() : super(code: 'pt', name: 'Português');\n\n  String get appName =\u003e 'App de Exemplo';\n}\n```\n\nO Dart-analyzer vai te dizer quando uma implementação estiver faltando.\\\nVeja [exemplo](example/lib/langs/lang.dart) para um exemplo completo\n\n## Inicialize o pacote\n\n```dart\nvoid main() {\n  // Inicialize o sistema de traduções. Não é necessario, mas se\n  // você quiser ser notificado sobre o idioma do sistema logo quando\n  // ele ser alterado, você precisa chamar esse método.\n  Localization.init();\n  // Adicione suas traduções. Você pode adicioná-las em tempo-de-execução,\n  // mas é recomendado adicioná-las aqui porque aqui será executado somente\n  // uma vez\n  Localization.localizations\n    ..add(yourLocalization);\n  runApp(MyApp());\n}\n```\n\nSe você está usando `MaterialApp` (ou `WidgetsApp`, `CupertinoApp` ou relacionado), vocè precisa setar `supportedLocales`:\n\n```dart\nreturn MaterialApp(\n  /// Adicione essa linha para a plataforma saber os idiomas suportados\n  supportedLocales: Localization.localizations.toLocaleList(),\n  home: Home(),\n);\n```\n\nCertifique-se de use a classe `Localization` na thread principal (`main()`).\n\n## Obtenhar e define a tradução atual\n\n```dart\n// Obtenha a tradução. Certifique-se de especificar o tipo (cast)\n// para BaseLocalization ou qualquer que o nome da sua classe seja\nBaseLocalization localization = Localization.currentLocalization;\n// Defina a tradução\nLocalization.currentLocalization = /* \u003clocalization-class here\u003e */;\n```\n\n## Atenda aos eventos\n\nVocê pode saber quando o idioma é alterado usando `Localization.onLocaleChanged`. É geralmente usado para atualizar o aplicativo para salvar as alterações:\n\n```dart\nclass MyApp extends StatefulWidget {\n  @override\n  _MyAppState createState() =\u003e _MyAppState();\n}\n\nclass _MyAppState extends State\u003cMyApp\u003e {\n  @override\n  void initState() {\n    super.initState();\n    /// Atenda aos eventos e atualize todo o aplicativo.\n    /// Você pode usar algo como `SharedPreferences` para salvar o idioma atual\n    /// e setar ele na inicialização\n    Localization.onLocaleChanged.listen((event) =\u003e setState(() {}));\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    BaseLocalization loc = Localization.currentLocalization;\n    return MaterialApp(\n      title: loc.appName,\n      /// Adicione essa linha para a plataforma saber os idiomas suportados\n      supportedLocales: Localization.localizations.toLocaleList(),\n      home: Home(),\n    );\n  }\n}\n```\n\nVocê pode ver um aplicativo funcionando totalmente em [exemplo](example/)\n\n## Usando Intl\n\nIntl é um pacote que oferece recursos de internacionalização e localização, incluindo tradução de mensagens, plurais e gêneros, formatação e análise de data/número e texto bidirecional.\n\n### Instale e importe o pacote\n\nNo seu `pubspec.yaml`, adicione `intl` às dependências:\n\n```yaml\ndependencies:\n  get_localization: \u003clatest-version\u003e\n  intl: \u003clatest-version\u003e\n```\n\nE importe:\n\n```dart\nimport 'package:intl/intl.dart';\n```\n\n### Usando na BaseLocalization\n\n```dart\nclass PortugueseLocalization extends BaseLocalization {\n  PortugueseLocalization() : super(code: 'pt', name: 'Português');\n\n  String coins(int amount) {\n    /// Obtenha o código do idioma atual. Você pode usar-lo em quase todos\n    /// os métodos no Intl\n    final f = NumberFormat('###.0#', Localization.fullCode);\n    return Intl.plural(\n      amount,\n      zero: 'Você não tem moedas',\n      one: 'Você tem uma moeda',\n      other: 'Você tem ${f.format(amount)} moedas',\n    );\n  }\n}\n```\n\n[Saiba mais](https://pub.dev/packages/intl):\n\n- [Lidando com plural e gêneros](https://pub.dev/packages/intl#messages)\n- [Formatando números](https://pub.dev/packages/intl#number-formatting-and-parsing)\n- [Formatando datass](https://pub.dev/packages/intl#date-formatting-and-parsing)\n\n## Usando `LocalizationProviderMixin`\n\nVocê pode user o `LocalizationProviderMixin` nas suas classes para acessar métodos da classe `Localizations` diretamente.\n\n### Adicione à uma classe\n\n```dart\nclass Home extends StatelessWidget with LocalizationProviderMixin {\n  const Home({Key key}) : super(key: key);\n\n  ...\n}\n```\n\n### Use os métodos\n\nIncluia todos os métodos comuns:\n\n- currentLocalization (getter e setter)\n- localizations\n- onLocaleChanged\n\n```dart\n  ...\n\n  @override\n  Widget build(BuildContext context) {\n    BaseLocalization loc = currentLocalization;\n    return Scaffold(\n      appBar: AppBar(title: Text(loc.appName)),\n      body: Column(\n        children: List.generate(localizations.length, (index) {\n          final localization = localizations[index];\n          return CheckboxListTile(\n            /// Atualize o idioma atual\n            onChanged: (_) =\u003e currentLocalization = localization,\n            value: loc == localization,\n            title: Text(localization.name),\n            subtitle: Text(localization.code),\n          );\n        }),\n      ),\n    );\n  }\n\n  ...\n```\n\n## Estrutura de pastas\n\nQuando sua tradução fica maior, você pode querer dividi-las em arquivos diferentes. Geralmente:\n\n```\nlib (pasta que contém todos os arquivos)\n  lang (pasta que contém todos os arquivos de idiomas)\n    lang.dart (onde sua BaseLocalization estará)\n    langs (pasta que contém todas as traduções)\n      en.dart (código_PAÍS.dart)\n      pt.dart\n      es.dart\n      ...\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbdlukaa%2Fget_localization","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbdlukaa%2Fget_localization","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbdlukaa%2Fget_localization/lists"}