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