I18N/L10N工作流程

来源:互联网 发布:java三个发展方向 编辑:程序博客网 时间:2024/05/21 11:24

本文有相当的历史,文中很多链接已经过期,但工作的准则仍然是有效的,相关背景请参阅文末。如果您想加入我们现在的工作,请先看这里

 

如果您希望加入 Linux 中文化计划,请阅读下面的说明。

1.加入我们

您需要首先加入我们

2.准备工作

如果条件允许,您最好有个 GNU/Linux,这样可以一边翻译一边测试您正在翻译的程序。如果您在 Windows 下工作,可以去 RedHat 的网站下载并安装 CygWin 这个 Linux 仿真环境。强烈推荐使用 Windows 2000,不仅体积相对小巧,打补丁后稳定性和兼容性都很好。目前 RedHat 已经完整地移植了几乎整个 Linux 到 Windows 下,而且更新非常快,请看屏幕截图。GNOME/KDE 也移植到了 CygWin 环境下,称为 CygnomeKDE on Cygwin,不过它们安装后运行速度很慢(因为 Windows 本身已经消耗了过多的资源),而且最新版本也难以快速移植过来。建议完全安装 CygWin,大约需要 730 多兆空间。如果采用默认安装,至少还要指定安装 devel 分支下的 gettext 软件包,它是测试翻译必需的软件包。有时安装程序会出现问题,报告找不到 cygwin1.dll ,您可以在这里下载 1.3.22 版,然后拷贝到系统搜索路径(如:C:/WINNT/system32 或 C:/cygwin/bin/)下,重新运行一遍安装程序即可。其实,它位于下载的压缩包 release/cygwin/cygwin-1.3.22-1.tar.bz2 里。

在 Linux 下您要用到 kwrite 和 gedit 文本编辑器,它们都有良好的 UTF-8 支持,而且整个 PO 文件可以一目了然,还可以使用 VIM 或 EMACS (后者目前仅支持 gb2312 编码)文本编辑器。 KBabelgtranslator、以及 poEdit 是专用翻译工具,推荐使用。在 Windows 下,推荐使用 EmEditor,还可以使用 EditPlus。不建议使用 UltraEdit 或 Notepad。由于配置较复杂,这里提供它的 po/pot 设置文件,下载后双击将键值导入注册表,即可得到符合要求的配置,请看屏幕截图

另外,还有可能用到十六进制编辑器,如 WinHex,因为有时 Windows 下的文本编辑器会在 UTF-8 编码的文件前方添加三个字节(即所谓 Unicode 署名),以标明其为 UTF-8 编码。这种文件是无法通过编译的,必须用十六进制编辑器去除这三个字节!

注意在使用 EmEditor 保存文件为 UTF-8 编码的时候(文件->另存为),请取消“加入 Unicode 署名”前面的对勾,以避免发生上述情况!

在 Linux 下您可能需要英汉词典 IBMDICT 或 StarDict 及其词典,而在 Windows 下推荐使用金山词霸。

3.认领任务

目前,我们的工作主要集中在 KDE 和 GNOME 的界面翻译上。 KDE 的进度页面 以及 GNOME 的进度页面 中是我们目前的工作进度(注意:请不要直接从这两个页面下载文件进行翻译)。首先您必须登陆到这里:http://i18n.ricetons.com 如果是第一次登陆,您需要首先注册。登陆后,点击左侧的“Translation Statistics”,您可以从 KDE 或 GNOME 的进度页面中挑选还没有人负责的文件(状态为“A”),点击后弹出一个信息页面,点击下方的“Occupy”链接,从弹出的“占据”操作页面选择“With a prefilled PO Head”或者右键点击“Orginal File”选择“另存为”,下载它们的翻译文件(*.po)或翻译模版文件(*.pot)进行翻译。“With a prefilled PO Head”表示下载的文件预先填充好了 PO 头部信息,“Orginal File”则是原始文件。此时在“Translation Pool”以及“Task”页面就可以找到您占据的文件。

