打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
日版Kindle Paperwhite 第二代中文菜单解锁 免越狱补丁更新
userphoto

2014.02.11

关注




首先上一张图以证明汉化成功,下面我将慢慢说汉化原理和步骤。


其实,日版的KPW2在出厂时就已经自带了中文语言的全部jar包。一开始我不这么认为,我认为说可能日本专门将中文的东西删除,但是奇怪的是它又能看中文。这次日本和美国版本的5.4.2的更新文件一样让我看到了玄机,一定是某个配置文件的问题。
通过Mobileread论坛NiLuJe大神的kindletool解包了5.4.2的更新文件后发现了玄机。
/opt/amazon/ 文件夹下面有三个坑爹的配置文件: data.graylist、data.whitelist、locale.blacklist
data.graylist里面只有中文和日语的字体,data.whitelist相当于文件白名单,locale.blacklist我姑且将它称为语言黑名单。╮(╯▽╰)╭
/opt/amazon/data.graylist 文件灰名单,里面的文件在设备重置后会被删除。
具体的理由见:/etc/upstart/shutdown_special 这个文件180~181行:
  1.     # delete files from graylist if it's a factory reset
  2.     if [ $SHUTDOWN_MODE = $SHUTDOWN_MODE_FACTORY_RESET ]; then
  3.         GRAYLIST=/opt/amazon/data.graylist
  4.         f_log I $LOG_NAME "userstore pruning - deleting gray list "
  5.         cat $GRAYLIST | xargs rm -rf
  6.         RES=$?
  7.         if [ $RES -ne 0 ]; then
  8.             f_log C $LOG_NAME "userstore pruning - deleting gray list unsuccessful"
  9.         fi
  10.     fi
  11.     f_log I $LOG_NAME "userstore pruning complete"
