Remove use of deprecated strfttime, use enums instead of class constants
for many parts of NodaTimeAutotranslater
This commit is contained in:
494
src/enums/NodaTimeAutotranslaterLocales.php
Normal file
494
src/enums/NodaTimeAutotranslaterLocales.php
Normal file
@ -0,0 +1,494 @@
|
||||
<?PHP
|
||||
/**
|
||||
* Lists locales for autotranslations and provides suitable formats.
|
||||
*
|
||||
* @author Joshua Ramon Enslin <joshua@museum-digital.de>
|
||||
*/
|
||||
declare(strict_types = 1);
|
||||
|
||||
enum NodaTimeAutotranslaterLocales {
|
||||
case ar;
|
||||
case de;
|
||||
case en;
|
||||
case es;
|
||||
case fa;
|
||||
case fr;
|
||||
case hu;
|
||||
case id;
|
||||
case it;
|
||||
case ja;
|
||||
case ka;
|
||||
case ko;
|
||||
case pl;
|
||||
case pt;
|
||||
case ro;
|
||||
case ru;
|
||||
case ta;
|
||||
case tl;
|
||||
case tr;
|
||||
case zh;
|
||||
|
||||
/**
|
||||
* Returns an instance of this from a string.
|
||||
*
|
||||
* @param string $lang Language code to create enum from.
|
||||
*
|
||||
* @return static
|
||||
*/
|
||||
public static function fromString(string $lang):static {
|
||||
|
||||
return match($lang) {
|
||||
'ar' => static::ar,
|
||||
'de' => static::de,
|
||||
'en' => static::en,
|
||||
'es' => static::es,
|
||||
'fa' => static::fa,
|
||||
'fr' => static::fr,
|
||||
'hu' => static::hu,
|
||||
'id' => static::id,
|
||||
'it' => static::it,
|
||||
'ka' => static::ka,
|
||||
'ko' => static::ko,
|
||||
'pl' => static::pl,
|
||||
'pt' => static::pt,
|
||||
'ro' => static::ro,
|
||||
'ru' => static::ru,
|
||||
'ta' => static::ta,
|
||||
'tl' => static::tl,
|
||||
'tr' => static::tr,
|
||||
'ja' => static::ja,
|
||||
'zh' => static::zh,
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the locale as used by strftime.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function localeStrftime():string {
|
||||
|
||||
return match($this) {
|
||||
self::ar => 'ar_SY.utf8',
|
||||
self::de => 'de_DE.utf8',
|
||||
self::en => 'en_US.utf8',
|
||||
self::es => 'es_ES.utf8',
|
||||
self::fa => 'fa_IR.UTF-8',
|
||||
self::fr => 'fr_FR.utf8',
|
||||
self::hu => 'hu_HU.utf8',
|
||||
self::id => 'id_ID.utf8',
|
||||
self::it => 'it_IT.utf8',
|
||||
self::ka => 'ka_GE.UTF-8',
|
||||
self::ko => 'ko_KR.UTF-8',
|
||||
self::pl => 'pl_PL.utf8',
|
||||
self::pt => 'pt_BR.utf8',
|
||||
self::ro => 'ro_RO.UTF-8',
|
||||
self::ru => 'ru_RU.UTF-8',
|
||||
self::ta => 'ta_IN.UTF-8',
|
||||
self::tl => 'tl_PH.utf8',
|
||||
self::tr => 'tr_TR.utf8',
|
||||
|
||||
// Languages that don't really need a specific locale
|
||||
self::ja => 'en_US.utf8',
|
||||
self::zh => 'en_US.utf8',
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the locale as used by IntlDateFormatter.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function localeIntlDateFormatter():string {
|
||||
|
||||
return match($this) {
|
||||
self::ar => 'ar-SY',
|
||||
self::de => 'de-DE',
|
||||
self::en => 'en-US',
|
||||
self::es => 'es-ES',
|
||||
self::fa => 'fa-IR',
|
||||
self::fr => 'fr-FR',
|
||||
self::hu => 'hu-HU',
|
||||
self::id => 'id-ID',
|
||||
self::it => 'it-IT',
|
||||
self::ka => 'ka-GE',
|
||||
self::ko => 'ko-KR',
|
||||
self::pl => 'pl-PL',
|
||||
self::pt => 'pt-BR',
|
||||
self::ro => 'ro-RO',
|
||||
self::ru => 'ru-RU',
|
||||
self::ta => 'ta-IN',
|
||||
self::tl => 'tl-PH',
|
||||
self::tr => 'tr-TR',
|
||||
|
||||
// Languages that don't really need a specific locale
|
||||
self::ja => 'en-US',
|
||||
self::zh => 'en-US',
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the common era format for a given language.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function eraFormatCeForSprintf():string {
|
||||
|
||||
return match($this) {
|
||||
self::ar => '%s',
|
||||
self::de => '%s n. Chr.',
|
||||
self::en => '%s CE',
|
||||
self::es => '%s d.C.',
|
||||
self::fa => '%s',
|
||||
self::fr => '%s ap. J.-C.',
|
||||
self::hu => '%s',
|
||||
self::id => '%s M.',
|
||||
self::it => '%s d.C.',
|
||||
self::ka => '%s წ',
|
||||
self::ko => '%s',
|
||||
self::pl => '%s n.e.',
|
||||
self::pt => '%s dC',
|
||||
self::ro => '%s',
|
||||
self::ru => '%s',
|
||||
self::ta => '%s பொ.ச.',
|
||||
self::tl => '%s AD',
|
||||
self::tr => '%s',
|
||||
self::ja => '西暦%s',
|
||||
self::zh => '%s',
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the before common era format for a given language.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function eraFormatBceForSprintf():string {
|
||||
|
||||
return match($this) {
|
||||
self::ar => '-%s',
|
||||
self::de => '%s v. Chr.',
|
||||
self::en => '%s BC',
|
||||
self::es => '%s a.C.',
|
||||
self::fa => '-%s',
|
||||
self::fr => '%s av. J.-C.',
|
||||
self::hu => 'Kr. e. %s',
|
||||
self::id => '%s SM',
|
||||
self::it => '%s a.C.',
|
||||
self::ka => 'ძვ. წ. %s წ',
|
||||
self::ko => '기원전%s',
|
||||
self::pl => '%s pne',
|
||||
self::pt => '%s AC',
|
||||
self::ro => '%s î.Hr.',
|
||||
self::ru => '%s г. до н.э.',
|
||||
self::ta => 'கிமு %s',
|
||||
self::tl => '%s BC',
|
||||
self::tr => 'MÖ %s',
|
||||
|
||||
// Languges that don't really need a specific locale
|
||||
self::ja => '紀元前%s',
|
||||
self::zh => '公元前%s',
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the appropriate format for a single year in the current language.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function formatSingleYearForSprintf():string {
|
||||
|
||||
return match($this) {
|
||||
self::ar => '%s',
|
||||
self::de => '%s',
|
||||
self::en => '%s',
|
||||
self::es => '%s',
|
||||
self::fa => '%s',
|
||||
self::fr => '%s',
|
||||
self::hu => '%s',
|
||||
self::id => '%s',
|
||||
self::it => '%s',
|
||||
self::ka => '%s',
|
||||
self::ko => '%s년',
|
||||
self::pl => '%s',
|
||||
self::pt => '%s',
|
||||
self::ro => '%s',
|
||||
self::ru => '%s',
|
||||
self::ta => '%s',
|
||||
self::tl => '%s',
|
||||
self::tr => '%s',
|
||||
self::ja => '%s年',
|
||||
self::zh => '%s年',
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the appropriate format for a timespan of several years in the current language.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function formatYearspanForSprintf():string {
|
||||
|
||||
return match($this) {
|
||||
self::ar => '%s-%s',
|
||||
self::de => '%s-%s',
|
||||
self::en => '%s-%s',
|
||||
self::es => '%s-%s',
|
||||
self::fa => '%s-%s',
|
||||
self::fr => '%s-%s',
|
||||
self::hu => '%s-%s',
|
||||
self::id => '%s-%s',
|
||||
self::it => '%s-%s',
|
||||
self::ka => '%s-%s',
|
||||
self::ko => '%s년-%s년',
|
||||
self::pl => '%s-%s',
|
||||
self::pt => '%s-%s',
|
||||
self::ro => '%s-%s',
|
||||
self::ru => '%s-%s',
|
||||
self::ta => '%s-%s',
|
||||
self::tl => '%s-%s',
|
||||
self::tr => '%s-%s',
|
||||
self::ja => '%s年から%s年',
|
||||
self::zh => '%s年至%s年',
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the appropriate format for formatting a full date (Y-m-d) in a given language
|
||||
* using strftime.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function formatFullDateForStrfttime():string {
|
||||
|
||||
return match($this) {
|
||||
self::ar => '%d/%m/%Y',
|
||||
# self::be => '%d.%B.%Y',
|
||||
# self::bg => '%Y-%B-%d',
|
||||
# self::ca => '%d/%m/%Y',
|
||||
# self::cs => '%d.%B.%Y',
|
||||
# self::da => '%d-%m-%Y',
|
||||
self::de => '%d.%m.%Y',
|
||||
# self::el => '%d/%B/%Y',
|
||||
self::en => '%B %d, %Y',
|
||||
self::es => '%d/%m/%Y',
|
||||
# self::et => '%d.%m.%Y',
|
||||
self::fa => '%d/%m/%Y',
|
||||
# self::fi => '%d.%B.%Y',
|
||||
self::fr => '%d/%m/%Y',
|
||||
# self::ga => '%d/%m/%Y',
|
||||
# self::hr => '%d.%m.%Y',
|
||||
self::hu => '%Y. %B %d.',
|
||||
self::id => '%d %B %Y',
|
||||
# self::in => '%d/%m/%Y',
|
||||
# self::is => '%d.%B.%Y',
|
||||
self::it => '%d/%m/%Y',
|
||||
# self::iw => '%d/%m/%Y',
|
||||
self::ja => '%Y年%m月%d日',
|
||||
self::ka => '%d.%m.%Y',
|
||||
self::ko => '%Y년 %m월 %d일',
|
||||
# self::lt => '%Y.%B.%d',
|
||||
# self::lv => '%Y.%d.%B',
|
||||
# self::mk => '%d.%B.%Y',
|
||||
# self::ms => '%d/%m/%Y',
|
||||
# self::mt => '%d/%m/%Y',
|
||||
# self::nl => '%d-%B-%Y',
|
||||
# self::no => '%d.%m.%Y',
|
||||
self::pl => '%d.%m.%Y',
|
||||
self::pt => '%d/%m/%Y',
|
||||
self::ro => '%d.%m.%Y',
|
||||
self::ru => '%d.%m.%Y',
|
||||
# self::sk => '%d.%B.%Y',
|
||||
# self::sl => '%d.%B.%Y',
|
||||
# self::sq => '%Y-%m-%d',
|
||||
# self::sr => '%d.%B.%Y.',
|
||||
# self::sv => '%Y-%m-%d',
|
||||
self::ta => '%d-%m-%Y',
|
||||
self::tl => '%Y-%m-%d',
|
||||
self::tr => '%d.%m.%Y',
|
||||
# self::uk => '%d.%m.%Y',
|
||||
# self::vi => '%d/%m/%Y',
|
||||
self::zh => '%Y年%m月%d日',
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the appropriate format for formatting a full date (Y-m-d) in a given language
|
||||
* using IntlDateFormatter.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function formatFullDateForIntlDateFormatter():string {
|
||||
|
||||
return match($this) {
|
||||
self::ar => 'dd/MM/Y',
|
||||
# self::be => '%d.%B.%Y',
|
||||
# self::bg => '%Y-%B-%d',
|
||||
# self::ca => '%d/%m/%Y',
|
||||
# self::cs => '%d.%B.%Y',
|
||||
# self::da => '%d-%m-%Y',
|
||||
self::de => 'dd.MM.Y',
|
||||
# self::el => '%d/%B/%Y',
|
||||
self::en => 'MMMM d, Y',
|
||||
self::es => 'dd/MM/Y',
|
||||
# self::et => '%d.%m.%Y',
|
||||
self::fa => 'dd/MM/Y',
|
||||
# self::fi => '%d.%B.%Y',
|
||||
self::fr => 'dd/MM/Y',
|
||||
# self::ga => '%d/%m/%Y',
|
||||
# self::hr => '%d.%m.%Y',
|
||||
self::hu => 'Y. MMMM dd.',
|
||||
self::id => 'dd MMMM dd',
|
||||
# self::in => '%d/%m/%Y',
|
||||
# self::is => '%d.%B.%Y',
|
||||
self::it => 'dd/MM/Y',
|
||||
# self::iw => '%d/%m/%Y',
|
||||
self::ja => 'Y年MM月dd日',
|
||||
self::ka => 'dd.MM.Y',
|
||||
self::ko => 'Y년 MM월 dd일',
|
||||
# self::lt => '%Y.%B.%d',
|
||||
# self::lv => '%Y.%d.%B',
|
||||
# self::mk => '%d.%B.%Y',
|
||||
# self::ms => '%d/%m/%Y',
|
||||
# self::mt => '%d/%m/%Y',
|
||||
# self::nl => '%d-%B-%Y',
|
||||
# self::no => '%d.%m.%Y',
|
||||
self::pl => 'dd.MM.Y',
|
||||
self::pt => 'dd.MM.Y',
|
||||
self::ro => 'dd.MM.Y',
|
||||
self::ru => 'dd.MM.Y',
|
||||
# self::sk => '%d.%B.%Y',
|
||||
# self::sl => '%d.%B.%Y',
|
||||
# self::sq => '%Y-%m-%d',
|
||||
# self::sr => '%d.%B.%Y.',
|
||||
# self::sv => '%Y-%m-%d',
|
||||
self::ta => 'dd-MM-Y',
|
||||
self::tl => 'Y-MM-dd',
|
||||
self::tr => 'dd.MM.Y',
|
||||
# self::uk => '%d.%m.%Y',
|
||||
# self::vi => '%d/%m/%Y',
|
||||
self::zh => 'Y年MM月dd日',
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the appropriate format for formatting a year and month (Y-m-d) in a given language
|
||||
* using strftime.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function formatYearMonthForStrfttime():string {
|
||||
|
||||
return match($this) {
|
||||
self::ar => '%m/%Y',
|
||||
# self::be => '%B %Y',
|
||||
# self::bg => '%Y-%B',
|
||||
# self::ca => '%m/%Y',
|
||||
# self::cs => '%B.%Y',
|
||||
# self::da => '%m-%Y',
|
||||
self::de => '%B %Y',
|
||||
# self::el => '%B %Y',
|
||||
self::en => '%B %Y',
|
||||
self::es => '%B %Y',
|
||||
self::fa => '%B %Y',
|
||||
self::fr => '%B %Y',
|
||||
self::hu => '%Y. %B',
|
||||
# self::in => '%m/%Y',
|
||||
# self::is => '%B %Y',
|
||||
self::id => '%B %Y',
|
||||
self::it => '%B %Y',
|
||||
# self::iw => '%m %Y',
|
||||
self::ja => '%Y年%m月',
|
||||
self::ka => '%B %Y',
|
||||
self::ko => '%Y년 %m월',
|
||||
# self::lt => '%Y. %B.',
|
||||
# self::lv => '%Y. %B',
|
||||
# self::mk => '%B %Y',
|
||||
# self::ms => '%m %Y',
|
||||
# self::mt => '%m %Y',
|
||||
# self::nl => '%B %Y',
|
||||
# self::no => '%B %Y',
|
||||
self::pl => '%B %Y',
|
||||
self::pt => '%B %Y',
|
||||
self::ro => '%B %Y',
|
||||
self::ru => '%B %Y',
|
||||
# self::sk => '%B %Y',
|
||||
# self::sl => '%B %Y',
|
||||
# self::sq => '%B %Y',
|
||||
# self::sr => '%B %Y',
|
||||
# self::sv => '%Y-%m',
|
||||
self::ta => '%B %Y',
|
||||
self::tr => '%B %Y',
|
||||
self::tl => '%B %Y',
|
||||
# self::uk => '%m %Y',
|
||||
# self::vi => '%m %Y',
|
||||
self::zh => '%Y年%m月',
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the appropriate format for formatting a year and month (Y-m-d) in a given language
|
||||
* using IntlDateFormatter.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function formatYearMonthForIntlDateFormatter():string {
|
||||
|
||||
return match($this) {
|
||||
self::ar => 'MM/Y',
|
||||
# self::be => 'MMMM Y',
|
||||
# self::bg => 'Y-MMMM',
|
||||
# self::ca => 'MM/Y',
|
||||
# self::cs => 'MMMM.Y',
|
||||
# self::da => 'MM-Y',
|
||||
self::de => 'MMMM Y',
|
||||
# self::el => 'MMMM Y',
|
||||
self::en => 'MMMM Y',
|
||||
self::es => 'MMMM Y',
|
||||
self::fa => 'MMMM Y',
|
||||
self::fr => 'MMMM Y',
|
||||
self::hu => 'Y. MMMM',
|
||||
# self::in => 'MM/Y',
|
||||
# self::is => 'MMMM Y',
|
||||
self::id => 'MMMM Y',
|
||||
self::it => 'MMMM Y',
|
||||
# self::iw => 'MM Y',
|
||||
self::ja => 'Y年MM月',
|
||||
self::ka => 'MMMM Y',
|
||||
self::ko => 'Y년 MM월',
|
||||
# self::lt => 'Y. MMMM.',
|
||||
# self::lv => 'Y. MMMM',
|
||||
# self::mk => 'MMMM Y',
|
||||
# self::ms => 'MM Y',
|
||||
# self::mt => 'MM Y',
|
||||
# self::nl => 'MMMM Y',
|
||||
# self::no => 'MMMM Y',
|
||||
self::pl => 'MMMM Y',
|
||||
self::pt => 'MMMM Y',
|
||||
self::ro => 'MMMM Y',
|
||||
self::ru => 'MMMM Y',
|
||||
# self::sk => 'MMMM Y',
|
||||
# self::sl => 'MMMM Y',
|
||||
# self::sq => 'MMMM Y',
|
||||
# self::sr => 'MMMM Y',
|
||||
# self::sv => 'Y-MM',
|
||||
self::ta => 'MMMM Y',
|
||||
self::tr => 'MMMM Y',
|
||||
self::tl => 'MMMM Y',
|
||||
# self::uk => 'MM Y',
|
||||
# self::vi => 'MM Y',
|
||||
self::zh => 'Y年MM月',
|
||||
};
|
||||
|
||||
}
|
||||
}
|
20
src/enums/NodaTimeAutotranslaterStatus.php
Normal file
20
src/enums/NodaTimeAutotranslaterStatus.php
Normal file
@ -0,0 +1,20 @@
|
||||
<?PHP
|
||||
/**
|
||||
* Lists cases for whether autotranslation is possible, and in which way.
|
||||
*
|
||||
* @author Joshua Ramon Enslin <joshua@museum-digital.de>
|
||||
*/
|
||||
declare(strict_types = 1);
|
||||
|
||||
enum NodaTimeAutotranslaterStatus {
|
||||
case NOT;
|
||||
case AS_MONTH_DAY;
|
||||
case AS_YEAR_WITH_SUFFIX;
|
||||
case SINCE_START;
|
||||
case UNTIL_END;
|
||||
case ONLY_YEAR;
|
||||
case CENTURY;
|
||||
case DECADE;
|
||||
case TIMESPAN_YEARS;
|
||||
case TIMESPAN_DATES;
|
||||
}
|
13
src/enums/NodaTimeAutotranslaterSuffixMode.php
Normal file
13
src/enums/NodaTimeAutotranslaterSuffixMode.php
Normal file
@ -0,0 +1,13 @@
|
||||
<?PHP
|
||||
/**
|
||||
* Lists cases for whether autotranslation is possible, and in which way.
|
||||
*
|
||||
* @author Joshua Ramon Enslin <joshua@museum-digital.de>
|
||||
*/
|
||||
declare(strict_types = 1);
|
||||
|
||||
enum NodaTimeAutotranslaterSuffixMode {
|
||||
case BCE;
|
||||
case ANY;
|
||||
case CE;
|
||||
}
|
12
src/enums/NodaTimeAutotranslaterUseCase.php
Normal file
12
src/enums/NodaTimeAutotranslaterUseCase.php
Normal file
@ -0,0 +1,12 @@
|
||||
<?PHP
|
||||
/**
|
||||
* Lists use cases for autotranslations.
|
||||
*
|
||||
* @author Joshua Ramon Enslin <joshua@museum-digital.de>
|
||||
*/
|
||||
declare(strict_types = 1);
|
||||
|
||||
enum NodaTimeAutotranslaterUseCase {
|
||||
case DAY;
|
||||
case MONTH;
|
||||
}
|
Reference in New Issue
Block a user