Skip to content
Draft
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
28 changes: 18 additions & 10 deletions lib/src/transformations/approximate_time.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import 'package:humanizer/humanizer.dart';
import 'package:humanizer/src/transformations/approximate_time.i18n.dart';
import 'package:humanizer/src/units_of_measurement/rationals.dart';
import 'package:meta/meta.dart';

Expand Down Expand Up @@ -169,16 +170,18 @@ class ApproximateTimeTransformation extends Transformation<Duration, String> {
}

if (!isRelativeToNow && time == Time.zero) {
return 'zero';
return zero.i18n(locale: locale);
} else if (isRelativeToNow &&
primaryUnit == TimeUnit.second &&
truncatedPrimaryValue == BigInt.zero) {
return 'now';
return now.i18n(locale: locale);
} else if (isRelativeToNow &&
primaryUnit == TimeUnit.day &&
truncatedPrimaryValue == BigInt.one &&
(truncatedSecondaryValue ?? 0) == 0) {
return sign == _Sign.negative ? 'yesterday' : 'tomorrow';
return sign == _Sign.negative
? yesterday.i18n(locale: locale)
: tomorrow.i18n(locale: locale);
} else {
final primaryUnitName =
primaryUnit.getName(locale: locale).toPluralFormForQuantity(
Expand All @@ -190,13 +193,18 @@ class ApproximateTimeTransformation extends Transformation<Duration, String> {
return <String>[
if (secondaryQuantifierText != null) secondaryQuantifierText,
if (isRelativeToNow && truncatedPrimaryValue == BigInt.one)
// TODO: should be generalized and localized??
if (primaryUnit == TimeUnit.hour) 'an' else 'a'
if (primaryUnit == TimeUnit.hour)
an.i18n(locale: locale)
else
a.i18n(locale: locale)
else
truncatedPrimaryValue.toString(),
primaryUnitName,
if (isRelativeToNow)
if (sign == _Sign.negative) 'ago' else 'from now',
if (sign == _Sign.negative)
ago.i18n(locale: locale)
else
fromNow.i18n(locale: locale),
].join(' ');
}
}
Expand Down Expand Up @@ -230,13 +238,13 @@ extension _SecondaryQuantifierExtensions on _SecondaryQuantifier {
case _SecondaryQuantifier.none:
return '';
case _SecondaryQuantifier.justOver:
return 'just over';
return justOver.i18n(locale: locale);
case _SecondaryQuantifier.over:
return 'over';
return over.i18n(locale: locale);
case _SecondaryQuantifier.under:
return 'under';
return under.i18n(locale: locale);
case _SecondaryQuantifier.justUnder:
return 'just under';
return justUnder.i18n(locale: locale);
}
}
}
Expand Down
38 changes: 38 additions & 0 deletions lib/src/transformations/approximate_time.i18n.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import 'package:i18n_extension_core/i18n_extension_core.dart';
import 'package:intl/intl.dart';

final justOver = Object();
final over = Object();
final under = Object();
final justUnder = Object();
final zero = Object();
final now = Object();
final yesterday = Object();
final tomorrow = Object();
final a = Object();
final an = Object();
final ago = Object();
final fromNow = Object();

