2010年7月11日 星期日

小遊戲

在桌面上的兩個圖示
寄件者 openSUSE11.3rc
看起來差不多
內容有點不同
pcmanx.desktop
[Desktop Entry]
X-SuSE-translate=true
Categories=Application;Network;IRCClient;
Encoding=UTF-8
Name=PCMan X BBS Client
Name[zh_TW]=PCMan X BBS 連線軟體
Name[zh_CN]=PCMan X BBS 连线软件
Exec=pcmanx
Icon=pcmanx
Type=Application
Terminal=false
GenericName=PCMan X BBS Client
GenericName[zh_TW]=PCMan X BBS 連線軟體
GenericName[zh_CN]=PCMan X BBS 连线软件
Comment=PCMan X BBS Client
Comment[zh_TW]=PCMan X BBS 用 GTK+ 2.x 開發的自由 BBS 連線軟體
Comment[zh_CN]=PCMan X BBS 用 GTK+ 2.x 开发的自由 BBS 连接软件
這個檔案中已經有不同語系的翻譯
當我使用繁體中文時,就會出現中文桌面檔名稱
lxappearance.desktop
[Desktop Entry]
X-SuSE-translate=true
Name=Appearance
Comment=Customize the look of the desktop
Exec=lxappearance
Icon=preferences-desktop-theme
Terminal=false
Type=Application
StartupNotify=true
Categories=Settings;DesktopSettings;GTK;
NotShowIn=GNOME;XFCE;
這是 LXDE 的桌面外觀設定程式
裏面沒有翻譯檔,但是仍可以顯示中文
這也是 openSUSE 的特異功能之一吧!
這些桌面檔翻譯都放在
/usr/share/locale/{YOUR_LANG}/LC_MESSAGES/desktop_translations.mo
例如繁體中文就在
/usr/share/locale/zh_TW/LC_MESSAGES/desktop_translations.mo
用 msgunfmt 可以將它轉回純文字的 po 檔
您就會找到
...
msgid "Name(lxappearance.desktop): Appearance"
msgstr "外觀設定"
...
msgid "Comment(lxappearance.desktop): Customize the look of the desktop"
msgstr "自訂桌面外觀"
...
如何運作詳情我並不清楚,反正就是可以
但看看 LXDE 的選單
寄件者 openSUSE11.3rc
目錄還 OK 但應用程式的部份全都是英文
這是因為 lxpanel 的選單部份使用了 menu-cache
這個程式會建立快取,讓你的選單一按就毫不遲疑的跳出來(真的很爽喔)
而目前還不支援 openSUSE 的桌面檔翻譯的模式
它只會在幾個桌面檔的資料夾中找出 *.desktop 檔案,並從裏面找到該要顯示的字串及其他資料
一起放在 ~/.cache/menus/ 下的文字檔案中
lxpanel 的選單就用這個檔案來快速顯示應用程式
(以上說明均是猜測,歡迎各位指教)
我的舊電腦變成古董之後就沒安裝過 LXDE 了
直到這次在 openSUSE 11.3 rc2 上測試才發現了這個問題
順便打一下廣告:
openSUSE 11.3 已內建了 LXDE 桌面
在安裝時選擇其他桌面環境,就可以直接安裝 LXDE 桌面
真的很快...
開啟最慢的還是 firefox...囧
我用了 google-chrome 來代替
等幾天 11.3 正式版釋出再根各位做詳細報告
回到主題:
程式遇到問題,應該要去跟上游回報才是正途
但是和 Andrea (openSUSE-LXDE 的領導)通信後,他說已經和 pcman 提過
那就安心等待吧
這裡先提供一個臨時的補救方案(workaround)
既然知道問題是產生的快取檔
如果無法改變產生快取的方法
就直接去修改快取檔啊
花了一天東拼西湊成了下面的 script
(每次寫 script 都要感謝 google (以及 google 出來的結果提供者) 和 鳥哥,謝謝你們!)
menu-cache-translate.sh
#!/bin/bash
for file in `ls ~/.cache/menus/`; do
N=1
totalline=`wc -l ~/.cache/menus/"$file" | cut -d ' ' -f1`
while [ "$N" -le "$totalline" ] ; do
LINE=`head -n $N ~/.cache/menus/$file | tail -n 1`
if [ `echo $LINE | grep ^"-"` ]; then
mydesktop=`echo $LINE | cut -c 2-`
myname=`head -n $((N+1)) ~/.cache/menus/$file | tail -n 1`
mycomment=`head -n $((N+2)) ~/.cache/menus/$file | tail -n 1`
mygenericname=`head -n $((N+6)) ~/.cache/menus/$file | tail -n 1`
mynametrans=`gettext -d desktop_translations -s "Name($mydesktop): $myname"`
if [ ! "$mynametrans" == "Name($mydesktop): $myname" ] ; then
sed -i "s/$myname/$mynametrans/g" ~/.cache/menus/$file
#echo \"$myname\" has been translated to \"$mynametrans\"
fi
mycommenttrans=`gettext -d desktop_translations -s "Comment($mydesktop): $mycomment"`
if [ ! "$mycommenttrans" == "Comment($mydesktop): $mycomment" ] ; then
sed -i "s/$mycomment/$mycommenttrans/g" ~/.cache/menus/$file
#echo \"$mycomment\" has been translated to \"$mycommenttrans\"
fi
mygenericnametrans=`gettext -d desktop_translations -s "GenericName($mydesktop): $mygenericname"`
if [ ! "$mygenericnametrans" == "GenericName($mydesktop): $mygenericname" ] ; then
sed -i "s/$mygenericname/$mygenericnametrans/g" ~/.cache/menus/$file
#echo \"$mygenericname\" has been translated to \"$mygenericnametrans\"
fi
N=$((N+7))
else
N=$((N+1))
fi
done
done
lxpanelctl restart
您也可以直接用下面連結下載:
下載完後執行
$ sh menu-cache-translate.sh
再看看選單:
寄件者 openSUSE11.3rc
就會出現中文翻譯了(如果有的話)
注意:每安裝一次應用程式(會有 *.desktop 檔)
menu-cache 就會刷新一次,你就得在一次執行這個 script
希望 menu-cache 很快就能辨識 openSUSE 的各種語言選單
大家加油!晚安。

沒有留言: