From dc77b872e271960a4c90311bdd1d905418de0406 Mon Sep 17 00:00:00 2001 From: isPoto <59009389+isPoto@users.noreply.github.com> Date: Thu, 9 Dec 2021 16:09:21 +0800 Subject: [PATCH 1/3] Create index.js --- src/localization/zh-cn/index.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 src/localization/zh-cn/index.js diff --git a/src/localization/zh-cn/index.js b/src/localization/zh-cn/index.js new file mode 100644 index 00000000..fe9d1ec1 --- /dev/null +++ b/src/localization/zh-cn/index.js @@ -0,0 +1,13 @@ +import cheatsheet from "./cheatsheet.json"; +import general from "./general.json"; +import landing from "./landing.json"; +import learn from "./learn.json"; + +const messages = { + ...cheatsheet, + ...general, + ...landing, + ...learn +}; + +export default messages; From d53da0050f1c482008702d73eda56321ac9a2515 Mon Sep 17 00:00:00 2001 From: isPoto <59009389+isPoto@users.noreply.github.com> Date: Thu, 9 Dec 2021 16:09:40 +0800 Subject: [PATCH 2/3] Add files via upload --- src/localization/zh-cn/cheatsheet.json | 67 ++++++++++ src/localization/zh-cn/general.json | 32 +++++ src/localization/zh-cn/landing.json | 20 +++ src/localization/zh-cn/learn.json | 163 +++++++++++++++++++++++++ 4 files changed, 282 insertions(+) create mode 100644 src/localization/zh-cn/cheatsheet.json create mode 100644 src/localization/zh-cn/general.json create mode 100644 src/localization/zh-cn/landing.json create mode 100644 src/localization/zh-cn/learn.json diff --git a/src/localization/zh-cn/cheatsheet.json b/src/localization/zh-cn/cheatsheet.json new file mode 100644 index 00000000..70672a83 --- /dev/null +++ b/src/localization/zh-cn/cheatsheet.json @@ -0,0 +1,67 @@ +{ + "cheatsheet.anchors": "锚", + "cheatsheet.caret.title": "字符串或行的开头", + "cheatsheet.caret.description": "匹配字符串或行的开头。", + "cheatsheet.dollar.title": "字符串或行的末尾", + "cheatsheet.dollar.description": "匹配字符串或行的末尾。", + "cheatsheet.wordBoundary.title": "单词边界", + "cheatsheet.wordBoundary.description": "匹配单词字符或者末尾的位置", + "cheatsheet.notWordBoundary.title": "非单词边界", + "cheatsheet.notWordBoundary.description": "匹配一个不在词尾的单词字符或位置。", + + "cheatsheet.characterClasses": "字符类", + "cheatsheet.characterSet.title": "字符集", + "cheatsheet.characterSet.description": "匹配集合中的任何字符", + "cheatsheet.negatedCharacterSet.title": "否定字符集", + "cheatsheet.negatedCharacterSet.description": "匹配不在集合中的任意字符。", + "cheatsheet.range.title": "范围", + "cheatsheet.range.description": "匹配两个字符之间的任何字符,包括它们本身。", + "cheatsheet.dot.title": "点", + "cheatsheet.dot.description": "匹配除换行符之外的任何字符。", + "cheatsheet.word.title": "单词", + "cheatsheet.word.description": "匹配任何字母数字字符。包括下划线。", + "cheatsheet.notWord.title": "非单词", + "cheatsheet.notWord.description": "匹配任何非字母数字字符", + "cheatsheet.digit.title": "数字", + "cheatsheet.digit.description": "匹配所有数字。", + "cheatsheet.notDigit.title": "非数字", + "cheatsheet.notDigit.description": "匹配所有非数字。", + "cheatsheet.space.title": "空格", + "cheatsheet.space.description": "匹配所有空格。", + "cheatsheet.notSpace.title": "非空格", + "cheatsheet.notSpace.description": "匹配所有非空格", + + "cheatsheet.flags": "模式", + "cheatsheet.caseInsensitiveFlag.title": "忽略大小写", + "cheatsheet.caseInsensitiveFlag.description": "忽略大小写", + "cheatsheet.globalFlag.title": "全局", + "cheatsheet.globalFlag.description": "确保表达式匹配所有结果", + "cheatsheet.multilineFlag.title": "多行", + "cheatsheet.multilineFlag.description": "如果不启用,行开始和结束等于整个字符串的开始和结束。它不对每一行单独起作用。", + + "cheatsheet.groupAndReferences": "组和引用", + "cheatsheet.group.title": "组", + "cheatsheet.group.description": "表达式分组", + "cheatsheet.reference.title": "引用", + "cheatsheet.reference.description": "引用分组的表达式。", + "cheatsheet.nonCapturingGroup.title": "非捕获组", + "cheatsheet.nonCapturingGroup.description": "创建无法引用的分组。", + + "cheatsheet.lookarounds": "零宽断言", + "cheatsheet.positiveLookahead.title": "正先行断言", + "cheatsheet.negativeLookahead.title": "负先行断言", + "cheatsheet.positiveLookbehind.title": "正后发断言", + "cheatsheet.negativeLookbehind.title": "负后发断言", + + "cheatsheet.quantifiersAndAlternation": "量词与分枝条件", + "cheatsheet.plus.title": "加号", + "cheatsheet.plus.description": "匹配一次或多次", + "cheatsheet.asterisk.title": "星号", + "cheatsheet.asterisk.description": "表达式匹配零个或多个", + "cheatsheet.quantifier.title": "重复", + "cheatsheet.quantifier.description": "指定范围内匹配的表达式。", + "cheatsheet.optional.title": "可选", + "cheatsheet.optional.description": "使某个字符可选", + "cheatsheet.alternation.title": "分枝条件", + "cheatsheet.alternation.description": "创建 `or` (`或`)判断条件。用于匹配多种可能的字符" +} diff --git a/src/localization/zh-cn/general.json b/src/localization/zh-cn/general.json new file mode 100644 index 00000000..9e6e906c --- /dev/null +++ b/src/localization/zh-cn/general.json @@ -0,0 +1,32 @@ +{ + "general.prev": "上一个", + "general.next": "下一个", + "general.result": "结果", + "general.regex": "正则表达式", + "general.text": "文本", + "general.completedStep": "完成步骤!", + "general.hintQuestion": "显示答案", + "general.reportStep": "报告问题", + "general.startLearning": "开始学习", + "general.comingSoon": "即将推出", + "general.becomeSponsor": "成为赞助商", + "general.learn": "学习", + "general.playground": "游乐场", + "general.cheatsheet": "讲义", + "general.ourSponsors": "我们的赞助商", + + "notFound.intro": "您要寻找的页面不存在。", + "notFound.button": "回到主页", + + "page.landing.title": "正则表达式学习 - 逐步从零基础到高阶。", + "page.learn.title": "正则表达式学习 - 正则表达式交互式课程", + "page.cheatsheet.title": "正则表达式学习 - 正则表达式讲义", + "page.404.title": "正则表达式学习 - 未找到", + + "page.landing.description": "交互式学习正则表达式,在你的阶段练习、测试和分享你自己的正则表达式", + "page.learn.description": "逐步学习正则表达式。完成交互式课程会让你的学习更加简单和快速。", + "page.cheatsheet.description": "有时你只需记住正则表达式。参考讲义会让你更好理解和掌握。", + + "alert.site.under.development": "网站正在开发中,你看到的内容可能会有所变动。", + "learn.safari.unsupportWarning": "Safari 浏览器不支持该步骤中的正则表达式。如果你在这一步遇到问题,你可以点击此处。" +} \ No newline at end of file diff --git a/src/localization/zh-cn/landing.json b/src/localization/zh-cn/landing.json new file mode 100644 index 00000000..f501920c --- /dev/null +++ b/src/localization/zh-cn/landing.json @@ -0,0 +1,20 @@ +{ + "landing.title": "逐步学习正则表达式,从零基础到高阶", + "landing.description": "学习正则比你想象的要容易得多,你可以用本工具轻松学习、练习、测试和分享正则表达式。", + + "section.learn.title": "学习", + "section.learn.content": "`正则表达式`, 缩写为 RegEx 或 RegExp, 是在正则表达式语法框架内创建的字符串。你可以用正则表达式轻松管理你的数据,比如通过命令查找、匹配或编辑。正则表达式适用于 Python、SQL、Javascript、R、Google 分析工具、Google Data Studio 和整个编码过程中。现在通过 RegexLearn 的教程和示例在线学习正则表达式。", + + "section.cheatsheet.button": "立即查看", + "section.cheatsheet.title": "讲义", + "section.cheatsheet.content": "通过`正则表达式讲义`,你能看到你所需的表达式用法,一切都能从这里查到。用正则表达式讲义浏览正则表达式的所有模式和符号。", + + "section.playground.title": "游乐场", + "section.playground.content": "如果你想要生成正则表达式,你能通过游乐场轻松构建和测试你的正则表达式模式。作为正则表达式测试者,你将能验证正则表达式,并在团队协作中与其他人共享。", + + "section.practice.title": "练习", + "section.practice.content": "如果你完成学习部分,那么是时候开始练习!在练习环节,你将能能检测你的正则表达式知识和作对应的水平练习。", + + "section.opensource.title": "开源", + "section.opensource.content": "Regex Learn 是一个开源项目,欢迎社区贡献和免费使用。参与这个项目能让你磨炼技能、学习和协作。你能通过此处作出贡献和支持。" +} \ No newline at end of file diff --git a/src/localization/zh-cn/learn.json b/src/localization/zh-cn/learn.json new file mode 100644 index 00000000..7dbbd44f --- /dev/null +++ b/src/localization/zh-cn/learn.json @@ -0,0 +1,163 @@ +{ + "examples.starter.title": "练习", + "examples.starter.description": "现在做些练习来巩固我们学到的东西。", + + "examples.finish.title": "完成练习!", + "examples.finish.description": " ", + + "steps.starter.title": "介绍", + "steps.starter.description": "RegEx 是正则表达式的简称。它便于匹配、寻找和管理文本。在输入框中键入“OK”开始第一步并了解更多的细节......", + + "steps.whatIsRegex.title": "什么是「正则表达式」?", + "steps.whatIsRegex.description": "正则表达式是表示搜索模式的子符串,常缩写成 `RegEx` 或 `RegExp`。通常用于查找和替换文本中的字词。我们可以测试文本是否符合我们设置的规则。\\n\\n 例如,你有一个文件名的列表。你只想查找扩展名是 `pdf` 的文件。你跟着敲打 `^\\w+\\.pdf$` 就找到。随着课程的进行,表达式的含义会变得更加明朗。", + + "steps.basicMatchers.title": "基本匹配", + "steps.basicMatchers.description": "我们想要查找的字符或单词是直接输入,就像我们搜索一样。例如,想要找出文本中的单词 `curious` ,敲相同的单词。", + + "steps.dotCharacter.title": "点 `.`: 任何字符", + "steps.dotCharacter.description": "点 `.` 允许选择所有字符,包括特殊字符和空格。", + + "steps.characterSet.title": "字符集 `[abc]`", + "steps.characterSet.description": "单词中的字符可以是任意一个,我们就将所有的替代字符写进方括号 `[]` 中。例如,为了查找文本中的所有单词,表达式可以用方括号 `[]` 键入所有的相似字符`a`, `e`, `i`, `o`, `u`。", + + "steps.negatedCharacterSet.title": "否定字符集 `[^abc]`", + "steps.negatedCharacterSet.description": "为了查找以下文本的所有单词(`ber` 和 `bor` 除外)。在方括号`[]`中的`^`后面并排输入`e`和`o`.", + + "steps.range.title": "字母范围`[a-z]`", + "steps.range.description": "要查找指定范围的字母,将起始字母和结束字母写进方括号`[]`中,中间用短划线`-`分隔。它区分大小写,输入表达式以选中`e`和`o`之间所有的小写字母,包括它们自己。", + + "steps.rangeNumber.title": "数字范围`[0-9]`", + "steps.rangeNumber.description": "要查找指定范围的数字,在方括号`[]`中键入起始和结束数字,中间用短划线`-`分隔。写一个表达式以选中`3`和`6`之间的所有数字,包括它们自己。", + + "examples.basicMatchers.title": "练习:基本匹配", + "examples.basicMatchers.description": "写一个匹配文本中`of`单词的表达式。", + + "examples.dotCharacter.title": "练习:匹配任意字符", + "examples.dotCharacter.description": "写一个匹配文本中所有字母、数字、空格和特殊字符的表达式。必须匹配所有字符。", + + "examples.characterSet.title": "练习:字符集", + "examples.characterSet.description": "写一个匹配文本中所有只是首字母不同的单词的表达式。", + + "examples.negatedCharacterSet.title": "练习:否定字符集", + "examples.negatedCharacterSet.description": "写一个匹配除`beor`和`beur`以外的所有单词的表达式。用否定字符集完成。", + + "examples.range.title": "练习:字母范围", + "examples.range.description": "写一个选中从`g`到`k`中间所有字母的,包括它们自己的表达式。", + + "examples.rangeNumber.title": "练习:数字范围", + "examples.rangeNumber.description": "写一个选中从`2`到`7`中间所有字母的,包括它们自己的表达式。", + + "steps.repetitions.title": "重复", + "steps.repetitions.description": "一些特殊字符用来指定在文本中重复的次数。它们分别是加号`+`、星号`*`和问号`?`。", + + "steps.asterisk.title": "星号 `*`", + "steps.asterisk.description": "在字符后面加一个星号`*`,表示字符完全不匹配或匹配多次。比如让`e`不出现在文本中,或者让它并排出现多次", + + "steps.plusCharacter.title": "加号 `+`", + "steps.plusCharacter.description": "为了让一个字符出现一次或多次,我们将加号`+`放其后面。比如让`e`在文本中出现一次或多次", + + "steps.questionMark.title": "问号 `?`", + "steps.questionMark.description": "为表示一个字符是可选的,我们在其后面加一个问号`?`。比如表示以下字母`u`是可选的。", + + "steps.quantifier.title": "大括号 - 1", + "steps.quantifier.description": "为表示一个字符的一定次数,我们在该字符的后面用大括号`{n}`来表示它最终出现的次数。比如以下字母`e`只能出现`2`次。", + + "steps.quantifierMin.title": "大括号 - 2", + "steps.quantifierMin.description": "为表示一个字符至少出现一定次数,我们要在该字符的后面用大括号`{n, }`表示至少出现的次数,数字的末尾要加逗号`,`。比如以下字母`e`至少出现`3`次。", + + "steps.quantifierRange.title": "大括号 - 3", + "steps.quantifierRange.description": "为表示一些字符在指定数字范围内出现,我们在大括号`{x,y}`中用逗号分隔始末字符表示。比如以下字母`e`只能出现在`1`和`3`之间。", + + "examples.asterisk.title": "练习:星号 `*`", + "examples.asterisk.description": "写一个用星号`*`选择下面每个字母,适合文本中没有字母`e`并且存在多个字母的单词的表达式", + + "examples.plusCharacter.title": "练习:加号 `+`", + "examples.plusCharacter.description": "写一个用加号`+`以选中文本中字母`e`出现一次或多次的单词。", + + "examples.questionMark.title": "练习:问号 `?`", + "examples.questionMark.description": "写一个用问号`?`表示字母`n`在文本中是可选的表达式。使得`a`和`an`均可选中。", + + "examples.quantifier.title": "练习:大括号 - 1", + "examples.quantifier.description": "用大括号`{}`写一个表达式,选中文本中从`0`到`9`的`4`位数字。", + + "examples.quantifierMin.title": "练习:大括号 - 2", + "examples.quantifierMin.description": "用大括号`{}`写一个表达式,选中文本中至少出现`2`次的`0`和`9`之间的数字。", + + "examples.quantifierRange.title": "练习:大括号 - 3", + "examples.quantifierRange.description": "用大括号`{}`写一个表达式,选中文本中介于`1`和`4`之间的从`0`到`9`的数字。", + + "steps.groupping.title": "括号 `( )`: 分组", + "steps.groupping.description": "通过对表达示进行分组,来引用或强制执行某些规则。要对表达式分组,只需在表达式中用`()`闭合。现在尝试对`haa`分组。", + + "steps.groupReference.title": "引用组", + "steps.groupReference.description": "单词`ha`和`haa`在以下示例中分组。第一组用`\\1`来避免重写。这里的`1`表示分组的顺序。在表达式的末尾键入`\\2`以引用第二组。", + + "steps.nonCapturingGroupping.title": "括号 `(?: )`: 非捕获分组", + "steps.nonCapturingGroupping.description": "你可以对表达式进行分组,并确保它不被引用捕获。下面示例中有两个组,但是,我们用`\\1`表示的第一个组引用实际上是指向第二个组,因为第一个组是未被捕获的组。", + + "steps.pipeCharacter.title": "竖线 `|`", + "steps.pipeCharacter.description": "竖线允许同一表达式包含多种规则。所有可能的声明用竖线`|`分隔。和字符集不同,字符集`[abc]`在字符层面上运作。分枝条件在表达式层面上运作。例如下面的表达式同时选择`cat`和`Cat`。在末尾添加另一条竖线`|`,键入`rat`以选择所有单词。", + + "steps.escapeCharacter.title": "转义字符 `\\`", + "steps.escapeCharacter.description": "我们写正则时会用到一些特殊字符`{ } [ ] / \\ + * . $^ | ?`,因此我们需要通过`\\`转义使用。例如,要选择文本中的点`.`和星号`*`,我们需要在前面添加一个转义字符`\\`。", + + "steps.caret.title": "插入符 `^`:\\n匹配字符串的开始", + "steps.caret.description": "我们用`[0-9]`查找数字,若仅查找行首的数字,请在表达式前面加上符号`^`。", + + "steps.dollar.title": "美元符号 `$`:\\n匹配字符串的结束", + "steps.dollar.description": "我们在`html`值的后面用符号`$`来查找仅在行末的`html`文本", + + "steps.wordCharacter.title": "文本字符 `\\w`: 字母、数字和下划线", + "steps.wordCharacter.description": "表达式`\\w`用于查找字母、数字和下划线。让我们用表达式`\\w`来查找文本中的文本字符。", + + "steps.withoutWordCharacter.title": "非文本字符 `\\W`", + "steps.withoutWordCharacter.description": "`\\W` 匹配任意除字母、数字、下划线和汉字之外的字符。", + + "steps.numberCharacter.title": "数字字符 `\\d`", + "steps.numberCharacter.description": "`\\d` 仅用来匹配数字", + + "steps.withoutNumberCharacter.title": "非数字字符 `\\D`", + "steps.withoutNumberCharacter.description": "`\\D` 匹配任意非数字的字符。", + + "steps.spaceCharacter.title": "空白符 `\\s`", + "steps.spaceCharacter.description": "`\\s` 匹配任意的空白符。", + + "steps.withoutSpaceCharacter.title": "非空白符 `\\S`", + "steps.withoutSpaceCharacter.description": "`\\S` 匹配任意非空白符的字符", + + "steps.lookarounds.title": "零断宽言", + "steps.lookarounds.description": "我们希望正在写的词语出现在另一个词语之前或之后,我们需要用\"lookaround\"。点击下一步开始学习如何使用\"lookaround\"。", + + "steps.positiveLookahead.title": "正先行断言: `(?=)`", + "steps.positiveLookahead.description": "我们要在文本中选择小时值,仅选择后面有`PM`的数值。我们需要在表达式后面用正先行断言`(?=)`,在括号内的`=`后面添加`PM。", + + "steps.negativeLookahead.title": "负先行断言: `(?!)`", + "steps.negativeLookahead.description": "我们要在文本中选择小时值以外的数字。我们需要在表达式后面用负先行断言`(?!)`选择没有`PM`的数值。在括号内的`!`后面添加`PM`。", + + "steps.positiveLookbehind.title": "正后发断言: `(?<=)`", + "steps.positiveLookbehind.description": "我们要在文本中选择价格,仅选择前面带有`$`的数字。我们要在表达式前面使用正后发断言`(?<=)`。在括号内的`=`后面添加`\\$`。", + + "steps.negativeLookbehind.title": "负后发断言: `(?<!)`", + "steps.negativeLookbehind.description": "我们要在文本中选择除价格外的数字,仅选择前面没有`$`的数字。我们要在表达式前用负后发断言`(?<!)`。在括号内的`!`后面添加`\\$`。", + + "steps.flags.title": "模式", + "steps.flags.description": "模式改变表达式的输出。这就是为什么模式也叫作`修饰符`。确定表达式的类型是将文本视作单独的行、区分大小写还是查找所有匹配项。继续下一步学习模式。", + + "steps.flagsGlobal.title": "全局模式", + "steps.flagsGlobal.description": "全局模式使表达式选中所有的匹配项,否则只选择第一个匹配项。现在启用全局模式,以便选择所有匹配项。", + + "steps.flagsMultiline.title": "多行模式", + "steps.flagsMultiline.description": "正则表达式将所有文本视作一行。但如果我们用多行模式就会单独处理每一行。这次,我们根据每一行行末的规律来写出表达式,现在启用多行模式来查找所有匹配。", + + "steps.flagsCaseInsensitive.title": "忽略大小写模式", + "steps.flagsCaseInsensitive.description": "用`忽略大小写模式`来避免表达式的大小写敏感。", + + "steps.greedyMatching.title": "贪婪匹配", + "steps.greedyMatching.description": "正则表达式默认指行贪婪匹配。这意味着匹配尽可能长。下面的示例选中以`r`结尾的任何匹配项,并且可以是前面带有它的任何字符,但它并不止于第一个字符`r`。", + + "steps.lazyMatching.title": "懒惰匹配", + "steps.lazyMatching.description": "懒惰匹配在第一次匹配时停止。下面的例子中,在`*` 之后添加`?`以查找以`*` 结尾且前面带有任何字符的第一个匹配项。这意味着这次匹配将会在第一个字母`*` 停止。", + + "steps.completeAllSteps.title": "恭喜,您已完成所有步骤!", + "steps.completeAllSteps.description": "您可以随时返回到前面的步骤,并且可以轻松浏览已通过的所有步骤。" +} From c4f5cf1362287a701ec6f3bb9870dec4e5c1072a Mon Sep 17 00:00:00 2001 From: isPoto <59009389+isPoto@users.noreply.github.com> Date: Sat, 11 Dec 2021 14:41:00 +0800 Subject: [PATCH 3/3] Update learn.json --- src/localization/zh-cn/learn.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/localization/zh-cn/learn.json b/src/localization/zh-cn/learn.json index 7dbbd44f..ba648458 100644 --- a/src/localization/zh-cn/learn.json +++ b/src/localization/zh-cn/learn.json @@ -129,7 +129,7 @@ "steps.lookarounds.description": "我们希望正在写的词语出现在另一个词语之前或之后,我们需要用\"lookaround\"。点击下一步开始学习如何使用\"lookaround\"。", "steps.positiveLookahead.title": "正先行断言: `(?=)`", - "steps.positiveLookahead.description": "我们要在文本中选择小时值,仅选择后面有`PM`的数值。我们需要在表达式后面用正先行断言`(?=)`,在括号内的`=`后面添加`PM。", + "steps.positiveLookahead.description": "我们要在文本中选择小时值,仅选择后面有`PM`的数值。我们需要在表达式后面用正先行断言`(?=)`,在括号内的`=`后面添加`PM`。", "steps.negativeLookahead.title": "负先行断言: `(?!)`", "steps.negativeLookahead.description": "我们要在文本中选择小时值以外的数字。我们需要在表达式后面用负先行断言`(?!)`选择没有`PM`的数值。在括号内的`!`后面添加`PM`。", @@ -153,7 +153,7 @@ "steps.flagsCaseInsensitive.description": "用`忽略大小写模式`来避免表达式的大小写敏感。", "steps.greedyMatching.title": "贪婪匹配", - "steps.greedyMatching.description": "正则表达式默认指行贪婪匹配。这意味着匹配尽可能长。下面的示例选中以`r`结尾的任何匹配项,并且可以是前面带有它的任何字符,但它并不止于第一个字符`r`。", + "steps.greedyMatching.description": "正则表达式默认执行贪婪匹配。这意味着匹配尽可能长。下面的示例选中以`r`结尾的任何匹配项,并且可以是前面带有它的任何字符,但它并不止于第一个字符`r`。", "steps.lazyMatching.title": "懒惰匹配", "steps.lazyMatching.description": "懒惰匹配在第一次匹配时停止。下面的例子中,在`*` 之后添加`?`以查找以`*` 结尾且前面带有任何字符的第一个匹配项。这意味着这次匹配将会在第一个字母`*` 停止。",