extension ApproximateTimeLocalization on Object {
static final _t = Translations.byId('en', {
justOver: {'en': 'just over', 'pt': 'um pouco mais'},
over: {'en-US': 'over', 'pt-BR': 'mais de'},
under: {'en-US': 'under', 'pt-BR': 'menos de'},
justUnder: {'en-US': 'just under', 'pt-BR': 'um pouco menos'},
zero: {'en-US': 'zero', 'pt-BR': 'zero'},
now: {'en-US': 'now', 'pt-BR': 'agora'},
yesterday: {'en-US': 'yesterday', 'pt-BR': 'ontem'},
tomorrow: {'en-US': 'tomorrow', 'pt-BR': 'amanhã'},
an: {'en-US': 'an', 'pt-BR': 'uma'},
a: {'en-US': 'a', 'pt-BR': 'um'},
ago: {'en-US': 'ago', 'pt-BR': 'atrás'},
fromNow: {'en-US': 'from now', 'pt-BR': 'a partir de agora'},
});

String i18n({
String? locale,
}) =>
localize(this, _t, locale: locale ?? Intl.getCurrentLocale());
String plural(value) => localizePlural(value, this, _t);
}
69 changes: 35 additions & 34 deletions lib/src/units_of_measurement/area.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import 'package:humanizer/humanizer.dart';
import 'package:humanizer/src/units_of_measurement/area.i18n.dart';
import 'package:humanizer/src/units_of_measurement/area_constants.dart';
import 'package:humanizer/src/units_of_measurement/rationals.dart';
import 'package:meta/meta.dart';
Expand Down Expand Up @@ -330,41 +331,41 @@ extension AreaUnitExtensions on AreaUnit {
switch (this) {
// SI.
case AreaUnit.squareNanometer:
return 'square nanometer';
return squareNanometer.i18n(locale: locale);
case AreaUnit.squareMicrometer:
return 'square micrometer';
return squareMicrometer.i18n(locale: locale);
case AreaUnit.squareMillimeter:
return 'square millimeter';
return squareMillimeter.i18n(locale: locale);
case AreaUnit.squareCentimeter:
return 'square centimeter';
return squareCentimeter.i18n(locale: locale);
case AreaUnit.squareDecimeter:
return 'square decimeter';
return squareDecimeter.i18n(locale: locale);
case AreaUnit.squareMeter:
return 'square meter';
return squareMeter.i18n(locale: locale);
case AreaUnit.squareDecameter:
return 'square decameter';
return squareDecameter.i18n(locale: locale);
case AreaUnit.hectare:
return 'hectare';
return hectare.i18n(locale: locale);
case AreaUnit.squareKilometer:
return 'square kilometer';
return squareKilometer.i18n(locale: locale);
case AreaUnit.squareMegameter:
return 'square megameter';
return squareMegameter.i18n(locale: locale);
case AreaUnit.squareGigameter:
return 'square gigameter';
return squareGigameter.i18n(locale: locale);

// Imperial.
case AreaUnit.squareThou:
return 'square thou';
return squareThou.i18n(locale: locale);
case AreaUnit.squareInch:
return 'square inch';
return squareInch.i18n(locale: locale);
case AreaUnit.squareFoot:
return 'square foot';
return squareFoot.i18n(locale: locale);
case AreaUnit.squareYard:
return 'square yard';
return squareYard.i18n(locale: locale);
case AreaUnit.acre:
return 'acre';
return acre.i18n(locale: locale);
case AreaUnit.squareMile:
return 'square mile';
return squareMile.i18n(locale: locale);
}
}

Expand All @@ -375,41 +376,41 @@ extension AreaUnitExtensions on AreaUnit {
switch (this) {
// SI.
case AreaUnit.squareNanometer:
return 'nm²';
return squareNanometerSymbol.i18n(locale: locale);
case AreaUnit.squareMicrometer:
return 'μm²';
return squareMicrometerSymbol.i18n(locale: locale);
case AreaUnit.squareMillimeter:
return 'mm²';
return squareMillimeterSymbol.i18n(locale: locale);
case AreaUnit.squareCentimeter:
return 'cm²';
return squareCentimeterSymbol.i18n(locale: locale);
case AreaUnit.squareDecimeter:
return 'dm²';
return squareDecimeterSymbol.i18n(locale: locale);
case AreaUnit.squareMeter:
return 'm²';
return squareMeterSymbol.i18n(locale: locale);
case AreaUnit.squareDecameter:
return 'dam²';
return squareDecameterSymbol.i18n(locale: locale);
case AreaUnit.hectare:
return 'ha';
return hectareSymbol.i18n(locale: locale);
case AreaUnit.squareKilometer:
return 'km²';
return squareKilometerSymbol.i18n(locale: locale);
case AreaUnit.squareMegameter:
return 'Mm²';
return squareMegameterSymbol.i18n(locale: locale);
case AreaUnit.squareGigameter:
return 'Gm²';
return squareGigameterSymbol.i18n(locale: locale);

// Imperial.
case AreaUnit.squareThou:
return 'thou²';
return squareThouSymbol.i18n(locale: locale);
case AreaUnit.squareInch:
return 'in²';
return squareInchSymbol.i18n(locale: locale);
case AreaUnit.squareFoot:
return 'ft²';
return squareFootSymbol.i18n(locale: locale);
case AreaUnit.squareYard:
return 'yd²';
return squareYardSymbol.i18n(locale: locale);
case AreaUnit.acre:
return 'ac';
return acreSymbol.i18n(locale: locale);
case AreaUnit.squareMile:
return 'mi²';
return squareMileSymbol.i18n(locale: locale);
}
}

Expand Down
127 changes: 127 additions & 0 deletions lib/src/units_of_measurement/area.i18n.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
import 'package:i18n_extension_core/i18n_extension_core.dart';
import 'package:intl/intl.dart';

// Variáveis para os nomes completos das unidades de área (para getName)
final squareNanometer = Object();
final squareMicrometer = Object();
final squareMillimeter = Object();
final squareCentimeter = Object();
final squareDecimeter = Object();
final squareMeter = Object();
final squareDecameter = Object();
final hectare = Object();
final squareKilometer = Object();
final squareMegameter = Object();
final squareGigameter = Object();

final squareThou = Object();
final squareInch = Object();
final squareFoot = Object();
final squareYard = Object();
final acre = Object();
final squareMile = Object();

// Variáveis para os SÍMBOLOS das unidades de área (para getSymbol)
final squareNanometerSymbol = Object();
final squareMicrometerSymbol = Object();
final squareMillimeterSymbol = Object();
final squareCentimeterSymbol = Object();
final squareDecimeterSymbol = Object();
final squareMeterSymbol = Object();
final squareDecameterSymbol = Object();
final hectareSymbol = Object();
final squareKilometerSymbol = Object();
final squareMegameterSymbol = Object();
final squareGigameterSymbol = Object();

final squareThouSymbol = Object();
final squareInchSymbol = Object();
final squareFootSymbol = Object();
final squareYardSymbol = Object();
final acreSymbol = Object();
final squareMileSymbol = Object();

extension AreaUnitI18n on Object {
static final _t = Translations.byId('en-US', {
// Nomes completos das unidades (para getName) - SI
squareNanometer: {
'en-US': 'square nanometer',
'pt-BR': 'nanômetro quadrado'
},
squareMicrometer: {
'en-US': 'square micrometer',
'pt-BR': 'micrômetro quadrado'
},
squareMillimeter: {
'en-US': 'square millimeter',
'pt-BR': 'milímetro quadrado'
},
squareCentimeter: {
'en-US': 'square centimeter',
'pt-BR': 'centímetro quadrado'
},
squareDecimeter: {
'en-US': 'square decimeter',
'pt-BR': 'decímetro quadrado'
},
squareMeter: {'en-US': 'square meter', 'pt-BR': 'metro quadrado'},
squareDecameter: {
'en-US': 'square decameter',
'pt-BR': 'decâmetro quadrado'
},
hectare: {'en-US': 'hectare', 'pt-BR': 'hectare'},
squareKilometer: {
'en-US': 'square kilometer',
'pt-BR': 'quilômetro quadrado'
},
squareMegameter: {
'en-US': 'square megameter',
'pt-BR': 'megâmetro quadrado'
},
squareGigameter: {
'en-US': 'square gigameter',
'pt-BR': 'gigâmetro quadrado'
},

// Nomes completos das unidades (para getName) - Imperial
squareThou: {
'en-US': 'square thou',
'pt-BR': 'milésimo de polegada quadrado'
},
squareInch: {'en-US': 'square inch', 'pt-BR': 'polegada quadrada'},
squareFoot: {'en-US': 'square foot', 'pt-BR': 'pé quadrado'},
squareYard: {'en-US': 'square yard', 'pt-BR': 'jarda quadrada'},
acre: {'en-US': 'acre', 'pt-BR': 'acre'},
squareMile: {'en-US': 'square mile', 'pt-BR': 'milha quadrada'},

// Símbolos das unidades (para getSymbol) - SI
squareNanometerSymbol: {'en-US': 'nm²', 'pt-BR': 'nm²'},
squareMicrometerSymbol: {'en-US': 'μm²', 'pt-BR': 'μm²'},
squareMillimeterSymbol: {'en-US': 'mm²', 'pt-BR': 'mm²'},
squareCentimeterSymbol: {'en-US': 'cm²', 'pt-BR': 'cm²'},
squareDecimeterSymbol: {'en-US': 'dm²', 'pt-BR': 'dm²'},
squareMeterSymbol: {'en-US': 'm²', 'pt-BR': 'm²'},
squareDecameterSymbol: {'en-US': 'dam²', 'pt-BR': 'dam²'},
hectareSymbol: {'en-US': 'ha', 'pt-BR': 'ha'},
squareKilometerSymbol: {'en-US': 'km²', 'pt-BR': 'km²'},
squareMegameterSymbol: {'en-US': 'Mm²', 'pt-BR': 'Mm²'},
squareGigameterSymbol: {'en-US': 'Gm²', 'pt-BR': 'Gm²'},

// Símbolos das unidades (para getSymbol) - Imperial
squareThouSymbol: {'en-US': 'thou²', 'pt-BR': 'thou²'},
squareInchSymbol: {
'en-US': 'in²',
'pt-BR': 'pol²'
}, // 'pol²' é um símbolo comum para polegada quadrada
squareFootSymbol: {'en-US': 'ft²', 'pt-BR': 'pé²'},
squareYardSymbol: {'en-US': 'yd²', 'pt-BR': 'jd²'},
acreSymbol: {'en-US': 'ac', 'pt-BR': 'ac'},
squareMileSymbol: {'en-US': 'mi²', 'pt-BR': 'mi²'},
});

String i18n({
String? locale,
}) =>
localize(this, _t, locale: locale ?? Intl.getCurrentLocale());
String plural(value) => localizePlural(value, this, _t);
}
Loading