通常进度页面中相应的翻译文件(*.po)都是经过预填充的,也就是说已经翻译了一部分,可以直接拿来接着翻译。对于较大或从未有人翻译过的文件,您可以在开始工作之前先在邮件列表里声明一下,会有网友给您提供一个基于辞典的预翻译的文件,可以减少重复劳动。当然,所有预翻译的内容您都需要仔细校对。对于 GNU 软件的翻译,也请您在开始工作之前先在邮件列表里声明一下,邮件的标题可以是“申请 xxx.pot”、“占据 xxx.pot”、“Occupy xxx.po”或者“正在更新 xxx.po”。这样做是为了避免和其他人冲突,因为我们的状态页并不包含 GNU 软件,无法显示到底谁正在翻译某个文件。

如果您希望申请其它工作,可以跟王剑(我们的网络协调员) 联系。

请不要一次占据多个文件,以免影响整体进度。除非您确信您在短期内能完成所有工作一般的原则是:认领一个-- >完成一个-->提交一个。

请将 kdenonbeta 组的翻译放在最后进行,这个包里的软件都处于早期开发阶段,通常不会被加入最终的发行包里,请尽量优先翻译其他内容!

4.如何翻译

下载了 .pot 文件以后,请把它重命名为 .po 文件。第一步是修改文件头, 如果您不知道该怎么改,可以参考其它已翻译的 po 文件。这是一个例子(绿色的是修改的部分):

# translation of ***.po to Chinese Simplified  <--这里您可以填入一些注释# Copyright (C) 2008 Free Software Foundation, Inc.  <-- 填入翻译年代# Xie Yuheng <phycommusyee@263.net>, 2001.# Li Zongliang <li-zongliang@21cn.com>, 2001.
# Zong Yaotang <zyt@cosix.com.cn>, 2002.
# Liu Songhe <jackliu9999@263.net>, 2002.
# Xiong Jiang <jxiong@offtopic.org>, 2002.
# <-- 此处填入您自己的信息
#, fuzzy <-- * msgid ""msgstr """Project-Id-Version: kspread/n" <-- 填入模板名称"POT-Creation-Date: 2001-11-25 00:13+0100/n""PO-Revision-Date: 2002-12-16 20:30+0800/n" <-- 填入完成翻译的时间,北京时间为东8区时间(+0800)"Last-Translator: Xiong Jiang <jxiong@offtopic.org>/n" <-- 填入最后翻译者的信息
"Language-Team: zh_CN <i18n-translation@lists.linux.net.cn>/n" <-- 填入我们小组的信息"MIME-Version: 1.0/n""Content-Type: text/plain; charset=UTF-8/n" <-- 大小写不限,如果是 GB2312 编码,请写 GB2312,推荐使用 UTF-8 编码
"Content-Transfer-Encoding: 8bit/n"


* 通常,po 文件里没有这一行。如果在 pot 而不是 po 文件基础上翻译,您会看到它。
在您正式开始工作之前,请务必删除这一行!
"Plural-Forms: nplurals=1; plural=0;/n"

修改完文件头以后接着就是实质性的翻译了,po 文件的格式是一句 msgid 跟着一句 msgstr,以“#”开头的行是注释。您需要做的是把 msgid 中的英文翻译成中文写到 msgstr 中。例如:

#: app/floating_sel.c:198
msgid ""
"Cannot create a new layer from the floating/n"
"selection because it belongs to a/n"
"layer mask or channel."
msgstr ""
"无法从浮动选区创建新/n"
"图层,因为它属于一个/n"
"图层蒙板或通道。"

#: app/gimphelp.c:194
msgid "Could not find GIMP Help Browser"
msgstr "找不到 GIMP 帮助浏览器"

 

5.测试翻译

测试您的翻译的方法是:首先用 msgfmt 命令把 po 文件编译成 mo 文件,然后把 mo 文件复制到正确的 locale 目录下,重新启动程序即可。locale 目录一般是:

/usr/share/locale/zh_CN/LC_MESSAGES/  或者

/usr/locale/share/locale/zh_CN/LC_MESSAGES/

如果两者都不行,请在您软件的安装路径下找一找有没有相似的目录。通常一个 po 文件只要通过编译,就没有语法错误了。另外,可以用 msgfmt -cvv file.po 命令检查 po 文件是否有格式错误;用 msgfmt --statistics file.po 命令查看翻译统计信息。举个例子(输入文件为 gimp.po,输出文件为 gimp.mo):

msgfmt --statistics gimp.po -o gimp.mo
cp gimp.mo /usr/share/locale/zh_CN/LC_MESSAGES/
gimp &