复制代码
/opt/amazon/data.whitelist 文件白名单,按照文件参数的定义,在白名单里面的东西不会被删除,白名单之外的全部被删除,但是奇怪的是,越狱后此功能失效。
具体见:/etc/upstart/shutdown_special 这个文件160~177行
  1. # remove files in userstore, except ones whitelisted
  2. ss_prune_userstore()
  3. {
  4.     WHITELIST=/opt/amazon/data.whitelist

  5.     # form the whitelist argument for the find command
  6.     FIND_WHITELIST=$(cat $WHITELIST |sed 's@\(.*\)@-a \! -path \1@g' | xargs)

  7.     f_log I $LOG_NAME "userstore pruning begin"
  8.     # delete all files in userstore not specified in whitelist
  9.     cd /mnt/us
  10.     find . \( -name "*" -o -name ".*" \) -a ! -name "." $FIND_WHITELIST \
  11.         -depth -exec rm -rf '{}'  \;
  12.     RES=$?
  13.     if [ $RES -ne 0 ]; then
  14.         f_log C $LOG_NAME "userstore pruning failed"
  15.         return $RES
  16.     fi
复制代码
之所以不能显示中文其实就是locale.blacklist的问题,它将禁止显示的语言的配置文件清单写于此文件中。默认的内容如下:
  1. /opt/amazon/ebook/config/locales/zh.conf
  2. /opt/amazon/ebook/config/locales/zh.properties
复制代码
所以,我一开始的想法就是说,将这个黑名单清空就好。
于是我修改好文件,写好patch的shell文件,用kindletool打包为ota2类型的更新包,然后更新。

结果是中文依旧不能显示。

于是我试着将locale.blacklist里面的内容改为ja.conf 也就是日语,然后依旧patch。
结果,日语和中文一起没了。

于是我可以这么大胆地假设,kindle paperwhite 2 日版型号的都需要在启动的时候读取这个黑名单,然后删去黑名单里面的语言文件。

于是我试着将升级镜像里面的zh.conf和zh.properties通过patch移动到默认路径,同时将locale.blacklist变为日语。

更新完重启后,kindle paperwhite 2 日版终于可以有中文选项了。
现在楼主正在重置设备试着将系统还原到最初状态,没中文,没越狱的状态。然后从越狱开始弄。一会会有具体的方法和步骤,大家耐心等待。

昨天由于时间太晚和弄出中文来过于激动,今天通过查找我们终于找到了Kindle Paperwhite 2 日版原版不能显示中文的原因,在Kindle系统的/etc/upstart 目录下面有一个名为langpicker.conf的配置脚本,下面首先我们贴出这个脚本的内容:
  1. # start language picker after blanket has loaded the langpicker module

  2. start on x_setup_ready and blanket_loaded_langpicker
  3. stop on stopping x

  4. emits langpicker_ready

  5. env LOCALE_FILE=/var/local/system/locale
  6. env FIRST_BOOT_FILE=/var/local/system/factory_fresh
  7. env BLACKLIST=/opt/amazon/locale.blacklist

  8. task

  9. script
  10.     source /etc/upstart/env
  11.     source /etc/upstart/functions

  12.     if [ "$(devcap-get-feature -a frontlight)" -eq "1" ]; then
  13.       lipc-set-prop com.lab126.powerd flStartup 1        
  14.     fi

  15.     if [ -e $BLACKLIST ]; then
  16.         mntroot rw || true
  17.         dsn=`cat /proc/usid | xargs echo -n`
  18.         case $dsn in
  19.             B05A*|B0F2* )
  20.                 # delete the locals specified in black list
  21.                 cat $BLACKLIST | xargs rm -rf
  22.                 RES=$?
  23.                 if [ $RES -ne 0 ]; then
  24.                     f_log C locale prune "Failure while removing the blacklisted locales"
  25.                 else
  26.                     f_log I locale prune "Successfully removed the blacklisted locales"
  27.                     rm -rf $BLACKLIST
  28.                 fi
  29.                 ;;
  30.            * )
  31.                 rm -rf $BLACKLIST
  32.                 ;;
  33.         esac
  34.         mntroot ro || true
  35.     fi

  36.     # see if we need to pick a language.
  37.     # if the locale exists, then just exit
  38.     if [ -e $LOCALE_FILE ]; then
  39.         LANG=`awk -F'=' '/LANG/{print $2}' $LOCALE_FILE`
  40.         LC_ALL=`awk -F'=' '/LC_ALL/{print $2}' $LOCALE_FILE`
  41.         f_log I locale read "lang=$LANG,lc_all=$LC_ALL" "Retrieved Language"
  42.         f_emit langpicker_ready
  43.         exit 0
  44.     fi

  45.     # Did not find first boot file. This means that the device is booting in the factory line 
  46.     # before the device has ever entered shipping mode. The lang picker should not be shown in this case.
  47.     # Just set the locale to en-US.
  48.     if [ ! -e $FIRST_BOOT_FILE ]; then
  49.         # send the event to langpicker module to install the language
  50.         lipc-send-event com.lab126.blanket.langpicker changeLocale -s "en-US"
  51.         # wait for the localeChange event
  52.         lipc-wait-event com.lab126.locale localeChange
  53.         f_emit langpicker_ready        
  54.         exit 0
  55.     fi

  56.     # N.B. - only if we seem to have a valid input device.
  57.     # the last input device in /etc/xorg.conf.* is the pointer, which is what we need.
  58.     # we get "/dev/input/event3" - the extra eval is to strip quotes
  59.     set $(grep /dev/input /etc/xorg.conf)
  60.     INPUT=$(eval echo $(eval echo \$#))

  61.     if [ -e $INPUT -o -e /mnt/base-us/ENABLE_VNC ]; then
  62.         # Start the pillow
  63.         # TODO What if pillow fails to start ?        
  64.         pillowd -NoDefaultPillowCase
  65.         # TODO It works without calling sleep!
  66.         # Do we really need to sleep ?
  67.         # sleep 1        
  68.         # send the pick, wait for the change
  69.         f_log I locale pick "" "Picking Language"
  70.         lipc-set-prop com.lab126.pillow applicationWindow '{"name":"pickLocale","clientParams":{"show":true}}'
  71.         f_log I locale wait
  72.         lipc-wait-event com.lab126.locale localeChange
  73.         # Kill the pillow here, so that it boots up again with proper language.
  74.         killall -q -s KILL pillowd || true
  75.         f_log I locale set "" "User Picked Language"
  76.     else
  77.         f_log I locale no_input "" "no input device, defaulting"
  78.         echo -e "LANG=en_US.UTF-8\nLC_ALL=en_US.UTF-8" > $LOCALE_FILE
  79.     fi

  80.     LANG=`awk -F'=' '/LANG/{print $2}' $LOCALE_FILE`
  81.     LC_ALL=`awk -F'=' '/LC_ALL/{print $2}' $LOCALE_FILE`
  82.     f_log I locale read "lang=$LANG,lc_all=$LC_ALL" "Set Language"
  83.     f_emit langpicker_ready
  84. end script
复制代码
可以清晰地看到第十行,首先通过env命令将/opt/amazon/locale.blacklist 文件路径添加到名为BLACKLIST的变量中。(BLACKLIST是黑名单的意思啊,坑爹= =)
第二十五行到第二十六行就是设备的判定,通过代码我们可以看见序列号以B05A* 和 B0F2* 开头的设备均在黑名单内,也就是可以简单判定,这就是日版设备的序列号。
第三十四行就是执行的删除命令,将黑名单中的语言给删除。(怒)

分析出来原因后解决办法就好办了,一种就是将黑名单列表清空,然后将设备里面被删除的2个语言文件还原就好了。其次,我们可以换个思路,直接干掉这个删除脚本,不过,那就是有兴趣的你的事情了。


好,感谢大家的耐心等待,现在上干货。
 kindle-5.4-jailbreak.zip (4.04 KB, 下载次数: 587) 


 update_jailbreak_bridge_1.8.N_install.tar.gz (6.04 KB, 下载次数: 1040) 


 Kpw2-chinese.tar.gz (1.33 KB, 下载次数: 492) 


本步骤需要这三个压缩包,设备需要重启三次。如果不出意外的话,按照步骤做完后你将拥有完美的日版中文系统。

相关问题集中回答贴:tieba.baidu点com/p/2727173966

一、不想越狱的中文化方法

 update_chinese_install.zip (2.09 KB, 下载次数: 948) 

将系统版本升级到5.4.2。
下载这个附件,解压放在Kindle根目录,然后进入设置,然后选择更新,然后重启。
重启后,进入[Settings] -> [Device Options] -> [Language and Dictionaries] -> [Language] 选择中文自由飞翔吧。
12月1号,更新,修改了文件复制失败的问题,等待测试。

二、越狱中文化的方法(1)越狱(感谢Mobileread论坛的NiLuJe和yossarian17的付出)

首先将Kindle连接到你的电脑上,将kindle-5.4-jailbreak.zip里面的三个文件解压到磁盘根目录,然后将设备断开连接。
PS,Kindle的语言按照英语步骤写的

然后在Kindle中点击右上角的按钮进入菜单,点击Settings进入设置选项。
然后继续点击右上角的菜单按钮,选择Update Your Kindle。更新不会立刻运行,耐心等待,过了一会儿,底部出现**** JAILBREAK ****时。恭喜你,你已经越狱成功了。

由于楼主越狱的早,不确定此方法和我当时越狱的结果是否一致。 = =、 因为当时我用的是Paperwhite 1代的越狱补丁。所以以上越狱教程完全翻译Mobileread,但是越狱的结果是能安装第三方的bin文件就好了。

将越狱成功的Kindle连接到电脑,解压update_jailbreak_bridge_1.8.N_install.tar.gz里面的一个文件到磁盘根目录。然后拔出设备,依旧Settings进入设置选项。然后继续点击右上角的菜单按钮,选择Update Your Kindle。(这一步可以舍去不做,但是以后想安装koreader的还是要做的,但是你可以等到它出的时候再做。)

(2)汉化

前面的越狱步骤成功后,解压最后那个 Kpw2-chinese.tar.gz 压缩包里面的4个文件到Kindle根目录,依旧是断开设备同电脑的连接,然后设置里面选择更新这步骤。

更新完毕后设备会重启,重启后,进入[Settings] -> [Device Options] -> [Language and Dictionaries] -> [Language] 选择中文自由飞翔吧。


补充内容 (2014-1-27 15:58):
2014年1月27日,修复Kindle 3G JP版本不能更新问题。
pan.baidu.com/s/1mgoc7sk


既然没人插楼我就多说几句,在亚马逊官方允许日版有中文前,任何官方的固件都会覆盖这个locale.blacklist文件,虽然中文依旧能显示,但是很遗憾的是语言选项里面就会没有中文,系统重置后也没有中文。

但是大丈夫,萌大奶。只要越狱后,其实设备就永远越狱了。于是乎,你只需要保留最后的那个补丁,然后在每次官方升级固件后,如果没有了中文,自己再手动运行一下补丁就好了。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
隐藏root保姆级教程第(二)期之Shamiko白名单模式 来自 MiaoHan
Linux防垃圾邮件软件SpamAssassin:配置与启动
使用ModSecurity阻止IP
树莓派学习笔记
VsCode 修改中文显示
刷入面具后更好的隐藏root的Shamiko模块刷入方法和黑白名单妙用 来自 造型气质12560
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服