benhamill-gherkin 2.3.5
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitattributes +2 -0
- data/.gitignore +11 -0
- data/.mailmap +2 -0
- data/.rspec +1 -0
- data/.rvmrc +1 -0
- data/Gemfile +7 -0
- data/History.txt +363 -0
- data/LICENSE +20 -0
- data/README.rdoc +149 -0
- data/Rakefile +19 -0
- data/VERSION +1 -0
- data/build_native_gems.sh +8 -0
- data/cucumber.yml +3 -0
- data/features/escaped_pipes.feature +8 -0
- data/features/feature_parser.feature +237 -0
- data/features/json_formatter.feature +377 -0
- data/features/json_parser.feature +318 -0
- data/features/native_lexer.feature +19 -0
- data/features/parser_with_native_lexer.feature +205 -0
- data/features/pretty_formatter.feature +15 -0
- data/features/step_definitions/eyeball_steps.rb +3 -0
- data/features/step_definitions/gherkin_steps.rb +29 -0
- data/features/step_definitions/json_formatter_steps.rb +28 -0
- data/features/step_definitions/json_parser_steps.rb +20 -0
- data/features/step_definitions/pretty_formatter_steps.rb +84 -0
- data/features/steps_parser.feature +46 -0
- data/features/support/env.rb +38 -0
- data/gherkin.gemspec +61 -0
- data/ikvm/.gitignore +3 -0
- data/java/.gitignore +5 -0
- data/java/src/main/java/gherkin/lexer/i18n/.gitignore +1 -0
- data/java/src/main/resources/gherkin/.gitignore +1 -0
- data/js/lib/gherkin/lexer/i18n/ar.js +1094 -0
- data/js/lib/gherkin/lexer/i18n/bg.js +1308 -0
- data/js/lib/gherkin/lexer/i18n/ca.js +1236 -0
- data/js/lib/gherkin/lexer/i18n/cs.js +1090 -0
- data/js/lib/gherkin/lexer/i18n/cy_gb.js +958 -0
- data/js/lib/gherkin/lexer/i18n/da.js +974 -0
- data/js/lib/gherkin/lexer/i18n/de.js +1082 -0
- data/js/lib/gherkin/lexer/i18n/en.js +965 -0
- data/js/lib/gherkin/lexer/i18n/en_au.js +902 -0
- data/js/lib/gherkin/lexer/i18n/en_lol.js +859 -0
- data/js/lib/gherkin/lexer/i18n/en_pirate.js +1136 -0
- data/js/lib/gherkin/lexer/i18n/en_scouse.js +1289 -0
- data/js/lib/gherkin/lexer/i18n/en_tx.js +942 -0
- data/js/lib/gherkin/lexer/i18n/eo.js +916 -0
- data/js/lib/gherkin/lexer/i18n/es.js +1049 -0
- data/js/lib/gherkin/lexer/i18n/et.js +915 -0
- data/js/lib/gherkin/lexer/i18n/fi.js +894 -0
- data/js/lib/gherkin/lexer/i18n/fr.js +1116 -0
- data/js/lib/gherkin/lexer/i18n/he.js +1044 -0
- data/js/lib/gherkin/lexer/i18n/hr.js +994 -0
- data/js/lib/gherkin/lexer/i18n/hu.js +1043 -0
- data/js/lib/gherkin/lexer/i18n/id.js +884 -0
- data/js/lib/gherkin/lexer/i18n/it.js +1007 -0
- data/js/lib/gherkin/lexer/i18n/ja.js +1344 -0
- data/js/lib/gherkin/lexer/i18n/ko.js +1028 -0
- data/js/lib/gherkin/lexer/i18n/lt.js +972 -0
- data/js/lib/gherkin/lexer/i18n/lu.js +1057 -0
- data/js/lib/gherkin/lexer/i18n/lv.js +1092 -0
- data/js/lib/gherkin/lexer/i18n/nl.js +1036 -0
- data/js/lib/gherkin/lexer/i18n/no.js +986 -0
- data/js/lib/gherkin/lexer/i18n/pl.js +1140 -0
- data/js/lib/gherkin/lexer/i18n/pt.js +1000 -0
- data/js/lib/gherkin/lexer/i18n/ro.js +1089 -0
- data/js/lib/gherkin/lexer/i18n/ru.js +1560 -0
- data/js/lib/gherkin/lexer/i18n/sk.js +972 -0
- data/js/lib/gherkin/lexer/i18n/sr_cyrl.js +1728 -0
- data/js/lib/gherkin/lexer/i18n/sr_latn.js +1220 -0
- data/js/lib/gherkin/lexer/i18n/sv.js +997 -0
- data/js/lib/gherkin/lexer/i18n/tr.js +1014 -0
- data/js/lib/gherkin/lexer/i18n/uk.js +1572 -0
- data/js/lib/gherkin/lexer/i18n/uz.js +1302 -0
- data/js/lib/gherkin/lexer/i18n/vi.js +1124 -0
- data/js/lib/gherkin/lexer/i18n/zh_cn.js +902 -0
- data/js/lib/gherkin/lexer/i18n/zh_tw.js +940 -0
- data/lib/.gitignore +4 -0
- data/lib/gherkin.rb +2 -0
- data/lib/gherkin/c_lexer.rb +17 -0
- data/lib/gherkin/formatter/ansi_escapes.rb +95 -0
- data/lib/gherkin/formatter/argument.rb +16 -0
- data/lib/gherkin/formatter/escaping.rb +15 -0
- data/lib/gherkin/formatter/filter_formatter.rb +136 -0
- data/lib/gherkin/formatter/hashable.rb +19 -0
- data/lib/gherkin/formatter/json_formatter.rb +102 -0
- data/lib/gherkin/formatter/line_filter.rb +26 -0
- data/lib/gherkin/formatter/model.rb +236 -0
- data/lib/gherkin/formatter/pretty_formatter.rb +243 -0
- data/lib/gherkin/formatter/regexp_filter.rb +21 -0
- data/lib/gherkin/formatter/step_printer.rb +17 -0
- data/lib/gherkin/formatter/tag_count_formatter.rb +47 -0
- data/lib/gherkin/formatter/tag_filter.rb +19 -0
- data/lib/gherkin/i18n.rb +175 -0
- data/lib/gherkin/i18n.yml +588 -0
- data/lib/gherkin/json_parser.rb +137 -0
- data/lib/gherkin/lexer/i18n_lexer.rb +47 -0
- data/lib/gherkin/listener/event.rb +45 -0
- data/lib/gherkin/listener/formatter_listener.rb +113 -0
- data/lib/gherkin/native.rb +7 -0
- data/lib/gherkin/native/ikvm.rb +55 -0
- data/lib/gherkin/native/java.rb +55 -0
- data/lib/gherkin/native/null.rb +9 -0
- data/lib/gherkin/parser/meta.txt +5 -0
- data/lib/gherkin/parser/parser.rb +164 -0
- data/lib/gherkin/parser/root.txt +11 -0
- data/lib/gherkin/parser/steps.txt +4 -0
- data/lib/gherkin/rb_lexer.rb +8 -0
- data/lib/gherkin/rb_lexer/.gitignore +1 -0
- data/lib/gherkin/rb_lexer/README.rdoc +8 -0
- data/lib/gherkin/rubify.rb +24 -0
- data/lib/gherkin/tag_expression.rb +62 -0
- data/lib/gherkin/version.rb +3 -0
- data/ragel/i18n/.gitignore +1 -0
- data/ragel/lexer.c.rl.erb +439 -0
- data/ragel/lexer.java.rl.erb +208 -0
- data/ragel/lexer.rb.rl.erb +167 -0
- data/ragel/lexer_common.rl.erb +50 -0
- data/spec/gherkin/c_lexer_spec.rb +21 -0
- data/spec/gherkin/fixtures/1.feature +8 -0
- data/spec/gherkin/fixtures/comments_in_table.feature +9 -0
- data/spec/gherkin/fixtures/complex.feature +45 -0
- data/spec/gherkin/fixtures/complex.json +143 -0
- data/spec/gherkin/fixtures/complex_for_filtering.feature +60 -0
- data/spec/gherkin/fixtures/complex_with_tags.feature +61 -0
- data/spec/gherkin/fixtures/dos_line_endings.feature +45 -0
- data/spec/gherkin/fixtures/hantu_pisang.feature +35 -0
- data/spec/gherkin/fixtures/i18n_fr.feature +14 -0
- data/spec/gherkin/fixtures/i18n_no.feature +7 -0
- data/spec/gherkin/fixtures/i18n_zh-CN.feature +9 -0
- data/spec/gherkin/fixtures/scenario_outline_with_tags.feature +13 -0
- data/spec/gherkin/fixtures/scenario_without_steps.feature +5 -0
- data/spec/gherkin/fixtures/simple_with_comments.feature +7 -0
- data/spec/gherkin/fixtures/simple_with_tags.feature +11 -0
- data/spec/gherkin/fixtures/with_bom.feature +3 -0
- data/spec/gherkin/formatter/ansi_escapes_spec.rb +19 -0
- data/spec/gherkin/formatter/filter_formatter_spec.rb +165 -0
- data/spec/gherkin/formatter/model_spec.rb +28 -0
- data/spec/gherkin/formatter/pretty_formatter_spec.rb +158 -0
- data/spec/gherkin/formatter/spaces.feature +9 -0
- data/spec/gherkin/formatter/step_printer_spec.rb +55 -0
- data/spec/gherkin/formatter/tabs.feature +9 -0
- data/spec/gherkin/formatter/tag_count_formatter_spec.rb +30 -0
- data/spec/gherkin/i18n_spec.rb +152 -0
- data/spec/gherkin/java_lexer_spec.rb +20 -0
- data/spec/gherkin/java_libs.rb +20 -0
- data/spec/gherkin/json_parser_spec.rb +113 -0
- data/spec/gherkin/lexer/i18n_lexer_spec.rb +43 -0
- data/spec/gherkin/output_stream_string_io.rb +20 -0
- data/spec/gherkin/parser/parser_spec.rb +16 -0
- data/spec/gherkin/rb_lexer_spec.rb +19 -0
- data/spec/gherkin/sexp_recorder.rb +56 -0
- data/spec/gherkin/shared/lexer_group.rb +593 -0
- data/spec/gherkin/shared/py_string_group.rb +153 -0
- data/spec/gherkin/shared/row_group.rb +125 -0
- data/spec/gherkin/shared/tags_group.rb +54 -0
- data/spec/gherkin/tag_expression_spec.rb +137 -0
- data/spec/spec_helper.rb +69 -0
- data/tasks/bench.rake +184 -0
- data/tasks/bench/feature_builder.rb +49 -0
- data/tasks/bench/generated/.gitignore +1 -0
- data/tasks/bench/null_listener.rb +4 -0
- data/tasks/compile.rake +102 -0
- data/tasks/cucumber.rake +20 -0
- data/tasks/gems.rake +35 -0
- data/tasks/ikvm.rake +79 -0
- data/tasks/ragel_task.rb +70 -0
- data/tasks/rdoc.rake +9 -0
- data/tasks/release.rake +30 -0
- data/tasks/rspec.rake +8 -0
- metadata +609 -0
@@ -0,0 +1,21 @@
|
|
1
|
+
module Gherkin
|
2
|
+
module Formatter
|
3
|
+
class RegexpFilter
|
4
|
+
def initialize(regexen)
|
5
|
+
@regexen = regexen
|
6
|
+
end
|
7
|
+
|
8
|
+
def eval(tags, names, ranges)
|
9
|
+
@regexen.detect do |regexp|
|
10
|
+
names.detect do |name|
|
11
|
+
name =~ regexp
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def filter_table_body_rows(rows)
|
17
|
+
rows
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Gherkin
|
2
|
+
module Formatter
|
3
|
+
class StepPrinter
|
4
|
+
def write_step(io, text_format, arg_format, step_name, arguments)
|
5
|
+
unpacked_step_name = step_name.unpack("U*")
|
6
|
+
|
7
|
+
text_start = 0
|
8
|
+
arguments.each do |arg|
|
9
|
+
io.write(text_format.text(unpacked_step_name[text_start..arg.offset-1].pack("U*"))) unless arg.offset == 0
|
10
|
+
io.write(arg_format.text(arg.val))
|
11
|
+
text_start = arg.offset + arg.val.unpack("U*").length
|
12
|
+
end
|
13
|
+
io.write(text_format.text(unpacked_step_name[text_start..-1].pack("U*"))) unless text_start == unpacked_step_name.length
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Gherkin
|
2
|
+
module Formatter
|
3
|
+
class TagCountFormatter
|
4
|
+
def initialize(formatter, tag_counts)
|
5
|
+
@formatter = formatter
|
6
|
+
@tag_counts = tag_counts
|
7
|
+
end
|
8
|
+
|
9
|
+
def uri(uri)
|
10
|
+
@uri = uri
|
11
|
+
end
|
12
|
+
|
13
|
+
def feature(feature)
|
14
|
+
@feature_tags = feature.tags
|
15
|
+
@formatter.feature(feature)
|
16
|
+
end
|
17
|
+
|
18
|
+
def scenario(scenario)
|
19
|
+
record_tags((@feature_tags.to_a + scenario.tags.to_a).uniq, scenario.line)
|
20
|
+
@formatter.scenario(scenario)
|
21
|
+
end
|
22
|
+
|
23
|
+
def scenario_outline(scenario_outline)
|
24
|
+
@scenario_outline_tags = scenario_outline.tags
|
25
|
+
@formatter.scenario_outline(scenario_outline)
|
26
|
+
end
|
27
|
+
|
28
|
+
def examples(examples)
|
29
|
+
record_tags((@feature_tags.to_a + @scenario_outline_tags.to_a + examples.tags.to_a).uniq, examples.line)
|
30
|
+
@formatter.examples(examples)
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def record_tags(tags, line)
|
36
|
+
tags.each do |tag|
|
37
|
+
@tag_counts[tag.name] ||= []
|
38
|
+
@tag_counts[tag.name] << "#{@uri}:#{line}"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def method_missing(*args)
|
43
|
+
@formatter.__send__(*args)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'gherkin/tag_expression'
|
2
|
+
|
3
|
+
module Gherkin
|
4
|
+
module Formatter
|
5
|
+
class TagFilter
|
6
|
+
def initialize(tags)
|
7
|
+
@tag_expression = TagExpression.new(tags)
|
8
|
+
end
|
9
|
+
|
10
|
+
def eval(tags, names, ranges)
|
11
|
+
@tag_expression.eval(tags.uniq.map{|tag| tag.name})
|
12
|
+
end
|
13
|
+
|
14
|
+
def filter_table_body_rows(rows)
|
15
|
+
rows
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/gherkin/i18n.rb
ADDED
@@ -0,0 +1,175 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'gherkin/rubify'
|
3
|
+
require 'gherkin/native'
|
4
|
+
|
5
|
+
module Gherkin
|
6
|
+
class I18n
|
7
|
+
native_impl('gherkin') unless defined?(BYPASS_NATIVE_IMPL)
|
8
|
+
|
9
|
+
FEATURE_ELEMENT_KEYS = %w{feature background scenario scenario_outline examples}
|
10
|
+
STEP_KEYWORD_KEYS = %w{given when then and but}
|
11
|
+
KEYWORD_KEYS = FEATURE_ELEMENT_KEYS + STEP_KEYWORD_KEYS
|
12
|
+
LANGUAGES = YAML.load_file(File.dirname(__FILE__) + '/i18n.yml')
|
13
|
+
|
14
|
+
class << self
|
15
|
+
include Rubify
|
16
|
+
|
17
|
+
# Used by code generators for other lexer tools like pygments lexer and textmate bundle
|
18
|
+
def all
|
19
|
+
LANGUAGES.keys.sort.map{|iso_code| get(iso_code)}
|
20
|
+
end
|
21
|
+
|
22
|
+
def get(iso_code)
|
23
|
+
languages[iso_code] ||= new(iso_code)
|
24
|
+
end
|
25
|
+
|
26
|
+
# Returns all keyword translations and aliases of +keywords+, escaped and joined with <tt>|</tt>.
|
27
|
+
# This method is convenient for editor support and syntax highlighting engines for Gherkin, where
|
28
|
+
# there is typically a code generation tool to generate regular expressions for recognising the
|
29
|
+
# various I18n translations of Gherkin's keywords.
|
30
|
+
#
|
31
|
+
# The +keywords+ arguments can be one of <tt>:feature</tt>, <tt>:background</tt>, <tt>:scenario</tt>,
|
32
|
+
# <tt>:scenario_outline</tt>, <tt>:examples</tt>, <tt>:step</tt>.
|
33
|
+
def keyword_regexp(*keywords)
|
34
|
+
unique_keywords = all.map do |i18n|
|
35
|
+
keywords.map do |keyword|
|
36
|
+
if keyword.to_s == 'step'
|
37
|
+
i18n.step_keywords.to_a
|
38
|
+
else
|
39
|
+
i18n.keywords(keyword).to_a
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
unique_keywords.flatten.compact.map{|kw| kw.to_s}.sort.reverse.uniq.join('|').gsub(/\*/, '\*')
|
45
|
+
end
|
46
|
+
|
47
|
+
def code_keywords
|
48
|
+
rubify(all.map{|i18n| i18n.code_keywords}).flatten.uniq.sort
|
49
|
+
end
|
50
|
+
|
51
|
+
def code_keyword_for(gherkin_keyword)
|
52
|
+
gherkin_keyword.gsub(/[\s',!]/, '').strip
|
53
|
+
end
|
54
|
+
|
55
|
+
def language_table
|
56
|
+
require 'stringio'
|
57
|
+
require 'gherkin/formatter/pretty_formatter'
|
58
|
+
require 'gherkin/formatter/model'
|
59
|
+
io = StringIO.new
|
60
|
+
pf = Gherkin::Formatter::PrettyFormatter.new(io, false, false)
|
61
|
+
table = all.map do |i18n|
|
62
|
+
Formatter::Model::Row.new([], [i18n.iso_code, i18n.keywords('name')[0], i18n.keywords('native')[0]], nil)
|
63
|
+
end
|
64
|
+
pf.table(table)
|
65
|
+
io.string
|
66
|
+
end
|
67
|
+
|
68
|
+
def unicode_escape(word, prefix="\\u")
|
69
|
+
word = word.unpack("U*").map do |c|
|
70
|
+
if c > 127 || c == 32
|
71
|
+
"#{prefix}%04x" % c
|
72
|
+
else
|
73
|
+
c.chr
|
74
|
+
end
|
75
|
+
end.join
|
76
|
+
end
|
77
|
+
|
78
|
+
private
|
79
|
+
|
80
|
+
def languages
|
81
|
+
@languages ||= {}
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
attr_reader :iso_code
|
86
|
+
|
87
|
+
def initialize(iso_code)
|
88
|
+
@iso_code = iso_code
|
89
|
+
@keywords = LANGUAGES[iso_code]
|
90
|
+
raise "Language not supported: #{iso_code.inspect}" if @iso_code.nil?
|
91
|
+
@keywords['grammar_name'] = @keywords['name'].gsub(/\s/, '')
|
92
|
+
end
|
93
|
+
|
94
|
+
def lexer(listener, force_ruby=false)
|
95
|
+
begin
|
96
|
+
if force_ruby
|
97
|
+
rb(listener)
|
98
|
+
else
|
99
|
+
begin
|
100
|
+
c(listener)
|
101
|
+
rescue NameError, LoadError => e
|
102
|
+
warn("WARNING: #{e.message}. Reverting to Ruby lexer.")
|
103
|
+
rb(listener)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
rescue LoadError => e
|
107
|
+
raise I18nLexerNotFound, "No lexer was found for #{i18n_language_name} (#{e.message}). Supported languages are listed in gherkin/i18n.yml."
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def c(listener)
|
112
|
+
require 'gherkin/c_lexer'
|
113
|
+
CLexer[underscored_iso_code].new(listener)
|
114
|
+
end
|
115
|
+
|
116
|
+
def rb(listener)
|
117
|
+
require 'gherkin/rb_lexer'
|
118
|
+
RbLexer[underscored_iso_code].new(listener)
|
119
|
+
end
|
120
|
+
|
121
|
+
def underscored_iso_code
|
122
|
+
@iso_code.gsub(/[\s-]/, '_').downcase
|
123
|
+
end
|
124
|
+
|
125
|
+
# Keywords that can be used in Gherkin source
|
126
|
+
def step_keywords
|
127
|
+
STEP_KEYWORD_KEYS.map{|iso_code| keywords(iso_code)}.flatten.uniq
|
128
|
+
end
|
129
|
+
|
130
|
+
# Keywords that can be used in code
|
131
|
+
def code_keywords
|
132
|
+
result = step_keywords.map{|keyword| self.class.code_keyword_for(keyword)}
|
133
|
+
result.delete('*')
|
134
|
+
result
|
135
|
+
end
|
136
|
+
|
137
|
+
def keywords(key)
|
138
|
+
key = key.to_s
|
139
|
+
raise "No #{key.inspect} in #{@keywords.inspect}" if @keywords[key].nil?
|
140
|
+
@keywords[key].split('|').map{|keyword| real_keyword(key, keyword)}
|
141
|
+
end
|
142
|
+
|
143
|
+
def keyword_table
|
144
|
+
require 'stringio'
|
145
|
+
require 'gherkin/formatter/pretty_formatter'
|
146
|
+
require 'gherkin/formatter/model'
|
147
|
+
io = StringIO.new
|
148
|
+
pf = Gherkin::Formatter::PrettyFormatter.new(io, false, false)
|
149
|
+
|
150
|
+
gherkin_keyword_table = KEYWORD_KEYS.map do |key|
|
151
|
+
Formatter::Model::Row.new([], [key, keywords(key).map{|keyword| %{"#{keyword}"}}.join(', ')], nil)
|
152
|
+
end
|
153
|
+
|
154
|
+
code_keyword_table = STEP_KEYWORD_KEYS.map do |key|
|
155
|
+
code_keywords = keywords(key).reject{|keyword| keyword == '* '}.map do |keyword|
|
156
|
+
%{"#{self.class.code_keyword_for(keyword)}"}
|
157
|
+
end.join(', ')
|
158
|
+
Formatter::Model::Row.new([], ["#{key} (code)", code_keywords], nil)
|
159
|
+
end
|
160
|
+
|
161
|
+
pf.table(gherkin_keyword_table + code_keyword_table)
|
162
|
+
io.string
|
163
|
+
end
|
164
|
+
|
165
|
+
private
|
166
|
+
|
167
|
+
def real_keyword(key, keyword)
|
168
|
+
if(STEP_KEYWORD_KEYS.index(key))
|
169
|
+
(keyword + ' ').sub(/< $/, '')
|
170
|
+
else
|
171
|
+
keyword
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
175
|
+
end
|
@@ -0,0 +1,588 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
#
|
3
|
+
# We use ISO 639-1 (language) and ISO 3166 alpha-2 (region - if appliccable):
|
4
|
+
# http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
|
5
|
+
# http://en.wikipedia.org/wiki/ISO_3166-1
|
6
|
+
#
|
7
|
+
# If you want several aliases for a keyword, just separate them
|
8
|
+
# with a | character. Make sure there are no ambiguities in the
|
9
|
+
# keywords.
|
10
|
+
#
|
11
|
+
# If you do *not* want a trailing space after a keyword, end it with a < character.
|
12
|
+
# (See Chinese for examples).
|
13
|
+
#
|
14
|
+
"en":
|
15
|
+
name: English
|
16
|
+
native: English
|
17
|
+
feature: Feature
|
18
|
+
background: Background
|
19
|
+
scenario: Scenario
|
20
|
+
scenario_outline: Scenario Outline|Scenario Template
|
21
|
+
examples: Examples|Scenarios
|
22
|
+
given: "*|Given"
|
23
|
+
when: "*|When"
|
24
|
+
then: "*|Then"
|
25
|
+
and: "*|And"
|
26
|
+
but: "*|But"
|
27
|
+
|
28
|
+
# Please keep the grammars in alphabetical order by name from here and down.
|
29
|
+
|
30
|
+
"ar":
|
31
|
+
name: Arabic
|
32
|
+
native: العربية
|
33
|
+
feature: خاصية
|
34
|
+
background: الخلفية
|
35
|
+
scenario: سيناريو
|
36
|
+
scenario_outline: سيناريو مخطط
|
37
|
+
examples: امثلة
|
38
|
+
given: "*|بفرض"
|
39
|
+
when: "*|متى|عندما"
|
40
|
+
then: "*|اذاً|ثم"
|
41
|
+
and: "*|و"
|
42
|
+
but: "*|لكن"
|
43
|
+
"bg":
|
44
|
+
name: Bulgarian
|
45
|
+
native: български
|
46
|
+
feature: Функционалност
|
47
|
+
background: Предистория
|
48
|
+
scenario: Сценарий
|
49
|
+
scenario_outline: Рамка на сценарий
|
50
|
+
examples: Примери
|
51
|
+
given: "*|Дадено"
|
52
|
+
when: "*|Когато"
|
53
|
+
then: "*|То"
|
54
|
+
and: "*|И"
|
55
|
+
but: "*|Но"
|
56
|
+
"ca":
|
57
|
+
name: Catalan
|
58
|
+
native: català
|
59
|
+
background: Rerefons|Antecedents
|
60
|
+
feature: Característica|Funcionalitat
|
61
|
+
scenario: Escenari
|
62
|
+
scenario_outline: Esquema de l'escenari
|
63
|
+
examples: Exemples
|
64
|
+
given: "*|Donat|Donada|Atès|Atesa"
|
65
|
+
when: "*|Quan"
|
66
|
+
then: "*|Aleshores|Cal"
|
67
|
+
and: "*|I"
|
68
|
+
but: "*|Però"
|
69
|
+
"cy-GB":
|
70
|
+
name: Welsh
|
71
|
+
native: Cymraeg
|
72
|
+
background: Cefndir
|
73
|
+
feature: Arwedd
|
74
|
+
scenario: Scenario
|
75
|
+
scenario_outline: Scenario Amlinellol
|
76
|
+
examples: Enghreifftiau
|
77
|
+
given: "*|Anrhegedig a"
|
78
|
+
when: "*|Pryd"
|
79
|
+
then: "*|Yna"
|
80
|
+
and: "*|A"
|
81
|
+
but: "*|Ond"
|
82
|
+
"cs":
|
83
|
+
name: Czech
|
84
|
+
native: Česky
|
85
|
+
feature: Požadavek
|
86
|
+
background: Pozadí|Kontext
|
87
|
+
scenario: Scénář
|
88
|
+
scenario_outline: Náčrt Scénáře|Osnova scénáře
|
89
|
+
examples: Příklady
|
90
|
+
given: "*|Pokud"
|
91
|
+
when: "*|Když"
|
92
|
+
then: "*|Pak"
|
93
|
+
and: "*|A|A také"
|
94
|
+
but: "*|Ale"
|
95
|
+
"da":
|
96
|
+
name: Danish
|
97
|
+
native: dansk
|
98
|
+
feature: Egenskab
|
99
|
+
background: Baggrund
|
100
|
+
scenario: Scenarie
|
101
|
+
scenario_outline: Abstrakt Scenario
|
102
|
+
examples: Eksempler
|
103
|
+
given: "*|Givet"
|
104
|
+
when: "*|Når"
|
105
|
+
then: "*|Så"
|
106
|
+
and: "*|Og"
|
107
|
+
but: "*|Men"
|
108
|
+
"de":
|
109
|
+
name: German
|
110
|
+
native: Deutsch
|
111
|
+
feature: Funktionalität
|
112
|
+
background: Grundlage
|
113
|
+
scenario: Szenario
|
114
|
+
scenario_outline: Szenariogrundriss
|
115
|
+
examples: Beispiele
|
116
|
+
given: "*|Angenommen|Gegeben sei"
|
117
|
+
when: "*|Wenn"
|
118
|
+
then: "*|Dann"
|
119
|
+
and: "*|Und"
|
120
|
+
but: "*|Aber"
|
121
|
+
"en-au":
|
122
|
+
name: Australian
|
123
|
+
native: Australian
|
124
|
+
feature: Crikey
|
125
|
+
background: Background
|
126
|
+
scenario: Mate
|
127
|
+
scenario_outline: Blokes
|
128
|
+
examples: Cobber
|
129
|
+
given: "*|Ya know how"
|
130
|
+
when: "*|When"
|
131
|
+
then: "*|Ya gotta"
|
132
|
+
and: "*|N"
|
133
|
+
but: "*|Cept"
|
134
|
+
"en-lol":
|
135
|
+
name: LOLCAT
|
136
|
+
native: LOLCAT
|
137
|
+
feature: OH HAI
|
138
|
+
background: B4
|
139
|
+
scenario: MISHUN
|
140
|
+
scenario_outline: MISHUN SRSLY
|
141
|
+
examples: EXAMPLZ
|
142
|
+
given: "*|I CAN HAZ"
|
143
|
+
when: "*|WEN"
|
144
|
+
then: "*|DEN"
|
145
|
+
and: "*|AN"
|
146
|
+
but: "*|BUT"
|
147
|
+
"en-pirate":
|
148
|
+
name: Pirate
|
149
|
+
native: Pirate
|
150
|
+
feature: Ahoy matey!
|
151
|
+
background: Yo-ho-ho
|
152
|
+
scenario: Heave to
|
153
|
+
scenario_outline: Shiver me timbers
|
154
|
+
examples: Dead men tell no tales
|
155
|
+
given: "*|Gangway!"
|
156
|
+
when: "*|Blimey!"
|
157
|
+
then: "*|Let go and haul"
|
158
|
+
and: "*|Aye"
|
159
|
+
but: "*|Avast!"
|
160
|
+
"en-Scouse":
|
161
|
+
name: Scouse
|
162
|
+
native: Scouse
|
163
|
+
feature: Feature
|
164
|
+
background: "Dis is what went down"
|
165
|
+
scenario: "The thing of it is"
|
166
|
+
scenario_outline: "Wharrimean is"
|
167
|
+
examples: Examples
|
168
|
+
given: "*|Givun|Youse know when youse got"
|
169
|
+
when: "*|Wun|Youse know like when"
|
170
|
+
then: "*|Dun|Den youse gotta"
|
171
|
+
and: "*|An"
|
172
|
+
but: "*|Buh"
|
173
|
+
"en-tx":
|
174
|
+
name: Texan
|
175
|
+
native: Texan
|
176
|
+
feature: Feature
|
177
|
+
background: Background
|
178
|
+
scenario: Scenario
|
179
|
+
scenario_outline: All y'all
|
180
|
+
examples: Examples
|
181
|
+
given: "*|Given y'all"
|
182
|
+
when: "*|When y'all"
|
183
|
+
then: "*|Then y'all"
|
184
|
+
and: "*|And y'all"
|
185
|
+
but: "*|But y'all"
|
186
|
+
"eo":
|
187
|
+
name: Esperanto
|
188
|
+
native: Esperanto
|
189
|
+
feature: Trajto
|
190
|
+
background: Fono
|
191
|
+
scenario: Scenaro
|
192
|
+
scenario_outline: Konturo de la scenaro
|
193
|
+
examples: Ekzemploj
|
194
|
+
given: "*|Donitaĵo"
|
195
|
+
when: "*|Se"
|
196
|
+
then: "*|Do"
|
197
|
+
and: "*|Kaj"
|
198
|
+
but: "*|Sed"
|
199
|
+
"es":
|
200
|
+
name: Spanish
|
201
|
+
native: español
|
202
|
+
background: Antecedentes
|
203
|
+
feature: Característica
|
204
|
+
scenario: Escenario
|
205
|
+
scenario_outline: Esquema del escenario
|
206
|
+
examples: Ejemplos
|
207
|
+
given: "*|Dado"
|
208
|
+
when: "*|Cuando"
|
209
|
+
then: "*|Entonces"
|
210
|
+
and: "*|Y"
|
211
|
+
but: "*|Pero"
|
212
|
+
"et":
|
213
|
+
name: Estonian
|
214
|
+
native: eesti keel
|
215
|
+
feature: Omadus
|
216
|
+
background: Taust
|
217
|
+
scenario: Stsenaarium
|
218
|
+
scenario_outline: Raamstsenaarium
|
219
|
+
examples: Juhtumid
|
220
|
+
given: "*|Eeldades"
|
221
|
+
when: "*|Kui"
|
222
|
+
then: "*|Siis"
|
223
|
+
and: "*|Ja"
|
224
|
+
but: "*|Kuid"
|
225
|
+
"fi":
|
226
|
+
name: Finnish
|
227
|
+
native: suomi
|
228
|
+
feature: Ominaisuus
|
229
|
+
background: Tausta
|
230
|
+
scenario: Tapaus
|
231
|
+
scenario_outline: Tapausaihio
|
232
|
+
examples: Tapaukset
|
233
|
+
given: "*|Oletetaan"
|
234
|
+
when: "*|Kun"
|
235
|
+
then: "*|Niin"
|
236
|
+
and: "*|Ja"
|
237
|
+
but: "*|Mutta"
|
238
|
+
"fr":
|
239
|
+
name: French
|
240
|
+
native: français
|
241
|
+
feature: Fonctionnalité
|
242
|
+
background: Contexte
|
243
|
+
scenario: Scénario
|
244
|
+
scenario_outline: Plan du scénario|Plan du Scénario
|
245
|
+
examples: Exemples
|
246
|
+
given: "*|Soit|Etant donné"
|
247
|
+
when: "*|Quand|Lorsque|Lorsqu'<"
|
248
|
+
then: "*|Alors"
|
249
|
+
and: "*|Et"
|
250
|
+
but: "*|Mais"
|
251
|
+
"he":
|
252
|
+
name: Hebrew
|
253
|
+
native: עברית
|
254
|
+
feature: תכונה
|
255
|
+
background: רקע
|
256
|
+
scenario: תרחיש
|
257
|
+
scenario_outline: תבנית תרחיש
|
258
|
+
examples: דוגמאות
|
259
|
+
given: "*|בהינתן"
|
260
|
+
when: "*|כאשר"
|
261
|
+
then: "*|אז|אזי"
|
262
|
+
and: "*|וגם"
|
263
|
+
but: "*|אבל"
|
264
|
+
"hr":
|
265
|
+
name: Croatian
|
266
|
+
native: hrvatski
|
267
|
+
feature: Osobina|Mogućnost|Mogucnost
|
268
|
+
background: Pozadina
|
269
|
+
scenario: Scenarij
|
270
|
+
scenario_outline: Skica|Koncept
|
271
|
+
examples: Primjeri|Scenariji
|
272
|
+
given: "*|Zadan|Zadani|Zadano"
|
273
|
+
when: "*|Kada|Kad"
|
274
|
+
then: "*|Onda"
|
275
|
+
and: "*|I"
|
276
|
+
but: "*|Ali"
|
277
|
+
"hu":
|
278
|
+
name: Hungarian
|
279
|
+
native: magyar
|
280
|
+
feature: Jellemző
|
281
|
+
background: Háttér
|
282
|
+
scenario: Forgatókönyv
|
283
|
+
scenario_outline: Forgatókönyv vázlat
|
284
|
+
examples: Példák
|
285
|
+
given: "*|Amennyiben|Adott"
|
286
|
+
when: "*|Majd|Ha|Amikor"
|
287
|
+
then: "*|Akkor"
|
288
|
+
and: "*|És"
|
289
|
+
but: "*|De"
|
290
|
+
"id":
|
291
|
+
name: Indonesian
|
292
|
+
native: Bahasa Indonesia
|
293
|
+
feature: Fitur
|
294
|
+
background: Dasar
|
295
|
+
scenario: Skenario
|
296
|
+
scenario_outline: Skenario konsep
|
297
|
+
examples: Contoh
|
298
|
+
given: "*|Dengan"
|
299
|
+
when: "*|Ketika"
|
300
|
+
then: "*|Maka"
|
301
|
+
and: "*|Dan"
|
302
|
+
but: "*|Tapi"
|
303
|
+
"it":
|
304
|
+
name: Italian
|
305
|
+
native: italiano
|
306
|
+
feature: Funzionalità
|
307
|
+
background: Contesto
|
308
|
+
scenario: Scenario
|
309
|
+
scenario_outline: Schema dello scenario
|
310
|
+
examples: Esempi
|
311
|
+
given: "*|Dato"
|
312
|
+
when: "*|Quando"
|
313
|
+
then: "*|Allora"
|
314
|
+
and: "*|E"
|
315
|
+
but: "*|Ma"
|
316
|
+
"ja":
|
317
|
+
name: Japanese
|
318
|
+
native: 日本語
|
319
|
+
feature: フィーチャ|機能
|
320
|
+
background: 背景
|
321
|
+
scenario: シナリオ
|
322
|
+
scenario_outline: シナリオアウトライン|シナリオテンプレート|テンプレ|シナリオテンプレ
|
323
|
+
examples: 例|サンプル
|
324
|
+
given: "*|前提<"
|
325
|
+
when: "*|もし<"
|
326
|
+
then: "*|ならば<"
|
327
|
+
and: "*|かつ<"
|
328
|
+
but: "*|しかし<|但し<|ただし<"
|
329
|
+
"ko":
|
330
|
+
name: Korean
|
331
|
+
native: 한국어
|
332
|
+
background: 배경
|
333
|
+
feature: 기능
|
334
|
+
scenario: 시나리오
|
335
|
+
scenario_outline: 시나리오 개요
|
336
|
+
examples: 예
|
337
|
+
given: "*|조건<|먼저<"
|
338
|
+
when: "*|만일<|만약<"
|
339
|
+
then: "*|그러면<"
|
340
|
+
and: "*|그리고<"
|
341
|
+
but: "*|하지만<|단<"
|
342
|
+
"lt":
|
343
|
+
name: Lithuanian
|
344
|
+
native: lietuvių kalba
|
345
|
+
feature: Savybė
|
346
|
+
background: Kontekstas
|
347
|
+
scenario: Scenarijus
|
348
|
+
scenario_outline: Scenarijaus šablonas
|
349
|
+
examples: Pavyzdžiai|Scenarijai|Variantai
|
350
|
+
given: "*|Duota"
|
351
|
+
when: "*|Kai"
|
352
|
+
then: "*|Tada"
|
353
|
+
and: "*|Ir"
|
354
|
+
but: "*|Bet"
|
355
|
+
"lu":
|
356
|
+
name: Luxemburgish
|
357
|
+
native: Lëtzebuergesch
|
358
|
+
feature: Funktionalitéit
|
359
|
+
background: Hannergrond
|
360
|
+
scenario: Szenario
|
361
|
+
scenario_outline: Plang vum Szenario
|
362
|
+
examples: Beispiller
|
363
|
+
given: "*|ugeholl"
|
364
|
+
when: "*|wann"
|
365
|
+
then: "*|dann"
|
366
|
+
and: "*|an|a"
|
367
|
+
but: "*|awer|mä"
|
368
|
+
"lv":
|
369
|
+
name: Latvian
|
370
|
+
native: latviešu
|
371
|
+
feature: Funkcionalitāte|Fīča
|
372
|
+
background: Konteksts|Situācija
|
373
|
+
scenario: Scenārijs
|
374
|
+
scenario_outline: Scenārijs pēc parauga
|
375
|
+
examples: Piemēri|Paraugs
|
376
|
+
given: "*|Kad"
|
377
|
+
when: "*|Ja"
|
378
|
+
then: "*|Tad"
|
379
|
+
and: "*|Un"
|
380
|
+
but: "*|Bet"
|
381
|
+
"nl":
|
382
|
+
name: Dutch
|
383
|
+
native: Nederlands
|
384
|
+
feature: Functionaliteit
|
385
|
+
background: Achtergrond
|
386
|
+
scenario: Scenario
|
387
|
+
scenario_outline: Abstract Scenario
|
388
|
+
examples: Voorbeelden
|
389
|
+
given: "*|Gegeven|Stel"
|
390
|
+
when: "*|Als"
|
391
|
+
then: "*|Dan"
|
392
|
+
and: "*|En"
|
393
|
+
but: "*|Maar"
|
394
|
+
"no":
|
395
|
+
name: Norwegian
|
396
|
+
native: norsk
|
397
|
+
feature: Egenskap
|
398
|
+
background: Bakgrunn
|
399
|
+
scenario: Scenario
|
400
|
+
scenario_outline: Scenariomal|Abstrakt Scenario
|
401
|
+
examples: Eksempler
|
402
|
+
given: "*|Gitt"
|
403
|
+
when: "*|Når"
|
404
|
+
then: "*|Så"
|
405
|
+
and: "*|Og"
|
406
|
+
but: "*|Men"
|
407
|
+
"pl":
|
408
|
+
name: Polish
|
409
|
+
native: polski
|
410
|
+
feature: Właściwość
|
411
|
+
background: Założenia
|
412
|
+
scenario: Scenariusz
|
413
|
+
scenario_outline: Szablon scenariusza
|
414
|
+
examples: Przykłady
|
415
|
+
given: "*|Zakładając|Mając"
|
416
|
+
when: "*|Jeżeli|Jeśli"
|
417
|
+
then: "*|Wtedy"
|
418
|
+
and: "*|Oraz|I"
|
419
|
+
but: "*|Ale"
|
420
|
+
"pt":
|
421
|
+
name: Portuguese
|
422
|
+
native: português
|
423
|
+
background: Contexto
|
424
|
+
feature: Funcionalidade
|
425
|
+
scenario: Cenário|Cenario
|
426
|
+
scenario_outline: Esquema do Cenário|Esquema do Cenario
|
427
|
+
examples: Exemplos
|
428
|
+
given: "*|Dado"
|
429
|
+
when: "*|Quando"
|
430
|
+
then: "*|Então|Entao"
|
431
|
+
and: "*|E"
|
432
|
+
but: "*|Mas"
|
433
|
+
"ro":
|
434
|
+
name: Romanian
|
435
|
+
native: română
|
436
|
+
background: Context
|
437
|
+
feature: Functionalitate|Funcționalitate|Funcţionalitate
|
438
|
+
scenario: Scenariu
|
439
|
+
scenario_outline: Structura scenariu|Structură scenariu
|
440
|
+
examples: Exemple
|
441
|
+
given: "*|Date fiind|Dat fiind|Dati fiind|Dați fiind|Daţi fiind"
|
442
|
+
when: "*|Cand|Când"
|
443
|
+
then: "*|Atunci"
|
444
|
+
and: "*|Si|Și|Şi"
|
445
|
+
but: "*|Dar"
|
446
|
+
"ru":
|
447
|
+
name: Russian
|
448
|
+
native: русский
|
449
|
+
feature: Функционал|Фича
|
450
|
+
background: Предыстория
|
451
|
+
scenario: Сценарий
|
452
|
+
scenario_outline: Структура сценария
|
453
|
+
examples: Значения
|
454
|
+
given: "*|Допустим|Дано|Пусть"
|
455
|
+
when: "*|Если|Когда"
|
456
|
+
then: "*|То|Тогда"
|
457
|
+
and: "*|И|К тому же"
|
458
|
+
but: "*|Но|А"
|
459
|
+
"sv":
|
460
|
+
name: Swedish
|
461
|
+
native: Svenska
|
462
|
+
feature: Egenskap
|
463
|
+
background: Bakgrund
|
464
|
+
scenario: Scenario
|
465
|
+
scenario_outline: Abstrakt Scenario|Scenariomall
|
466
|
+
examples: Exempel
|
467
|
+
given: "*|Givet"
|
468
|
+
when: "*|När"
|
469
|
+
then: "*|Så"
|
470
|
+
and: "*|Och"
|
471
|
+
but: "*|Men"
|
472
|
+
"sk":
|
473
|
+
name: Slovak
|
474
|
+
native: Slovensky
|
475
|
+
feature: Požiadavka
|
476
|
+
background: Pozadie
|
477
|
+
scenario: Scenár
|
478
|
+
scenario_outline: Náčrt Scenáru
|
479
|
+
examples: Príklady
|
480
|
+
given: "*|Pokiaľ"
|
481
|
+
when: "*|Keď"
|
482
|
+
then: "*|Tak"
|
483
|
+
and: "*|A"
|
484
|
+
but: "*|Ale"
|
485
|
+
"sr-Latn":
|
486
|
+
name: Serbian (Latin)
|
487
|
+
native: Srpski (Latinica)
|
488
|
+
feature: Funkcionalnost|Mogućnost|Mogucnost|Osobina
|
489
|
+
background: Kontekst|Osnova|Pozadina
|
490
|
+
scenario: Scenario|Primer
|
491
|
+
scenario_outline: Struktura scenarija|Skica|Koncept
|
492
|
+
examples: Primeri|Scenariji
|
493
|
+
given: "*|Zadato|Zadate|Zatati"
|
494
|
+
when: "*|Kada|Kad"
|
495
|
+
then: "*|Onda"
|
496
|
+
and: "*|I"
|
497
|
+
but: "*|Ali"
|
498
|
+
"sr-Cyrl":
|
499
|
+
name: Serbian
|
500
|
+
native: Српски
|
501
|
+
feature: Функционалност|Могућност|Особина
|
502
|
+
background: Контекст|Основа|Позадина
|
503
|
+
scenario: Сценарио|Пример
|
504
|
+
scenario_outline: Структура сценарија|Скица|Концепт
|
505
|
+
examples: Примери|Сценарији
|
506
|
+
given: "*|Задато|Задате|Задати"
|
507
|
+
when: "*|Када|Кад"
|
508
|
+
then: "*|Онда"
|
509
|
+
and: "*|И"
|
510
|
+
but: "*|Али"
|
511
|
+
"tr":
|
512
|
+
name: Turkish
|
513
|
+
native: Türkçe
|
514
|
+
feature: Özellik
|
515
|
+
background: Geçmiş
|
516
|
+
scenario: Senaryo
|
517
|
+
scenario_outline: Senaryo taslağı
|
518
|
+
examples: Örnekler
|
519
|
+
given: "*|Diyelim ki"
|
520
|
+
when: "*|Eğer ki"
|
521
|
+
then: "*|O zaman"
|
522
|
+
and: "*|Ve"
|
523
|
+
but: "*|Fakat|Ama"
|
524
|
+
"uk":
|
525
|
+
name: Ukrainian
|
526
|
+
native: Українська
|
527
|
+
feature: Функціонал
|
528
|
+
background: Передумова
|
529
|
+
scenario: Сценарій
|
530
|
+
scenario_outline: Структура сценарію
|
531
|
+
examples: Приклади
|
532
|
+
given: "*|Припустимо|Припустимо, що|Нехай|Дано"
|
533
|
+
when: "*|Якщо|Коли"
|
534
|
+
then: "*|То|Тоді"
|
535
|
+
and: "*|І|А також|Та"
|
536
|
+
but: "*|Але"
|
537
|
+
"uz":
|
538
|
+
name: Uzbek
|
539
|
+
native: Узбекча
|
540
|
+
feature: Функционал
|
541
|
+
background: Тарих
|
542
|
+
scenario: Сценарий
|
543
|
+
scenario_outline: Сценарий структураси
|
544
|
+
examples: Мисоллар
|
545
|
+
given: "*|Агар"
|
546
|
+
when: "*|Агар"
|
547
|
+
then: "*|Унда"
|
548
|
+
and: "*|Ва"
|
549
|
+
but: "*|Лекин|Бирок|Аммо"
|
550
|
+
"vi":
|
551
|
+
name: Vietnamese
|
552
|
+
native: Tiếng Việt
|
553
|
+
feature: Tính năng
|
554
|
+
background: Bối cảnh
|
555
|
+
scenario: Tình huống|Kịch bản
|
556
|
+
scenario_outline: Khung tình huống|Khung kịch bản
|
557
|
+
examples: Dữ liệu
|
558
|
+
given: "*|Biết|Cho"
|
559
|
+
when: "*|Khi"
|
560
|
+
then: "*|Thì"
|
561
|
+
and: "*|Và"
|
562
|
+
but: "*|Nhưng"
|
563
|
+
"zh-CN":
|
564
|
+
name: Chinese simplified
|
565
|
+
native: 简体中文
|
566
|
+
feature: 功能
|
567
|
+
background: 背景
|
568
|
+
scenario: 场景
|
569
|
+
scenario_outline: 场景大纲
|
570
|
+
examples: 例子
|
571
|
+
given: "*|假如<"
|
572
|
+
when: "*|当<"
|
573
|
+
then: "*|那么<"
|
574
|
+
and: "*|而且<"
|
575
|
+
but: "*|但是<"
|
576
|
+
"zh-TW":
|
577
|
+
name: Chinese traditional
|
578
|
+
native: 繁體中文
|
579
|
+
feature: 功能
|
580
|
+
background: 背景
|
581
|
+
scenario: 場景|劇本
|
582
|
+
scenario_outline: 場景大綱|劇本大綱
|
583
|
+
examples: 例子
|
584
|
+
given: "*|假設<"
|
585
|
+
when: "*|當<"
|
586
|
+
then: "*|那麼<"
|
587
|
+
and: "*|而且<|並且<"
|
588
|
+
but: "*|但是<"
|