Portál AbcLinuxu, 8. května 2025 22:38
{ "name": { "cs_CZ": "Název pluginu", "en_GB": "Plugin name" }, "found-msg": { "cs_CZ": [ "Nalezena %d položka.", "Nalezeny %d položky.", "Nalezeno %d položek." ], "en_GB": [ "Found %d item.", "Found %d items." ] } "sql-table": "Items", "entity-class": "\\Plugin\\Items", "some-numbers": [ 123, 45, 67, 89, 10 ] }Přemýšlím, jak JSON konfiguráky provázat s gettextem a umožnit nějak kultivovaně hledat, co bylo přeloženo a co ještě nikoliv. Zádrhel je v tom, že něco přeloženo má být ("name", "found-msg"), ale spousta věcí být přeložena nesmí ("sql-table", "entity-class"). Přitom to jsou v podstatě uživatelská data editovaná z administračního rozhraní, takže to nesmí být provázané s gettextem příliš...
"translatable": { }
a nad tím pracovat v nějakým „chytřejším“ jazyce, co umí (de)serializovat JSON text a pracovat s tím civilizovaně objektově – na straně klienta třeba JavaScript, na serveru si představím třeba Ruby. Samozřejmě to vůbec nemusí pasovat do tvé use-case, ale to by chtělo asi hlubší popis problému a prostředí.
config.json:
{ "name": "$name", "found-msg": "$found-msg", "sql-table": "Items", "entity-class": "\\Plugin\\Items", "some-numbers": [ 123, 45, 67, 89, 10 ] }
config.en_GB.json:
{ "info": { // metadata o prekladu }, "strings": { "$name": "Plugin name", "$found-msg": [ "Found %d item.", "Found %d items." ] } }
config.cs_CZ.json:
{ "info": { }, "strings": { "$name": "Název pluginu", "$found-msg": [ "Nalezena %d položka.", "Nalezeny %d položky.", "Nalezeno %d položek." ] } }
{ "languages": [ "en_GB", "cs_CZ" ], "strings": { "name": { "cs_CZ": "Název pluginu", "en_GB": "Plugin name" }, "found-msg": { "cs_CZ": [ "Nalezena %d položka.", "Nalezeny %d položky.", "Nalezeno %d položek." ], "en_GB": [ "Found %d item.", "Found %d items." ] } }, "sql-table": "Items", "entity-class": "\\Plugin\\Items", "some-numbers": [ 123, 45, 67, 89, 10 ] }Je to v podstatě tvůj původní formát, jen vede přeložitelné řetězce izolovaně v jednom objektu, kde je objektově dobře najdeš. Odtud je něčím, co rozumí JSON syntaxi, můžeš vytáhnout do objektů a zpracovávat po jednom jak je potřeba, aniž by ses dostal na atributy, na který se nešahá. Rozdělovat to na víc souborů ani práce s čistě find/replace toolem není asi na tohle moc ideální, ale jak jsem psal, využitelnost závisí na případu použití.
xml:lang
. Třeba takhle, samozřejmě to jde strukturovat i více nebo méně:
<config> <name xml:lang="cs_CZ">Název pluginu</name> <name xml:lang="en_GB">Plugin name</name> <found-msg xml:lang="cs_CZ" lower-bound="1" upper-bound="1">Nalezena %d položka.</found-msg> <found-msg xml:lang="cs_CZ" lower-bound="2" upper-bound="4">Nalezeny %d položky.</found-msg> <found-msg xml:lang="cs_CZ" lower-bound="5">Nalezeno %d položek.</found-msg> <found-msg xml:lang="en_GB" lower-bound="1" upper-bound="1">Found %d item.</found-msg> <found-msg xml:lang="en_GB" lower-bound="2">Found %d items.</found-msg> <sql-table>Items</sql-table> <entity-class>\Plugin\Items</entity-class> <some-numbers>123</some-numbers> <some-numbers>45</some-numbers> <some-numbers>67</some-numbers> <some-numbers>89</some-numbers> <some-numbers>10</some-numbers> </config>
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.