class PolyglotFlutter::Serializer::Localization::Localization

Public Instance Methods

import_default_language() click to toggle source
# File lib/flutter_polyglot_cli/serializers/localizations/localization_serializer.rb, line 17
def import_default_language() 
  return '' unless @set_default_langauge 
  %{import 'package:flutter_gen/gen_l10n/#{@output_localization_file}_#{@mandatory_language.downcase}.dart';}
end
latest_localizations() click to toggle source
# File lib/flutter_polyglot_cli/serializers/localizations/localization_serializer.rb, line 22
def latest_localizations() 
  return 'static AppLocalizations? _latestLocalizations;' unless @set_default_langauge 
  %{static AppLocalizations? _latestLocalizations = AppLocalizations#{@mandatory_language.capitalize}(); }
end
template() click to toggle source
# File lib/flutter_polyglot_cli/serializers/localizations/localization_serializer.rb, line 27
        def template
          <<~TEMPLATE
          import 'package:flutter/material.dart';
          import 'package:flutter_gen/gen_l10n/<%= @output_localization_file %>.dart';
          <%= import_default_language %>
          
          class Strings {
            Strings._();
            <%= latest_localizations %>
          
            static AppLocalizations of(BuildContext context) => AppLocalizations.of(context) ?? latest;
          
            static AppLocalizations get latest {
              final appLocalizations = _latestLocalizations;
              if (appLocalizations == null) {
                throw 'Unable to load App Localizations';
              }
              return appLocalizations;
            }
          }
          
          class StringsLocaleWidget extends StatelessWidget {
            const StringsLocaleWidget({Key? key, required this.child}) : super(key: key);
            final Widget child;
          
            @override
            Widget build(BuildContext context) {
              Strings._latestLocalizations = AppLocalizations.of(context);
              return child;
            }
          }

          extension AppLocales on Locale {
            <%= generate_static_locales(@languages) %>
          }
          
          TEMPLATE
        end
write(sources_path, output_localization_file, set_default_langauge, mandatory_language) click to toggle source
# File lib/flutter_polyglot_cli/serializers/localizations/localization_serializer.rb, line 7
def write(sources_path, output_localization_file, set_default_langauge, mandatory_language)
  @output_localization_file = output_localization_file
  @set_default_langauge = set_default_langauge
  @mandatory_language = mandatory_language

  FileUtils.mkdir_p sources_path unless File.exist? sources_path
  output_path = File.join(sources_path, 'strings.dart')
  File.write(output_path, render)
end