如果您的翻译没有正常地在程序中显示出来,可能是由于编码原因。请试试把您的 po 文件中文件头的 charset 改为 UTF-8,再用下面提到的 iconvmsgconv 命令把文件转换成 UTF-8 编码,然后重新生成 mo 文件。

6.提交任务

文件完成翻译后,您需要再次登陆这里:http://i18n.ricetons.com。提交文件有三种方法:

  • 点击左侧的“任务”(Task),找到自己占据的文件,点击它,并选择“[Submit/Resubmit]”,点击“浏览”,在您的计算机上找到要提交的文件,在下面填上适当的注释,点击“Submit”即可提交到服务器。等待校对人员处理后,即可提交到官方 CVS 服务器。如果文件有错误,会看到错误提示。请找到相应的行,修改后重新提交一遍。
  • 点击左侧的“翻译池”(Translation Pool),然后再按上述步骤操作即可。
  • 在“翻译统计”(Translation Statistics)页面点击您占据的文件,在弹出的信息页面点击“[File In The Pool]” 从而转到“Translation Pool”,然后再按上述步骤操作即可。

 

对于不能自己提交的 GNU 软件翻译文件,可以通过“Submit a File Not IN KDE/GNOME”链接提交,等待校对人员检查,然后由网络协调员提交到相应的 CVS 服务器上,请耐心等待。对于其他不属于 KDE/GNOME/GNU 工程的软件翻译文件,也可以通过这种方法提交,然后将其 PO 文件在“Translation Pool”里的下载链接邮寄给软件的开发者。GNU 软件的提交方法参见这里翻译后的 PO 文件一旦被提交到 CVS 服务器上,那么它们将从“Task”或“Translation Pool”中消失。以后如果需要更新您所负责的翻译,请登陆后到进度页面中重新下载翻译文件(*.po),步骤同前,而不要在您旧的翻译文件基础上继续修改。因为进度页面中的文件才是 CVS 服务器中最新的待翻译内容。如果翻译后的 PO 文件尚未被提交到 CVS 服务器上,您应该可以按照上述方法,在“Task”或“Translation Pool”中找到您要重新翻译的文件,翻译后再按照上述方法选择“[Submit/Resubmit]”,重新提交一遍。因为“Translation Pool”中的 PO 文件会与最新的 POT 文件动态合并,而“Task”中的文件实际就是“Translation Pool”中的文件。

7.注意事项

(1) 关于文件编码格式的问题。

目前的翻译文件一般使用 UTF-8 编码。如果您的文本编辑器不支持 UTF-8,那么您需要在编辑文件之前和之后转换编码。在 Linux 下您可以用以下命令把文件从 UTF-8 转换成 GB2312。转换之后请务必将文件头部的 charset=utf-8 改为 charset=gb2312。在 Windows 下也有相应的软件,不过没有必要使用它,可以直接使用支持 UTF-8 编码的编辑器,或者干脆把 GB2312 编码的 po 文件直接提交到邮件列表,由校对人员去处理。

转换 utf-8 --> gb2312

iconv -f utf-8 -t gb2312 inputfile > outputfile

转换 gb2312 --> utf-8

iconv -f gb2312 -t utf-8 inputfile > outputfile

如果您安装了 gettext 0.11.x 或者更新的版本,还可用“msgconv -t 目标编码 源文件 -o 目标文件”实现转换。 msgconv 会自动修改文件头部,避免错误。

msgconv -t gb2312 inputfile -o outputfile

注意:如果您的 gettext 软件包版本号小于 0.10.40,很多工具它都没有,更严重的是它不能正确处理 po/pot 文件头部的信息!那么,您需要到这里下载最新版,编译安装:

ftp://ftp.gnu.org/gnu/gettext/

也可在这里下载 gettext 0.12.1 和 libiconv 1.9.1 的 windows 版,后者为必需的依赖包。

判断版别,请输入:

msgfmt -V

(2) 关于标点的使用问题。

一般的原则是:除了小括号、省略号和破折号保留不变以外,都应该使用中文(全角)标点符号。英文标点符号后方常常跟随有一个半角空格,请在翻译成中文标点符号时将其去除。

  1. 英文中的 , 在中文中可能是 或者
  2. 英文中的 . 在中文中应该是 或者 ,视上下文而定,多数是
  3. 英文中的 /"%s/" 应该翻译为 %s,而不是 /"%s/" 或者 /“%s/”,而且后者是不符合换码序列要求的。`something''something' 以及 /"something/" 都应该翻译为 某事
  4. 英文中的 : 应该翻译为 而不是 :,而作为分隔符时(例如时间),: 保留为英文(半角)的, 因为这个时候不是标点符号
  5. 英文中的( ) 应该保持不变。由于全角小括号( )很难看,也占地方,所以一律使用半角小括号 ( )
  6. 英文中的 ... 应该保持不变。由于翻译的时候常常难以分清哪些条目是菜单项,哪些条目是一般语句,而后者才能使用中文的省略号 ……,所以现在统一翻译为 ...
  7. 英文中的 -- 应该保持不变。由于全角破折号 —— 兼容性不好,有时显示为两个方格,所以不再使用。
原文
,
.
/"或`或'
:
( )
...
--
译文1
( )
...
--
译文2
:
   

(3) 关于菜单项中快捷字符的翻译问题。

快捷字符一律使用大写字母,用小括号括起来放到菜单文字的后面(如果有标点符号则放在标点符号的前面)。在 KDE 中,菜单快捷字符的前缀是“&”; 在 GNOME 中,菜单快捷字符的前缀是“_”。这里举几个例子:

# KDE menu
msgid "C&lear"
msgstr "清除(&L)"

msgid "&Glimmer Editor"
msgstr "Glimmer 编辑器(&G)"
# GNOME menumsgid "_Setup..."msgstr "设置(_S)..."
msgid "Get _CDDB Now"
msgstr "现在读取 CDDB(_C)"

msgid "/_Edit"
msgstr "/编辑(_E)" *msgid "/Edit/C_opy"
msgstr "/编辑(E)/复制(_O)" *msgid "/Edit/C_ut"
msgstr "/编辑(E)/剪切(_U)" *


*
注意:此处的翻译有点特别。由于“复制”和“剪切”均为“编辑”菜单的条目,只有这样翻译才能保证显示正确!

(4) 关于翻译中参数的位置问题。

有时候原来的参数顺序不符合中文的语法,一方面,翻译可以通过调整副词、语序等手法来符合中文习惯,另外一方面,在必要的情况下,需要改变参数的位置,例如在 KDE 中:

msgid "%1 articles match rule %2"
msgstr "匹配规则 %2 的文章有 %1 个"

如果是在 GNOME 中则应该这样写:

msgid "%d articles match rule %d"
msgstr "匹配规则 %2$d 的文章有 %1$d 个"

即用 1$、2$、3$ 等符号标明参数在原文里出现的位置。

(5) 关于空格问题。

为了美观,通常建议在中文与英文、中文与阿拉伯数字、英文与阿拉伯数字之间加入一个半角空格。例如:

msgid "Installing driver for %1"
msgstr "正在安装 %1 的驱动程序"

msgid ""
"Parameter start_num specifies the character at which to start the search. "
"The first character is character number 1. If start_num is omitted, it is "
"assumed to be 1."
msgstr ""
"参数 start_num 指定开始搜索的字符位置。第一个字符序号为 1。如果省略 "
"start_num,默认它为 1。"

但对于小括号和全角双引号,其两侧不加空格。

msgid "Original idea and author (KDE1)"
msgstr "原始创意和作者(KDE1)"

msgid ""
"The APM Management subsystem seems to be disabled./n"
"Try executing /"apm -e 1/" (FreeBSD) and see if /n"
"that helps./n"
msgstr ""
"APM 管理子系统似乎被禁用了。/n"
"试试执行“apm -e 1”(FreeBSD)并看看/n"
"是否有用。/n"

包含 XML/HTML 标签的条目,如要在标签中的内容两侧添加空格,请把空格置于标签外侧,否则空格可能显示不出来。

这是 &lt;b&gt;HTML&lt;/b&gt; 的语法手册

(6) 关于注释语句和署名问题。

对于 msgid 中的注释语句(通常以 _: 开头),请不要翻译。它是给译者的一些说明,帮助您理解原文,以便给出正确的译文。例如:

