跳转到主要内容

自动翻译由PloneFlashUpload上传的文件

项目描述

完整的自述文件,包含在 slc/autotranslate/README.txt 中的 doctests

介绍

此产品在所有基于 BaseFolder 的文件夹中添加了一个布尔值 'autoTranslateUploadedFiles',使上传的任何文件都能自动翻译。

“翻译”在这里仅仅指识别文件的语言并将其语言代码设置为相应的过程(通过 setLanguage)。

文件将被翻译成哪种语言,由文件名决定。文件名必须以语言代码开头或结尾,后面跟着一个下划线。

以下都是有效的文件名

  • de_factsheet.pdf

  • factsheet_de.pdf

如何使用(文档测试)

首先,我们导入所有需要的

>>> from z3c.widget.flashupload.interfaces import FlashUploadedEvent
>>> from Products.Archetypes.event import ObjectInitializedEvent
>>> from zope import event

我们将在测试用户的 Member 文件夹内部创建一个文件夹来上传我们的测试文件。

>>> self.folder.invokeFactory('Folder', 'publications')
'publications'
>>> folder = self.folder._getOb('publications')

要启用自动翻译功能,我们必须在父文件夹上设置 'autoTranslateUploadedFiles' 字段。

这是一个通过架构扩展添加的字段,因此我们无法使用 Archetypes 生成的修改变量。

>>> folder.Schema().get('autoTranslateUploadedFiles', True).set(folder, True)

现在我们模拟通过 PloneFlashUpload 上传 2 个文件。每次我们在我们的文件夹内部创建一个文件,然后调用 FlashUploadedEvent。

>>> for fn in ['en_file.txt', 'de_file.txt']:
...     fid = folder.invokeFactory('File', fn)
...     file = getattr(folder, fid)
...     f = open('src/slc.autotranslate/slc/autotranslate/tests/files/%s' % fn)
...     file.setFile(f)
...     event.notify(FlashUploadedEvent(file))

让我们看看我们的上传文件是否已正确设置为它们的指示语言,并且规范也被正确设置

>>> file = getattr(folder, 'en_file.txt')
>>> file.getLanguage()
'en'
>>> file.getCanonical()
<ATFile at /plone/Members/test_user_1_/publications/en_file.txt>
>>> file = getattr(folder, 'de_file.txt')
>>> file.getLanguage()
'de'
>>> file.getCanonical()
<ATFile at /plone/Members/test_user_1_/publications/en_file.txt>

以语言代码结尾的文件名(而不是它作为前缀)也是有效的。我们现在将测试这一点。

首先,我们再次上传一个文件,这次是文件_es.txt(西班牙语)

>>> fid = folder.invokeFactory('File', 'file_es.txt')
>>> file = getattr(folder, fid)
>>> f = open('src/slc.autotranslate/slc/autotranslate/tests/files/file_es.txt')
>>> file.setFile(f)

现在我们触发事件。这次,我们使用 Archetypes 的 ObjectInitializedEvent,以表明通常添加(而不是 PloneFlashUpload)的文件也会被翻译。

>>> event.notify(ObjectInitializedEvent(file))

让我们测试文件的语言和规范是否设置正确

>>> file = getattr(folder, 'file_es.txt')
>>> file.getLanguage()
'es'
>>> file.getCanonical()
<ATFile at /plone/Members/test_user_1_/publications/en_file.txt>

有关额外的 doctests,请参阅 tests/doctests.txt 文件夹。

变更历史

1.5.4 (2010-04-01)

  • Bugix:图片没有 getFile 方法,使用 getFilename 替代,因为它对文件和图片都有效(deroiste)

1.5.3 (2010-02-10)

  • 修复了我的最近添加的子句的 bug:由于规范可能为 None,我们必须考虑这种情况(thomasw)

  • 如果由于任何原因在同一个文件上两次调用 translate_file,可能会发生文件不再存在于父文件中,但它已经被移动到父文件的翻译中。因此,在尝试删除它之前,请确保文件仍然存在(thomasw)

  • 通过设置标志来防止对同一文件两次调用 translate_file。这可能会发生在文件通过 flash 上传时。首先,触发 IObjectInitializedEvent,然后是 FlashUploadedEvent。(thomasw)

1.5.2 (2010-01-28)

  • 在 translate_file 中添加了一个子句,防止尝试添加已存在的翻译引用(thomasw)

1.5.1 (2009-12-10)

  • 默认视图配置的小改动(jcbrand)

1.5 (2009-11-20)

  • 现在与 Products.PloneFlashUpload = 1.3b1 兼容;也向后兼容(thomasw)

1.4.3 (2009-10-22)

  • 在上传的文件上调用 unmarkCreationFlag;否则,PFU 上传的文件可能在第一次编辑时触发 IObjectInitializedEvent,导致 AlreadyTranslated 错误(thomasw)

1.4.2 (2009-10-22)

  • 添加更详细的日志输出(jcbrand)

  • 修复了 split_filename 中的名称,其中文件的基本名称为 2 个字符的文件没有正确处理(jcbrand)

slc.autotranslate 1.4.1(2009-09-10)

  • 在上传文件设置语言之前和之后调用 LinguaPlone 事件。(jcbrand)

  • 使用 addTranslationReference 而不是 addReference(jcbrand)

  • 从规范复制语言无关的值(jcbrand)

slc.autotranslate 1.4(2009-09-09)

  • 在已翻译的父文件夹中搜索现有翻译(jcbrand)

  • 重构事件并将 'translate_file' 方法移动到新的模块 utils.py(jcbrand)

  • 向 utils.py 添加了新的实用方法(jcbrand)

  • 为新的用例扩展 doctests。(jcbrand)

slc.autotranslate 1.3(2009-08-26)

  • 在发生 CopyError 的情况下,手动设置文件的语言并将文件复制并粘贴到适当的语言版本父文件夹。(jcbrand)

  • 扩展doctests以测试更多用例。(jcbrand)

slc.autotranslate 1.2 (2009-08-24)

  • 将间奏曲作为包依赖项添加

slc.autotranslate 1.1 (2009-08-21)

  • 使用setLanguage而不是addTranslation (jcbrand)

  • 正确设置规范和翻译引用 (jcbrand)

  • 添加更广泛的测试 (jcbrnad)

slc.autotranslate 1.0 (2009-08-13)

  • 初始发布。(jcbrand)

贡献者

  • Jan-Carel Brand (Syslab.com GmbH)

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

slc.autotranslate-1.5.4.tar.gz (12.2 kB 查看哈希值)

源代码

由以下支持