Enable autotranslating of times 'after' a certain date

This commit is contained in:
2020-10-04 18:21:33 +02:00
committed by Stefan Rohde-Enslin
parent 5e90e5d3f2
commit c9a1a74bce
3 changed files with 119 additions and 2 deletions

View File

@ -625,6 +625,41 @@ final class NodaTimeAutotranslater {
}
/**
* Translated years or timespans below 1000 CE.
*
* @param array<integer|string> $timeInfo Time information.
*
* @return array<string>
*/
public static function translateYearsAfterStart(array $timeInfo):array {
if (empty(trim($timeInfo['zeit_zaehlzeit_monat'], " ,.;0"))) {
$timeInfo['zeit_beginn'] = strval(intval($timeInfo['zeit_beginn']) - 1);
}
else if (empty(trim($timeInfo['zeit_zaehlzeit_tag'], " ,.;0"))) {
$timeInfo['zeit_zaehlzeit_monat'] = strval(intval($timeInfo['zeit_zaehlzeit_monat']) - 1);
}
else {
$timeInfo['zeit_zaehlzeit_tag'] = strval(intval($timeInfo['zeit_zaehlzeit_tag']) - 1);
}
# else throw new Exception("Unhandled split case. Counting time is: " . var_export($timeInfo, true));
$innerTimeInfo = $timeInfo;
$innerTimeInfo['zeit_ende'] = $timeInfo['zeit_beginn'];
$output = [];
foreach (self::LANGS_AFTER_START_FORMAT_YEAR as $tLang => $format) {
$dateAlone = self::getTranslations($innerTimeInfo)[$tLang];
$timeName = sprintf($format, $dateAlone);
$output[$tLang] = $timeName;
}
return $output;
}
/**
* Translated years or timespans below 1000 CE.
*
@ -636,6 +671,10 @@ final class NodaTimeAutotranslater {
$start = intval($timeInfo['zeit_beginn']);
if (substr($timeInfo['zeit_name'], 0, 5) === "Nach ") {
return self::translateYearsAfterStart($timeInfo);
}
$innerTimeInfo = $timeInfo;
$innerTimeInfo['zeit_ende'] = $timeInfo['zeit_beginn'];
$output = [];

View File

@ -578,10 +578,10 @@ final class NodaTimeSplitter {
$month = "0" . substr($datum, 0, 1);
return [$start, $start, $month, "00", "+", ""];
}
if (preg_match("/^[0-9]{4}\.[0-9]{2}$/", $datum)) { // Hungarian Y-m
if (preg_match("/^[0-9]{4}\.[0-9]{2}(\.|)$/", $datum)) { // Hungarian Y-m
$start = substr($datum, 0, 4);
$month = substr($datum, 5, 2);
return [$start, $start, $month, "00", "+", ""];
if (intval($month) < 13) return [$start, $start, $month, "00", "+", ""];
}
if (preg_match("/^[0-9]{4}\-[0-9]{2}$/", $datum)) { // Time spans: 1945-46
$start = substr($datum, 0, 4);