From 2434488e501418d0c75bcfd1f8281eb46ee45bbb Mon Sep 17 00:00:00 2001 From: maike Date: Thu, 3 Sep 2026 23:10:44 +0500 Subject: Basic localization implementation --- data/localization.csv | 7 +++++++ htdocs/auto.p | 6 ++++++ htdocs/index.html | 12 +++++------- lib/classes/l10n.p | 34 ++++++++++++++++++++++++++++++++++ 4 files changed, 52 insertions(+), 7 deletions(-) create mode 100644 data/localization.csv create mode 100644 htdocs/auto.p create mode 100644 lib/classes/l10n.p diff --git a/data/localization.csv b/data/localization.csv new file mode 100644 index 0000000..201b55c --- /dev/null +++ b/data/localization.csv @@ -0,0 +1,7 @@ +Key;Description;en_US;ru;uk;be_BY;zh_TW +index_me_caption;Caption of my photo on index page;My photo at ASC-1, Ostankino Technical Center, Moscow;Моя фотография у АСК-1, телецентр Останкино, Москва;;; +index_article_hello_there;""Hello there!"" title on index page;Hello there!;Приветствую вас!;;; +index_article_hello_there_paragraph_1;First paragraph on ""Hello there"" section on index page;My name is Mikhail, I'm learning at private vocational IT school and interested in technology and collect music on CD. Well, I guess I'm human - as much as that's possible. I love to stick my nose into things I shouldn't.;Меня зовут Михаил, я платно учусь в частном колледже на IT, интересуюсь технологиями и коллекционирую музыку на CD-пластинках. Ну, вроде бы я человек - насколько это возможно. Обожаю лезть, куда не надо.;Мене звати Михайло. Я навчаюся на платній основі в колишньому російському філіалі академії «Шаг» за спеціальністю «ІТ», цікавлюся технологіями та колекціоную музику на CD-дисках. Ну, здається, я людина - наскільки це взагалі можливо. Обожнюю лізти туди, куди не треба.;" +"; +index_article_hello_there_paragraph_2;Second paragraph on ""Hello there"" section on index page;"I am a big fan of Japanese exclusive game series どこでもいっしょ (Dokodemo Issho, Everywhere Together). I have my own original pokepisona - red cat in a beige T-shirt, which is how I introduce myself online. Laybox drew the picture above.";"Я являюсь огромным фанатом серии игр «どこでもいっしょ» (Докодемо Иссё, букв. «Вместе повсюду»). У меня есть собственный оригинальный покепи - красный кот в бежевой футболочке, которым я представляюсь в Интернете. Картинку выше нарисовал Laybox.";Я - великий фанат серії ігор «どこでもいっしょ» (Докодемо Іссе, букв. «Разом увсюди»). У мене є власний оригінальний покепі — червоний кіт у бежевій футболці, яким я представляюся в Інтернеті. Малюнок вище намалював Laybox.;; +index_article_hello_there_paragraph_3;Third paragraph on ""Hello there"" section on index page;Yep, on the right is my photo.;Да, это моя фотография справа.;;; diff --git a/htdocs/auto.p b/htdocs/auto.p new file mode 100644 index 0000000..e6c15d3 --- /dev/null +++ b/htdocs/auto.p @@ -0,0 +1,6 @@ +@USE +../lib/classes/l10n.p + +@auto[] +$locale[^l10n::create[en_US;ru]] +#end @main[] diff --git a/htdocs/index.html b/htdocs/index.html index ba13d03..0440b13 100644 --- a/htdocs/index.html +++ b/htdocs/index.html @@ -10,18 +10,16 @@ $photo_thumbnails[ $.[image/jpeg][/img/thumb/me.jpg] ] ^base[михаил «synzr»]{ - ^article[index][Приветствую вас!]{ + ^article[index][^locale.t[index_article_hello_there]]{ ^section[about-me]{ ^figure[$photo_thumbnails;image/jpeg; - $.caption[Моя фотография у останкинского телецентра в Москве] + $.caption[^locale.t[index_me_caption]] $.height[160] $.href[/img/photo/me.jpg] ] -

- Меня зовут Михаил, я платно учусь в частном колледже на IT, - интересуюсь технологиями и коллекционирую музыку на CD-пластинках. - Ну, вроде бы я человек - насколько это возможно. Обожаю лезть, куда не надо. -

+

^locale.html[index_article_hello_there_paragraph_1]

+

^locale.html[index_article_hello_there_paragraph_2]

+

^locale.html[index_article_hello_there_paragraph_3]

}
} diff --git a/lib/classes/l10n.p b/lib/classes/l10n.p new file mode 100644 index 0000000..4760159 --- /dev/null +++ b/lib/classes/l10n.p @@ -0,0 +1,34 @@ +@CLASS +l10n + +############################## +@create[language;fallback_language][localization_table] +$self.language[$language] +$self.fallback_language[$fallback_language] + +$localization_table[^table::load[../data/localization.csv; + $.separator[^;] +]] +$self.localization[^localization_table.hash[Key]] +#end @create[] + +############################## +@t[key] +^if(^self.localization.contains[$key]){ + $row[$self.localization.[$key]] + + $value[$row.[$self.language]] + ^if(!def $value){ + $value[$row.[$self.fallback_language]] + } + + ^if(def $value){$result[$value]}{$result[$key]} +}{ + $result[$key] +} +#end @t[] + +############################## +@html[key] +$result[^taint[as-is][^self.t[$key]]] +#end @html[] -- cgit v1.3