#: _translatorinfo.cpp:1
msgid ""
"_: NAME OF TRANSLATORS/n" <---请不要翻译它。署名处要加入我们组织的有关信息,然后才是翻译者的个人信息"Your names"msgstr "KDE 中国" <--可以用英文(半角)逗号分隔多个人名,不要使用其他符号#: _translatorinfo.cpp:3msgid """_: EMAIL OF TRANSLATORS/n""Your emails"msgstr "kde-china@kde.org" <--对应的多个邮件地址也要用英文(半角)逗号分隔msgid """_: 1: hostname, 2: port number/n""%1 port %2"msgstr "%1 端口 %2"

(7) 关于换行问题。

对于很长的译文,就涉及到了换行问题。多数情况下没有限制,因为不影响最终的显示效果,只要阅读起来方便就行。下面几种格式都是正确的:

msgid ""
"Preview failed: neither the internal KDE PostScript viewer (KGhostView) nor "
"any other external PostScript viewer could be found."
msgstr ""
"预览失败:找不到 KDE 内建的 PostScript 查看器(KGhostView)或其它外部"
"的 PostScript 查看器。"

msgid ""
"Preview failed: neither the internal KDE PostScript viewer (KGhostView) nor "
"any other external PostScript viewer could be found."
msgstr "预览失败:找不到 KDE 内建的 PostScript 查看器(KGhostView)或其它外部"
"的 PostScript 查看器。"

msgid ""
"Preview failed: neither the internal KDE PostScript viewer (KGhostView) nor "
"any other external PostScript viewer could be found."
msgstr ""
"预览失败:找不到 KDE 内建的 PostScript 查"
"看器(KGhostView)或其它外部"
"的 PostScript 查看器。"

但是,如果 msgid 前方有 #, c-format 标记,或者原文中有强迫换行标记 /n ,那就要手工调整译文的换行,以便能最终正确地显示在程序界面上。原则是译文长度不大于原文长度,否则可能译文显示超出原有区域,或者译文后面部分被截去,很难看。对于含有 HTML 标记的长译文还需要在浏览器中预览显示效果(如果您了解 HTML 基本语法的话),酌情调整行宽。例如:

#, c-format
msgid ""
"Error opening file '%s':/n"
"%s"
msgstr ""
"打开文件“%s”出错:/n"
"%s"

msgid ""
"Parse a theme dir and generate a /n"
"gkrellmrc_ksim file that KSim will understand /n"
"better and exit."
msgstr ""
"解析一个主题目录生成 KSim 容易理解/n"
"的 gkrellmrc_ksim 文件,然后退出。"

(8) 关于模糊译文问题。

如果看到 #, fuzzy 标记,则表示本段译文是由工具软件(通常是 msgmerge 命令)猜测翻译得到的。有时比较准确,有时却谬之千里。另一种情况是译者或校对人员主动加上去的,因为他们对该条译文没有把握。因此请对其译文进行修订,然后去除 #, fuzzy 标记,否则本段译文将不能显示在程序界面上。原则上,所有既往给出的译文,在翻译的时候都应该校对一遍。例如:

#: groupdlg.cpp:209 groupdlg.cpp:216 groupdlg.cpp:229
#, fuzzy
msgid "Get Tagged Articles"
msgstr "取得文章"

#: groupdlg.cpp:623
#, fuzzy, c-format
msgid "Connecting to server %s"
msgstr "正在连接服务器"

正确的译文为

#: groupdlg.cpp:209 groupdlg.cpp:216 groupdlg.cpp:229
msgid "Get Tagged Articles"
msgstr "取得标记的文章"

#: groupdlg.cpp:623
#, c-format
msgid "Connecting to server %s"
msgstr "正在连接服务器 %s"

(9) 关于已淘汰译文的问题。

老版本的程序中总有一些信息会在新版本中淘汰掉,这些译文都以 #~ 开头,并被置于整个 po 文件的后方,可以直接删除。例如:

#~ msgid "Error: no name"
#~ msgstr "错误:没有姓名"

#~ msgid "Configure"
#~ msgstr "配置"

(10) 关于单复数问题。

此问题主要见于 GNU 软件的翻译。由于某些语言的单复数变化极为复杂,为了应对这种局面,符合 i18n (internationalization) 国际化标准,gettext 技术通过读取 PO 文件头部如下一行中的信息来正确显示不同单复数的译文:

"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;/n"

