RaketenLocalisator: PHP: strftime ist DEPRECATED, Lösungsversuch?

Beitrag lesen

Ich habe gerade festgestellt, dass strftime() in PHP 8.1 als DEPRECATED angemeckert wird und in PHP 9.0 entfallen soll.

1. Frage:

Hat/Kennt jemand eine bessere (PHP-Native) Lösung als ich für das Problem?

Mein Ansatz:

Da ich strftime nutze um ein Datum mit Angabe des Wochentages bzw. Monats (also %a (Wochentagskürzel), %A (Wochentagsname), %b (Monatskürzel), %B (Monatsname) ) in der eingestellten Sprache des Benutzers zu liefern habe ich mich mal rangesetzt und einen "importer" geschrieben, der bei installiertem Debian-Paket locales-all die Wochentagsnamen und Monatsnamen für alle möglichen Sprachen und Codierungen ausliest. Das Ergebnis sieht, auf deutsch und russisch beschränkt, sodann in JSON ausgegeben, wie folgt aus:

     "de_DE.utf8": {
        "Monday": "Montag",
        "Tuesday": "Dienstag",
        "Wednesday": "Mittwoch",
        "Thursday": "Donnerstag",
        "Friday": "Freitag",
        "Saturday": "Samstag",
        "Sunday": "Sonntag",
        "Mon": "Mo",
        "Tue": "Di",
        "Wed": "Mi",
        "Thu": "Do",
        "Fri": "Fr",
        "Sat": "Sa",
        "Sun": "So",
        "January": "Januar",
        "February": "Februar",
        "March": "M\u00e4rz",
        "April": "April",
        "May": "Mai",
        "June": "Juni",
        "July": "Juli",
        "August": "August",
        "September": "September",
        "October": "Oktober",
        "November": "November",
        "December": "Dezember",
        "Jan": "Jan",
        "Feb": "Feb",
        "Mar": "M\u00e4r",
        "Apr": "Apr",
        "Jun": "Jun",
        "Jul": "Jul",
        "Aug": "Aug",
        "Sep": "Sep",
        "Oct": "Okt",
        "Nov": "Nov",
        "Dec": "Dez"
    },
    "ce_RU": {
        "Monday": "\u041e\u0440\u0448\u043e\u0442\u0430\u043d \u0434\u0435",
        "Tuesday": "\u0428\u0438\u043d\u0430\u0440\u0438\u043d \u0434\u0435",
        "Wednesday": "\u041a\u0445\u0430\u0430\u0440\u0438\u043d \u0434\u0435",
        "Thursday": "\u0415\u0430\u0440\u0438\u043d \u0434\u0435",
        "Friday": "\u041f\u04c0\u0435\u0440\u0430\u0441\u043a\u0430\u043d \u0434\u0435",
        "Saturday": "\u0428\u043e\u0442 \u0434\u0435",
        "Sunday": "\u041a\u04c0\u0438\u0440\u0430\u043d\u0430\u043d \u0434\u0435",
        "Mon": "\u041e\u0440",
        "Tue": "\u0428\u0438",
        "Wed": "\u041a\u0445",
        "Thu": "\u0415\u0430",
        "Fri": "\u041f\u04c0",
        "Sat": "\u0428\u043e",
        "Sun": "\u041a\u04c0",
        "January": "\u042f\u043d\u0432\u0430\u0440\u044c",
        "February": "\u0424\u0435\u0432\u0440\u0430\u043b\u044c",
        "March": "\u041c\u0430\u0440\u0442",
        "April": "\u0410\u043f\u0440\u0435\u043b\u044c",
        "May": "\u043c\u0430\u0439",
        "June": "\u0418\u044e\u043d\u044c",
        "July": "\u0418\u044e\u043b\u044c",
        "August": "\u0410\u0432\u0433\u0443\u0441\u0442",
        "September": "\u0421\u0435\u043d\u0442\u044f\u0431\u0440\u044c",
        "October": "\u041e\u043a\u0442\u044f\u0431\u0440\u044c",
        "November": "\u041d\u043e\u044f\u0431\u0440\u044c",
        "December": "\u0414\u0435\u043a\u0430\u0431\u0440\u044c",
        "Jan": "\u044f\u043d\u0432",
        "Feb": "\u0444\u0435\u0432",
        "Mar": "\u043c\u0430\u0440",
        "Apr": "\u0430\u043f\u0440",
        "Jun": "\u0438\u044e\u043d",
        "Jul": "\u0438\u044e\u043b",
        "Aug": "\u0430\u0432\u0433",
        "Sep": "\u0441\u0435\u043d",
        "Oct": "\u043e\u043a\u0442",
        "Nov": "\u043d\u043e\u044f",
        "Dec": "\u0434\u0435\u043a"
    },

Nach dem Import könnte man mit echo $arr['de_DE.utf-8']['Monday'] also den 'Montag' erhalten. Das Zeug soll, so die Idee, in einem Objekt gekapselt werden.

Die Dateigröße beträgt mit serialice() ein knappes halbes Megabyte, mit json_encode($data, JSON_INVALID_UTF8_IGNORE | JSON_PRETTY_PRINT ) etwas mehr als ein halbes Megabyte. Das erscheint mir als „zu viel Holz um ein Täubchen zu braten“. (Die Idee, eine Datenbank zu nutzen fällt in eben die gleiche Kategorie, da z.B. sqlite3-libs nicht überall installiert sind.)

Die Datenmenge könnte man beschänken, in dem man die '@euro'-Varianten weglässt. (Natürlich auch das Pretty-Print) Die andere Idee wäre, ein Objekt zu schreiben und die Sprachen/Kodierungen in jeweils einer Datei abzulegen (statt alle in einer) und nur bei Bedarf zu importieren.

Fragen:

2.) Wie würdet ihr das exportieren?

3.) Welche Optionen für json_encode() muss ich doch gleich setzen, damit ich das Zeug auch in JS, PHP und Python3 einwandfrei einlesen kann?