为Boxee增加中文支持

这次我发现了Boxee一个问题: 中文文件名显示出来是个框框… 于是搜到 Viewing Chinese filenames in Boxee. 不过是针对AppbleTV的, 跟Ubuntu/Linux系统下稍有区别. 下面是我的方法:

首先确保系统已安装了文泉驿开源中文字体, 当然, 如果你喜欢其它字体, 照葫芦画瓢即可 🙂 然后将Boxee自带的字体换成文泉驿.

$cd /opt/boxee/media/Fonts
$sudo mv boxee.ttf boxee-original.ttf
$sudo ln -s /usr/share/fonts/truetype/wqy/wqy-zenhei.ttc boxee.ttf

$cd /opt/boxee/skin/boxee/Fonts
$sudo mkdir original
$sudo mv *.ttv original
$sudo ln -s /usr/share/fonts/truetype/wqy/wqy-zenhei.ttc  LiberationMono-Regular.ttf
$sudo ln -s /usr/share/fonts/truetype/wqy/wqy-zenhei.ttc  LiberationSerif-Regular.ttf
$sudo ln -s /usr/share/fonts/truetype/wqy/wqy-zenhei.ttc  MuseoSans_700.ttf
$sudo ln -s /usr/share/fonts/truetype/wqy/wqy-zenhei.ttc  LiberationSans-Regular.ttf
$sudo ln -s /usr/share/fonts/truetype/wqy/wqy-zenhei.ttc  MuseoSans_500.ttf

然后重启一下Boxee, 就可以显示中文文件名了.

PS. 我这办法非常不优雅, 如果你有更好更优雅的方法, 欢迎指教 😛

Unicode编码中的简繁中文互转

现在简繁中文的转换已经不像从前那样,是gbk/ big5两种文字编码之间的转换,而是在同一个编码,Unicode,当中不同编码的映射。当然,简繁中文绝对不是简单的一一对应关系,有一对多的个别情况,例如简体的“后” 对应繁体的 “后”和“後”。行业词汇也有差别,例如大陆说“宽带”,而港台说“寬頻”;大陆说“操作系统”,而港台说“作業系統” 等等。

因此当我决定用Python程序将森海塞尔简体中文网站转换为繁体中文网站时,我的计划分三个步骤:

  1. 提取行业高频关键字,找到简体和繁体的对应,编成词典
  2. 利用现有的Python中文本地化工具包,将关键字之外的文字转换
  3. 请港台Freelancer人工校对,确保本土化

第一步,我的词典替换程序在此:

#coding:utf8
import sys

_dict = {'森海塞尔': 'Sennheiser', '耳机': '耳筒',  '通讯耳机': '通話用耳機', '话筒': '咪高峰', '包耳式': '包圍耳殼式', '换能原理': '單元原理', '阻抑': '隔離',
'便携包': '便攜袋', '质保': '保用', '带宽': '頻寬', '调制方式': '調節方式', '信噪比': '訊噪比', '杂散辐射': '雜散發射' }

_dict_s2t = dict((k, v) for k, v in _dict.iteritems())
_dict_t2s = dict((v, k) for k, v in _dict.iteritems())

def translate2traditional(data):

    for k, v in _dict_s2t.iteritems():
        data = data.replace(k, v)
    return data

def translate2simplified(data):

    for k, v in _dict_t2s.iteritems():
        data = data.replace(k, v)
    return data

def test_dict():

    global _dict_s2t, _dict_t2s
    for k, v in _dict_s2t.iteritems():
        print k, v

    for k, v in _dict_t2s.iteritems():
        print k, v

if __name__ == '__main__':

    if len(sys.argv) > 2:
        f = open(sys.argv[2], 'r')
        if sys.argv[1] == 's2t':
            print translate2traditional(f.read())
        elif sys.argv[1] == 't2s':
            print translate2simplified(f.read())
        else:
            print 'Wrong operation type.'
    else:
        print 'usage: python trans_dict.py [s2t | t2s] file.name'

第二步,我利用的是pyzh中文工具包中的fanjian.py完成。特别感谢pyzh项目组的全部成员和fanjian.py程序作者ne.manman和zsp007!

下面就交给香港的朋友了,希望不会累坏他:)

顺便说,Songbird很不错,有点山寨iTunes,那又怎样呢?毕竟Linux下面还没iTunes。


Songbird