Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

术语表讨论确定 #2

Closed
ShenQingchuan opened this issue Jan 6, 2022 · 31 comments
Closed

术语表讨论确定 #2

ShenQingchuan opened this issue Jan 6, 2022 · 31 comments

Comments

@ShenQingchuan
Copy link
Member

ShenQingchuan commented Jan 6, 2022

这个 issue 帖用于讨论确定本文档中的术语表。

在翻译团队审阅完目前的全部文档内容后,这个置顶帖会统计和罗列最终确定的结果。

任何疑问、意见或建议都可以通过在此 issue 下方跟帖来提出。

最终敲定表

这里汇总的是本 issue 帖中的意见归纳,可能和现有已确定的术语表有重合。

英文原词 词性 中文翻译意见 备注
hydration n. 激活 vuejs/docs-next-zh-cn#786
caveats n. 注意事项
@wxsms
Copy link
Member

wxsms commented Jan 6, 2022

贴一下 原术语约定

@Jinjiang
Copy link
Member

Jinjiang commented Jan 6, 2022

我核实了一下 mixin 和 effect 算是和之前 wiki 里整理的内容是吻合的

  • mixin 不翻译 #350#382
  • hydration 印象中也许很早的时候 v2 或 ssr 的文档里出现过水合的译法,但早已经没有在用了,最近的讨论结果是“激活”,印象中小右当时也线下参与了的讨论 #786
  • effect 在特指“effect scope”的时候保留英文,即“effect 作用域”,其它一般化自然语言描述的情况下译为“作用”,例如“side effect”译为副作用 #657

@Justineo
Copy link
Contributor

Justineo commented Jan 6, 2022

关于 effect 原来的 wiki 里有一个地方要改:effect flush timing 要从副作用刷新时机改为 effect 刷新时机(不过其实这一条感觉不需要在 wiki 里单列出来了)。

@ShenQingchuan
Copy link
Member Author

ShenQingchuan commented Jan 6, 2022

我核实了一下 mixin 和 effect 算是和之前 wiki 里整理的内容是吻合的

  • mixin 不翻译 #350#382
  • hydration 印象中也许很早的时候 v2 或 ssr 的文档里出现过水合的译法,但早已经没有在用了,最近的讨论结果是“激活”,印象中小右当时也线下参与了的讨论 #786
  • effect 在特指“effect scope”的时候保留英文,即“effect 作用域”,其它一般化自然语言描述的情况下译为“作用”,例如“side effect”译为副作用 #657

同意对自然存在的 effect 进行翻译。根据上下文语境情况,翻译为 “作用”、“效果” 或者 “影响” 应该都是合理的。

@Jinjiang
Copy link
Member

Jinjiang commented Jan 6, 2022

关于 effect 原来的 wiki 里有一个地方要改:effect flush timing 要从副作用刷新时机改为 effect 刷新时机(不过其实这一条感觉不需要在 wiki 里单列出来了)。

认同,我删掉了

@Justineo
Copy link
Contributor

Justineo commented Jan 6, 2022

我觉得 effect 作为 Vue 中特定的概念就统一不翻译了,不仅仅针对“effect scope”。Side effect 里面的 effect 不是这个概念,就翻译成“副作用”。

@ShenQingchuan
Copy link
Member Author

ShenQingchuan commented Jan 7, 2022

我觉得 effect 作为 Vue 中特定的概念就统一不翻译了,不仅仅针对“effect scope”。Side effect 里面的 effect 不是这个概念,就翻译成“副作用”。

cc @Jinjiang @wxsms @Justineo

所以我们针对 effect 有一个结论么?

我个人是觉得 effect 作为一个基本单词,出现的频率很高,我个人在翻译的时候秉持的原则是 “除非一个词确实是很难翻译,且概念非常特殊” 我才会保留原词,尽量不让中文文档中老是出现英文词汇。

另外,这个词结合上下文语境 采用恰当的中文词汇 翻译,往往能更符合中文语言习惯。 cc @yyx990803 可否看完后也给些意见?( 😅 这次翻译量比较大,大家需要很多时间才可以完整看完)

