SOURCES: monodoc.desktop (NEW) - desktop file

Paweł Sakowski pawel w sakowski.eu.org
Sob, 28 Lut 2004, 17:12:04 CET


> No i tak właśnie vfmg robi. Z tym, że przed LC_MESSAGES bierze LC_ALL, a
> po nim LANG. Nie wiem czy do końca zgodnie ze standardem, czy nie -
> dokładną obsługę zmiennych systemowych zrobię na końcu.

Zgadza się. Chodzi o ustawienie LC_MESSAGES, a algorytm ustalania jego
treści na podstawie zmiennych env jest dokładnie taki, jak napisałeś.

> Ale żeby uzyskać to 'ISO-8859-2' muszę użyć Langinfo (bo innej metody
> nie znam - jeśli ktoś zna funkcję get_encoding(język) to niech mi jak
> najszybciej ją poda). A to operuje na aktualnym locale.

Właśnie ta zależność od locale wszystko psuje, bo na jednym systemie
langinfo (dla pl_PL) zwróci ISO-8859-2 a na drugim UTF-8 (zależnie jak
kto sobie localedb wygeneruje).

> WYjściowym), to weź aktualne vfmg z CVS-u, znajdź blok rozpoczynający
> się ciągiem 'Legacy-Mixed', przeanalizuj go i podaj proof of concept,

Nie do końca poprawnym perlem:

string get_encoding($lang) {	# pl_PL w cośtam.cośtam
	$lang2 ~= subst($lang, s/[@.].*//);	# pl_PL
	$lang1 = subst($lang2, s/_.*//); # pl
	if ($lang == "") return "US-ASCII";
	if ($lang1 == "pl") return "ISO-8859-2";
	if ($lang2 == "zh_TW") return "BIG5";
	# [...] dalej wg. tabelki
	# ... else
	warn "Invalid language tag";
}

i w bloku Legacy-Mixed zamiast if(!$lang){}elsif{}else{} wstawiasz
$enc=get_encoding($lang).

Przekodowywanie wyjścia w twojej wersji jest OK.

Pomijam przypadek szczególny typu Name[pl_PL.Windows-1250], kiedy
kodowanie podane jest wprost -- wtedy $enc==to_po_kropce.

> Innymi słowy: skąd uzyskać informację, że [pl] oznacza ISO-8859-2?

Jedynym źródłem jest tabelka (do przeklepania) z:

http://freedesktop.org/Standards/desktop-entry-spec/0.9.4/apd.html

Żadne funkcje z glibcowo-localowe tu nie pomogą, bo nie gwarantują
zwracania dokładnie wartości opisanych tym standardem. Jak pisałem, dla
polskiego locale mogą zwracać np. UTF-8.

-- 
+----------------------------------------------------------------------+
| Paweł Sakowski <pawel w sakowski.eu.org>            Never trust a man  |
|                            who can count up to 1023 on his fingers.  |
+----------------------------------------------------------------------+



Więcej informacji o liście dyskusyjnej pld-devel-pl