Joomla之门广告招商,PR=5,alexa 排名2万1

作者 主题: 应该重视中文修改包的行终结字符问题!  (阅读 12145 次)

indra

  • Newbie
  • *
  • 来自:
  • 帖子: 18
  • 声望: +0/-0
  • 上次登录:2008-09-27, 03:02
  • 注册于:2007-09-05, 21:50
    indra    2007-10-22, 20:48:49 | 未填写住址
    这里的 Joomla 修改包有不少小问题啊,当然都不算太严重。
    其实,Joomla 的最佳运行环境是 LAMP ,但这里的站长好像喜欢在 windows 下玩,这当然也没什么,各人的爱好不同嘛。但我建议以后能不能注明一下修改包是在什么环境下测试通过的,这样出问题大家也较容易查找,如果能附上被修改的文件列表就更好了!

    管理员回复 管理员回复:
    本站一直认为:Joomla! 的最佳安装环境是 Linux 服务器,即你所说的 LAMP 环境。
    不知道你从哪里看到本站站长喜欢在 windows 下面玩 Joomla! ?
    你所说的“修改包”指哪一个?建议能不能注明一下具体的文件名称,我们也好修正错误。
    最后提醒一下:既然你能下载文件,说明已经是注册会员了,那么请在论坛详细讨论,我们一起来研究一下到底什么操作导致了文件错误,如何去修正这些错误。
    谢谢!

    indra    2007-10-23, 13:46:22 | 未填写住址
    我只是觉得包中的这些小问题一般只有在 windows 下编辑源文件才易引发,如果我猜错了,还请你见谅。
    有问题的包是:
    Joomla! 1.0.13 简体中文版(UTF-8)
    Joomla_1.0.13 English-utf-8中文特别版
    具体的我已在下载评论中贴出。谢谢你的提醒,以后发这类问题我会去论坛中的。

    管理员回复 管理员回复:
    你说的没错,我是在 windows XP 环境下编辑文件的,但与你说的“运行环境”是两回事,这是“编辑环境”。
    我想问题主要是因为在 windows 下面编辑之后保存时对换行符的处理与Unix不同,因此你在Unix平台打开时会有问题。
    同理,如果我在 Linux 操作系统中编辑文件,那么保存之后别人在 Win 平台打开时同样会遇到这个问题。鉴于目前个人电脑使用 Windows 的还是大多数,我也就只能继续使用 WinXP 了。
    不过,据我观察,我在 Windows PC 上汉化的Joomla!上传到 Linux 服务器之后完全可以正常运行。

    ============================================================================================
    以上是我在留言区贴出的帖子及站长的回复,我想借这个机会讨论一下。

    首先要说明的是,我并不是只凭『编辑环境』而猜你的『运行环境』是 Windows 的,还有另外一些原因,当然我既然猜错了,那也就不用再提了,我在这再次请你见谅。

    我提出这个问题并不是我『在 Unix 平台打开时会有问题』,我试用了站长的 Joomla! 1.0.13 简体中文版(UTF-8),到目前为止,没有发现行终结字符引起的错误,但经验告诉我,混用 Unix 和 DOS 文本格式是危险的。确实, Unix 下的大多数程序在解析文本文件时都可以正常处理 MAC 、 DOS 、 Unix 三种行终结格式,但并不是所有的库都能正常处理的,如果我们很不幸地遇到这种情况,那将非常麻烦,因为这种字符的问题很隐蔽,你很难定位它,站长也遇到过这种字符类的问题吧?在 http://www.joomlagate.com/component/option,com_smf/Itemid,31/topic,252.msg919/#msg919 中,由于一个字符的影响,导致一个莫名其妙的错误,当然,我不是说你遇到的问题就是行终结字符引发的,也有可能是编码转换时导致的,具体要看你使用的源文件。总之,一个小小的字符可以让你产生意想不到的后果,当你花费了一个小时去源代码中查错,而最后却看到这只是因为一个行终结字符时,会是一种怎样的心情!

    站长说『如果我在 Linux 操作系统中编辑文件,那么保存之后别人在 Win 平台打开时同样会遇到这个问题。』,我不知你这样试过没有,但如果你是指在 Joomla 中使用,那没有任何问题,因为大多数人就算在 Windows 下使用 Joomla ,也还是在用 AMP 环境,那些软件本来就是 Un*x 下的,而且大多数的 Windows 程序也都能正常处理 Unix 文本格式;当然,如果你指的是用『记事本』来编辑这些文件的话,那确实会有点问题。还有,我觉得站长没理解我的意思,我并没说要请你以后在 Linux 下编辑源文件,你喜欢在哪个平台下编辑当然完全是自由的,Joomla 项目组中大概也会有人使用 Windows 环境、也有的使用 MAC 平台,但最后发布时都统一到 Unix 格式下,这必然有它的考虑,所以,我说的是:『如果修改源文件后,应该和 Joomla 项目组保持一致,存回 Unix 的文本格式。』,绝大多数的编辑器都有这个能力,不管是 Windows 还是 Unix 的,当然『记事本』没有!

    有的工具会自动帮你转换行终结字符,就像如果你使用 winscp 传送文件的话,可以设定由它来帮你处理,这样当你从 Unix 传送文本文件到 Windows 时,它会帮你把所有这些文件转成 DOS 格式,反之亦然。但这样一个个文件的传输将比整个压缩包传输慢得多,而且这类工具的自动处理让很多人忽视行终结字符问题,使用者忽视那没什么,可开发者却应该留意这个问题。

    其实这些问题改起来都不难,用 vim 转一下就完了,或者把这些改过的文件用 winscp 重新上传一下就行,但问题是我不知道哪些文件被修改了,因此我才建议:
    1、『以后能不能注明一下修改包是在什么环境下测试通过的』;
    2、『能附上被修改的文件列表就更好了!』。
    这样就算出错也不会给人马虎随便的感觉,而是认真严谨的,而且对所有人都好,用不到的人不管就是了,而用到的人都可以参加进中文包的查错与测试中来,这样不是能更好的保证中文包的质量吗?也可以更好的推广 Joomla 的中文化成果,但站长好像对我的建议视而不见,呵呵。 :-)


    白建鹏

    • Administrator
    • Hero Member
    • *****
    • 来自:
    • 帖子: 7594
    • 声望: +36/-0
    • 上次登录:今天 16:51
    • 注册于:2006-11-09, 20:32
    • 分享,是一种美德 !
      • 白建鹏的个人网站
      • 电子邮件
    感谢 indra 的详细说明,到现在我终于明白了问题所在。我也理解了你所说的“混用 Unix 和 DOS 文本格式是危险的”。说实话,我一直使用 EmEditor 编辑软件在 Windows XP 操作系统下汉化Joomla!扩展套件。由于在测试安装时一般没有发生过什么问题,所以从来没有想过“最后发布时都统一到 Unix 格式下”。

    看了你上面的解释,我同意你的看法。在留言本上的回复不是我不够重视你的建议,而是因为我没有意识到问题到底在哪里。

    很好,感谢你今天的提醒。既然 Joomla! 最终的运行环境是 LAMP 平台,我想“最后发布时都统一到 Unix 格式下”是正确的。

    不过,你说的 VIM 和 winscp 我都没有用过。在此诚恳请教一下:我在 EmEditor 编辑器中保存时可否选择存为 Unix 格式?截图是 EmEditor 软件的“另存为”对话框,是否我选择“换行方式”中的 Unix 那一项即可?如果这样还不行,还有什么好办法?

    我一般使用 FileZilla 开源工具进行 FTP 上传,但是汉化结果一般都是 .zip 压缩包,不知道这个软件能否将 .zip 包中的文件在传输时修改为 Unix 格式?如果可以,那就太方便了。

    最后说明一下,我一般汉化的文件都是 .xml 文件和 language 目录下的语言文件,很少动其他 .php 源代码(Joomla! 1.0.13 汉化版修改了很多 .php 文件,因为这样才能实现汉化)。最近我改变了工作规则,一般我的汉化包中被修改过的文件都会将原文件备份,在文件名上添加 .en 表示“英文原版”,很容易找到。

    再次感谢 indra 的提醒,希望你继续帮助我做好Joomla!的汉化工作。谢谢!


    indra

    • Newbie
    • *
    • 来自:
    • 帖子: 18
    • 声望: +0/-0
    • 上次登录:2008-09-27, 03:02
    • 注册于:2007-09-05, 21:50
      老实说,我没用过 EmEditor ,以前在 Windows 下用的是 UltraEdit 及 EditPlus ,但自从我学会了一点 Vim 的皮毛后,那两个也早丢到不知哪里去了!说到这,忍不住要吹嘘一下 Vim ,这是目前这个星球上最强大的编辑器之一,就文本编辑功能来说,无人能出其右,就算与 Emacs 相比也是有过之而无不及(这里我说的是『文本编辑』功能,Emacs 强的是另外一些方面。),用它来编辑是只有你想不到,没有它做不到,而且是跨平台的,Un*x 和 Windows 下使用完全一样,但它的缺点也非常明显,就是难学难记,才接触的人打开它编辑不了文件是小事,搞不好连想关闭它都做不到…,打住打住,越扯越远了,还是快来回答兄台的问题。 ;D

      看了你的 EmEditor 截图,它确实有这个功能的,换行符选 Unix 就行了,如果 EmEditor 的界面中没有提醒你当前的行终结字符是什么的话,在 Windows 下要验证是否是 Unix 格式也很简单,用记事本打开刚刚保存的文件,如果文件内容变得乱七八糟的话就对了,呵呵! :) (当然,还有一种 MAC 格式,但这种出现的几率太小。),其实,如果想要一个强大编辑器而又对 Vim 不感冒的话,可以试一下 Jedit ,功能强自不必说,绿色、开源、跨平台,使用上也很简单,还可以装个 FTP 插件,这样无论远程还是本地的文件都可以轻易编辑,它的这些优点都是由于它是一个 Java 写的程序,但这同时也是缺点,那就是 Java 程序共有的--启动太慢!唉唉唉,怎么又…,见谅见谅!

      再一次抱歉,FileZilla 我还是没用过,由于我总是有 SSH 可用,导致我最常用的传输工具是 Winscp (SFTP 协议),FTP 工具用得非常少,临时用一下就用终端方式的 ftp.exe, 真有许多文件要用 FTP 传送时也就是打开一个 Firefox 的插件:FireFTP ,把 Firefox 临时变成一个 FTP 客户端而已,反正功能足够强了。但我想 FileZilla 应该有自动转换行终结字符的这个功能的(我猜的,因为它名气很大。),我们知道 FTP 有两种传输模式:bin 和 ascii ,除非你手工指定,否则大多数的 FTP 客户端会根据传输的文件类型来选择一个模式,说到这里,问题『能否将 .zip 包中的文件在传输时修改为 Unix 格式?』的答案就清楚了:如果 FileZilla 有自动转换的功能,它要起作用也必然是在你传输文本文件的时候,这时它会选用 ascii 模式并自动做处理,但如果你把这一堆文本文件压缩成 zip 包再上传,那它一定是选用 bin 模式,这时不会做任何的处理,也处理不了,它总不可能先解压,处理完再打包压缩吧!就算你手工选用了 ascii 模式,除了造成上传的 zip 文件出错、不能正常解压外,没有任何好处。

      刚刚想起个事来,我下载了『Joomla_1.0.13 English-utf-8中文特别版』,但不能正常解压,不知是不是上传时错选了 ascii 模式的原因,所以这里我再提一个建议:下载的文件都应该尽可能提供 md5 校验码,这样,下载的人就能知道到底是自己下载过程的问题还是原来的包就有问题。

      啰啰嗦嗦说了这一大堆,见笑了!
      « 最后编辑时间: 2007-10-25, 02:23 作者 indra »

      白建鹏

      • Administrator
      • Hero Member
      • *****
      • 来自:
      • 帖子: 7594
      • 声望: +36/-0
      • 上次登录:今天 16:51
      • 注册于:2006-11-09, 20:32
      • 分享,是一种美德 !
        • 白建鹏的个人网站
        • 电子邮件
      indra 说得很好,我欢迎这样的诤友。

      我今天专门下载了 vim 和 jEdit ,后者如你所言,比较慢,而且那个“打开文件”的浏览对话框真要命,感觉像回到了 windows 3.1 时代,我放弃了;打开 vim 后,发现竟然无法输入字符!哈哈,确实不容易上手。

      对于 vim 的大名我还是听过,尽管没有用过,这次既然你也推荐,我就抽空学学。在学会之前,我还是用 EmEditor。好在我已经把默认的换行符设置修改了,以后就自动保存为 Unix 格式(刚才用记事本打开看了,确实惨不忍睹,哈哈,看来成功了!)。

      再次感谢 indra 的帮助! :-P

      indra

      • Newbie
      • *
      • 来自:
      • 帖子: 18
      • 声望: +0/-0
      • 上次登录:2008-09-27, 03:02
      • 注册于:2007-09-05, 21:50
        呵呵,很高兴兄台能排除万难、不惧艰险 :D 地选择 Vim ,我给你一个学习的好地方,希望对你能有帮助。 ^-^
        http://edt1023.sayya.org/vim/index.html

        白建鹏

        • Administrator
        • Hero Member
        • *****
        • 来自:
        • 帖子: 7594
        • 声望: +36/-0
        • 上次登录:今天 16:51
        • 注册于:2006-11-09, 20:32
        • 分享,是一种美德 !
          • 白建鹏的个人网站
          • 电子邮件
        呵呵,已经下载,改日拜读。晚上要加班赚饭票了。

        eric

        • Joomla 中文开发小组
        • Sr. Member
        • *
        • 来自:
        • 帖子: 282
        • 声望: +1/-0
        • 上次登录:2010-09-01, 21:07
        • 注册于:2006-11-27, 20:21
          • joomla 中文 网站建设
          • 电子邮件
        今天终于花时间看完这个帖子,不错,呵呵,以前学过vim,后来不用linux,全忘了。
        我的中文joomla网站---www.joomer.cn
        现推出本人的Joomla!入门书籍,五元开卖,我的QQ:184461298,欢迎访问。

        白建鹏

        • Administrator
        • Hero Member
        • *****
        • 来自:
        • 帖子: 7594
        • 声望: +36/-0
        • 上次登录:今天 16:51
        • 注册于:2006-11-09, 20:32
        • 分享,是一种美德 !
          • 白建鹏的个人网站
          • 电子邮件
        vim 已经下载了,但是还是用不习惯。

        昨天忽然想到一个 idea :有没有可以批量转换文件换行格式的工具?例如,有若干 php 文件分散放在若干目录里,还有子目录嵌套,这样如果手动修改 DOS 换行符到 Unix 换行符就比较麻烦,如果有个软件可以批量转换就好了。

        网上有人提供了在 Unix Shell 下面批量转换的命令,但是在 Windows 平台如何实现,还没有找到方法。有谁知道么?

        shannon

        • Newbie
        • *
        • 来自:
        • 帖子: 27
        • 声望: +0/-0
        • 上次登录:2010-01-22, 13:42
        • 注册于:2007-05-07, 16:30
          • 香农数据安全在线
        确实存在这个换行符的问题。这两天在joomla中保存configuration.php时,动不动前台就空白了。用文本编辑器打开configuration.php看看不出问题来,用winhex打开看,发现换行符变了:从windows下的0D 0A变成了unix下的0A。

        白建鹏

        • Administrator
        • Hero Member
        • *****
        • 来自:
        • 帖子: 7594
        • 声望: +36/-0
        • 上次登录:今天 16:51
        • 注册于:2006-11-09, 20:32
        • 分享,是一种美德 !
          • 白建鹏的个人网站
          • 电子邮件
        说到 configuration.php 文件,我有个疑问:configuration.php 这个文件是安装过程中 Joomla! 自动生成的,汉化时这个文件还不存在。那么服务器端自动生成的 configuration.php 文件为何也是 DOS 格式换行符?难道是因为服务器是 windows 平台?

        如果是在 Linux 平台服务器上安装,那么自动生成的 configuration.php 文件换行符是什么样?

        请有经验的朋友来谈谈。

        flyfoxs

        • Newbie
        • *
        • 来自:
        • 帖子: 10
        • 声望: +0/-0
        • 上次登录:2009-06-05, 13:26
        • 注册于:2007-10-23, 20:07
          哎,可有最后修改好的版本能分享给大家?

          白建鹏

          • Administrator
          • Hero Member
          • *****
          • 来自:
          • 帖子: 7594
          • 声望: +36/-0
          • 上次登录:今天 16:51
          • 注册于:2006-11-09, 20:32
          • 分享,是一种美德 !
            • 白建鹏的个人网站
            • 电子邮件
          已经发布到下载栏目了 —— 原来的 Joomla! 1.0.13 简体中文版已被更新。

          indra

          • Newbie
          • *
          • 来自:
          • 帖子: 18
          • 声望: +0/-0
          • 上次登录:2008-09-27, 03:02
          • 注册于:2007-09-05, 21:50
            vim 已经下载了,但是还是用不习惯。

            昨天忽然想到一个 idea :有没有可以批量转换文件换行格式的工具?例如,有若干 php 文件分散放在若干目录里,还有子目录嵌套,这样如果手动修改 DOS 换行符到 Unix 换行符就比较麻烦,如果有个软件可以批量转换就好了。

            网上有人提供了在 Unix Shell 下面批量转换的命令,但是在 Windows 平台如何实现,还没有找到方法。有谁知道么?
            很久没来了,不好意思。
            老大,你这完全是在骑着马找马,你已下载了 VIM ,我说过了,这是最强大的编辑器,它来做这种事,完全是小菜一碟。
            如果你学会一点 VIM,那一定也学会了一点正则表达式,在 Unix 下,你可以用正则表达式配合 awk 及一个行编辑器 sed (基本上所有的 *nix 发行版都带这两个命令)来做这事,和 VIM 的原理是一样的,只是更方便。
            在 Windows 下,有多种方法来做,你可以装一个 Cygwin ,这样你的 Windows 就有了一个类似 *nix 的 shell ,也就有了 grep、awk、sed 等命令;你也可以使用 Windows 版的 VIM;还可以使用 python、perl、ruby、php等脚本语言自己写个小脚本(就是少得要命的几行代码);当然,最简单的就是用我上面说的 winscp ,让它来在 Windows 与 *nix 之间自动转换。

            白建鹏

            • Administrator
            • Hero Member
            • *****
            • 来自:
            • 帖子: 7594
            • 声望: +36/-0
            • 上次登录:今天 16:51
            • 注册于:2006-11-09, 20:32
            • 分享,是一种美德 !
              • 白建鹏的个人网站
              • 电子邮件
            呵呵,感谢 indra 指点。你对 *nix 很熟悉啊,有空的话,一起合作开发点开源的 Joomla! 扩展套件吧。

            indra

            • Newbie
            • *
            • 来自:
            • 帖子: 18
            • 声望: +0/-0
            • 上次登录:2008-09-27, 03:02
            • 注册于:2007-09-05, 21:50
              刚刚把白兄的这个问题试了一下,现在就来说说在 Windows 下怎么用 VIM 来做多文件的格式批量转换工作?:

              假设你要改的文件在 c:\aaa 目录中,下面也有多级子目录,要做的是把这个目录下的所有 .php 文件从 dos 格式改为 Unix 格式。

              1、先用 VIM 随便打开一个 c:\aaa 目录下的文件,输入 :pwd 查看一下当前目录,保证它是 c:\aaa;
              2、在 VIM 的命令模式下输入 :args **/*.php ,如果文件很多,要等个几秒中,直到 GVIM 的标题栏中出现 (1 of 518)的字样(这是你要修改的文件数量,我的是 518 个),这个命令的作用是把当前目录及子目录下的所有 .php 文件,加入参数列表;
              3、还是在命令模式下输入 :argdo set ff=unix | update,文件很多的话,要多等一下,这个命令的作用是对每个参数列表中的 .php 文件执行命令 :set ff=unix 并存盘。

              完了,就是那么简单,其实,做这件事有太多的方法,如果在 Unix 中我认为最好是配合使用 find、 grep、 awk、 sed,那可以有极高的灵活性, VIM 中也不是只有我上面说的这一种,你如果仔细研究的话,一定会找到更好、更方便的方法;你也可以举一反三,通过修改我上面所说的命令,配合正则表达式,实现无穷的多文件字符串查找替换。