@Jinjiang
Copy link
Member

Jinjiang commented Jan 8, 2022

如果简化一下说法,我们是不是可以认为特指 Vue 里的 Effect Scope API 的时候不翻译,其它场景都翻译成“作用”

Ref:https://v3.vuejs.org/api/effect-scope.html

不仅仅针对“effect scope”

截至目前还有别的特定概念吗? @Justineo

@Justineo
Copy link
Contributor

Justineo commented Jan 8, 2022

有的,Vue 本身就有 watchEffect API,还有之前遇到过的“effect flush timing”。

@Jinjiang
Copy link
Member

Jinjiang commented Jan 8, 2022

有的,Vue 本身就有 watchEffect API,还有之前遇到过的“effect flush timing”。

哦,发现了。Effect Scope API 确实范围说得有点太小了。

你觉得可以重新归纳为 Reactivity API 范围内吗?还是索性理解为“Vue 中的相关特定概念”

@Justineo
Copy link
Contributor

Justineo commented Jan 8, 2022

就是VCA里的概念吧

@ShenQingchuan
Copy link
Member Author

ShenQingchuan commented Jan 8, 2022

这里我想先确认一点保证我的理解和大家没有偏差 ...

effect 作为 Composition API 的特定概念是不是就是在表示 "(依赖变更、引发响应式变化所带来的)(副)作用" 呢?还是其他的什么概念 ...

(因为我自己在翻译的时候是这么认为的,如果有误,可能在相应章节有较大调整。)

我感觉在原文中很多地方 effect 和 side effect 表达的意思区别不大呀😂;这二者的具体区别是什么?如果有必要说明的区别可能也需要在翻译中体现。

为了使讨论有效果,我也认同 effect 是特定概念,可以不翻译。

但每当有这种情况,对入门读者来说,很难让他们直接像 redis 一样将一个英语单词对应一个概念。所以我是希望我们能先在文档中说明这个特定概念究竟是什么。

@ShenQingchuan
Copy link
Member Author

ShenQingchuan commented Jan 8, 2022

这里我想先确认一点保证我的理解和大家没有偏差 ...

effect 作为 Composition API 的特定概念是不是就是在表示 "(依赖变更、引发响应式变化所带来的)(副)作用" 呢?还是其他的什么概念 ...

(因为我自己在翻译的时候是这么认为的,如果有误,可能在相应章节有较大调整。)

我感觉在原文中很多地方 effect 和 side effect 表达的意思区别不大呀😂;这二者的具体区别是什么?如果有必要说明的区别可能也需要在翻译中体现。

为了使讨论有效果,我也认同 effect 是特定概念,可以不翻译。

但每当有这种情况,对入门读者来说,很难让他们直接像 redis 一样将一个英语单词对应一个概念。所以我是希望我们能先在文档中说明这个特定概念究竟是什么。

深入响应性原理 原文,定义 “a few terms” 的时候有这样一句:

The update() function produces a side effect, or effect for short, because it modifies the state of the program.

所以我在那之后大多数情况下都把 effect 认为是 side effect 的 short hand

如果是将 原文这一段 “定义了一些术语” 作为概念的介绍,那么引入 effect 这个英语单词是合理的。但我又考虑到这一章节是进阶阅读,且位置偏靠后,所以一般都是用了 “副作用” 这一译法

@Jinjiang
Copy link
Member

Jinjiang commented Jan 9, 2022

就是VCA里的概念吧

理论上 VOA 里想用这些 API 也可以,我个人是把 Reactivity API 和 VOA/VCA 分开看的

@Jinjiang
Copy link
Member

Jinjiang commented Jan 9, 2022

这里我想先确认一点保证我的理解和大家没有偏差 ...
effect 作为 Composition API 的特定概念是不是就是在表示 "(依赖变更、引发响应式变化所带来的)(副)作用" 呢?还是其他的什么概念 ...
(因为我自己在翻译的时候是这么认为的,如果有误,可能在相应章节有较大调整。)
我感觉在原文中很多地方 effect 和 side effect 表达的意思区别不大呀😂;这二者的具体区别是什么?如果有必要说明的区别可能也需要在翻译中体现。
为了使讨论有效果,我也认同 effect 是特定概念,可以不翻译。
但每当有这种情况,对入门读者来说,很难让他们直接像 redis 一样将一个英语单词对应一个概念。所以我是希望我们能先在文档中说明这个特定概念究竟是什么。