INTEGER 表示单复数变化形式的数量,他是一个正整数。中、日、韩文里没有单复数区分,也就是说单复数变化形式只有一种,所以 nplurals=1,英文单复数有两种表现形式,所以 nplurals=2;

EXPRESSION 表示对第几种单复数变化取相应的第几种译文,他是一个标准的 C 语言表达式。如果有四种单复数变化,这个表达式的值将包括 0、1、2、3,分别对应于译文 msgstr[0]、msgstr[1]、msgstr[2]、msgstr[3]。所以,有时这个表达式相当复杂。在汉语里,只需 plural=0,译文只要保留 msgstr[0] 即可。

正确的设置:

"Plural-Forms: nplurals=1; plural=0;/n"

原文例如:

#: src/msgcmp.c:338 src/po-lex.c:701
#, c-format
msgid "found %d fatal error"
msgid_plural "found %d fatal errors"
msgstr[0] ""
msgstr[1] ""

正确的译文为:

#: src/msgcmp.c:338 src/po-lex.c:701
#, c-format
msgid "found %d fatal error"
msgid_plural "found %d fatal errors"
msgstr[0] "找到 %d 个严重错误"

 

(11) 关于时间译法的问题。

鉴于关于日期和时间的译法十分复杂,现在将国家标准中有关规定简要介绍一下,并给出推荐译法。

国标 GB/T 7408-94《数据元和交换格式 信息交换日期和时间表示法》

1994-12-06 发布,1995-08-01 实施

国家技术监督局发布

本标准等效采用国际标准 ISO 8601-1988《数据元和交换格式  信息交换日期和时间表示法》

可参见:
http://www.sznd.com/xslt/

这里说几个要点:

1. 在日期格式中不能出现空格,即“2003 年”这样的格式是不符合国标的。

2. 表示日期时,必须按照年月日的顺序;年份一般用四位数字,而月、日必须使用带前导零的两位数字;必须使用“-”作为分隔符,或完全不使用分隔符。即“2004-01-03”或“20040103”来表示 2004年1月3日。

3. 表示时间时,时、分、秒都必须使用两位数字,中间用“:”分隔,或完全不使用分隔符。小时计法采用24小时制,不区分上下午。

4. 日期和时间写在一起的时候,应先写日期再写时间。在日期和时间都不使用分隔符的情况下,在中间添加字母“T”进行分隔,即“19850412T101530”。

(12) 其他问题。

  • 请尽量避免口语化的翻译,除非是诸如电子游戏的场景对话、格言、谚语等特殊情况。
  • 请使用“您”而不要用“你”。

 

8. 一些帮助

如果遇到一些您不知道该如何翻译的词语,您可以:

  • 到我们主页的在线字典中查询。
  • 如果是一些专业术语或特殊词语,可以试试到 Google 中查询。
  • 到网上其它一些在线字典查询,比如 http://www.yourdictionary.com/diction1.html
  • 在邮件列表中讨论。

对于一些常见的词语,为了跟其它人的翻译用语基本一致,也应该先参考在线字典。不过目前我们在统一翻译用语方面还做得很不够。:-(

对于 po 文件中一些以前翻译过的或者别人翻译过的翻译项,可以利用程序将其自动填充进模板文件(*.pot),减轻您的工作。 GNU gettext 软件包就是这样的工具,我们已经完成了它的翻译工作,不过暂时还要请您自己看帮助。它们几乎都是以 msg 开头的命令,在 bash 中输入 msg 然后连按两次 Tab 键就可以看到它们。输入命令并使用 --help 选项就可以看到帮助了。我们主页上也有一个自动翻译程序,完成类似的功能,您可以试试,不过它的功能很弱。

最后更新时间 2004-02-08 08:26

注:本文来自http://i18n.linux.net.cn/method.php,但原网页已经丢失很久了,而且近日发现在Google中都没有缓存了,于是赶紧找来放上来了。(齐亮)

注:本文来自http://i18n.linux.net.cn/method.php早期成员 heyuqi 的一段很短小的说明,很多内容都没有述及,我们在其基础上根据当时的翻译现状进行了全面修订,后来由于相关站点失去维护,上文提到的很多内容都已经不能使用,但是翻译原则还是有效的,希望对大家的翻译工作有所裨益。(刘松鹤)

原创粉丝点击