Remove use of deprecated strfttime, use enums instead of class constants

for many parts of NodaTimeAutotranslater
This commit is contained in:
2022-09-10 02:13:35 +02:00
parent df1d2c10eb
commit ea832e2160
7 changed files with 652 additions and 348 deletions

View 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月',
};
}
}

View 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;
}

View 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;
}

View 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;
}