深入响应性原理 原文,定义 “a few terms” 的时候有这样一句:

The update() function produces a side effect, or effect for short, because it modifies the state of the program.

所以我在那之后大多数情况下都把 effect 认为是 side effect 的 short hand

如果是将 原文这一段 “定义了一些术语” 作为概念的介绍,那么引入 effect 这个英语单词是合理的。但我又考虑到这一章节是进阶阅读,且位置偏靠后,所以一般都是用了 “副作用” 这一译法

好问题,我个人理解 effect 这个词是从函数式编程里的概念来的。另外 side effect 有一个比较主流的中文翻译了叫“副作用”,相比于“main effect” (似乎没有特别的中文译法与之对应),指各种除了返回值以外执行函数对外界产生的影响。其余部分我也是一知半解。

回到 Vue 的 effect 相关概念和 API,我个人感觉这里从 tech design 的角度,大家并不介意这个 effect 是 main effect 还是 side effect,总之是个抽象的 effect。比如 watchEffecteffectScope,所以尽管绝大多数情况下有 side effect 产生,我们还是说这是个 effect,没有更具体的指定。

我可以再试着找一些周围对 FP 比较熟的同学加入讨论。

谢谢

@wxsms
Copy link
Member

wxsms commented Jan 16, 2022

我注意到现翻译许多 caveats 被翻译为了”约定“,根据先前达成的共识,建议修改为”注意事项“。见 vuejs/docs-next-zh-cn#793

@Jinjiang
Copy link
Member

我注意到现翻译许多 caveats 被翻译为了”约定“,根据先前达成的共识,建议修改为”注意事项“。见 vuejs/docs-next-zh-cn#793

同意。我看这个术语表里也有,应该不存在什么问题

@KimYangOfCat
Copy link
Contributor

KimYangOfCat commented Jan 16, 2022

image
关于 guide 的翻译,目前翻译为 “指引”
但是结合语境,我认为“指南” 更适合,毕竟这里是想指代一份文档,应是名词含义。
“指引” 通常做动词较多,名词较少;而“指南”作名词时,与“手册”为近义词,更符合当前语境

@KimYangOfCat
Copy link
Contributor

src\guide\essentials\reactivity-fundamentals.md 一文中,有一对反义词:wrap 与 unwrap
目前的翻译为:包裹/解套;感觉有点难以理解!
在我阅读英文文档后,我个人理解的这两个动词类似于《JavaScript 高级程序设计》第四版中所描述的包装对象,故我提议的翻译为: 包装和解包;感觉会更准确一点儿。
我在校对中也先行这样修改了,如果有不同意见,欢迎交流

@zhangenming
Copy link
Contributor

src\guide\essentials\reactivity-fundamentals.md 一文中,有一对反义词:wrap 与 unwrap 目前的翻译为:包裹/解套;感觉有点难以理解! 在我阅读英文文档后,我个人理解的这两个动词类似于《JavaScript 高级程序设计》第四版中所描述的包装对象,故我提议的翻译为: 包装和解包;感觉会更准确一点儿。 我在校对中也先行这样修改了,如果有不同意见,欢迎交流

或者参考C的引用/解引用?

@KimYangOfCat
Copy link
Contributor

@zhangenming 个人理解,此处的语境与 C 的引用有些不同,wrap\unwrap的操作对象都是基础类型,是将一个基础类型包装成引用类型(object);这个概念与 JavaScript中的包装对象几乎是一致的。vue 作为JavaScript 的框架,我认为还是参考已有《JavaScript 高级程序设计》中的翻译更合适一点儿。
不同的语言有类似的概念还是有些不同的描述方式。

@Justineo
Copy link
Contributor

但是结合语境,我认为“指南” 更适合

同意。

故我提议的翻译为: 包装和解包

