mirror of
https://gitlab.com/TheOneWithTheBraid/dart_pkpass.git
synced 2025-07-05 21:08:47 +00:00
feat: add String localization support
Signed-off-by: The one with the braid <the-one@with-the-braid.cf>
This commit is contained in:
parent
78f88305ec
commit
e345763813
10 changed files with 173 additions and 13 deletions
|
@ -1,3 +1,6 @@
|
|||
import 'package:intl/locale.dart';
|
||||
|
||||
import 'package:pkpass/pkpass.dart';
|
||||
import 'package:pkpass/src/utils/mabe_decode.dart';
|
||||
|
||||
/// Keys that define the structure of the pass.
|
||||
|
@ -108,11 +111,26 @@ class DictionaryField {
|
|||
? null
|
||||
: DictionaryValue.parse(json['attributedValue'] as String),
|
||||
);
|
||||
|
||||
/// Localized version of [label] based on given [locale] and [pass].
|
||||
String? getLocalizedLabel(PassFile pass, Locale? locale) {
|
||||
final localizations = pass.getLocalizations(locale);
|
||||
print(localizations);
|
||||
return localizations?[label] ?? label;
|
||||
}
|
||||
|
||||
/// Localized version of [changeMessage] based on given [locale] and [pass].
|
||||
String? getLocalizedChangeMessage(PassFile pass, Locale? locale) {
|
||||
final localizations = pass.getLocalizations(locale);
|
||||
return localizations?[changeMessage] ?? changeMessage;
|
||||
}
|
||||
}
|
||||
|
||||
/// represents the possible values of a [DictionaryField].
|
||||
abstract class DictionaryValue {
|
||||
const DictionaryValue();
|
||||
|
||||
/// parses the correct [DictionaryValue] implementor based on a given [value].
|
||||
factory DictionaryValue.parse(String value) {
|
||||
final number = int.tryParse(value);
|
||||
if (number != null) return NumberDictionaryValue(number);
|
||||
|
@ -122,35 +140,82 @@ abstract class DictionaryValue {
|
|||
|
||||
return StringDictionaryValue(value);
|
||||
}
|
||||
|
||||
/// Localized value based on given [locale] and [pass].
|
||||
DictionaryValue getLocalizedValue(PassFile pass, Locale? locale);
|
||||
}
|
||||
|
||||
/// [String] content of a [DictionaryField].
|
||||
class StringDictionaryValue extends DictionaryValue {
|
||||
final String string;
|
||||
|
||||
const StringDictionaryValue(this.string);
|
||||
|
||||
@override
|
||||
|
||||
/// Localized value based on given [locale] and [pass].
|
||||
DictionaryValue getLocalizedValue(PassFile pass, Locale? locale) {
|
||||
final localizations = pass.getLocalizations(locale);
|
||||
return StringDictionaryValue(localizations?[string] ?? string);
|
||||
}
|
||||
}
|
||||
|
||||
/// [DateTime] content of a [DictionaryField].
|
||||
class DateTimeDictionaryValue extends DictionaryValue {
|
||||
final DateTime dateTime;
|
||||
|
||||
const DateTimeDictionaryValue(this.dateTime);
|
||||
|
||||
@override
|
||||
|
||||
/// Localized value based on given [locale] and [pass]. Same as [dateTime].
|
||||
DictionaryValue getLocalizedValue(PassFile pass, Locale? locale) => this;
|
||||
}
|
||||
|
||||
/// [int] content of a [DictionaryField].
|
||||
class NumberDictionaryValue extends DictionaryValue {
|
||||
final int number;
|
||||
|
||||
const NumberDictionaryValue(this.number);
|
||||
|
||||
@override
|
||||
|
||||
/// Localized value based on given [locale] and [pass]. Same as [number].
|
||||
DictionaryValue getLocalizedValue(PassFile pass, Locale? locale) => this;
|
||||
}
|
||||
|
||||
/// Possible types of [PassStructureDictionary.transitType].
|
||||
enum TransitType {
|
||||
/// PKTransitTypeAir
|
||||
air,
|
||||
|
||||
/// PKTransitTypeBoat
|
||||
boat,
|
||||
|
||||
/// PKTransitTypeBus
|
||||
bus,
|
||||
|
||||
/// PKTransitTypeGeneric
|
||||
generic,
|
||||
|
||||
/// PKTransitTypeTrain
|
||||
train,
|
||||
}
|
||||
|
||||
enum PassTextAlign { left, center, right, natural }
|
||||
/// Possible types of [DictionaryField.textAlignment].
|
||||
enum PassTextAlign {
|
||||
/// PKTextAlignmentLeft, corresponds `dart:ui` [TextAlign.left]
|
||||
left,
|
||||
|
||||
/// PKTextAlignmentCenter, corresponds `dart:ui` [TextAlign.center]
|
||||
center,
|
||||
|
||||
/// PKTextAlignmentRight, corresponds `dart:ui` [TextAlign.left]
|
||||
right,
|
||||
|
||||
/// PKTextAlignmentNatural, corresponds `dart:ui` [TextAlign.start]
|
||||
natural,
|
||||
}
|
||||
|
||||
extension _TarnsitType on TransitType {
|
||||
static TransitType? parse(String? type) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue