Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 2 additions & 7 deletions lib/src/duration.dart
Original file line number Diff line number Diff line change
Expand Up @@ -37,13 +37,8 @@ String prettyDuration(Duration duration,
String? conjunction,
bool abbreviated = false,
int maxUnits = 0}) {
if (abbreviated && delimiter == null) {
delimiter = ', ';
spacer = '';
} else {
delimiter ??= ' ';
spacer ??= locale.defaultSpacer;
}
spacer ??= abbreviated ? locale.abbreviatedSpacer : locale.defaultSpacer;
delimiter ??= abbreviated ? ', ' : ' ';

String sign = duration.isNegative ? '-' : '';
duration = duration.abs();
Expand Down
3 changes: 3 additions & 0 deletions lib/src/locale/chinese_hans.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ class ChineseSimplifiedDurationLocale extends DurationLocale {
@override
String get defaultSpacer => '';

@override
String get abbreviatedSpacer => '';

@override
String year(int amount, [bool abbreviated = true]) {
return '年';
Expand Down
3 changes: 3 additions & 0 deletions lib/src/locale/chinese_hant.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ class ChineseTraditionalDurationLocale extends DurationLocale {
@override
String get defaultSpacer => '';

@override
String get abbreviatedSpacer => '';

@override
String year(int amount, [bool abbreviated = true]) {
return '年';
Expand Down
89 changes: 89 additions & 0 deletions lib/src/locale/english_us.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
part of duration.locale;

class EnglishUSDurationLocale extends DurationLocale {
const EnglishUSDurationLocale();

@override
String get abbreviatedSpacer => '';

@override
String year(int amount, [bool abbreviated = true]) {
if (abbreviated) {
return 'y';
} else {
return 'year${amount.abs() != 1 ? 's' : ''}';
}
}

@override
String month(int amount, [bool abbreviated = true]) {
if (abbreviated) {
return 'mon';
} else {
return 'month${amount.abs() != 1 ? 's' : ''}';
}
}

@override
String week(int amount, [bool abbreviated = true]) {
if (abbreviated) {
return 'w';
} else {
return 'week${amount.abs() != 1 ? 's' : ''}';
}
}

@override
String day(int amount, [bool abbreviated = true]) {
if (abbreviated) {
return 'd';
} else {
return 'day${amount.abs() != 1 ? 's' : ''}';
}
}

@override
String hour(int amount, [bool abbreviated = true]) {
if (abbreviated) {
return 'h';
} else {
return 'hour${amount.abs() != 1 ? 's' : ''}';
}
}

@override
String minute(int amount, [bool abbreviated = true]) {
if (abbreviated) {
return 'min';
} else {
return 'minute${amount.abs() != 1 ? 's' : ''}';
}
}

@override
String second(int amount, [bool abbreviated = true]) {
if (abbreviated) {
return 's';
} else {
return 'second${amount.abs() != 1 ? 's' : ''}';
}
}

@override
String millisecond(int amount, [bool abbreviated = true]) {
if (abbreviated) {
return 'ms';
} else {
return 'millisecond${amount.abs() != 1 ? 's' : ''}';
}
}

@override
String microseconds(int amount, [bool abbreviated = true]) {
if (abbreviated) {
return 'us';
} else {
return 'microsecond${amount.abs() != 1 ? 's' : ''}';
}
}
}
3 changes: 3 additions & 0 deletions lib/src/locale/japanese.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ class JapaneseDurationLocale extends DurationLocale {
@override
String get defaultSpacer => '';

@override
String get abbreviatedSpacer => '';

@override
String year(int amount, [bool abbreviated = true]) {
return '年';
Expand Down
3 changes: 3 additions & 0 deletions lib/src/locale/korean.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ class KoreanDurationLocale extends DurationLocale {
@override
String get defaultSpacer => '';

@override
String get abbreviatedSpacer => '';

@override
String year(int amount, [bool abbreviated = true]) {
return '년';
Expand Down
159 changes: 83 additions & 76 deletions lib/src/locale/locale.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,38 +2,41 @@ library duration.locale;

import 'package:duration/duration.dart';

part 'arabic.dart';
part 'chinese_hans.dart';
part 'chinese_hant.dart';
part 'czech.dart';
part 'dutch.dart';
part 'english.dart';
part 'english_us.dart';
part 'finnish.dart';
part 'french.dart';
part 'german.dart';
part 'greek.dart';
part 'hebrew.dart';
part 'indonesian.dart';
part 'italian.dart';
part 'japanese.dart';
part 'korean.dart';
part 'norwegian.dart';
part 'polish.dart';
part 'portuguese_br.dart';
part 'romanian.dart';
part 'russian.dart';
part 'spanish.dart';
part 'swedish.dart';
part 'norwegian.dart';
part 'turkish.dart';
part 'italian.dart';
part 'german.dart';
part 'dutch.dart';
part 'chinese_hans.dart';
part 'chinese_hant.dart';
part 'thai.dart';
part 'romanian.dart';
part 'arabic.dart';
part 'korean.dart';
part 'indonesian.dart';
part 'czech.dart';
part 'finnish.dart';
part 'japanese.dart';
part 'turkish.dart';
part 'ukrainian.dart';
part 'vietnamese.dart';

/// Interface to print time units for different locale
abstract class DurationLocale {
const DurationLocale();

String get defaultSpacer => ' ';
String get defaultSpacer => '\u{00A0}';

String get abbreviatedSpacer => '\u{00A0}';

/// Print [amount] years for the corresponding locale. The unit is abbreviated
/// if [abbreviated] is set to true.
Expand Down Expand Up @@ -97,25 +100,72 @@ abstract class DurationLocale {
}
}

/// [DurationLocale] for Arabic language
const ArabicDurationLocale arabicLocale = ArabicDurationLocale();

/// [DurationLocale] for Chinese (Simplified) language
const ChineseSimplifiedDurationLocale chineseSimplifiedDurationLocale =
ChineseSimplifiedDurationLocale();

ChineseSimplifiedDurationLocale get chineseDurationLocale =>
chineseSimplifiedDurationLocale;

/// [DurationLocale] for Chinese (Traditional) language
const ChineseTraditionalDurationLocale chineseTraditionalLocale =
ChineseTraditionalDurationLocale();

/// [DurationLocale] for Czech language
const CzechDurationLocale czechLocale = CzechDurationLocale();

/// [DurationLocale] for Dutch language
const DutchDurationLocale dutchLocale = DutchDurationLocale();

/// [DurationLocale] for English language
const EnglishDurationLocale englishLocale = EnglishDurationLocale();

/// [DurationLocale] for US English language
const EnglishUSDurationLocale englishUSLocale = EnglishUSDurationLocale();

/// [DurationLocale] for Finnish language
const FinnishDurationLocale finnishLocale = FinnishDurationLocale();

/// [DurationLocale] for French language
const FrenchDurationLocale frenchLocale = FrenchDurationLocale();

/// [DurationLocale] for German language
const GermanDurationLocale germanLocale = GermanDurationLocale();

/// [DurationLocale] for Greek language
const GreekDurationLocale greekLocale = GreekDurationLocale();

/// [DurationLocale] for Hebrew language
const HebrewDurationLocale hebrewLocale = HebrewDurationLocale();

/// [DurationLocale] for Indonesian language
const IndonesianDurationLocale indonesianLocale = IndonesianDurationLocale();

/// [DurationLocale] for Italian language
const ItalianDurationLocale italianLocale = ItalianDurationLocale();

/// [DurationLocale] for Japanese language
const JapaneseDurationLocale japaneseLocale = JapaneseDurationLocale();

/// [DurationLocale] for Korean language
const KoreanDurationLocale koreanLocale = KoreanDurationLocale();

/// [DurationLocale] for Norwegian language
const NorwegianDurationLanguage norwegianLocale = NorwegianDurationLanguage();

/// [DurationLocale] for Polish language
const PolishDurationLocale polishLocale = PolishDurationLocale();

/// [DurationLocale] for Portuguese language
const PortugueseBRDurationLanguage portugueseBrLocale =
PortugueseBRDurationLanguage();

/// [DurationLocale] for Romanian language
const RomanianDurationLocale romanianLocale = RomanianDurationLocale();

/// [DurationLocale] for Russian language
const RussianDurationLanguage russianLocale = RussianDurationLanguage();

Expand All @@ -125,55 +175,11 @@ const SpanishDurationLanguage spanishLocale = SpanishDurationLanguage();
/// [DurationLocale] for Swedish language
const SwedishDurationLanguage swedishLocale = SwedishDurationLanguage();

/// [DurationLocale] for Norwegian language
const NorwegianDurationLanguage norwegianLocale = NorwegianDurationLanguage();

/// [DurationLocale] for Turkish language
const TurkishDurationLocale turkishLocale = TurkishDurationLocale();

/// [DurationLocale] for Italian language
const ItalianDurationLocale italianLocale = ItalianDurationLocale();

/// [DurationLocale] for German language
const GermanDurationLocale germanLocale = GermanDurationLocale();

/// [DurationLocale] for Dutch language
const DutchDurationLocale dutchLocale = DutchDurationLocale();

/// [DurationLocale] for Chinese (Simplified) language
const ChineseSimplifiedDurationLocale chineseSimplifiedDurationLocale =
ChineseSimplifiedDurationLocale();

ChineseSimplifiedDurationLocale get chineseDurationLocale =>
chineseSimplifiedDurationLocale;

/// [DurationLocale] for Chinese (Traditional) language
const ChineseTraditionalDurationLocale chineseTraditionalLocale =
ChineseTraditionalDurationLocale();

/// [DurationLocale] for Thai language
const ThaiDurationLocale thaiLocale = ThaiDurationLocale();

/// [DurationLocale] for Indonesian language
const IndonesianDurationLocale indonesianLocale = IndonesianDurationLocale();

/// [DurationLocale] for Korean language
const KoreanDurationLocale koreanLocale = KoreanDurationLocale();

/// [DurationLocale] for Romanian language
const RomanianDurationLocale romanianLocale = RomanianDurationLocale();

/// [DurationLocale] for Arabic language
const ArabicDurationLocale arabicLocale = ArabicDurationLocale();

/// [DurationLocale] for Czech language
const CzechDurationLocale czechLocale = CzechDurationLocale();

/// [DurationLocale] for Finnish language
const FinnishDurationLocale finnishLocale = FinnishDurationLocale();

/// [DurationLocale] for Japanese language
const JapaneseDurationLocale japaneseLocale = JapaneseDurationLocale();
/// [DurationLocale] for Turkish language
const TurkishDurationLocale turkishLocale = TurkishDurationLocale();

///[DurationLocale] for Ukrainian language
const UkrainianDurationLocale ukrainianLocale = UkrainianDurationLocale();
Expand All @@ -182,30 +188,31 @@ const UkrainianDurationLocale ukrainianLocale = UkrainianDurationLocale();
const VietnameseDurationLocale vietnameseLocale = VietnameseDurationLocale();

const _locales = <String, DurationLocale>{
'ar': arabicLocale,
'cs': czechLocale,
'de': germanLocale,
'el': greekLocale,
'en': englishLocale,
'en_US': englishUSLocale,
'es': spanishLocale,
'fi': finnishLocale,
'fr': frenchLocale,
'he': hebrewLocale,
'id': indonesianLocale,
'it': italianLocale,
'ja': japaneseLocale,
'ko': koreanLocale,
'nb': norwegianLocale,
'nl': dutchLocale,
'pl': polishLocale,
'pt': portugueseBrLocale,
'ro': romanianLocale,
'ru': russianLocale,
'es': spanishLocale,
'sv': swedishLocale,
'nb': norwegianLocale,
'tr': turkishLocale,
'it': italianLocale,
'de': germanLocale,
'nl': dutchLocale,
'zh': chineseSimplifiedDurationLocale,
'zh_Hant': chineseTraditionalLocale,
'th': thaiLocale,
'id': indonesianLocale,
'ko': koreanLocale,
'ro': romanianLocale,
'ar': arabicLocale,
'cs': czechLocale,
'fi': finnishLocale,
'ja': japaneseLocale,
'tr': turkishLocale,
'uk': ukrainianLocale,
'vi': vietnameseLocale,
'zh': chineseSimplifiedDurationLocale,
'zh_Hant': chineseTraditionalLocale,
};
4 changes: 2 additions & 2 deletions lib/src/milliseconds.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import 'locale/locale.dart';
String prettyMilliseconds(Duration duration,
{bool terse = false,
DurationLocale language = const EnglishDurationLocale(),
String separator = ' ',
String separator = '\u{00A0}',
bool abbreviated = false}) {
if (duration.inMilliseconds > 0) {
final int us = duration.inMicroseconds % 1000;
Expand Down Expand Up @@ -47,7 +47,7 @@ String prettyMilliseconds(Duration duration,
String prettySeconds(Duration duration,
{bool terse = false,
DurationLocale language = const EnglishDurationLocale(),
String separator = ' ',
String separator = '\u{00A0}',
String delimiter = ' ',
bool abbreviated = false}) {
if (duration.inSeconds > 0) {
Expand Down
Loading