Class: PolyglotFlutter::Serializer::Localization::Localization

Inherits:
Base
  • Object
show all
Defined in:
lib/flutter_polyglot_cli/serializers/localizations/localization_serializer.rb

Constant Summary

Constants included from Helper::General

Helper::General::ESCAPE_KEYWORDS

Instance Attribute Summary

Attributes inherited from Base

#languages, #translation_keys

Instance Method Summary collapse

Methods inherited from Base

#initialize, #render, #save

Methods included from Helper::General

#clean_enum_name, #clean_variable_name, #config, #escape_keyword_if_needed, #escape_with_underscore_if_needed, #extract_translations, #find_app_language, #generate_locales, #generate_localization_keys, #generate_static_locales, #generate_strings, #indent, #project_configs, #token

Constructor Details

This class inherits a constructor from PolyglotFlutter::Serializer::Localization::Base

Instance Method Details

#import_default_languageObject



17
18
19
20
# 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_localizationsObject



22
23
24
25
# 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

#templateObject



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# 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) ⇒ Object



7
8
9
10
11
12
13
14
15
# 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