之前中文文档讨论的结论是:包裹/解包,见 vuejs/docs-next-zh-cn#487

@KimYangOfCat
Copy link
Contributor

KimYangOfCat commented Jan 18, 2022

之前中文文档讨论的结论是:包裹/解包,见 vuejs/docs-next-zh-cn#487

我看了之前的讨论,虽然当时给定了一个翻译,但是当时的讨论中并没有列举出太多相关的已发布的翻译参考

我找到了《JavaScript 高级程序设计》的英文原版《Professional Javascript for Web Developers》,其中对原始值包装对象的描述如下:
image

其对应的中文译文如下:

在上述例子中 wrapper 被译为 包装对象

且其提到的包装对象与本文档的 Reactive Variables with ref() 中所描述的思想有异曲同工之妙。(仅个人理解的相似)

Reactive Variables with ref()

To address the limitations of reactive(), Vue also provides a ref() function which allows us to create reactive "refs" that can hold any value type:
ref() takes the argument and returns it wrapped within a ref object with a .value property:

再者,鉴于《JavaScript 高级程序设计》译本的流行程度,绝大部分前端开发者都或多或少的阅读过此书,所以我认为参考书中的译法有助于开发者理解本文档。

综上所述,我依旧提议将 wrap/unwrap 译为 包装/解包

@Jinjiang
Copy link
Member

Jinjiang commented Jan 18, 2022

unwrap 本身译法也是解包,我相信这个大家比较容易达成共识。
wrap 译为包装或包裹我个人觉得都可以,如果《JavaScript 高级程序设计》上把截图中的场景译为包装我觉得算是个比较有说服力的因素吧,但坦白说我没有看过中文译版,@KimYangOfCat 是否介意摘一段中文翻译供进一步讨论和确认?

guide 译为指南我觉得没问题

BTW,这个帖子我倾向于针对后续每个新的词的译法讨论单独开贴,因为讨论总量有点过长了。我个人建议我们把以下词汇讨论清楚之后整理到 wiki 然后关闭该 issue:

  • unwrap/wrap
  • guide
  • effect
  • hydration
  • mixin
  • caveat

谢谢

@Justineo
Copy link
Contributor

Justineo commented Jan 18, 2022

这个包装是 boxing 吧? 前面没看到原文,还真是 wrapper,不过这种一般都是叫 boxing wrapper 的,是一个其它语言也有的概念,和 ref 还是有挺大的区别的。

@ShenQingchuan
Copy link
Member Author

近一段时间,我由于身体原因没有太多参与讨论。
另外由于 Guide 部分本身是我翻译,所以此时更多的是听取大家的意见和反馈。
目前我吸取了各位同学的意见后对 @Jinjiang 所列的几个词的意见是:

  • unwrap/wrap:同意 @Justineo 所提出的 “包裹 / 解包” ,解套这个词我在某个已经记不清的别处看到的,可能的确不够准确直白
  • guide:译作 “指南” 显然更好,同意
  • effect:个人还是觉得译作 “作用”,并适当结合语境。仅在必要时再作特殊翻译
  • hydration:遵照之前工作组的讨论,选用 “激活”
  • mixin:遵照旧的词汇约定,不翻译
  • caveat:同意 @wxsms 所提 “注意事项”

@KimYangOfCat
Copy link
Contributor

@ShenQingchuan 嗨,感谢你的翻译,请多多保重身体嗷!
不过,关于 unwrap,目前我们是没有分歧哒,主要的分歧在于 wrap 的翻译,目前是“包裹”,是我提议翻译为“包装”哒,列举的原因在上边啦。

@KimYangOfCat
Copy link
Contributor

KimYangOfCat commented Jan 20, 2022

这个包装是 boxing 吧? 前面没看到原文,还真是 wrapper,不过这种一般都是叫 boxing wrapper 的,是一个其它语言也有的概念,和 ref 还是有挺大的区别的。

@Justineo 嗨,我完全同意你说的 wrapper 与 ref 有很大区别。我来说一下上文中我没有完全说明的相似之处是什么吧。请允许我先用“包装”来描述相关内容,你可以将其看做是“包裹”:

先聊聊原始值和其包装对象吧。我简要概括了一下《JavaScript 高级编程》中的内容,JavaScript 为了让 原始值具有一些基础的方法和属性,选择在访问其方法和属性时创建一个相应的包装对象,从而暴露出操作各种方法和属性。当然包装对象与正常对象也是有区别哒:

引用类型与原始值包装类型的主要区别在于对象的生命周期。在通过new实例化引用类型后,得到的实例会在离开作用域时被销毁,而自动创建的原始值包装对象则只存在于访问它的那行代码执行期间。

而关于 reactive() 与 ref(),首先说明我并没有完整地阅读过 Vue 的源码,并不清楚 reactive() 与 ref() 的内部实现 ,以下的一些理解仅来自于文档内容以及个人有限的 JavaScript 知识,可能有错误,敬请斧正,感谢!

我们先来看看 reactive() 局限性的第一点吧:

reactive() API 有两条限制:

  1. 仅对对象类型有效(对象、数组和 MapSet 这样的集合类型),而对 stringnumberboolean 这样的 基础类型 无效。

在这里我们想一下为什么 reactive() 对 stringnumberboolean 这样的基础类型无效?
我个人的理解是这与对象类型和基础类型在值传递时的区别有关。对象类型在值传递时传递的是引用值(也可以简单理解成指针?),而基础类型在值传递时,传递的是值本身,是复制,是创建了一个新的值。而我理解的响应式应该也是基于引用的,即互相响应的两个对象是唯一的,而中间不断被复制传递的是它们的引用。但若相互响应的两个对象是基础类型,基础类型在中间传递过程中不断被复制创建,最后传递到另一方中的变量早已不是最初的基础变量,所以此时响应式会失效。

接下来我们来看看可以解决上边这个局限性的 ref():

ref() 定义响应式变量 ** {#reactive-variables-with-ref}

为了解决 reactive() 带来的限制,我们提供了另一个 ref() 方法来帮我们创建响应式的 ref,它可以装载任何值类型:

import { ref } from 'vue'

const count = ref(0)

ref() 从参数中获取到值,将其包裹为一个带 .value 属性的对象:

从上边的内容中,我们可以知道 ref() 解决 reactive() 局限性的本质方法是创建一个对象来接收原本的原始值,利用对象的引用保证在传递过程中始终保证能找到最初的原始值,也就保证了响应式。从 ref 的命名上应该是能看是 ref 是reference 的缩写。

终上所述,我完全同意 @Justineo 所说的不同,我将其总结如下:

  • 创建的目的不同,前者是为了暴露基础方法和属性,后者是为了利用引用传递
  • 生命周期不同,前者只存在于访问属性或方法的那一行,而后者是真正的对象,只有离开作用域后才会销毁。

但这些不同对 wrap 有什么影响吗?我个人认为是没有的,这两者之间诚然有非常多的不同,目的、结果等等都不相同,但它们的过程都是一致的,都是 将一个原始值转变为一个对象,而 wrap 不正是用来描述这个过程的吗?

而这也是我前面所提到的我个人理解的思想层面的相似:

且其提到的包装对象与本文档的 Reactive Variables with ref() 中所描述的思想有异曲同工之妙。(仅个人理解的相似)


最后,回到关于 wrap 的翻译,翻译为“包装”或者“包裹”都能表达其含义,但如果你能同意我前面所说的这种相似性,那我认为“包装”可能更合适,阅读过《JavaScript 高级程序设计》的同学可能从中更快地理解这个过程。

@zhangenming
Copy link
Contributor

JS本身就有包装对象的概念吧
再叫包装容易搞混吧
反而包裹是第一次听到 容易印象更深

@Jinjiang
Copy link
Member

Jinjiang commented Mar 8, 2022

Hi 诸位,不介意的话我另外开一个 wrap/unwrap 的译法讨论好了,看上去其它的译法讨论都已经有结论了,这个术语讨论的 issue 我就先关掉了。🙏

@Jinjiang
Copy link
Member

Jinjiang commented Mar 8, 2022

#133

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants