Compare commits
72 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9da326967b | ||
|
|
62600b3a66 | ||
|
|
b236138fb5 | ||
|
|
40c2e9a54b | ||
|
|
a9062db57f | ||
|
|
2621404c5f | ||
|
|
c47211ca79 | ||
|
|
e39a192e8d | ||
|
|
d85035d5ef | ||
|
|
de09a97343 | ||
|
|
a6855345d7 | ||
|
|
a53f88b626 | ||
|
|
7048c82124 | ||
|
|
6aa7cda478 | ||
|
|
ff339b9a8c | ||
|
|
8898cc20fe | ||
|
|
770d1da280 | ||
|
|
6ba4e8a29b | ||
|
|
953ca68495 | ||
|
|
4289dfb37d | ||
|
|
4f6f2f436a | ||
|
|
237979a479 | ||
|
|
2e48968fd3 | ||
|
|
9a0c4a5c8f | ||
|
|
9a011f0007 | ||
|
|
3f907a706f | ||
|
|
9446141716 | ||
|
|
1994826af8 | ||
|
|
ab950d6ffc | ||
|
|
b77e611a90 | ||
|
|
86f0284894 | ||
|
|
9bbe014dfe | ||
|
|
ad92c95500 | ||
|
|
d360190382 | ||
|
|
1737c8a7f6 | ||
|
|
cde262fd66 | ||
|
|
bd74689079 | ||
|
|
248942bdea | ||
|
|
d9f203300b | ||
|
|
aceabc969f | ||
|
|
dedc24d3a7 | ||
|
|
6e583e78e8 | ||
|
|
c012e83355 | ||
|
|
264355d185 | ||
|
|
fdbfd1ec60 | ||
|
|
7a8b27a255 | ||
|
|
ec4bfac98b | ||
|
|
c63ffe37c9 | ||
|
|
d2f3ce82c9 | ||
|
|
3e24a0b0a4 | ||
|
|
1a07e29ff4 | ||
|
|
1aa46a8928 | ||
|
|
d9083f8b5f | ||
|
|
23d558a6d7 | ||
|
|
665a5b7b12 | ||
|
|
1d73418969 | ||
|
|
f67b5e4cc4 | ||
|
|
ae2515444f | ||
|
|
463e77f0a5 | ||
|
|
d7b796b1a7 | ||
|
|
9b07d53077 | ||
|
|
8ee9b2bc31 | ||
|
|
c5989477a4 | ||
|
|
96d8a4e4f8 | ||
|
|
e865e11731 | ||
|
|
f0997bfe0d | ||
|
|
8b67dad456 | ||
|
|
53fdac1038 | ||
|
|
534a7602e6 | ||
|
|
84422b10c8 | ||
|
|
d05ad0f8f4 | ||
|
|
3f70ddaffa |
19
.rubocop.yml
19
.rubocop.yml
@@ -4,14 +4,6 @@ AllCops:
|
||||
Exclude:
|
||||
- '*.gemspec'
|
||||
- 'vendor/**/*'
|
||||
ClassVars:
|
||||
Enabled: false
|
||||
LineLength:
|
||||
Max: 120
|
||||
MethodLength:
|
||||
Max: 20
|
||||
Exclude:
|
||||
- 'app/controllers/enumeration/cli_options.rb'
|
||||
Lint/UriEscapeUnescape:
|
||||
Enabled: false
|
||||
Metrics/AbcSize:
|
||||
@@ -25,7 +17,18 @@ Metrics/ClassLength:
|
||||
- 'app/controllers/enumeration/cli_options.rb'
|
||||
Metrics/CyclomaticComplexity:
|
||||
Max: 8
|
||||
Metrics/LineLength:
|
||||
Max: 120
|
||||
Metrics/MethodLength:
|
||||
Max: 20
|
||||
Exclude:
|
||||
- 'app/controllers/enumeration/cli_options.rb'
|
||||
Style/ClassVars:
|
||||
Enabled: false
|
||||
Style/Documentation:
|
||||
Enabled: false
|
||||
Style/FormatStringToken:
|
||||
Enabled: false
|
||||
Style/NumericPredicate:
|
||||
Exclude:
|
||||
- 'app/controllers/vuln_api.rb'
|
||||
|
||||
45
README.md
45
README.md
@@ -77,41 +77,60 @@ docker run -it --rm wpscanteam/wpscan --url https://target.tld/ --enumerate u1-1
|
||||
|
||||
# Usage
|
||||
|
||||
```wpscan --url blog.tld``` This will scan the blog using default options with a good compromise between speed and accuracy. For example, the plugins will be checked passively but their version with a mixed detection mode (passively + aggressively). Potential config backup files will also be checked, along with other interesting findings. If a more stealthy approach is required, then ```wpscan --stealthy --url blog.tld``` can be used.
|
||||
```wpscan --url blog.tld``` This will scan the blog using default options with a good compromise between speed and accuracy. For example, the plugins will be checked passively but their version with a mixed detection mode (passively + aggressively). Potential config backup files will also be checked, along with other interesting findings.
|
||||
|
||||
If a more stealthy approach is required, then ```wpscan --stealthy --url blog.tld``` can be used.
|
||||
As a result, when using the ```--enumerate``` option, don't forget to set the ```--plugins-detection``` accordingly, as its default is 'passive'.
|
||||
|
||||
For more options, open a terminal and type ```wpscan --help``` (if you built wpscan from the source, you should type the command outside of the git repo)
|
||||
|
||||
The DB is located at ~/.wpscan/db
|
||||
|
||||
## Vulnerability Database
|
||||
|
||||
The WPScan CLI tool uses the [WPVulnDB API](https://wpvulndb.com/api) to retrieve WordPress vulnerability data in real time. For WPScan to retrieve the vulnerability data an API token must be supplied via the `--api-token` option, or via a configuration file, as discussed below. An API token can be obtained by registering an account on [WPVulnDB](https://wpvulndb.com/users/sign_up). Up to 50 API requests per day are given free of charge to registered users. Once the 50 API requests are exhausted, WPScan will continue to work as normal but without any vulnerability data. Users can upgrade to paid API usage to increase their API limits within their user profile on [WPVulnDB](https://wpvulndb.com/).
|
||||
|
||||
## Load CLI options from file/s
|
||||
|
||||
WPScan can load all options (including the --url) from configuration files, the following locations are checked (order: first to last):
|
||||
|
||||
- ~/.wpscan/cli_options.json
|
||||
- ~/.wpscan/cli_options.yml
|
||||
- pwd/.wpscan/cli_options.json
|
||||
- pwd/.wpscan/cli_options.yml
|
||||
- ~/.wpscan/scan.json
|
||||
- ~/.wpscan/scan.yml
|
||||
- pwd/.wpscan/scan.json
|
||||
- pwd/.wpscan/scan.yml
|
||||
|
||||
If those files exist, options from them will be loaded and overridden if found twice.
|
||||
If those files exist, options from the `cli_options` key will be loaded and overridden if found twice.
|
||||
|
||||
e.g:
|
||||
|
||||
~/.wpscan/cli_options.yml:
|
||||
~/.wpscan/scan.yml:
|
||||
|
||||
```yml
|
||||
proxy: 'http://127.0.0.1:8080'
|
||||
verbose: true
|
||||
cli_options:
|
||||
proxy: 'http://127.0.0.1:8080'
|
||||
verbose: true
|
||||
```
|
||||
|
||||
pwd/.wpscan/cli_options.yml:
|
||||
pwd/.wpscan/scan.yml:
|
||||
|
||||
```yml
|
||||
proxy: 'socks5://127.0.0.1:9090'
|
||||
url: 'http://target.tld'
|
||||
cli_options:
|
||||
proxy: 'socks5://127.0.0.1:9090'
|
||||
url: 'http://target.tld'
|
||||
```
|
||||
|
||||
Running ```wpscan``` in the current directory (pwd), is the same as ```wpscan -v --proxy socks5://127.0.0.1:9090 --url http://target.tld```
|
||||
|
||||
Enumerating usernames
|
||||
## Save API Token in a file
|
||||
|
||||
The feature mentioned above is useful to keep the API Token in a config file and not have to supply it via the CLI each time. To do so, create the ~/.wpscan/scan.yml file containing the below:
|
||||
|
||||
```yml
|
||||
cli_options:
|
||||
api_token: YOUR_API_TOKEN
|
||||
```
|
||||
|
||||
## Enumerating usernames
|
||||
|
||||
```shell
|
||||
wpscan --url https://target.tld/ --enumerate u
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require_relative 'controllers/core'
|
||||
require_relative 'controllers/vuln_api'
|
||||
require_relative 'controllers/custom_directories'
|
||||
require_relative 'controllers/wp_version'
|
||||
require_relative 'controllers/main_theme'
|
||||
|
||||
@@ -18,7 +18,7 @@ module WPScan
|
||||
target.content_dir = ParsedCli.wp_content_dir if ParsedCli.wp_content_dir
|
||||
target.plugins_dir = ParsedCli.wp_plugins_dir if ParsedCli.wp_plugins_dir
|
||||
|
||||
return if target.content_dir(ParsedCli.detection_mode)
|
||||
return if target.content_dir
|
||||
|
||||
raise Error::WpContentDirNotDetected
|
||||
end
|
||||
|
||||
@@ -18,10 +18,10 @@ module WPScan
|
||||
choices: {
|
||||
vp: OptBoolean.new(['--vulnerable-plugins']),
|
||||
ap: OptBoolean.new(['--all-plugins']),
|
||||
p: OptBoolean.new(['--plugins']),
|
||||
p: OptBoolean.new(['--popular-plugins']),
|
||||
vt: OptBoolean.new(['--vulnerable-themes']),
|
||||
at: OptBoolean.new(['--all-themes']),
|
||||
t: OptBoolean.new(['--themes']),
|
||||
t: OptBoolean.new(['--popular-themes']),
|
||||
tt: OptBoolean.new(['--timthumbs']),
|
||||
cb: OptBoolean.new(['--config-backups']),
|
||||
dbe: OptBoolean.new(['--db-exports']),
|
||||
@@ -69,7 +69,7 @@ module WPScan
|
||||
OptInteger.new(
|
||||
['--plugins-threshold THRESHOLD',
|
||||
'Raise an error when the number of detected plugins via known locations reaches the threshold. ' \
|
||||
'Set to 0 to ignore the threshold.'], default: 100
|
||||
'Set to 0 to ignore the threshold.'], default: 100, advanced: true
|
||||
)
|
||||
]
|
||||
end
|
||||
@@ -98,7 +98,7 @@ module WPScan
|
||||
OptInteger.new(
|
||||
['--themes-threshold THRESHOLD',
|
||||
'Raise an error when the number of detected themes via known locations reaches the threshold. ' \
|
||||
'Set to 0 to ignore the threshold.'], default: 20
|
||||
'Set to 0 to ignore the threshold.'], default: 20, advanced: true
|
||||
)
|
||||
]
|
||||
end
|
||||
|
||||
@@ -56,7 +56,7 @@ module WPScan
|
||||
#
|
||||
# @return [ Boolean ] Wether or not to enumerate the plugins
|
||||
def enum_plugins?(opts)
|
||||
opts[:plugins] || opts[:all_plugins] || opts[:vulnerable_plugins]
|
||||
opts[:popular_plugins] || opts[:all_plugins] || opts[:vulnerable_plugins]
|
||||
end
|
||||
|
||||
def enum_plugins
|
||||
@@ -92,7 +92,7 @@ module WPScan
|
||||
|
||||
if opts[:enumerate][:all_plugins]
|
||||
DB::Plugins.all_slugs
|
||||
elsif opts[:enumerate][:plugins]
|
||||
elsif opts[:enumerate][:popular_plugins]
|
||||
DB::Plugins.popular_slugs
|
||||
else
|
||||
DB::Plugins.vulnerable_slugs
|
||||
@@ -103,7 +103,7 @@ module WPScan
|
||||
#
|
||||
# @return [ Boolean ] Wether or not to enumerate the themes
|
||||
def enum_themes?(opts)
|
||||
opts[:themes] || opts[:all_themes] || opts[:vulnerable_themes]
|
||||
opts[:popular_themes] || opts[:all_themes] || opts[:vulnerable_themes]
|
||||
end
|
||||
|
||||
def enum_themes
|
||||
@@ -139,7 +139,7 @@ module WPScan
|
||||
|
||||
if opts[:enumerate][:all_themes]
|
||||
DB::Themes.all_slugs
|
||||
elsif opts[:enumerate][:themes]
|
||||
elsif opts[:enumerate][:popular_themes]
|
||||
DB::Themes.popular_slugs
|
||||
else
|
||||
DB::Themes.vulnerable_slugs
|
||||
|
||||
30
app/controllers/vuln_api.rb
Normal file
30
app/controllers/vuln_api.rb
Normal file
@@ -0,0 +1,30 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module WPScan
|
||||
module Controller
|
||||
# Controller to handle the API token
|
||||
class VulnApi < CMSScanner::Controller::Base
|
||||
def cli_options
|
||||
[
|
||||
OptString.new(['--api-token TOKEN', 'The WPVulnDB API Token to display vulnerability data'])
|
||||
]
|
||||
end
|
||||
|
||||
def before_scan
|
||||
return unless ParsedCli.api_token
|
||||
|
||||
DB::VulnApi.token = ParsedCli.api_token
|
||||
|
||||
api_status = DB::VulnApi.status
|
||||
|
||||
raise Error::InvalidApiToken if api_status['error']
|
||||
raise Error::ApiLimitReached if api_status['requests_remaining'] == 0
|
||||
raise api_status['http_error'] if api_status['http_error']
|
||||
end
|
||||
|
||||
def after_scan
|
||||
output('status', status: DB::VulnApi.status, api_requests: WPScan.api_requests)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -20,9 +20,9 @@ module WPScan
|
||||
|
||||
enumerate(potential_urls(opts), opts.merge(check_full_response: 200)) do |res|
|
||||
if res.effective_url.end_with?('.zip')
|
||||
next unless res.headers['Content-Type'] =~ %r{\Aapplication/zip}i
|
||||
next unless %r{\Aapplication/zip}i.match?(res.headers['Content-Type'])
|
||||
else
|
||||
next unless res.body =~ SQL_PATTERN
|
||||
next unless SQL_PATTERN.match?(res.body)
|
||||
end
|
||||
|
||||
found << Model::DbExport.new(res.request.url, found_by: DIRECT_ACCESS, confidence: 100)
|
||||
|
||||
@@ -9,7 +9,7 @@ module WPScan
|
||||
def aggressive(_opts = {})
|
||||
path = 'installer-log.txt'
|
||||
|
||||
return unless target.head_and_get(path).body =~ /DUPLICATOR INSTALL-LOG/
|
||||
return unless /DUPLICATOR INSTALL-LOG/.match?(target.head_and_get(path).body)
|
||||
|
||||
Model::DuplicatorInstallerLog.new(
|
||||
target.url(path),
|
||||
|
||||
@@ -10,7 +10,7 @@ module WPScan
|
||||
pattern = %r{#{target.content_dir}/mu\-plugins/}i
|
||||
|
||||
target.in_scope_uris(target.homepage_res) do |uri|
|
||||
next unless uri.path =~ pattern
|
||||
next unless uri.path&.match?(pattern)
|
||||
|
||||
url = target.url('wp-content/mu-plugins/')
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ module WPScan
|
||||
path = 'wp-content/uploads/dump.sql'
|
||||
res = target.head_and_get(path, [200], get: { headers: { 'Range' => 'bytes=0-3000' } })
|
||||
|
||||
return unless res.body =~ SQL_PATTERN
|
||||
return unless SQL_PATTERN.match?(res.body)
|
||||
|
||||
Model::UploadSQLDump.new(
|
||||
target.url(path),
|
||||
|
||||
@@ -13,7 +13,7 @@ module WPScan
|
||||
|
||||
def valid_credentials?(response)
|
||||
response.code == 302 &&
|
||||
response.headers['Set-Cookie']&.any? { |cookie| cookie =~ /wordpress_logged_in_/i }
|
||||
[*response.headers['Set-Cookie']]&.any? { |cookie| cookie =~ /wordpress_logged_in_/i }
|
||||
end
|
||||
|
||||
def errored_response?(response)
|
||||
|
||||
@@ -8,7 +8,7 @@ module WPScan
|
||||
include CMSScanner::Finders::Finder::BreadthFirstDictionaryAttack
|
||||
|
||||
def login_request(username, password)
|
||||
target.method_call('wp.getUsersBlogs', [username, password])
|
||||
target.method_call('wp.getUsersBlogs', [username, password], cache_ttl: 0)
|
||||
end
|
||||
|
||||
def valid_credentials?(response)
|
||||
|
||||
@@ -19,7 +19,7 @@ module WPScan
|
||||
end
|
||||
end
|
||||
|
||||
target.multi_call(methods).run
|
||||
target.multi_call(methods, cache_ttl: 0).run
|
||||
end
|
||||
|
||||
# @param [ Array<Model::User> ] users
|
||||
|
||||
@@ -52,7 +52,7 @@ module WPScan
|
||||
|
||||
number = Regexp.last_match[1]
|
||||
|
||||
number if number =~ /[0-9]+/
|
||||
number if /[0-9]+/.match?(number)
|
||||
end
|
||||
|
||||
# @param [ String ] body
|
||||
|
||||
@@ -15,7 +15,7 @@ module WPScan
|
||||
#
|
||||
# @return [ Plugin ] The detected plugin in the response, related to the config
|
||||
def process_response(opts, response, slug, klass, config)
|
||||
return unless response.body =~ config['pattern']
|
||||
return unless response.body&.match?(config['pattern'])
|
||||
|
||||
Model::Plugin.new(
|
||||
slug,
|
||||
|
||||
@@ -18,7 +18,7 @@ module WPScan
|
||||
response.html.xpath(config['xpath'] || '//comment()').each do |node|
|
||||
comment = node.text.to_s.strip
|
||||
|
||||
next unless comment =~ config['pattern']
|
||||
next unless comment&.match?(config['pattern'])
|
||||
|
||||
return Model::Plugin.new(
|
||||
slug,
|
||||
|
||||
@@ -22,7 +22,7 @@ module WPScan
|
||||
found = []
|
||||
|
||||
enumerate(target_urls(opts), opts.merge(check_full_response: 400)) do |res|
|
||||
next unless res.body =~ /no image specified/i
|
||||
next unless /no image specified/i.match?(res.body)
|
||||
|
||||
found << Model::Timthumb.new(res.request.url, opts.merge(found_by: found_by, confidence: 100))
|
||||
end
|
||||
|
||||
@@ -97,9 +97,12 @@ module WPScan
|
||||
# @return [ String, nil ]
|
||||
def display_name_from_body(body)
|
||||
page = Nokogiri::HTML.parse(body)
|
||||
|
||||
# WP >= 3.0
|
||||
page.css('h1.page-title span').each do |node|
|
||||
return node.text.to_s
|
||||
text = node.text.to_s.strip
|
||||
|
||||
return text unless text.empty?
|
||||
end
|
||||
|
||||
# WP < 3.0
|
||||
|
||||
@@ -24,7 +24,7 @@ module WPScan
|
||||
|
||||
return found if error.empty? # Protection plugin / error disabled
|
||||
|
||||
next unless error =~ /The password you entered for the username|Incorrect Password/i
|
||||
next unless /The password you entered for the username|Incorrect Password/i.match?(error)
|
||||
|
||||
found << Model::User.new(username, found_by: found_by, confidence: 100)
|
||||
end
|
||||
|
||||
@@ -34,6 +34,8 @@ module WPScan
|
||||
def user_details_from_oembed_data(oembed_data)
|
||||
return unless oembed_data
|
||||
|
||||
oembed_data = oembed_data.first if oembed_data.is_a?(Array)
|
||||
|
||||
if oembed_data['author_url'] =~ %r{/author/([^/]+)/?\z}
|
||||
details = [Regexp.last_match[1], 'Author URL', 90]
|
||||
elsif oembed_data['author_name'] && !oembed_data['author_name'].empty?
|
||||
|
||||
@@ -15,7 +15,9 @@ module WPScan
|
||||
target.in_scope_uris(target.homepage_res) do |uri|
|
||||
next unless uri.to_s =~ item_attribute_pattern(type)
|
||||
|
||||
found << Regexp.last_match[1]
|
||||
slug = Regexp.last_match[1]&.strip
|
||||
|
||||
found << slug unless slug&.empty?
|
||||
end
|
||||
|
||||
uniq ? found.uniq.sort : found.sort
|
||||
@@ -28,7 +30,7 @@ module WPScan
|
||||
def items_from_codes(type, uniq = true)
|
||||
found = []
|
||||
|
||||
target.homepage_res.html.css('script,style').each do |tag|
|
||||
target.homepage_res.html.xpath('//script[not(@src)]|//style[not(@src)]').each do |tag|
|
||||
code = tag.text.to_s
|
||||
next if code.empty?
|
||||
|
||||
@@ -42,7 +44,7 @@ module WPScan
|
||||
#
|
||||
# @return [ Regexp ]
|
||||
def item_attribute_pattern(type)
|
||||
@item_attribute_pattern ||= %r{\A#{item_url_pattern(type)}([^/]+)/}i
|
||||
@item_attribute_pattern ||= %r{#{item_url_pattern(type)}([^/]+)/}i
|
||||
end
|
||||
|
||||
# @param [ String ] type
|
||||
@@ -59,7 +61,7 @@ module WPScan
|
||||
item_dir = type == 'plugins' ? target.plugins_dir : target.content_dir
|
||||
item_url = type == 'plugins' ? target.plugins_url : target.content_url
|
||||
|
||||
url = /#{item_url.gsub(/\A(?:http|https)/i, 'https?').gsub('/', '\\\\\?\/')}/i
|
||||
url = /#{item_url.gsub(/\A(?:https?)/i, 'https?').gsub('/', '\\\\\?\/')}/i
|
||||
item_dir = %r{(?:#{url}|\\?\/#{item_dir.gsub('/', '\\\\\?\/')}\\?/)}i
|
||||
|
||||
type == 'plugins' ? item_dir : %r{#{item_dir}#{type}\\?\/}i
|
||||
|
||||
@@ -15,9 +15,16 @@ module WPScan
|
||||
@uri = Addressable::URI.parse(blog.url(path_from_blog))
|
||||
end
|
||||
|
||||
# @return [ JSON ]
|
||||
# Retrieve the metadata from the vuln API if available (and a valid token is given),
|
||||
# or the local metadata db otherwise
|
||||
# @return [ Hash ]
|
||||
def metadata
|
||||
@metadata ||= db_data.empty? ? DB::Plugin.metadata_at(slug) : db_data
|
||||
end
|
||||
|
||||
# @return [ Hash ]
|
||||
def db_data
|
||||
@db_data ||= DB::Plugin.db_data(slug)
|
||||
@db_data ||= DB::VulnApi.plugin_data(slug)
|
||||
end
|
||||
|
||||
# @param [ Hash ] opts
|
||||
|
||||
@@ -21,9 +21,16 @@ module WPScan
|
||||
parse_style
|
||||
end
|
||||
|
||||
# Retrieve the metadata from the vuln API if available (and a valid token is given),
|
||||
# or the local metadata db otherwise
|
||||
# @return [ JSON ]
|
||||
def metadata
|
||||
@metadata ||= db_data.empty? ? DB::Theme.metadata_at(slug) : db_data
|
||||
end
|
||||
|
||||
# @return [ Hash ]
|
||||
def db_data
|
||||
@db_data ||= DB::Theme.db_data(slug)
|
||||
@db_data ||= DB::VulnApi.theme_data(slug)
|
||||
end
|
||||
|
||||
# @param [ Hash ] opts
|
||||
@@ -94,7 +101,7 @@ module WPScan
|
||||
#
|
||||
# @return [ String ]
|
||||
def parse_style_tag(body, tag)
|
||||
value = body[/^\s*#{Regexp.escape(tag)}:[\t ]*([^\r\n]+)/i, 1]
|
||||
value = body[/#{Regexp.escape(tag)}:[\t ]*([^\r\n\*]+)/i, 1]
|
||||
|
||||
value && !value.strip.empty? ? value.strip : nil
|
||||
end
|
||||
|
||||
@@ -60,18 +60,18 @@ module WPScan
|
||||
|
||||
# @return [ String ]
|
||||
def latest_version
|
||||
@latest_version ||= db_data['latest_version'] ? Model::Version.new(db_data['latest_version']) : nil
|
||||
@latest_version ||= metadata['latest_version'] ? Model::Version.new(metadata['latest_version']) : nil
|
||||
end
|
||||
|
||||
# Not used anywhere ATM
|
||||
# @return [ Boolean ]
|
||||
def popular?
|
||||
@popular ||= db_data['popular']
|
||||
@popular ||= metadata['popular'] ? true : false
|
||||
end
|
||||
|
||||
# @return [ String ]
|
||||
def last_updated
|
||||
@last_updated ||= db_data['last_updated']
|
||||
@last_updated ||= metadata['last_updated']
|
||||
end
|
||||
|
||||
# @return [ Boolean ]
|
||||
|
||||
@@ -35,9 +35,16 @@ module WPScan
|
||||
@all_numbers.sort! { |a, b| Gem::Version.new(b) <=> Gem::Version.new(a) }
|
||||
end
|
||||
|
||||
# @return [ JSON ]
|
||||
# Retrieve the metadata from the vuln API if available (and a valid token is given),
|
||||
# or the local metadata db otherwise
|
||||
# @return [ Hash ]
|
||||
def metadata
|
||||
@metadata ||= db_data.empty? ? DB::Version.metadata_at(number) : db_data
|
||||
end
|
||||
|
||||
# @return [ Hash ]
|
||||
def db_data
|
||||
@db_data ||= DB::Version.db_data(number)
|
||||
@db_data ||= DB::VulnApi.wordpress_data(number)
|
||||
end
|
||||
|
||||
# @return [ Array<Vulnerability> ]
|
||||
@@ -55,12 +62,12 @@ module WPScan
|
||||
|
||||
# @return [ String ]
|
||||
def release_date
|
||||
@release_date ||= db_data['release_date'] || 'Unknown'
|
||||
@release_date ||= metadata['release_date'] || 'Unknown'
|
||||
end
|
||||
|
||||
# @return [ String ]
|
||||
def status
|
||||
@status ||= db_data['status'] || 'Unknown'
|
||||
@status ||= metadata['status'] || 'Unknown'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -8,7 +8,7 @@ _______________________________________________________________
|
||||
|
||||
WordPress Security Scanner by the WPScan Team
|
||||
Version <%= WPScan::VERSION %>
|
||||
Sponsored by Sucuri - https://sucuri.net
|
||||
<%= ' ' * ((63 - WPScan::DB::Sponsor.text.length)/2) + WPScan::DB::Sponsor.text %>
|
||||
@_WPScan_, @ethicalhack3r, @erwan_lr, @_FireFart_
|
||||
_______________________________________________________________
|
||||
|
||||
|
||||
13
app/views/cli/vuln_api/status.erb
Normal file
13
app/views/cli/vuln_api/status.erb
Normal file
@@ -0,0 +1,13 @@
|
||||
<% unless @status.empty? -%>
|
||||
<% if @status['http_error'] -%>
|
||||
<%= critical_icon %> WPVulnDB API, <%= @status['http_error'].to_s %>
|
||||
<% else -%>
|
||||
<%= info_icon %> WPVulnDB API OK
|
||||
| Plan: <%= @status['plan'] %>
|
||||
| Requests Done (during the scan): <%= @api_requests %>
|
||||
| Requests Remaining: <%= @status['requests_remaining'] %>
|
||||
<% end -%>
|
||||
<% else -%>
|
||||
<%= warning_icon %> No WPVulnDB API Token given, as a result vulnerability data has not been output.
|
||||
<%= warning_icon %> You can get a free API token with 50 daily requests by registering at https://wpvulndb.com/users/sign_up.
|
||||
<% end -%>
|
||||
@@ -7,5 +7,5 @@
|
||||
"@erwan_lr",
|
||||
"@_FireFart_"
|
||||
],
|
||||
"sponsored_by": "Sucuri - https://sucuri.net"
|
||||
"sponsor": <%= WPScan::DB::Sponsor.text.to_json %>
|
||||
},
|
||||
|
||||
13
app/views/json/vuln_api/status.erb
Normal file
13
app/views/json/vuln_api/status.erb
Normal file
@@ -0,0 +1,13 @@
|
||||
"vuln_api": {
|
||||
<% unless @status.empty? -%>
|
||||
<% if @status['http_error'] -%>
|
||||
"http_error": <%= @status['http_error'].to_s.to_json %>
|
||||
<% else -%>
|
||||
"plan": <%= @status['plan'].to_json %>,
|
||||
"requests_done_during_scan": <%= @api_requests.to_json %>,
|
||||
"requests_remaining": <%= @status['requests_remaining'].to_json %>
|
||||
<% end -%>
|
||||
<% else -%>
|
||||
"error": "No WPVulnDB API Token given, as a result vulnerability data has not been output.\nYou can get a free API token with 50 daily requests by registering at https://wpvulndb.com/users/sign_up."
|
||||
<% end -%>
|
||||
},
|
||||
@@ -5,6 +5,7 @@ require 'wpscan'
|
||||
|
||||
WPScan::Scan.new do |s|
|
||||
s.controllers <<
|
||||
WPScan::Controller::VulnApi.new <<
|
||||
WPScan::Controller::CustomDirectories.new <<
|
||||
WPScan::Controller::InterestingFindings.new <<
|
||||
WPScan::Controller::WpVersion.new <<
|
||||
|
||||
@@ -7,6 +7,7 @@ require 'wpscan'
|
||||
report = MemoryProfiler.report(top: 15) do
|
||||
WPScan::Scan.new do |s|
|
||||
s.controllers <<
|
||||
WPScan::Controller::VulnApi.new <<
|
||||
WPScan::Controller::CustomDirectories.new <<
|
||||
WPScan::Controller::InterestingFindings.new <<
|
||||
WPScan::Controller::WpVersion.new <<
|
||||
|
||||
@@ -12,6 +12,7 @@ StackProf.run(mode: :cpu, out: '/tmp/stackprof-cpu.dump', interval: 500) do
|
||||
# require_relative 'wpscan' doesn't work
|
||||
WPScan::Scan.new do |s|
|
||||
s.controllers <<
|
||||
WPScan::Controller::VulnApi.new <<
|
||||
WPScan::Controller::CustomDirectories.new <<
|
||||
WPScan::Controller::InterestingFindings.new <<
|
||||
WPScan::Controller::WpVersion.new <<
|
||||
|
||||
@@ -13,7 +13,8 @@ require 'uri'
|
||||
require 'time'
|
||||
require 'readline'
|
||||
require 'securerandom'
|
||||
|
||||
# Monkey Patches/Fixes/Override
|
||||
require 'wpscan/typhoeus/response' # Adds a from_vuln_api? method
|
||||
# Custom Libs
|
||||
require 'wpscan/helper'
|
||||
require 'wpscan/db'
|
||||
@@ -38,12 +39,28 @@ module WPScan
|
||||
APP_DIR = Pathname.new(__FILE__).dirname.join('..', 'app').expand_path
|
||||
DB_DIR = Pathname.new(Dir.home).join('.wpscan', 'db')
|
||||
|
||||
Typhoeus.on_complete do |response|
|
||||
next if response.cached? || !response.from_vuln_api?
|
||||
|
||||
self.api_requests += 1
|
||||
end
|
||||
|
||||
# Override, otherwise it would be returned as 'wp_scan'
|
||||
#
|
||||
# @return [ String ]
|
||||
def self.app_name
|
||||
'wpscan'
|
||||
end
|
||||
|
||||
# @return [ Integer ]
|
||||
def self.api_requests
|
||||
@@api_requests ||= 0
|
||||
end
|
||||
|
||||
# @param [ Integer ] value
|
||||
def self.api_requests=(value)
|
||||
@@api_requests = value
|
||||
end
|
||||
end
|
||||
|
||||
require "#{WPScan::APP_DIR}/app"
|
||||
|
||||
@@ -7,7 +7,7 @@ module WPScan
|
||||
|
||||
# @return [ String ]
|
||||
def default_user_agent
|
||||
"WPScan v#{VERSION} (https://wpscan.org/)"
|
||||
@default_user_agent ||= "WPScan v#{VERSION} (https://wpscan.org/)"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -7,9 +7,12 @@ require_relative 'db/plugins'
|
||||
require_relative 'db/themes'
|
||||
require_relative 'db/plugin'
|
||||
require_relative 'db/theme'
|
||||
require_relative 'db/sponsor'
|
||||
require_relative 'db/wp_version'
|
||||
require_relative 'db/fingerprints'
|
||||
|
||||
require_relative 'db/vuln_api'
|
||||
|
||||
require_relative 'db/dynamic_finders/base'
|
||||
require_relative 'db/dynamic_finders/plugin'
|
||||
require_relative 'db/dynamic_finders/theme'
|
||||
|
||||
@@ -4,9 +4,9 @@ module WPScan
|
||||
module DB
|
||||
# Plugin DB
|
||||
class Plugin < WpItem
|
||||
# @return [ String ]
|
||||
def self.db_file
|
||||
@db_file ||= DB_DIR.join('plugins.json').to_s
|
||||
# @return [ Hash ]
|
||||
def self.metadata
|
||||
@metadata ||= super['plugins'] || {}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -5,8 +5,8 @@ module WPScan
|
||||
# WP Plugins
|
||||
class Plugins < WpItems
|
||||
# @return [ JSON ]
|
||||
def self.db
|
||||
Plugin.db
|
||||
def self.metadata
|
||||
Plugin.metadata
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
16
lib/wpscan/db/sponsor.rb
Normal file
16
lib/wpscan/db/sponsor.rb
Normal file
@@ -0,0 +1,16 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module WPScan
|
||||
module DB
|
||||
class Sponsor
|
||||
# @return [ Hash ]
|
||||
def self.text
|
||||
@text ||= file_path.exist? ? File.read(file_path).chomp : ''
|
||||
end
|
||||
|
||||
def self.file_path
|
||||
@file_path ||= DB_DIR.join('sponsor.txt')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -4,9 +4,9 @@ module WPScan
|
||||
module DB
|
||||
# Theme DB
|
||||
class Theme < WpItem
|
||||
# @return [ String ]
|
||||
def self.db_file
|
||||
@db_file ||= DB_DIR.join('themes.json').to_s
|
||||
# @return [ Hash ]
|
||||
def self.metadata
|
||||
@metadata ||= super['themes'] || {}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -5,8 +5,8 @@ module WPScan
|
||||
# WP Themes
|
||||
class Themes < WpItems
|
||||
# @return [ JSON ]
|
||||
def self.db
|
||||
Theme.db
|
||||
def self.metadata
|
||||
Theme.metadata
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -7,12 +7,15 @@ module WPScan
|
||||
class Updater
|
||||
# /!\ Might want to also update the Enumeration#cli_options when some filenames are changed here
|
||||
FILES = %w[
|
||||
plugins.json themes.json wordpresses.json
|
||||
metadata.json wp_fingerprints.json
|
||||
timthumbs-v3.txt config_backups.txt db_exports.txt
|
||||
dynamic_finders.yml wp_fingerprints.json LICENSE
|
||||
dynamic_finders.yml LICENSE sponsor.txt
|
||||
].freeze
|
||||
|
||||
OLD_FILES = %w[wordpress.db user-agents.txt dynamic_finders_01.yml].freeze
|
||||
OLD_FILES = %w[
|
||||
wordpress.db user-agents.txt dynamic_finders_01.yml
|
||||
wordpresses.json plugins.json themes.json
|
||||
].freeze
|
||||
|
||||
attr_reader :repo_directory
|
||||
|
||||
@@ -69,7 +72,7 @@ module WPScan
|
||||
connecttimeout: 300,
|
||||
accept_encoding: 'gzip, deflate',
|
||||
cache_ttl: 0,
|
||||
headers: { 'User-Agent' => Browser.instance.default_user_agent }
|
||||
headers: { 'User-Agent' => Browser.instance.default_user_agent, 'Referer' => nil }
|
||||
}
|
||||
end
|
||||
|
||||
|
||||
79
lib/wpscan/db/vuln_api.rb
Normal file
79
lib/wpscan/db/vuln_api.rb
Normal file
@@ -0,0 +1,79 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module WPScan
|
||||
module DB
|
||||
# WPVulnDB API
|
||||
class VulnApi
|
||||
NON_ERROR_CODES = [200, 401].freeze
|
||||
|
||||
class << self
|
||||
attr_accessor :token
|
||||
end
|
||||
|
||||
# @return [ Addressable::URI ]
|
||||
def self.uri
|
||||
@uri ||= Addressable::URI.parse('https://wpvulndb.com/api/v3/')
|
||||
end
|
||||
|
||||
# @param [ String ] path
|
||||
# @param [ Hash ] params
|
||||
#
|
||||
# @return [ Hash ]
|
||||
def self.get(path, params = {})
|
||||
return {} unless token
|
||||
|
||||
res = Browser.get(uri.join(path), params.merge(request_params))
|
||||
|
||||
return {} if res.code == 404 # This is for API inconsistencies when dots in path
|
||||
return JSON.parse(res.body) if NON_ERROR_CODES.include?(res.code)
|
||||
|
||||
raise Error::HTTP, res
|
||||
rescue Error::HTTP => e
|
||||
retries ||= 0
|
||||
|
||||
if (retries += 1) <= 3
|
||||
sleep(1)
|
||||
retry
|
||||
end
|
||||
|
||||
{ 'http_error' => e }
|
||||
end
|
||||
|
||||
# @return [ Hash ]
|
||||
def self.plugin_data(slug)
|
||||
get("plugins/#{slug}")&.dig(slug) || {}
|
||||
end
|
||||
|
||||
# @return [ Hash ]
|
||||
def self.theme_data(slug)
|
||||
get("themes/#{slug}")&.dig(slug) || {}
|
||||
end
|
||||
|
||||
# @return [ Hash ]
|
||||
def self.wordpress_data(version_number)
|
||||
get("wordpresses/#{version_number.tr('.', '')}")&.dig(version_number) || {}
|
||||
end
|
||||
|
||||
# @return [ Hash ]
|
||||
def self.status
|
||||
json = get('status', params: { version: WPScan::VERSION }, cache_ttl: 0)
|
||||
|
||||
json['requests_remaining'] = 'Unlimited' if json['requests_remaining'] == -1
|
||||
|
||||
json
|
||||
end
|
||||
|
||||
# @return [ Hash ]
|
||||
def self.request_params
|
||||
{
|
||||
headers: {
|
||||
'Host' => uri.host, # Reset in case user provided a --vhost for the target
|
||||
'Referer' => nil, # Removes referer set by the cmsscanner to the target url
|
||||
'User-Agent' => Browser.instance.default_user_agent,
|
||||
'Authorization' => "Token token=#{token}"
|
||||
}
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -6,14 +6,19 @@ module WPScan
|
||||
class WpItem
|
||||
# @param [ String ] identifier The plugin/theme slug or version number
|
||||
#
|
||||
# @return [ Hash ] The JSON data from the DB associated to the identifier
|
||||
def self.db_data(identifier)
|
||||
db[identifier] || {}
|
||||
# @return [ Hash ] The JSON data from the metadata associated to the identifier
|
||||
def self.metadata_at(identifier)
|
||||
metadata[identifier] || {}
|
||||
end
|
||||
|
||||
# @return [ JSON ]
|
||||
def self.db
|
||||
@db ||= read_json_file(db_file)
|
||||
def self.metadata
|
||||
@metadata ||= read_json_file(metadata_file)
|
||||
end
|
||||
|
||||
# @return [ String ]
|
||||
def self.metadata_file
|
||||
@metadata_file ||= DB_DIR.join('metadata.json').to_s
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -6,17 +6,17 @@ module WPScan
|
||||
class WpItems
|
||||
# @return [ Array<String> ] The slug of all items
|
||||
def self.all_slugs
|
||||
db.keys
|
||||
metadata.keys
|
||||
end
|
||||
|
||||
# @return [ Array<String> ] The slug of all popular items
|
||||
def self.popular_slugs
|
||||
db.select { |_key, item| item['popular'] == true }.keys
|
||||
metadata.select { |_key, item| item['popular'] == true }.keys
|
||||
end
|
||||
|
||||
# @return [ Array<String> ] The slug of all vulnerable items
|
||||
def self.vulnerable_slugs
|
||||
db.reject { |_key, item| item['vulnerabilities'].empty? }.keys
|
||||
metadata.select { |_key, item| item['vulnerabilities'] == true }.keys
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -4,9 +4,9 @@ module WPScan
|
||||
module DB
|
||||
# WP Version
|
||||
class Version < WpItem
|
||||
# @return [ String ]
|
||||
def self.db_file
|
||||
@db_file ||= DB_DIR.join('wordpresses.json').to_s
|
||||
# @return [ Hash ]
|
||||
def self.metadata
|
||||
@metadata ||= super['wordpress'] || {}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -12,5 +12,6 @@ end
|
||||
require_relative 'errors/enumeration'
|
||||
require_relative 'errors/http'
|
||||
require_relative 'errors/update'
|
||||
require_relative 'errors/vuln_api'
|
||||
require_relative 'errors/wordpress'
|
||||
require_relative 'errors/xmlrpc'
|
||||
|
||||
20
lib/wpscan/errors/vuln_api.rb
Normal file
20
lib/wpscan/errors/vuln_api.rb
Normal file
@@ -0,0 +1,20 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module WPScan
|
||||
module Error
|
||||
# Error raised when the token given via --api-token is invalid
|
||||
class InvalidApiToken < Standard
|
||||
def to_s
|
||||
'The API token provided is invalid'
|
||||
end
|
||||
end
|
||||
|
||||
# Error raised when the number of API requests has been reached
|
||||
# currently not implemented on the API side
|
||||
class ApiLimitReached < Standard
|
||||
def to_s
|
||||
'Your API limit has been reached'
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -4,7 +4,7 @@ module WPScan
|
||||
module Finders
|
||||
module DynamicFinder
|
||||
module Version
|
||||
# Version finder using Body Pattern method. Tipically used when the response is not
|
||||
# Version finder using Body Pattern method. Typically used when the response is not
|
||||
# an HTML doc and Xpath can't be used
|
||||
class BodyPattern < Finders::DynamicFinder::Version::Finder
|
||||
# @return [ Hash ]
|
||||
@@ -16,7 +16,7 @@ module WPScan
|
||||
# @param [ Hash ] opts
|
||||
# @return [ Version ]
|
||||
def find(response, _opts = {})
|
||||
return unless response.body =~ self.class::PATTERN
|
||||
return unless response.code != 404 && response.body =~ self.class::PATTERN
|
||||
|
||||
create_version(
|
||||
Regexp.last_match[:v],
|
||||
|
||||
@@ -14,7 +14,7 @@ end
|
||||
# @return [ Symbol ]
|
||||
def classify_slug(slug)
|
||||
classified = slug.to_s.gsub(/[^a-z\d\-]/i, '-').gsub(/\-{1,}/, '_').camelize.to_s
|
||||
classified = "D_#{classified}" if classified[0] =~ /\d/
|
||||
classified = "D_#{classified}" if /\d/.match?(classified[0])
|
||||
|
||||
classified.to_sym
|
||||
end
|
||||
|
||||
@@ -11,7 +11,9 @@ module WPScan
|
||||
module WordPress
|
||||
include CMSScanner::Target::Platform::PHP
|
||||
|
||||
WORDPRESS_PATTERN = %r{/(?:(?:wp-content/(?:themes|(?:mu\-)?plugins|uploads))|wp-includes)/}i.freeze
|
||||
WORDPRESS_PATTERN = %r{/(?:(?:wp-content/(?:themes|(?:mu\-)?plugins|uploads))|wp-includes)/}i.freeze
|
||||
WP_JSON_OEMBED_PATTERN = %r{/wp\-json/oembed/}i.freeze
|
||||
WP_ADMIN_AJAX_PATTERN = %r{\\?/wp\-admin\\?/admin\-ajax\.php}i.freeze
|
||||
|
||||
# These methods are used in the associated interesting_findings finders
|
||||
# to keep the boolean state of the finding rather than re-check the whole thing again
|
||||
@@ -23,27 +25,33 @@ module WPScan
|
||||
# @param [ Symbol ] detection_mode
|
||||
#
|
||||
# @return [ Boolean ]
|
||||
# rubocop:disable Metrics/AbcSize, Metrics/PerceivedComplexity
|
||||
def wordpress?(detection_mode)
|
||||
in_scope_uris(homepage_res) do |uri|
|
||||
return true if uri.path.match(WORDPRESS_PATTERN)
|
||||
return true if WORDPRESS_PATTERN.match?(uri.path) || WP_JSON_OEMBED_PATTERN.match?(uri.path)
|
||||
end
|
||||
|
||||
homepage_res.html.css('meta[name="generator"]').each do |node|
|
||||
return true if node['content'] =~ /wordpress/i
|
||||
return true if homepage_res.html.css('meta[name="generator"]').any? do |node|
|
||||
/wordpress/i.match?(node['content'])
|
||||
end
|
||||
|
||||
return true unless comments_from_page(/wordpress/i, homepage_res).empty?
|
||||
|
||||
return true if homepage_res.html.xpath('//script[not(@src)]').any? do |node|
|
||||
WP_ADMIN_AJAX_PATTERN.match?(node.text)
|
||||
end
|
||||
|
||||
if %i[mixed aggressive].include?(detection_mode)
|
||||
%w[wp-admin/install.php wp-login.php].each do |path|
|
||||
in_scope_uris(Browser.get_and_follow_location(url(path))).each do |uri|
|
||||
return true if uri.path.match(WORDPRESS_PATTERN)
|
||||
return true if in_scope_uris(Browser.get_and_follow_location(url(path))).any? do |uri|
|
||||
WORDPRESS_PATTERN.match?(uri.path)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
false
|
||||
end
|
||||
# rubocop:enable Metrics/AbcSize, Metrics/PerceivedComplexity
|
||||
|
||||
COOKIE_PATTERNS = {
|
||||
'vjs' => /createCookie\('vjs','(?<c_value>\d+)',\d+\);/i
|
||||
@@ -82,7 +90,7 @@ module WPScan
|
||||
def wordpress_hosted?
|
||||
return true if /\.wordpress\.com$/i.match?(uri.host)
|
||||
|
||||
unless content_dir(:passive)
|
||||
unless content_dir
|
||||
pattern = %r{https?://s\d\.wp\.com#{WORDPRESS_PATTERN}}i.freeze
|
||||
|
||||
uris_from_page(homepage_res) do |uri|
|
||||
@@ -109,6 +117,7 @@ module WPScan
|
||||
Browser.instance.forge_request(
|
||||
login_url,
|
||||
method: :post,
|
||||
cache_ttl: 0,
|
||||
body: { log: username, pwd: password }
|
||||
)
|
||||
end
|
||||
|
||||
@@ -13,12 +13,11 @@ module WPScan
|
||||
@plugins_dir = dir.chomp('/')
|
||||
end
|
||||
|
||||
# @param [ Symbol ] detection_mode
|
||||
# @return [ String ] The wp-content directory
|
||||
def content_dir(detection_mode = :mixed)
|
||||
def content_dir
|
||||
unless @content_dir
|
||||
# scope_url_pattern is from CMSScanner::Target
|
||||
pattern = %r{#{scope_url_pattern}([\w\s\-/]+)\\?/(?:themes|plugins|uploads|cache)\\?/}i
|
||||
pattern = %r{#{scope_url_pattern}([\w\s\-/]+?)\\?/(?:themes|plugins|uploads|cache)\\?/}i
|
||||
|
||||
in_scope_uris(homepage_res) do |uri|
|
||||
return @content_dir = Regexp.last_match[1] if uri.to_s.match(pattern)
|
||||
@@ -29,9 +28,7 @@ module WPScan
|
||||
return @content_dir = match[1]
|
||||
end
|
||||
|
||||
unless detection_mode == :passive
|
||||
return @content_dir = 'wp-content' if default_content_dir_exists?
|
||||
end
|
||||
return @content_dir = 'wp-content' if default_content_dir_exists?
|
||||
end
|
||||
|
||||
@content_dir
|
||||
|
||||
13
lib/wpscan/typhoeus/response.rb
Normal file
13
lib/wpscan/typhoeus/response.rb
Normal file
@@ -0,0 +1,13 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Typhoeus
|
||||
# Custom Response class
|
||||
class Response
|
||||
# @note: Ignores requests done to the /status endpoint of the API
|
||||
#
|
||||
# @return [ Boolean ]
|
||||
def from_vuln_api?
|
||||
effective_url.start_with?(WPScan::DB::VulnApi.uri.to_s) && !effective_url.include?('/status')
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -2,5 +2,5 @@
|
||||
|
||||
# Version
|
||||
module WPScan
|
||||
VERSION = '3.6.1'
|
||||
VERSION = '3.7.3'
|
||||
end
|
||||
|
||||
@@ -166,6 +166,7 @@ describe WPScan::Controller::Core do
|
||||
before do
|
||||
expect(core).to receive(:load_server_module)
|
||||
expect(core.target).to receive(:wordpress?).with(:mixed).and_return(true)
|
||||
expect(core.target).to receive(:wordpress_hosted?).and_return(false)
|
||||
end
|
||||
|
||||
it 'calls the formatter when started and finished to update the db' do
|
||||
@@ -174,56 +175,6 @@ describe WPScan::Controller::Core do
|
||||
end
|
||||
end
|
||||
|
||||
context 'when a redirect occurs' do
|
||||
before do
|
||||
stub_request(:any, target_url)
|
||||
|
||||
expect(core.target).to receive(:homepage_res)
|
||||
.at_least(1)
|
||||
.and_return(Typhoeus::Response.new(effective_url: redirection, body: ''))
|
||||
end
|
||||
|
||||
context 'to the wp-admin/install.php' do
|
||||
let(:redirection) { "#{target_url}wp-admin/install.php" }
|
||||
|
||||
it 'calls the formatter with the correct parameters and exit' do
|
||||
expect(core.formatter).to receive(:output)
|
||||
.with('not_fully_configured', hash_including(url: redirection), 'core').ordered
|
||||
|
||||
# TODO: Would be cool to be able to test the exit code
|
||||
expect { core.before_scan }.to raise_error(SystemExit)
|
||||
end
|
||||
end
|
||||
|
||||
context 'to something else' do
|
||||
let(:redirection) { 'http://g.com/' }
|
||||
|
||||
it 'raises an error' do
|
||||
expect { core.before_scan }.to raise_error(CMSScanner::Error::HTTPRedirect)
|
||||
end
|
||||
end
|
||||
|
||||
context 'to another path with the wp-admin/install.php in the query' do
|
||||
let(:redirection) { "#{target_url}index.php?a=/wp-admin/install.php" }
|
||||
|
||||
context 'when wordpress' do
|
||||
it 'does not raise an error' do
|
||||
expect(core.target).to receive(:wordpress?).with(:mixed).and_return(true)
|
||||
|
||||
expect { core.before_scan }.to_not raise_error
|
||||
end
|
||||
end
|
||||
|
||||
context 'when not wordpress' do
|
||||
it 'raises an error' do
|
||||
expect(core.target).to receive(:wordpress?).twice.with(:mixed).and_return(false)
|
||||
|
||||
expect { core.before_scan }.to raise_error(WPScan::Error::NotWordPress)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when hosted on wordpress.com' do
|
||||
let(:target_url) { 'http://ex.wordpress.com' }
|
||||
|
||||
@@ -234,52 +185,106 @@ describe WPScan::Controller::Core do
|
||||
end
|
||||
end
|
||||
|
||||
context 'when wordpress' do
|
||||
before do
|
||||
expect(core).to receive(:load_server_module)
|
||||
expect(core.target).to receive(:wordpress?).with(:mixed).and_return(true)
|
||||
end
|
||||
context 'when not hosted on wordpress.com' do
|
||||
before { allow(core.target).to receive(:wordpress_hosted?).and_return(false) }
|
||||
|
||||
it 'does not raise any error' do
|
||||
expect { core.before_scan }.to_not raise_error
|
||||
end
|
||||
end
|
||||
context 'when a redirect occurs' do
|
||||
before do
|
||||
stub_request(:any, target_url)
|
||||
|
||||
context 'when not wordpress' do
|
||||
before do
|
||||
expect(core).to receive(:load_server_module)
|
||||
end
|
||||
expect(core.target).to receive(:homepage_res)
|
||||
.at_least(1)
|
||||
.and_return(Typhoeus::Response.new(effective_url: redirection, body: ''))
|
||||
end
|
||||
|
||||
context 'when no --force' do
|
||||
before { expect(core.target).to receive(:maybe_add_cookies) }
|
||||
context 'to the wp-admin/install.php' do
|
||||
let(:redirection) { "#{target_url}wp-admin/install.php" }
|
||||
|
||||
context 'when no cookies added or still not wordpress after being added' do
|
||||
it 'raises an error' do
|
||||
expect(core.target).to receive(:wordpress?).twice.with(:mixed).and_return(false)
|
||||
it 'calls the formatter with the correct parameters and exit' do
|
||||
expect(core.formatter).to receive(:output)
|
||||
.with('not_fully_configured', hash_including(url: redirection), 'core').ordered
|
||||
|
||||
expect { core.before_scan }.to raise_error(WPScan::Error::NotWordPress)
|
||||
# TODO: Would be cool to be able to test the exit code
|
||||
expect { core.before_scan }.to raise_error(SystemExit)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when the added cookies solved it' do
|
||||
it 'does not raise an error' do
|
||||
expect(core.target).to receive(:wordpress?).with(:mixed).and_return(false).ordered
|
||||
expect(core.target).to receive(:wordpress?).with(:mixed).and_return(true).ordered
|
||||
context 'to something else' do
|
||||
let(:redirection) { 'http://g.com/' }
|
||||
|
||||
it 'raises an error' do
|
||||
expect { core.before_scan }.to raise_error(CMSScanner::Error::HTTPRedirect)
|
||||
end
|
||||
end
|
||||
|
||||
context 'to another path with the wp-admin/install.php in the query' do
|
||||
let(:redirection) { "#{target_url}index.php?a=/wp-admin/install.php" }
|
||||
|
||||
context 'when wordpress' do
|
||||
it 'does not raise an error' do
|
||||
expect(core.target).to receive(:wordpress?).with(:mixed).and_return(true)
|
||||
|
||||
expect { core.before_scan }.to_not raise_error
|
||||
end
|
||||
end
|
||||
|
||||
context 'when not wordpress' do
|
||||
it 'raises an error' do
|
||||
expect(core.target).to receive(:wordpress?).twice.with(:mixed).and_return(false)
|
||||
|
||||
expect { core.before_scan }.to raise_error(WPScan::Error::NotWordPress)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when wordpress' do
|
||||
before do
|
||||
expect(core).to receive(:load_server_module)
|
||||
expect(core.target).to receive(:wordpress?).with(:mixed).and_return(true)
|
||||
end
|
||||
|
||||
it 'does not raise any error' do
|
||||
expect { core.before_scan }.to_not raise_error
|
||||
end
|
||||
end
|
||||
|
||||
context 'when not wordpress' do
|
||||
before do
|
||||
expect(core).to receive(:load_server_module)
|
||||
end
|
||||
|
||||
context 'when no --force' do
|
||||
before { expect(core.target).to receive(:maybe_add_cookies) }
|
||||
|
||||
context 'when no cookies added or still not wordpress after being added' do
|
||||
it 'raises an error' do
|
||||
expect(core.target).to receive(:wordpress?).twice.with(:mixed).and_return(false)
|
||||
|
||||
expect { core.before_scan }.to raise_error(WPScan::Error::NotWordPress)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when the added cookies solved it' do
|
||||
it 'does not raise an error' do
|
||||
expect(core.target).to receive(:wordpress?).with(:mixed).and_return(false).ordered
|
||||
expect(core.target).to receive(:wordpress?).with(:mixed).and_return(true).ordered
|
||||
|
||||
expect { core.before_scan }.to_not raise_error
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when --force' do
|
||||
let(:cli_args) { "#{super()} --force" }
|
||||
|
||||
it 'does not raise any error' do
|
||||
expect(core.target).to receive(:wordpress?).with(:mixed).and_return(false)
|
||||
|
||||
expect { core.before_scan }.to_not raise_error
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when --force' do
|
||||
let(:cli_args) { "#{super()} --force" }
|
||||
|
||||
it 'does not raise any error' do
|
||||
expect(core.target).to receive(:wordpress?).with(:mixed).and_return(false)
|
||||
|
||||
expect { core.before_scan }.to_not raise_error
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -20,7 +20,7 @@ describe WPScan::Controller::CustomDirectories do
|
||||
|
||||
describe '#before_scan' do
|
||||
context 'when the content_dir is not found and not supplied' do
|
||||
before { expect(controller.target).to receive(:content_dir).with(:mixed) }
|
||||
before { expect(controller.target).to receive(:content_dir).and_return(nil) }
|
||||
|
||||
it 'raises an exception' do
|
||||
expect { controller.before_scan }.to raise_error(WPScan::Error::WpContentDirNotDetected)
|
||||
|
||||
93
spec/app/controllers/vuln_api_spec.rb
Normal file
93
spec/app/controllers/vuln_api_spec.rb
Normal file
@@ -0,0 +1,93 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
describe WPScan::Controller::VulnApi do
|
||||
subject(:controller) { described_class.new }
|
||||
let(:target_url) { 'http://ex.lo/' }
|
||||
let(:cli_args) { "--url #{target_url}" }
|
||||
|
||||
before do
|
||||
WPScan::ParsedCli.options = rspec_parsed_options(cli_args)
|
||||
end
|
||||
|
||||
describe '#cli_options' do
|
||||
its(:cli_options) { should_not be_empty }
|
||||
its(:cli_options) { should be_a Array }
|
||||
|
||||
it 'contains to correct options' do
|
||||
expect(controller.cli_options.map(&:to_sym)).to eq %i[api_token]
|
||||
end
|
||||
end
|
||||
|
||||
describe '#before_scan' do
|
||||
context 'when no --api-token provided' do
|
||||
its(:before_scan) { should be nil }
|
||||
end
|
||||
|
||||
context 'when --api-token given' do
|
||||
let(:cli_args) { "#{super()} --api-token token" }
|
||||
|
||||
context 'when the token is invalid' do
|
||||
before { expect(WPScan::DB::VulnApi).to receive(:status).and_return('error' => 'HTTP Token: Access denied.') }
|
||||
|
||||
it 'raise an InvalidApiToken error' do
|
||||
expect { controller.before_scan }.to raise_error(WPScan::Error::InvalidApiToken)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when the token is valid' do
|
||||
context 'when the limit has been reached' do
|
||||
before do
|
||||
expect(WPScan::DB::VulnApi)
|
||||
.to receive(:status)
|
||||
.and_return('success' => true, 'plan' => 'free', 'requests_remaining' => 0)
|
||||
end
|
||||
|
||||
it 'raises an ApiLimitReached error' do
|
||||
expect { controller.before_scan }.to raise_error(WPScan::Error::ApiLimitReached)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when a HTTP error, like a timeout' do
|
||||
before do
|
||||
expect(WPScan::DB::VulnApi)
|
||||
.to receive(:status)
|
||||
.and_return(
|
||||
'http_error' => WPScan::Error::HTTP.new(
|
||||
Typhoeus::Response.new(effective_url: 'mock-url', return_code: 28)
|
||||
)
|
||||
)
|
||||
end
|
||||
|
||||
it 'raises an HTTP error' do
|
||||
expect { controller.before_scan }
|
||||
.to raise_error(WPScan::Error::HTTP, 'HTTP Error: mock-url (Timeout was reached)')
|
||||
end
|
||||
end
|
||||
|
||||
context 'when the token is valid and no HTTP error' do
|
||||
before do
|
||||
expect(WPScan::DB::VulnApi)
|
||||
.to receive(:status)
|
||||
.and_return('success' => true, 'plan' => 'free', 'requests_remaining' => requests)
|
||||
end
|
||||
|
||||
context 'when limited requests' do
|
||||
let(:requests) { 100 }
|
||||
|
||||
it 'does not raise an error' do
|
||||
expect { controller.before_scan }.to_not raise_error
|
||||
end
|
||||
|
||||
context 'when unlimited requests' do
|
||||
let(:requests) { 'Unlimited' }
|
||||
|
||||
it 'does not raise an error' do
|
||||
expect { controller.before_scan }.to_not raise_error
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
61
spec/app/finders/passwords/wp_login_spec.rb
Normal file
61
spec/app/finders/passwords/wp_login_spec.rb
Normal file
@@ -0,0 +1,61 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
describe WPScan::Finders::Passwords::WpLogin do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url) }
|
||||
let(:url) { 'http://ex.lo/' }
|
||||
|
||||
describe '#valid_credentials?' do
|
||||
context 'when a non 302' do
|
||||
it 'returns false' do
|
||||
expect(finder.valid_credentials?(Typhoeus::Response.new(code: 200, headers: {}))).to be_falsey
|
||||
end
|
||||
end
|
||||
|
||||
context 'when a 302' do
|
||||
let(:response) { Typhoeus::Response.new(code: 302, headers: headers) }
|
||||
|
||||
context 'when no cookies set' do
|
||||
let(:headers) { {} }
|
||||
|
||||
it 'returns false' do
|
||||
expect(finder.valid_credentials?(response)).to be_falsey
|
||||
end
|
||||
end
|
||||
|
||||
context 'when no logged_in cookie set' do
|
||||
context 'when only one cookie set' do
|
||||
let(:headers) { 'Set-Cookie: wordpress_test_cookie=WP+Cookie+check; path=/' }
|
||||
|
||||
it 'returns false' do
|
||||
expect(finder.valid_credentials?(response)).to be_falsey
|
||||
end
|
||||
end
|
||||
|
||||
context 'when multiple cookies set' do
|
||||
let(:headers) do
|
||||
"Set-Cookie: wordpress_test_cookie=WP+Cookie+check; path=/\r\n" \
|
||||
'Set-Cookie: something=value; path=/'
|
||||
end
|
||||
|
||||
it 'returns false' do
|
||||
expect(finder.valid_credentials?(response)).to be_falsey
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when logged_in cookie set' do
|
||||
let(:headers) do
|
||||
"Set-Cookie: wordpress_test_cookie=WP+Cookie+check; path=/\r\r" \
|
||||
"Set-Cookie: wordpress_xxx=yyy; path=/wp-content/plugins; httponly\r\n" \
|
||||
"Set-Cookie: wordpress_xxx=yyy; path=/wp-admin; httponly\r\n" \
|
||||
'Set-Cookie: wordpress_logged_in_xxx=yyy; path=/; httponly'
|
||||
end
|
||||
|
||||
it 'returns false' do
|
||||
expect(finder.valid_credentials?(response)).to eql true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -3,14 +3,16 @@
|
||||
describe WPScan::Finders::Plugins::UrlsInHomepage do
|
||||
subject(:finder) { described_class.new(target) }
|
||||
let(:target) { WPScan::Target.new(url) }
|
||||
let(:url) { 'http://wp.lab/' }
|
||||
let(:url) { 'https://wp.lab/' }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('plugins', 'urls_in_homepage') }
|
||||
|
||||
before { target.scope << 'sub.lab' }
|
||||
|
||||
it_behaves_like 'App::Finders::WpItems::URLsInHomepage' do
|
||||
let(:type) { 'plugins' }
|
||||
let(:uniq_links) { true }
|
||||
let(:uniq_codes) { true }
|
||||
let(:expected_from_links) { (1..4).map { |i| "dl-#{i}" } }
|
||||
let(:expected_from_links) { (1..5).map { |i| "dl-#{i}" } }
|
||||
let(:expected_from_codes) { (1..6).map { |i| "dc-#{i}" } }
|
||||
end
|
||||
|
||||
|
||||
@@ -6,6 +6,8 @@ describe WPScan::Finders::Themes::UrlsInHomepage do
|
||||
let(:url) { 'http://wp.lab/' }
|
||||
let(:fixtures) { FINDERS_FIXTURES.join('themes', 'urls_in_homepage') }
|
||||
|
||||
# before { target.scope << 'sub.lab' }
|
||||
|
||||
it_behaves_like 'App::Finders::WpItems::URLsInHomepage' do
|
||||
let(:type) { 'themes' }
|
||||
let(:uniq_links) { true }
|
||||
|
||||
@@ -50,7 +50,7 @@ describe WPScan::Finders::Users::AuthorIdBruteForcing do
|
||||
end
|
||||
|
||||
context 'when no display_name' do
|
||||
['4.1.1', '3.0', '2.9.2'].each do |file|
|
||||
%w[4.9-span-tag 4.1.1 3.0 2.9.2].each do |file|
|
||||
it "returns nil for #{file}-empty.html" do
|
||||
body = File.read(fixtures.join("#{file}-empty.html"))
|
||||
|
||||
|
||||
@@ -19,15 +19,17 @@ describe WPScan::Finders::Users::OembedApi do
|
||||
end
|
||||
|
||||
context 'when a JSON response' do
|
||||
let(:body) { File.read(fixture) }
|
||||
|
||||
context 'when 404' do
|
||||
let(:body) { File.read(fixtures.join('404.json')) }
|
||||
let(:fixture) { fixtures.join('404.json') }
|
||||
|
||||
its(:aggressive) { should eql([]) }
|
||||
end
|
||||
|
||||
context 'when 200' do
|
||||
context 'when author_url present' do
|
||||
let(:body) { File.read(fixtures.join('200_author_url.json')) }
|
||||
let(:fixture) { fixtures.join('200_author_url.json') }
|
||||
|
||||
it 'returns the expected array of users' do
|
||||
users = finder.aggressive
|
||||
@@ -44,7 +46,7 @@ describe WPScan::Finders::Users::OembedApi do
|
||||
end
|
||||
|
||||
context 'when author_url not present but author_name' do
|
||||
let(:body) { File.read(fixtures.join('200_author_name.json')) }
|
||||
let(:fixture) { fixtures.join('200_author_name.json') }
|
||||
|
||||
it 'returns the expected array of users' do
|
||||
users = finder.aggressive
|
||||
@@ -59,6 +61,12 @@ describe WPScan::Finders::Users::OembedApi do
|
||||
expect(user.interesting_entries).to eql ['http://wp.lab/wp-json/oembed/1.0/embed?url=http://wp.lab/&format=json']
|
||||
end
|
||||
end
|
||||
|
||||
context 'when body is an array' do
|
||||
let(:fixture) { fixtures.join('array.json') }
|
||||
|
||||
its(:aggressive) { should eql([]) }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -81,24 +81,39 @@ describe WPScan::Model::Plugin do
|
||||
end
|
||||
|
||||
describe '#latest_version, #last_updated, #popular' do
|
||||
context 'when none' do
|
||||
let(:slug) { 'vulnerable-not-popular' }
|
||||
before { allow(plugin).to receive(:db_data).and_return(db_data) }
|
||||
|
||||
context 'when no db_data and no metadata' do
|
||||
let(:slug) { 'not-known' }
|
||||
let(:db_data) { {} }
|
||||
|
||||
its(:latest_version) { should be_nil }
|
||||
its(:last_updated) { should be_nil }
|
||||
its(:popular?) { should be false }
|
||||
end
|
||||
|
||||
context 'when values' do
|
||||
context 'when no db_data but metadata' do
|
||||
let(:slug) { 'no-vulns-popular' }
|
||||
let(:db_data) { {} }
|
||||
|
||||
its(:latest_version) { should eql WPScan::Model::Version.new('2.0') }
|
||||
its(:last_updated) { should eql '2015-05-16T00:00:00.000Z' }
|
||||
its(:popular?) { should be true }
|
||||
end
|
||||
|
||||
context 'when db_data' do
|
||||
let(:slug) { 'no-vulns-popular' }
|
||||
let(:db_data) { vuln_api_data_for('plugins/no-vulns-popular') }
|
||||
|
||||
its(:latest_version) { should eql WPScan::Model::Version.new('2.1') }
|
||||
its(:last_updated) { should eql '2015-05-16T00:00:00.000Z-via-api' }
|
||||
its(:popular?) { should be true }
|
||||
end
|
||||
end
|
||||
|
||||
describe '#outdated?' do
|
||||
before { allow(plugin).to receive(:db_data).and_return({}) }
|
||||
|
||||
context 'when last_version' do
|
||||
let(:slug) { 'no-vulns-popular' }
|
||||
|
||||
@@ -116,13 +131,13 @@ describe WPScan::Model::Plugin do
|
||||
.and_return(WPScan::Model::Version.new(version_number))
|
||||
end
|
||||
|
||||
context 'when version < last_version' do
|
||||
context 'when version < latest_version' do
|
||||
let(:version_number) { '1.2' }
|
||||
|
||||
its(:outdated?) { should eql true }
|
||||
end
|
||||
|
||||
context 'when version >= last_version' do
|
||||
context 'when version >= latest_version' do
|
||||
let(:version_number) { '3.0' }
|
||||
|
||||
its(:outdated?) { should eql false }
|
||||
@@ -130,7 +145,7 @@ describe WPScan::Model::Plugin do
|
||||
end
|
||||
end
|
||||
|
||||
context 'when no last_version' do
|
||||
context 'when no latest_version' do
|
||||
let(:slug) { 'vulnerable-not-popular' }
|
||||
|
||||
context 'when no version' do
|
||||
@@ -153,13 +168,16 @@ describe WPScan::Model::Plugin do
|
||||
end
|
||||
|
||||
describe '#vulnerabilities' do
|
||||
before { allow(plugin).to receive(:db_data).and_return(db_data) }
|
||||
|
||||
after do
|
||||
expect(plugin.vulnerabilities).to eq @expected
|
||||
expect(plugin.vulnerable?).to eql @expected.empty? ? false : true
|
||||
end
|
||||
|
||||
context 'when plugin not in the DB' do
|
||||
let(:slug) { 'not-in-db' }
|
||||
let(:slug) { 'not-in-db' }
|
||||
let(:db_data) { {} }
|
||||
|
||||
it 'returns an empty array' do
|
||||
@expected = []
|
||||
@@ -168,7 +186,8 @@ describe WPScan::Model::Plugin do
|
||||
|
||||
context 'when in the DB' do
|
||||
context 'when no vulnerabilities' do
|
||||
let(:slug) { 'no-vulns-popular' }
|
||||
let(:slug) { 'no-vulns-popular' }
|
||||
let(:db_data) { vuln_api_data_for('plugins/no-vulns-popular') }
|
||||
|
||||
it 'returns an empty array' do
|
||||
@expected = []
|
||||
@@ -176,11 +195,13 @@ describe WPScan::Model::Plugin do
|
||||
end
|
||||
|
||||
context 'when vulnerabilities' do
|
||||
let(:slug) { 'vulnerable-not-popular' }
|
||||
let(:slug) { 'vulnerable-not-popular' }
|
||||
let(:db_data) { vuln_api_data_for('plugins/vulnerable-not-popular') }
|
||||
|
||||
let(:all_vulns) do
|
||||
[
|
||||
WPScan::Vulnerability.new(
|
||||
'First Vuln',
|
||||
'First Vuln <= 6.3.10 - LFI',
|
||||
{ wpvulndb: '1' },
|
||||
'LFI',
|
||||
'6.3.10'
|
||||
|
||||
@@ -10,10 +10,9 @@ describe WPScan::Model::Theme do
|
||||
before { expect(blog).to receive(:content_dir).at_least(1).and_return('wp-content') }
|
||||
|
||||
describe '#new' do
|
||||
before do
|
||||
stub_request(:get, /.*\.css\z/)
|
||||
.to_return(body: File.read(fixtures.join('style.css')))
|
||||
end
|
||||
before { stub_request(:get, /.*\.css\z/).to_return(body: File.read(fixture)) }
|
||||
|
||||
let(:fixture) { fixtures.join('style.css') }
|
||||
|
||||
its(:url) { should eql 'http://wp.lab/wp-content/themes/spec/' }
|
||||
its(:style_url) { should eql 'http://wp.lab/wp-content/themes/spec/style.css' }
|
||||
@@ -34,6 +33,14 @@ describe WPScan::Model::Theme do
|
||||
|
||||
its(:style_url) { should eql opts[:style_url] }
|
||||
end
|
||||
|
||||
context 'when some new lines are stripped' do
|
||||
let(:fixture) { fixtures.join('stripped_new_lines.css') }
|
||||
|
||||
its(:style_name) { should eql 'Divi' }
|
||||
its(:style_uri) { should eql 'http://www.elegantthemes.com/gallery/divi/' }
|
||||
its(:license_uri) { should eql 'http://www.gnu.org/licenses/gpl-2.0.html' }
|
||||
end
|
||||
end
|
||||
|
||||
describe '#version' do
|
||||
@@ -86,8 +93,179 @@ describe WPScan::Model::Theme do
|
||||
end
|
||||
end
|
||||
|
||||
describe '#latest_version, #last_updated, #popular' do
|
||||
before do
|
||||
stub_request(:get, /.*\.css\z/)
|
||||
allow(theme).to receive(:db_data).and_return(db_data)
|
||||
end
|
||||
|
||||
context 'when no db_data and no metadata' do
|
||||
let(:slug) { 'not-known' }
|
||||
let(:db_data) { {} }
|
||||
|
||||
its(:latest_version) { should be_nil }
|
||||
its(:last_updated) { should be_nil }
|
||||
its(:popular?) { should be false }
|
||||
end
|
||||
|
||||
context 'when no db_data but metadata' do
|
||||
let(:slug) { 'no-vulns-popular' }
|
||||
let(:db_data) { {} }
|
||||
|
||||
its(:latest_version) { should eql WPScan::Model::Version.new('2.0') }
|
||||
its(:last_updated) { should eql '2015-05-16T00:00:00.000Z' }
|
||||
its(:popular?) { should be true }
|
||||
end
|
||||
|
||||
context 'when db_data' do
|
||||
let(:slug) { 'no-vulns-popular' }
|
||||
let(:db_data) { vuln_api_data_for('themes/no-vulns-popular') }
|
||||
|
||||
its(:latest_version) { should eql WPScan::Model::Version.new('2.2') }
|
||||
its(:last_updated) { should eql '2015-05-16T00:00:00.000Z-via-api' }
|
||||
its(:popular?) { should be true }
|
||||
end
|
||||
end
|
||||
|
||||
describe '#outdated?' do
|
||||
before do
|
||||
stub_request(:get, /.*\.css\z/)
|
||||
allow(theme).to receive(:db_data).and_return({})
|
||||
end
|
||||
|
||||
context 'when last_version' do
|
||||
let(:slug) { 'no-vulns-popular' }
|
||||
|
||||
context 'when no version' do
|
||||
before { expect(theme).to receive(:version).at_least(1).and_return(nil) }
|
||||
|
||||
its(:outdated?) { should eql false }
|
||||
end
|
||||
|
||||
context 'when version' do
|
||||
before do
|
||||
expect(theme)
|
||||
.to receive(:version)
|
||||
.at_least(1)
|
||||
.and_return(WPScan::Model::Version.new(version_number))
|
||||
end
|
||||
|
||||
context 'when version < latest_version' do
|
||||
let(:version_number) { '1.2' }
|
||||
|
||||
its(:outdated?) { should eql true }
|
||||
end
|
||||
|
||||
context 'when version >= latest_version' do
|
||||
let(:version_number) { '3.0' }
|
||||
|
||||
its(:outdated?) { should eql false }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when no latest_version' do
|
||||
let(:slug) { 'vulnerable-not-popular' }
|
||||
|
||||
context 'when no version' do
|
||||
before { expect(theme).to receive(:version).at_least(1).and_return(nil) }
|
||||
|
||||
its(:outdated?) { should eql false }
|
||||
end
|
||||
|
||||
context 'when version' do
|
||||
before do
|
||||
expect(theme)
|
||||
.to receive(:version)
|
||||
.at_least(1)
|
||||
.and_return(WPScan::Model::Version.new('1.0'))
|
||||
end
|
||||
|
||||
its(:outdated?) { should eql false }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#vulnerabilities' do
|
||||
xit
|
||||
before do
|
||||
stub_request(:get, /.*\.css\z/)
|
||||
allow(theme).to receive(:db_data).and_return(db_data)
|
||||
end
|
||||
|
||||
after do
|
||||
expect(theme.vulnerabilities).to eq @expected
|
||||
expect(theme.vulnerable?).to eql @expected.empty? ? false : true
|
||||
end
|
||||
|
||||
context 'when theme not in the DB' do
|
||||
let(:slug) { 'not-in-db' }
|
||||
let(:db_data) { {} }
|
||||
|
||||
it 'returns an empty array' do
|
||||
@expected = []
|
||||
end
|
||||
end
|
||||
|
||||
context 'when in the DB' do
|
||||
context 'when no vulnerabilities' do
|
||||
let(:slug) { 'no-vulns-popular' }
|
||||
let(:db_data) { vuln_api_data_for('themes/no-vulns-popular') }
|
||||
|
||||
it 'returns an empty array' do
|
||||
@expected = []
|
||||
end
|
||||
end
|
||||
|
||||
context 'when vulnerabilities' do
|
||||
let(:slug) { 'vulnerable-not-popular' }
|
||||
let(:db_data) { vuln_api_data_for('themes/vulnerable-not-popular') }
|
||||
|
||||
let(:all_vulns) do
|
||||
[
|
||||
WPScan::Vulnerability.new(
|
||||
'First Vuln',
|
||||
{ wpvulndb: '1' },
|
||||
'LFI',
|
||||
'6.3.10'
|
||||
),
|
||||
WPScan::Vulnerability.new('No Fixed In', wpvulndb: '2')
|
||||
]
|
||||
end
|
||||
|
||||
context 'when no theme version' do
|
||||
before { expect(theme).to receive(:version).at_least(1).and_return(false) }
|
||||
|
||||
it 'returns all the vulnerabilities' do
|
||||
@expected = all_vulns
|
||||
end
|
||||
end
|
||||
|
||||
context 'when theme version' do
|
||||
before do
|
||||
expect(theme)
|
||||
.to receive(:version)
|
||||
.at_least(1)
|
||||
.and_return(WPScan::Model::Version.new(number))
|
||||
end
|
||||
|
||||
context 'when < to a fixed_in' do
|
||||
let(:number) { '5.0' }
|
||||
|
||||
it 'returns it' do
|
||||
@expected = all_vulns
|
||||
end
|
||||
end
|
||||
|
||||
context 'when >= to a fixed_in' do
|
||||
let(:number) { '6.3.10' }
|
||||
|
||||
it 'does not return it ' do
|
||||
@expected = [all_vulns.last]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#parent_theme' do
|
||||
|
||||
@@ -40,11 +40,13 @@ describe WPScan::Model::WpVersion do
|
||||
|
||||
describe '#vulnerabilities' do
|
||||
subject(:version) { described_class.new(number) }
|
||||
before { allow(version).to receive(:db_data).and_return(db_data) }
|
||||
|
||||
context 'when no vulns' do
|
||||
let(:number) { '4.4' }
|
||||
let(:db_data) { { 'vulnerabilities' => [] } }
|
||||
|
||||
its(:vulnerabilities) { should eql([]) }
|
||||
its(:vulnerabilities) { should be_empty }
|
||||
end
|
||||
|
||||
context 'when vulnerable' do
|
||||
@@ -53,13 +55,30 @@ describe WPScan::Model::WpVersion do
|
||||
expect(version).to be_vulnerable
|
||||
end
|
||||
|
||||
let(:all_vulns) do
|
||||
[
|
||||
WPScan::Vulnerability.new(
|
||||
'WP 3.8.1 - Vuln 1',
|
||||
{ wpvulndb: '1' },
|
||||
'SQLI'
|
||||
),
|
||||
WPScan::Vulnerability.new(
|
||||
'WP 3.8.1 - Vuln 2',
|
||||
{ url: %w[url-2 url-3], osvdb: %w[10], cve: %w[2014-0166], wpvulndb: '2' },
|
||||
nil,
|
||||
'3.8.2'
|
||||
)
|
||||
]
|
||||
end
|
||||
|
||||
context 'when a signle vuln' do
|
||||
let(:number) { '3.8' }
|
||||
let(:number) { '3.8.1' }
|
||||
let(:db_data) { vuln_api_data_for('wordpresses/38') }
|
||||
|
||||
it 'returns the expected result' do
|
||||
@expected = [WPScan::Vulnerability.new(
|
||||
'WP 3.8 - Vuln 1',
|
||||
{ url: %w[url-4], osvdb: %w[11], wpvulndb: '3' },
|
||||
{ url: %w[url-4], wpvulndb: '3' },
|
||||
'AUTHBYPASS'
|
||||
)]
|
||||
end
|
||||
@@ -67,6 +86,7 @@ describe WPScan::Model::WpVersion do
|
||||
|
||||
context 'when multiple vulns' do
|
||||
let(:number) { '3.8.1' }
|
||||
let(:db_data) { vuln_api_data_for('wordpresses/381') }
|
||||
|
||||
it 'returns the expected results' do
|
||||
@expected = [
|
||||
@@ -77,7 +97,7 @@ describe WPScan::Model::WpVersion do
|
||||
),
|
||||
WPScan::Vulnerability.new(
|
||||
'WP 3.8.1 - Vuln 2',
|
||||
{ url: %w[url-2 url-3], osvdb: %w[10], cve: %w[2014-0166], wpvulndb: '2' },
|
||||
{ url: %w[url-2 url-3], cve: %w[2014-0166], wpvulndb: '2' },
|
||||
nil,
|
||||
'3.8.2'
|
||||
)
|
||||
@@ -87,27 +107,30 @@ describe WPScan::Model::WpVersion do
|
||||
end
|
||||
end
|
||||
|
||||
describe '#release_date' do
|
||||
describe '#metadata, #release_date, #status' do
|
||||
subject(:version) { described_class.new('3.8.1') }
|
||||
|
||||
its(:release_date) { should eql '2014-01-23' }
|
||||
before { allow(version).to receive(:db_data).and_return(db_data) }
|
||||
|
||||
context 'when the version is not in the DB' do
|
||||
subject(:version) { described_class.new('3.8.2') }
|
||||
context 'when no db_data' do
|
||||
let(:db_data) { {} }
|
||||
|
||||
its(:release_date) { should eql 'Unknown' }
|
||||
its(:release_date) { should eql '2014-01-23' }
|
||||
its(:status) { should eql 'outdated' }
|
||||
|
||||
context 'when the version is not in the metadata' do
|
||||
subject(:version) { described_class.new('3.8.2') }
|
||||
|
||||
its(:release_date) { should eql 'Unknown' }
|
||||
its(:status) { should eql 'Unknown' }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#status' do
|
||||
subject(:version) { described_class.new('3.8.1') }
|
||||
context 'when db_data' do
|
||||
let(:db_data) { vuln_api_data_for('wordpresses/381') }
|
||||
|
||||
its(:status) { should eql 'outdated' }
|
||||
|
||||
context 'when the version is not in the DB' do
|
||||
subject(:version) { described_class.new('3.8.2') }
|
||||
|
||||
its(:release_date) { should eql 'Unknown' }
|
||||
its(:release_date) { should eql '2014-01-23-via-api' }
|
||||
its(:status) { should eql 'outdated-via-api' }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -9,6 +9,7 @@ describe 'App::Views' do
|
||||
# in the expected output.
|
||||
%i[JSON CliNoColour].each do |formatter|
|
||||
context "when #{formatter}" do
|
||||
it_behaves_like 'App::Views::VulnApi'
|
||||
it_behaves_like 'App::Views::WpVersion'
|
||||
it_behaves_like 'App::Views::MainTheme'
|
||||
it_behaves_like 'App::Views::Enumeration'
|
||||
|
||||
5681
spec/fixtures/db/dynamic_finders.yml
vendored
5681
spec/fixtures/db/dynamic_finders.yml
vendored
File diff suppressed because it is too large
Load Diff
56
spec/fixtures/db/metadata.json
vendored
Normal file
56
spec/fixtures/db/metadata.json
vendored
Normal file
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"wordpress": {
|
||||
"4.0": {
|
||||
"release_date": "2014-09-04",
|
||||
"status": "latest"
|
||||
},
|
||||
"3.8.1": {
|
||||
"release_date": "2014-01-23",
|
||||
"status": "outdated"
|
||||
},
|
||||
"3.8": {
|
||||
"release_date": "2013-12-12",
|
||||
"status": "insecure"
|
||||
}
|
||||
},
|
||||
"plugins": {
|
||||
"no-vulns-popular": {
|
||||
"vulnerabilities": false,
|
||||
"popular": true,
|
||||
"latest_version": "2.0",
|
||||
"last_updated": "2015-05-16T00:00:00.000Z"
|
||||
},
|
||||
"vulnerable-not-popular": {
|
||||
"latest_version": null,
|
||||
"last_updated": null,
|
||||
"popular": false,
|
||||
"vulnerabilities": true
|
||||
}
|
||||
},
|
||||
"themes": {
|
||||
"no-vulns-popular": {
|
||||
"popular": true,
|
||||
"latest_version": "2.0",
|
||||
"last_updated": "2015-05-16T00:00:00.000Z",
|
||||
"vulnerabilities": false
|
||||
},
|
||||
"vulnerable-not-popular": {
|
||||
"latest_version": null,
|
||||
"last_updated": null,
|
||||
"popular": false,
|
||||
"vulnerabilities": true
|
||||
},
|
||||
"dignitas-themes": {
|
||||
"popular": true,
|
||||
"latest_version": null,
|
||||
"last_updated": null,
|
||||
"vulnerabilities" : true
|
||||
},
|
||||
"yaaburnee-themes": {
|
||||
"popular": false,
|
||||
"latest_version": null,
|
||||
"last_updated": null,
|
||||
"vulnerabilities" : true
|
||||
}
|
||||
}
|
||||
}
|
||||
25
spec/fixtures/db/plugins.json
vendored
25
spec/fixtures/db/plugins.json
vendored
@@ -1,25 +0,0 @@
|
||||
{
|
||||
"no-vulns-popular": {
|
||||
"vulnerabilities": [],
|
||||
"popular": true,
|
||||
"latest_version": "2.0",
|
||||
"last_updated": "2015-05-16T00:00:00.000Z"
|
||||
},
|
||||
"vulnerable-not-popular": {
|
||||
"latest_version": null,
|
||||
"last_updated": null,
|
||||
"popular": false,
|
||||
"vulnerabilities" : [
|
||||
{
|
||||
"title" : "First Vuln",
|
||||
"fixed_in" : "6.3.10",
|
||||
"id" : 1,
|
||||
"vuln_type": "LFI"
|
||||
},
|
||||
{
|
||||
"title": "No Fixed In",
|
||||
"id": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
1
spec/fixtures/db/sponsor.txt
vendored
Normal file
1
spec/fixtures/db/sponsor.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
Sponsored By Kittens
|
||||
48
spec/fixtures/db/themes.json
vendored
48
spec/fixtures/db/themes.json
vendored
@@ -1,48 +0,0 @@
|
||||
{
|
||||
"no-vulns-popular": {
|
||||
"popular": true,
|
||||
"latest_version": "2.0",
|
||||
"last_updated": "2015-05-16T00:00:00.000Z",
|
||||
"vulnerabilities": []
|
||||
},
|
||||
"dignitas-themes": {
|
||||
"popular": true,
|
||||
"latest_version": null,
|
||||
"last_updated": null,
|
||||
"vulnerabilities" : [
|
||||
{
|
||||
"created_at" : "2015-03-05T19:25:59.000Z",
|
||||
"updated_at" : "2015-03-05T19:37:47.000Z",
|
||||
"references": {
|
||||
"url" : [
|
||||
"http://research.evex.pw/?vuln=6",
|
||||
"http://packetstormsecurity.com/files/130652/"
|
||||
]
|
||||
},
|
||||
"title" : "Dignitas 1.1.9 - Privilage Escalation",
|
||||
"id" : 7825,
|
||||
"vuln_type" : "AUTHBYPASS"
|
||||
}
|
||||
]
|
||||
},
|
||||
"yaaburnee-themes": {
|
||||
"popular": false,
|
||||
"latest_version": null,
|
||||
"last_updated": null,
|
||||
"vulnerabilities" : [
|
||||
{
|
||||
"created_at" : "2015-03-05T19:25:44.000Z",
|
||||
"updated_at" : "2015-03-05T19:41:14.000Z",
|
||||
"references": {
|
||||
"url" : [
|
||||
"http://research.evex.pw/?vuln=6",
|
||||
"http://packetstormsecurity.com/files/130652/"
|
||||
]
|
||||
},
|
||||
"title" : "Ya'aburnee 1.0.7 - Privilage Escalation",
|
||||
"id" : 7824,
|
||||
"vuln_type" : "AUTHBYPASS"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
6
spec/fixtures/db/vuln_api/plugins/no-vulns-popular.json
vendored
Normal file
6
spec/fixtures/db/vuln_api/plugins/no-vulns-popular.json
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"vulnerabilities": [],
|
||||
"popular": true,
|
||||
"latest_version": "2.1",
|
||||
"last_updated": "2015-05-16T00:00:00.000Z-via-api"
|
||||
}
|
||||
17
spec/fixtures/db/vuln_api/plugins/vulnerable-not-popular.json
vendored
Normal file
17
spec/fixtures/db/vuln_api/plugins/vulnerable-not-popular.json
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"latest_version": null,
|
||||
"last_updated": null,
|
||||
"popular": false,
|
||||
"vulnerabilities" : [
|
||||
{
|
||||
"title" : "First Vuln \u003c= 6.3.10 - LFI",
|
||||
"fixed_in" : "6.3.10",
|
||||
"id" : 1,
|
||||
"vuln_type": "LFI"
|
||||
},
|
||||
{
|
||||
"title": "No Fixed In",
|
||||
"id": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
22
spec/fixtures/db/vuln_api/themes/dignitas-themes.json
vendored
Normal file
22
spec/fixtures/db/vuln_api/themes/dignitas-themes.json
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"popular": true,
|
||||
"latest_version": null,
|
||||
"last_updated": null,
|
||||
"vulnerabilities" : [
|
||||
{
|
||||
"created_at" : "2015-03-05T19:25:59.000Z",
|
||||
"updated_at" : "2015-03-05T19:37:47.000Z",
|
||||
"references": {
|
||||
"url" : [
|
||||
"http://research.evex.pw/?vuln=6"
|
||||
],
|
||||
"packetstorm": [
|
||||
"130652"
|
||||
]
|
||||
},
|
||||
"title" : "Dignitas 1.1.9 - Privilage Escalation",
|
||||
"id" : 7825,
|
||||
"vuln_type" : "AUTHBYPASS"
|
||||
}
|
||||
]
|
||||
}
|
||||
6
spec/fixtures/db/vuln_api/themes/no-vulns-popular.json
vendored
Normal file
6
spec/fixtures/db/vuln_api/themes/no-vulns-popular.json
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"popular": true,
|
||||
"latest_version": "2.2",
|
||||
"last_updated": "2015-05-16T00:00:00.000Z-via-api",
|
||||
"vulnerabilities": []
|
||||
}
|
||||
17
spec/fixtures/db/vuln_api/themes/vulnerable-not-popular.json
vendored
Normal file
17
spec/fixtures/db/vuln_api/themes/vulnerable-not-popular.json
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"latest_version": null,
|
||||
"last_updated": null,
|
||||
"popular": false,
|
||||
"vulnerabilities" : [
|
||||
{
|
||||
"title" : "First Vuln",
|
||||
"fixed_in" : "6.3.10",
|
||||
"id" : 1,
|
||||
"vuln_type": "LFI"
|
||||
},
|
||||
{
|
||||
"title": "No Fixed In",
|
||||
"id": 2
|
||||
}
|
||||
]
|
||||
}
|
||||
22
spec/fixtures/db/vuln_api/themes/yaaburnee-themes.json
vendored
Normal file
22
spec/fixtures/db/vuln_api/themes/yaaburnee-themes.json
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"popular": false,
|
||||
"latest_version": null,
|
||||
"last_updated": null,
|
||||
"vulnerabilities" : [
|
||||
{
|
||||
"created_at" : "2015-03-05T19:25:44.000Z",
|
||||
"updated_at" : "2015-03-05T19:41:14.000Z",
|
||||
"references": {
|
||||
"url" : [
|
||||
"http://research.evex.pw/?vuln=6",
|
||||
],
|
||||
"packetstorm": [
|
||||
"130652"
|
||||
]
|
||||
},
|
||||
"title" : "Ya'aburnee 1.0.7 - Privilage Escalation",
|
||||
"id" : 7824,
|
||||
"vuln_type" : "AUTHBYPASS"
|
||||
}
|
||||
]
|
||||
}
|
||||
17
spec/fixtures/db/vuln_api/wordpresses/38.json
vendored
Normal file
17
spec/fixtures/db/vuln_api/wordpresses/38.json
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"release_date" : "2013-12-12",
|
||||
"status": "insecure",
|
||||
"vulnerabilities" : [
|
||||
{
|
||||
"references": {
|
||||
"url" : ["url-4"],
|
||||
"osvdb" : ["11"]
|
||||
},
|
||||
"created_at" : "2014-08-01T10:58:19.000Z",
|
||||
"updated_at" : "2014-09-16T15:45:26.000Z",
|
||||
"title" : "WP 3.8 - Vuln 1",
|
||||
"id" : 3,
|
||||
"vuln_type" : "AUTHBYPASS"
|
||||
}
|
||||
]
|
||||
}
|
||||
27
spec/fixtures/db/vuln_api/wordpresses/381.json
vendored
Normal file
27
spec/fixtures/db/vuln_api/wordpresses/381.json
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"release_date" : "2014-01-23-via-api",
|
||||
"status": "outdated-via-api",
|
||||
"vulnerabilities" : [
|
||||
{
|
||||
"created_at" : "2014-08-01T10:58:19.000Z",
|
||||
"updated_at" : "2014-09-16T13:52:17.000Z",
|
||||
"title" : "WP 3.8.1 - Vuln 1",
|
||||
"id" : 1,
|
||||
"vuln_type" : "SQLI",
|
||||
"published_date" : null,
|
||||
"fixed_in" : null
|
||||
},
|
||||
{
|
||||
"references" : {
|
||||
"cve" : ["2014-0166"],
|
||||
"osvdb" : ["10"],
|
||||
"url" : ["url-2","url-3"]
|
||||
},
|
||||
"fixed_in" : "3.8.2",
|
||||
"created_at" : "2014-08-01T10:58:19.000Z",
|
||||
"updated_at" : "2014-09-16T13:53:11.000Z",
|
||||
"id" : 2,
|
||||
"title" : "WP 3.8.1 - Vuln 2"
|
||||
}
|
||||
]
|
||||
}
|
||||
4
spec/fixtures/db/vuln_api/wordpresses/40.json
vendored
Normal file
4
spec/fixtures/db/vuln_api/wordpresses/40.json
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"release_date" : "2014-09-04",
|
||||
"status": "latest"
|
||||
}
|
||||
50
spec/fixtures/db/wordpresses.json
vendored
50
spec/fixtures/db/wordpresses.json
vendored
@@ -1,50 +0,0 @@
|
||||
{
|
||||
"4.0": {
|
||||
"release_date" : "2014-09-04",
|
||||
"status": "latest"
|
||||
},
|
||||
"3.8.1": {
|
||||
"release_date" : "2014-01-23",
|
||||
"status": "outdated",
|
||||
"vulnerabilities" : [
|
||||
{
|
||||
"created_at" : "2014-08-01T10:58:19.000Z",
|
||||
"updated_at" : "2014-09-16T13:52:17.000Z",
|
||||
"title" : "WP 3.8.1 - Vuln 1",
|
||||
"id" : 1,
|
||||
"vuln_type" : "SQLI",
|
||||
"published_date" : null,
|
||||
"fixed_in" : null
|
||||
},
|
||||
{
|
||||
"references" : {
|
||||
"cve" : ["2014-0166"],
|
||||
"osvdb" : ["10"],
|
||||
"url" : ["url-2","url-3"]
|
||||
},
|
||||
"fixed_in" : "3.8.2",
|
||||
"created_at" : "2014-08-01T10:58:19.000Z",
|
||||
"updated_at" : "2014-09-16T13:53:11.000Z",
|
||||
"id" : 2,
|
||||
"title" : "WP 3.8.1 - Vuln 2"
|
||||
}
|
||||
]
|
||||
},
|
||||
"3.8": {
|
||||
"release_date" : "2013-12-12",
|
||||
"status": "insecure",
|
||||
"vulnerabilities" : [
|
||||
{
|
||||
"references": {
|
||||
"url" : ["url-4"],
|
||||
"osvdb" : ["11"]
|
||||
},
|
||||
"created_at" : "2014-08-01T10:58:19.000Z",
|
||||
"updated_at" : "2014-09-16T15:45:26.000Z",
|
||||
"title" : "WP 3.8 - Vuln 1",
|
||||
"id" : 3,
|
||||
"vuln_type" : "AUTHBYPASS"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
1957
spec/fixtures/dynamic_finders/expected.yml
vendored
1957
spec/fixtures/dynamic_finders/expected.yml
vendored
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,58 @@
|
||||
# Copyright (C) 2019 Jörn Lund
|
||||
# This file is distributed under the same license as the ACF Duplicate Repeater plugin.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: ACF Duplicate Repeater 2.0.0\n"
|
||||
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/acf-duplicate-repeater\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"POT-Creation-Date: 2019-08-22T14:32:38+00:00\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"X-Generator: WP-CLI 2.2.0\n"
|
||||
"X-Domain: acf-duplicate-repeater\n"
|
||||
|
||||
#. Plugin Name of the plugin
|
||||
msgid "ACF Duplicate Repeater"
|
||||
msgstr ""
|
||||
|
||||
#. Plugin URI of the plugin
|
||||
msgid "https://github.com/mcguffin/acf-duplicate-repeater"
|
||||
msgstr ""
|
||||
|
||||
#. Description of the plugin
|
||||
msgid "Duplicate Repeater and Layout Fields in ACF Pro"
|
||||
msgstr ""
|
||||
|
||||
#. Author of the plugin
|
||||
msgid "Jörn Lund"
|
||||
msgstr ""
|
||||
|
||||
#. Author URI of the plugin
|
||||
msgid "https://github.com/mcguffin"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: ACF-Pro URL
|
||||
#: include/ACFDuplicateRepeater/Core/Core.php:69
|
||||
msgid "The ACF Duplicate Repeater plugin only provides support for <a href=\"%s\">ACF Pro 5.7</a> and up."
|
||||
msgstr ""
|
||||
|
||||
#. Translators: Plugins page URL
|
||||
#: include/ACFDuplicateRepeater/Core/Core.php:78
|
||||
msgid "Please upgrade ACF Pro to the latest Version on the <a href=\"%s\">plugins page</a>."
|
||||
msgstr ""
|
||||
|
||||
#. Translators: Plugins page URL
|
||||
#: include/ACFDuplicateRepeater/Core/Core.php:87
|
||||
msgid "You can disable and uninstall the plugin on the <a href=\"%2$s\">plugins page</a>."
|
||||
msgstr ""
|
||||
|
||||
#: include/ACFDuplicateRepeater/Core/Core.php:123
|
||||
msgid "Duplicate Entry"
|
||||
msgstr ""
|
||||
|
||||
#: include/ACFDuplicateRepeater/Core/Core.php:127
|
||||
msgid "Duplicate Layout"
|
||||
msgstr ""
|
||||
@@ -0,0 +1,4 @@
|
||||
# Changelog ##
|
||||
|
||||
## 1.0.0 - 26 Aug 2019
|
||||
* Initial release
|
||||
@@ -0,0 +1,4 @@
|
||||
# Changelog ##
|
||||
|
||||
## 1.0.0 - 16 Aug 2019
|
||||
* Initial release
|
||||
@@ -0,0 +1,153 @@
|
||||
# Copyright (C) 2019 mcguffin
|
||||
# This file is distributed under the same license as the ACF QuickEdit Fields plugin.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: ACF QuickEdit Fields 3.0.0\n"
|
||||
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/acf-quick-edit-fields\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"POT-Creation-Date: 2019-09-03T06:48:12+00:00\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"X-Generator: WP-CLI 2.2.0\n"
|
||||
"X-Domain: acf-quickedit-fields\n"
|
||||
|
||||
#. Plugin Name of the plugin
|
||||
msgid "ACF QuickEdit Fields"
|
||||
msgstr ""
|
||||
|
||||
#. Plugin URI of the plugin
|
||||
msgid "https://github.com/mcguffin/acf-quickedit-fields"
|
||||
msgstr ""
|
||||
|
||||
#. Description of the plugin
|
||||
msgid "Show Advanced Custom Fields in post list table. Edit field values in Quick Edit and / or Bulk edit."
|
||||
msgstr ""
|
||||
|
||||
#. Author of the plugin
|
||||
msgid "mcguffin"
|
||||
msgstr ""
|
||||
|
||||
#. Author URI of the plugin
|
||||
msgid "https://github.com/mcguffin"
|
||||
msgstr ""
|
||||
|
||||
#: include/ACFQuickEdit/Admin/FieldGroup.php:52
|
||||
msgid "Column View"
|
||||
msgstr ""
|
||||
|
||||
#: include/ACFQuickEdit/Admin/FieldGroup.php:56
|
||||
msgid "Show a column in the posts list table"
|
||||
msgstr ""
|
||||
|
||||
#: include/ACFQuickEdit/Admin/FieldGroup.php:78
|
||||
msgid "Show Column"
|
||||
msgstr ""
|
||||
|
||||
#: include/ACFQuickEdit/Admin/FieldGroup.php:83
|
||||
msgid "Show column in list tables"
|
||||
msgstr ""
|
||||
|
||||
#: include/ACFQuickEdit/Admin/FieldGroup.php:91
|
||||
msgid "Sortable Column"
|
||||
msgstr ""
|
||||
|
||||
#: include/ACFQuickEdit/Admin/FieldGroup.php:96
|
||||
msgid "Make this column sortable"
|
||||
msgstr ""
|
||||
|
||||
#: include/ACFQuickEdit/Admin/FieldGroup.php:106
|
||||
#: include/ACFQuickEdit/Admin/FieldGroup.php:110
|
||||
msgid "Column Weight"
|
||||
msgstr ""
|
||||
|
||||
#: include/ACFQuickEdit/Admin/FieldGroup.php:107
|
||||
msgid "Columns with a higher weight will be pushed to the right. The leftmost WordPress column has a weight of <em>0</em>, the next one <em>100</em> and so on. Leave empty to place a column to the rightmost position."
|
||||
msgstr ""
|
||||
|
||||
#: include/ACFQuickEdit/Admin/FieldGroup.php:144
|
||||
msgid "Editing"
|
||||
msgstr ""
|
||||
|
||||
#: include/ACFQuickEdit/Admin/FieldGroup.php:169
|
||||
msgid "QuickEdit"
|
||||
msgstr ""
|
||||
|
||||
#: include/ACFQuickEdit/Admin/FieldGroup.php:174
|
||||
#: include/ACFQuickEdit/Admin/FieldGroup.php:191
|
||||
msgid "Enabled"
|
||||
msgstr ""
|
||||
|
||||
#: include/ACFQuickEdit/Admin/FieldGroup.php:175
|
||||
#: include/ACFQuickEdit/Admin/FieldGroup.php:192
|
||||
msgid "Disabled"
|
||||
msgstr ""
|
||||
|
||||
#: include/ACFQuickEdit/Admin/FieldGroup.php:186
|
||||
msgid "Bulk Edit"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: 1: ACF Pro URL, 2: plugins page url
|
||||
#: include/ACFQuickEdit/Admin/Admin.php:178
|
||||
msgid "The <strong>ACF QuickEdit Fields</strong> plugin requires <a href=\"%1$s\">ACF version 5.6 or later</a>. You can disable and uninstall it on the <a href=\"%2$s\">plugins page</a>."
|
||||
msgstr ""
|
||||
|
||||
#: include/ACFQuickEdit/Fields/LinkField.php:58
|
||||
msgid "Select Link"
|
||||
msgstr ""
|
||||
|
||||
#: include/ACFQuickEdit/Fields/LinkField.php:59
|
||||
msgid "Remove Link"
|
||||
msgstr ""
|
||||
|
||||
#: include/ACFQuickEdit/Fields/PasswordField.php:22
|
||||
#: include/ACFQuickEdit/Fields/NumberField.php:24
|
||||
#: include/ACFQuickEdit/Fields/ChoiceField.php:57
|
||||
#: include/ACFQuickEdit/Fields/TaxonomyField.php:42
|
||||
#: include/ACFQuickEdit/Fields/PageLinkField.php:22
|
||||
#: include/ACFQuickEdit/Fields/DateTimePickerField.php:18
|
||||
msgid "(No value)"
|
||||
msgstr ""
|
||||
|
||||
#: include/ACFQuickEdit/Fields/FileField.php:46
|
||||
msgid "Select File"
|
||||
msgstr ""
|
||||
|
||||
#: include/ACFQuickEdit/Fields/FileField.php:47
|
||||
msgid "Remove File"
|
||||
msgstr ""
|
||||
|
||||
#: include/ACFQuickEdit/Fields/TaxonomyField.php:98
|
||||
#: include/ACFQuickEdit/Fields/TaxonomyField.php:114
|
||||
msgid "– No Selection –"
|
||||
msgstr ""
|
||||
|
||||
#: include/ACFQuickEdit/Fields/Field.php:267
|
||||
msgid "Do not change"
|
||||
msgstr ""
|
||||
|
||||
#: include/ACFQuickEdit/Fields/RelationshipField.php:73
|
||||
msgid "Private"
|
||||
msgstr ""
|
||||
|
||||
#: include/ACFQuickEdit/Fields/PostObjectField.php:55
|
||||
msgid "(no title)"
|
||||
msgstr ""
|
||||
|
||||
#: include/ACFQuickEdit/Fields/CheckboxField.php:57
|
||||
msgid "Add Choice"
|
||||
msgstr ""
|
||||
|
||||
#: include/ACFQuickEdit/Fields/SelectField.php:31
|
||||
msgid "— Select —"
|
||||
msgstr ""
|
||||
|
||||
#: include/ACFQuickEdit/Ajax/AjaxHandler.php:156
|
||||
msgid "Nonce invalid"
|
||||
msgstr ""
|
||||
|
||||
#: include/ACFQuickEdit/Ajax/AjaxHandler.php:161
|
||||
msgid "Insufficient Permission"
|
||||
msgstr ""
|
||||
@@ -0,0 +1,171 @@
|
||||
# Copyright (C) 2019 SuitePlugins
|
||||
# This file is distributed under the GPLv2 or later (license.txt).
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: SuitePlugins - Advanced XProfile Fields for BuddyPress "
|
||||
"1.0.4\n"
|
||||
"Report-Msgid-Bugs-To: "
|
||||
"https://wordpress.org/support/plugin/advanced-xprofile-fields-for-"
|
||||
"buddypress\n"
|
||||
"POT-Creation-Date: 2019-09-08 03:48:34+00:00\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"PO-Revision-Date: 2019-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"X-Generator: grunt-wp-i18n 1.0.3\n"
|
||||
|
||||
#: admin/template/metabox.php:31
|
||||
msgid "Labels"
|
||||
msgstr ""
|
||||
|
||||
#: admin/template/metabox.php:32
|
||||
msgid "Validation"
|
||||
msgstr ""
|
||||
|
||||
#: admin/template/metabox.php:34
|
||||
msgid "Advanced Options"
|
||||
msgstr ""
|
||||
|
||||
#: admin/template/tab-advanced.php:6
|
||||
msgid "Hide on registration"
|
||||
msgstr ""
|
||||
|
||||
#: admin/template/tab-advanced.php:9
|
||||
msgid "Hide field on registration page"
|
||||
msgstr ""
|
||||
|
||||
#: admin/template/tab-advanced.php:15
|
||||
msgid "Non editable"
|
||||
msgstr ""
|
||||
|
||||
#: admin/template/tab-advanced.php:18
|
||||
msgid "Stop profile field from being updated"
|
||||
msgstr ""
|
||||
|
||||
#: admin/template/tab-advanced.php:24
|
||||
msgid "Show in Admin Column"
|
||||
msgstr ""
|
||||
|
||||
#: admin/template/tab-advanced.php:27
|
||||
msgid "Display a column on admin user listing page"
|
||||
msgstr ""
|
||||
|
||||
#: admin/template/tab-labels.php:6
|
||||
msgid "Registration"
|
||||
msgstr ""
|
||||
|
||||
#: admin/template/tab-labels.php:12
|
||||
msgid "Label on registration page"
|
||||
msgstr ""
|
||||
|
||||
#: admin/template/tab-labels.php:19
|
||||
msgid "Self Profile"
|
||||
msgstr ""
|
||||
|
||||
#: admin/template/tab-labels.php:25
|
||||
msgid "Label while viewing your profile"
|
||||
msgstr ""
|
||||
|
||||
#: admin/template/tab-labels.php:32
|
||||
msgid "User's Profile"
|
||||
msgstr ""
|
||||
|
||||
#: admin/template/tab-labels.php:38
|
||||
msgid "Label while viewing another member's page"
|
||||
msgstr ""
|
||||
|
||||
#: admin/template/tab-labels.php:45
|
||||
msgid "Edit Profile"
|
||||
msgstr ""
|
||||
|
||||
#: admin/template/tab-labels.php:51
|
||||
msgid "Label on edit profile page"
|
||||
msgstr ""
|
||||
|
||||
#: admin/template/tab-labels.php:58
|
||||
msgid "Admin Column"
|
||||
msgstr ""
|
||||
|
||||
#: admin/template/tab-labels.php:64
|
||||
msgid "Admin column title "
|
||||
msgstr ""
|
||||
|
||||
#: admin/template/tab-validation.php:5
|
||||
msgid "Character Limit"
|
||||
msgstr ""
|
||||
|
||||
#: admin/template/tab-validation.php:9
|
||||
msgid "Set the maximum amount of characters for this field."
|
||||
msgstr ""
|
||||
|
||||
#: admin/template/tab-validation.php:15
|
||||
msgid "Minimum Characters"
|
||||
msgstr ""
|
||||
|
||||
#: admin/template/tab-validation.php:19
|
||||
msgid "Set the minimum amount of characters for this field."
|
||||
msgstr ""
|
||||
|
||||
#: admin/template/tab-validation.php:25
|
||||
msgid "Text Format"
|
||||
msgstr ""
|
||||
|
||||
#: admin/template/tab-validation.php:28
|
||||
msgid "-Select Format-"
|
||||
msgstr ""
|
||||
|
||||
#: admin/template/tab-validation.php:30
|
||||
msgid "Alphanumeric"
|
||||
msgstr ""
|
||||
|
||||
#: admin/template/tab-validation.php:33
|
||||
msgid "Alpha"
|
||||
msgstr ""
|
||||
|
||||
#: admin/template/tab-validation.php:36
|
||||
msgid "Email"
|
||||
msgstr ""
|
||||
|
||||
#: admin/template/tab-validation.php:39
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
|
||||
#: admin/template/tab-validation.php:43
|
||||
msgid "Choose the text format for an input field."
|
||||
msgstr ""
|
||||
|
||||
#: sp-advanced-xprofile.php:242
|
||||
msgid "Please enter only letters"
|
||||
msgstr ""
|
||||
|
||||
#: sp-advanced-xprofile.php:246
|
||||
msgid "Letters, numbers, and underscores only"
|
||||
msgstr ""
|
||||
|
||||
#: sp-advanced-xprofile.php:268
|
||||
msgid "Please specify a valid state"
|
||||
msgstr ""
|
||||
|
||||
#: sp-advanced-xprofile.php:272
|
||||
msgid "The specified US ZIP Code is invalid"
|
||||
msgstr ""
|
||||
|
||||
#. Plugin Name of the plugin/theme
|
||||
msgid "SuitePlugins - Advanced XProfile Fields for BuddyPress"
|
||||
msgstr ""
|
||||
|
||||
#. Author URI of the plugin/theme
|
||||
msgid "http://suiteplugins.com"
|
||||
msgstr ""
|
||||
|
||||
#. Description of the plugin/theme
|
||||
msgid ""
|
||||
"Enhance your BuddyPress profile fields with Advanced XProfile Fields for "
|
||||
"BuddyPress. Manage fields labels, validation and show fields in admin."
|
||||
msgstr ""
|
||||
|
||||
#. Author of the plugin/theme
|
||||
msgid "SuitePlugins"
|
||||
msgstr ""
|
||||
@@ -0,0 +1,593 @@
|
||||
# Copyright (C) 2019 Arya Themes
|
||||
# This file is distributed under the same license as the Arya License Manager plugin.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Arya License Manager 1.0.0\n"
|
||||
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/arya-license-manager\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"POT-Creation-Date: 2019-08-27T01:28:03+00:00\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"X-Generator: WP-CLI 2.3.0\n"
|
||||
"X-Domain: arya-license-manager\n"
|
||||
|
||||
#. Plugin Name of the plugin
|
||||
msgid "Arya License Manager"
|
||||
msgstr ""
|
||||
|
||||
#. Plugin URI of the plugin
|
||||
msgid "https://gitlab.com/arya-license-manager"
|
||||
msgstr ""
|
||||
|
||||
#. Description of the plugin
|
||||
msgid "Arya License Manager integrates with WooCommerce to simplify the creation and management of software licenses."
|
||||
msgstr ""
|
||||
|
||||
#. Author of the plugin
|
||||
msgid "Arya Themes"
|
||||
msgstr ""
|
||||
|
||||
#. Author URI of the plugin
|
||||
msgid "https://www.aryathemes.com"
|
||||
msgstr ""
|
||||
|
||||
#: compatibility.php:33
|
||||
msgid "Arya License Manager requires WooCommerce 3.6.0 or greater."
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Admin.php:95
|
||||
msgid "Licenses Management"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Admin.php:96
|
||||
#: src/Admin/Settings.php:61
|
||||
#: src/Admin/Settings.php:83
|
||||
#: src/Admin/Settings.php:181
|
||||
#: src/Storefront/Account.php:81
|
||||
#: src/Storefront/Query.php:69
|
||||
#: templates/emails/email-licenses.php:8
|
||||
#: templates/emails/plain/email-licenses.php:10
|
||||
#: templates/myaccount/order-licenses.php:8
|
||||
msgid "Licenses"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Analytics/Licenses.php:48
|
||||
#: src/Admin/License.php:187
|
||||
#: src/Admin/Product/Simple.php:63
|
||||
#: src/Admin/Product/Simple.php:64
|
||||
#: src/Admin/Product/Variable.php:65
|
||||
#: src/Storefront/Licenses.php:73
|
||||
#: src/Storefront/Licenses.php:102
|
||||
#: src/Storefront/Licenses.php:113
|
||||
#: src/Storefront/Order.php:292
|
||||
#: src/Storefront/Query.php:72
|
||||
#: templates/emails/email-licenses.php:17
|
||||
#: templates/myaccount/order-licenses.php:15
|
||||
#: templates/myaccount/order-licenses.php:43
|
||||
msgid "License"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Analytics/Licenses.php:49
|
||||
#: src/Storefront/Order.php:304
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Analytics/Licenses.php:50
|
||||
#: src/Storefront/License.php:107
|
||||
#: templates/emails/email-licenses.php:16
|
||||
#: templates/myaccount/order-licenses.php:14
|
||||
#: templates/myaccount/order-licenses.php:42
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Analytics/Licenses.php:51
|
||||
#: src/Admin/License.php:130
|
||||
#: templates/myaccount/license.php:26
|
||||
msgid "Activations"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Analytics/Licenses.php:52
|
||||
#: src/Admin/License.php:191
|
||||
#: src/Storefront/Order.php:295
|
||||
msgid "Status"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Analytics/Licenses.php:53
|
||||
#: src/Admin/License.php:203
|
||||
#: src/Storefront/License.php:111
|
||||
msgid "Service start date"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Analytics/Licenses.php:54
|
||||
#: src/Admin/License.php:207
|
||||
#: src/Storefront/License.php:115
|
||||
msgid "Service end date"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Analytics/Licenses.php:55
|
||||
msgid "Order"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Analytics/Licenses.php:155
|
||||
msgid "No licenses found."
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Analytics/Licenses.php:226
|
||||
#: src/Storefront/License.php:103
|
||||
msgid "unlimited"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %s of %s: number of activations
|
||||
#: src/Admin/Analytics/Licenses.php:229
|
||||
#: src/Storefront/License.php:103
|
||||
msgid "%1$s of %2$s"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %s ago: human-readable time
|
||||
#: src/Admin/Analytics/Licenses.php:264
|
||||
msgctxt "%s = human-readable time"
|
||||
msgid "%s ago"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Analytics/Licenses.php:303
|
||||
msgid "Regenerate download permissions"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Emails/Expired.php:24
|
||||
msgid "Expired license"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Emails/Expired.php:25
|
||||
msgid "Expired license emails are sent when a license has been deactivated by manager."
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Emails/Expired.php:54
|
||||
msgid "[{site_title}]: License {license} has expired"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Emails/Expired.php:64
|
||||
msgid "Expired license: <code>{license}</code>"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Emails/Expired.php:120
|
||||
#: src/Admin/Emails/Suspended.php:124
|
||||
msgid "Enable/Disable"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Emails/Expired.php:122
|
||||
#: src/Admin/Emails/Suspended.php:126
|
||||
msgid "Enable this email notification"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Emails/Expired.php:126
|
||||
#: src/Admin/Emails/Suspended.php:130
|
||||
msgid "Recipient(s)"
|
||||
msgstr ""
|
||||
|
||||
#. translators: Defaults to %s: Recipients for this email
|
||||
#: src/Admin/Emails/Expired.php:128
|
||||
#: src/Admin/Emails/Suspended.php:132
|
||||
msgid "Enter recipients (comma separated) for this email. Defaults to %s."
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Emails/Expired.php:134
|
||||
#: src/Admin/Emails/Suspended.php:138
|
||||
msgid "Subject"
|
||||
msgstr ""
|
||||
|
||||
#. translators: Available placeholders: %s: Available placeholders
|
||||
#: src/Admin/Emails/Expired.php:136
|
||||
#: src/Admin/Emails/Expired.php:145
|
||||
#: src/Admin/Emails/Suspended.php:140
|
||||
#: src/Admin/Emails/Suspended.php:149
|
||||
msgid "Available placeholders: %s"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Emails/Expired.php:142
|
||||
#: src/Admin/Emails/Suspended.php:146
|
||||
msgid "Email heading"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Emails/Expired.php:150
|
||||
#: src/Admin/Emails/Suspended.php:154
|
||||
msgid "Email type"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Emails/Expired.php:152
|
||||
#: src/Admin/Emails/Suspended.php:156
|
||||
msgid "Choose which format of email to send."
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Emails/Suspended.php:24
|
||||
msgid "Suspended license"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Emails/Suspended.php:25
|
||||
msgid "Suspended license emails are sent when a license has been deactivated by manager."
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Emails/Suspended.php:54
|
||||
msgid "[{site_title}]: License {license} has been suspended"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Emails/Suspended.php:64
|
||||
msgid "License suspended: {license}"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Integration.php:80
|
||||
#: src/Admin/Integration.php:101
|
||||
msgctxt "WooCommerce header breadcrumbs"
|
||||
msgid "Licenses"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Integration.php:89
|
||||
msgctxt "WooCommerce header breadcrumbs"
|
||||
msgid "License details"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/License.php:83
|
||||
#: templates/myaccount/license.php:14
|
||||
msgid "License not available."
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/License.php:89
|
||||
msgid "License details"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/License.php:128
|
||||
msgid "Information"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/License.php:133
|
||||
#: src/Admin/License.php:243
|
||||
#: src/Storefront/License.php:145
|
||||
#: src/Storefront/Licenses.php:74
|
||||
#: src/Storefront/Licenses.php:103
|
||||
#: src/Storefront/Licenses.php:114
|
||||
#: templates/myaccount/order-licenses.php:16
|
||||
#: templates/myaccount/order-licenses.php:44
|
||||
msgid "Actions"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/License.php:147
|
||||
#: src/Storefront/Cart.php:116
|
||||
#: src/Storefront/Order.php:332
|
||||
msgid "Unlimited activations"
|
||||
msgstr ""
|
||||
|
||||
#. translators: %d activation: number of activations
|
||||
#: src/Admin/License.php:149
|
||||
#: src/Storefront/Cart.php:118
|
||||
#: src/Storefront/Order.php:334
|
||||
msgid "%d activation"
|
||||
msgid_plural "%d activations"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: src/Admin/License.php:195
|
||||
#: src/Admin/Product.php:121
|
||||
#: src/Admin/Product/Variable.php:121
|
||||
#: src/Storefront/License.php:119
|
||||
msgid "License type"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/License.php:199
|
||||
msgid "Product HM"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/License.php:211
|
||||
#: src/Storefront/License.php:123
|
||||
msgid "Allowed activations"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/License.php:215
|
||||
msgid "Order / Customer"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/License.php:241
|
||||
#: src/Storefront/License.php:143
|
||||
msgid "Activation"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/License.php:242
|
||||
#: src/Storefront/License.php:144
|
||||
#: src/Storefront/Order.php:307
|
||||
msgid "Activation date"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/License.php:258
|
||||
#: src/Storefront/License.php:206
|
||||
msgid "Associate"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/License.php:262
|
||||
#: src/License/Traits/LicenseTrait.php:98
|
||||
#: src/Storefront/License.php:208
|
||||
msgid "WordPress"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/License.php:263
|
||||
#: src/License/Traits/LicenseTrait.php:101
|
||||
#: src/Storefront/License.php:209
|
||||
msgid "Web Application"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/License.php:271
|
||||
#: src/Storefront/License.php:214
|
||||
msgid "Website URL"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/License.php:278
|
||||
#: src/Storefront/License.php:217
|
||||
msgid "The IP address of the provided website is automatically assigned."
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/License.php:286
|
||||
msgid "Associate license"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/License.php:307
|
||||
#: src/Storefront/License.php:154
|
||||
msgid "This license has not been associated to a website."
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/License.php:325
|
||||
#: src/Storefront/License.php:172
|
||||
msgid "Revoke"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/License.php:352
|
||||
msgid "Activate"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/License.php:353
|
||||
msgid "Deactivate"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/License.php:354
|
||||
msgid "Renew"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/License.php:361
|
||||
msgid "Choose an action..."
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/License.php:369
|
||||
msgid "Update"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/License.php:389
|
||||
#: src/Storefront/Account.php:217
|
||||
msgid "It was not possible to associate the license."
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Licenses.php:61
|
||||
msgid "License Management"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Licenses.php:86
|
||||
msgid "Number of licenses per page:"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Order.php:60
|
||||
#: src/Storefront/Order.php:113
|
||||
msgid "Regenerate download permissions for licenses"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Product.php:70
|
||||
msgid "Software License"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Product.php:99
|
||||
#: src/Admin/Product/Variable.php:90
|
||||
msgid "Expiry time"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Product.php:110
|
||||
#: src/Admin/Product/Variable.php:97
|
||||
msgid "Expire interval"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Product.php:113
|
||||
#: src/Admin/Product/Variable.php:100
|
||||
msgid "Years"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Product.php:114
|
||||
#: src/Admin/Product/Variable.php:101
|
||||
msgid "Months"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Product.php:115
|
||||
#: src/Admin/Product/Variable.php:102
|
||||
msgid "Days"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Product.php:124
|
||||
#: src/Admin/Product/Variable.php:124
|
||||
msgid "On-demand software"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Product.php:125
|
||||
#: src/Admin/Product/Variable.php:125
|
||||
#: src/License/Traits/LicenseTrait.php:48
|
||||
msgid "Perpetual"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Product.php:135
|
||||
#: src/Admin/Product/Variable.php:109
|
||||
#: src/Storefront/Cart.php:93
|
||||
msgid "Activation limit"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Product.php:136
|
||||
#: src/Admin/Product/Variable.php:111
|
||||
msgid "Leave blank for unlimited activations."
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Product.php:139
|
||||
#: src/Admin/Product/Variable.php:114
|
||||
msgid "Unlimited"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Product/License.php:63
|
||||
msgid "Software license"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Product/Variable.php:64
|
||||
msgid "Enable this option if the product is associated to a license."
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Request.php:82
|
||||
#: src/Admin/Request.php:132
|
||||
#: src/Admin/Request.php:178
|
||||
msgid "It is not possible to perform an action since the order has not been completed."
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Settings.php:84
|
||||
msgid "The following options are used to configure licenses format."
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Settings.php:89
|
||||
msgid "Length"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Settings.php:90
|
||||
msgid "Number of characters to generate a new license. Licenses shall have a minimum length of 10 characters."
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Settings.php:102
|
||||
msgid "Chunks"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Settings.php:103
|
||||
msgid "Split a license into chunks."
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Settings.php:115
|
||||
msgid "Prefix"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Settings.php:116
|
||||
msgid "Add the prefix to the generated license."
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Settings.php:124
|
||||
msgid "Suffix"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Settings.php:125
|
||||
msgid "Add the suffix to the generated license."
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Settings.php:142
|
||||
msgid "Account page"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Settings.php:147
|
||||
msgid "Pagination"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Settings.php:148
|
||||
msgid "Limits the number of licenses to display on \"My Account\" page."
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Settings.php:182
|
||||
msgid "Endpoint for the \"Licenses\" page."
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Settings.php:189
|
||||
msgid "View license"
|
||||
msgstr ""
|
||||
|
||||
#: src/Admin/Settings.php:190
|
||||
msgid "Endpoint for the \"View license\" page."
|
||||
msgstr ""
|
||||
|
||||
#: src/License/Traits/LicenseTrait.php:51
|
||||
msgid "On demand software"
|
||||
msgstr ""
|
||||
|
||||
#: src/License/Traits/LicenseTrait.php:68
|
||||
msgid "Valid"
|
||||
msgstr ""
|
||||
|
||||
#: src/License/Traits/LicenseTrait.php:69
|
||||
msgid "Expired"
|
||||
msgstr ""
|
||||
|
||||
#: src/License/Traits/LicenseTrait.php:70
|
||||
msgid "Suspended"
|
||||
msgstr ""
|
||||
|
||||
#: src/License/Traits/LicenseTrait.php:71
|
||||
msgid "Inactive"
|
||||
msgstr ""
|
||||
|
||||
#: src/License/Traits/LicenseTrait.php:84
|
||||
#: src/Storefront/Cart.php:120
|
||||
msgid "Unknown"
|
||||
msgstr ""
|
||||
|
||||
#: src/Storefront/Account.php:96
|
||||
msgid "You do not have permission to view the license information."
|
||||
msgstr ""
|
||||
|
||||
#: src/Storefront/Cart.php:99
|
||||
#: src/Storefront/Order.php:298
|
||||
msgid "Activation period"
|
||||
msgstr ""
|
||||
|
||||
#: src/Storefront/License.php:224
|
||||
msgid "Accept"
|
||||
msgstr ""
|
||||
|
||||
#: src/Storefront/Licenses.php:72
|
||||
#: src/Storefront/Licenses.php:101
|
||||
#: src/Storefront/Licenses.php:112
|
||||
msgid "Software"
|
||||
msgstr ""
|
||||
|
||||
#: src/Storefront/Licenses.php:96
|
||||
#: templates/myaccount/order-licenses.php:37
|
||||
msgid "Manage"
|
||||
msgstr ""
|
||||
|
||||
#: src/Storefront/Licenses.php:145
|
||||
msgid "«"
|
||||
msgstr ""
|
||||
|
||||
#: src/Storefront/Licenses.php:146
|
||||
msgid "»"
|
||||
msgstr ""
|
||||
|
||||
#: src/Storefront/Order.php:301
|
||||
msgid "Activations limit"
|
||||
msgstr ""
|
||||
|
||||
#: src/Storefront/Order.php:310
|
||||
msgid "Expiry date"
|
||||
msgstr ""
|
||||
|
||||
#: src/Storefront/Product.php:79
|
||||
msgid "Add to cart"
|
||||
msgstr ""
|
||||
|
||||
#: templates/myaccount/license.php:10
|
||||
msgid "Invalid license."
|
||||
msgstr ""
|
||||
|
||||
#: templates/myaccount/license.php:22
|
||||
msgid "Details"
|
||||
msgstr ""
|
||||
|
||||
#: templates/myaccount/licenses.php:12
|
||||
msgid "Go shop"
|
||||
msgstr ""
|
||||
|
||||
#: templates/myaccount/licenses.php:14
|
||||
msgid "There are no active licenses."
|
||||
msgstr ""
|
||||
336
spec/fixtures/dynamic_finders/plugin_version/asmember/translation_file/languages/asmember-de_DE.po
vendored
Normal file
336
spec/fixtures/dynamic_finders/plugin_version/asmember/translation_file/languages/asmember-de_DE.po
vendored
Normal file
@@ -0,0 +1,336 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: asMember 1.0\n"
|
||||
"POT-Creation-Date: 2019-06-25 12:18+0200\n"
|
||||
"PO-Revision-Date: 2019-06-25 12:46+0200\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: de_DE\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.2.3\n"
|
||||
"X-Poedit-Basepath: .\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Poedit-KeywordsList: __\n"
|
||||
"X-Poedit-SearchPath-0: .\n"
|
||||
|
||||
#: admin/admin.php:62
|
||||
msgid "Visibility"
|
||||
msgstr ""
|
||||
|
||||
#: admin/admin.php:64
|
||||
msgid "public"
|
||||
msgstr ""
|
||||
|
||||
#: admin/admin.php:65
|
||||
msgid "Only Members"
|
||||
msgstr "Nur für Mitglieder"
|
||||
|
||||
#: admin/admin.php:95
|
||||
msgid "Hello"
|
||||
msgstr ""
|
||||
|
||||
#: admin/admin.php:111 admin/admin.php:112
|
||||
msgid "Options"
|
||||
msgstr ""
|
||||
|
||||
#: admin/options.php:143
|
||||
msgid "Seite wählen"
|
||||
msgstr ""
|
||||
|
||||
#: public/members.php:119 public/user-account.php:226
|
||||
msgid "Profile"
|
||||
msgstr ""
|
||||
|
||||
#: public/members.php:126 public/members.php:248
|
||||
msgid "Interests"
|
||||
msgstr "Interessen"
|
||||
|
||||
#: public/members.php:133
|
||||
msgid "Ads"
|
||||
msgstr ""
|
||||
|
||||
#: public/members.php:153 public/user-account.php:194
|
||||
#: public/user-account.php:319
|
||||
msgid "About me"
|
||||
msgstr "Über mich"
|
||||
|
||||
#: public/members.php:163
|
||||
msgid "Contact"
|
||||
msgstr "Kontakt"
|
||||
|
||||
#: public/members.php:198 public/user-account.php:377
|
||||
msgid "I search"
|
||||
msgstr "Ich suche"
|
||||
|
||||
#: public/members.php:208 public/user-account.php:372
|
||||
msgid "I offer"
|
||||
msgstr "Ich biete"
|
||||
|
||||
#: public/members.php:256 public/user-account.php:335
|
||||
msgid "favorite quote"
|
||||
msgstr ""
|
||||
|
||||
#: public/members.php:270 public/user-account.php:345
|
||||
msgid "favorite music"
|
||||
msgstr ""
|
||||
|
||||
#: public/members.php:280 public/user-account.php:355
|
||||
msgid "favorite film"
|
||||
msgstr "Lieblingsfilm"
|
||||
|
||||
#: public/members.php:291 public/user-account.php:350
|
||||
msgid "favorite book"
|
||||
msgstr "Lieblingsbuch"
|
||||
|
||||
#: public/user-account.php:131 public/user-account.php:256
|
||||
msgid "Address"
|
||||
msgstr "Anrede"
|
||||
|
||||
#: public/user-account.php:133 public/user-account.php:258
|
||||
#: public/user-register.php:604
|
||||
msgid "Sir"
|
||||
msgstr "Herr"
|
||||
|
||||
#: public/user-account.php:134 public/user-account.php:259
|
||||
#: public/user-register.php:603
|
||||
msgid "Madame"
|
||||
msgstr ""
|
||||
|
||||
#: public/user-account.php:139 public/user-account.php:140
|
||||
#: public/user-account.php:264 public/user-account.php:265
|
||||
#: public/user-register.php:609
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
#: public/user-account.php:144 public/user-account.php:145
|
||||
#: public/user-account.php:269 public/user-account.php:270
|
||||
#: public/user-register.php:615
|
||||
msgid "Firstname"
|
||||
msgstr ""
|
||||
|
||||
#: public/user-account.php:150 public/user-account.php:151
|
||||
#: public/user-account.php:275 public/user-account.php:276
|
||||
#: public/user-register.php:621
|
||||
msgid "Lastname"
|
||||
msgstr ""
|
||||
|
||||
#: public/user-account.php:162 public/user-account.php:163
|
||||
#: public/user-account.php:287 public/user-account.php:288
|
||||
#: public/user-register.php:631
|
||||
msgid "Street"
|
||||
msgstr "Straße"
|
||||
|
||||
#: public/user-account.php:168 public/user-account.php:169
|
||||
#: public/user-account.php:293 public/user-account.php:294
|
||||
#: public/user-register.php:636
|
||||
msgid "Zipcode"
|
||||
msgstr "PLZ"
|
||||
|
||||
#: public/user-account.php:174 public/user-account.php:175
|
||||
#: public/user-account.php:299 public/user-account.php:300
|
||||
#: public/user-register.php:642
|
||||
msgid "City"
|
||||
msgstr "Ort"
|
||||
|
||||
#: public/user-account.php:182 public/user-account.php:307
|
||||
msgid "Birthday"
|
||||
msgstr "Geburtstag"
|
||||
|
||||
#: public/user-account.php:208 public/user-account.php:422
|
||||
msgid "Save"
|
||||
msgstr "Speichern"
|
||||
|
||||
#: public/user-account.php:231
|
||||
msgid "Detail"
|
||||
msgstr ""
|
||||
|
||||
#: public/user-account.php:235
|
||||
msgid "Offer/Search"
|
||||
msgstr ""
|
||||
|
||||
#: public/user-account.php:239 public/user-account.php:394
|
||||
msgid "Avatar"
|
||||
msgstr ""
|
||||
|
||||
#: public/user-account.php:340
|
||||
msgid "interests"
|
||||
msgstr ""
|
||||
|
||||
#: public/user-account.php:400 public/user-account.php:404
|
||||
msgid "Upload Avatar"
|
||||
msgstr ""
|
||||
|
||||
#: public/user-dashboard.php:24
|
||||
msgid "Welcome"
|
||||
msgstr ""
|
||||
|
||||
#: public/user-dashboard.php:33
|
||||
msgid "not logged in"
|
||||
msgstr ""
|
||||
|
||||
#: public/user-login.php:32
|
||||
msgid "Benutzer/Email"
|
||||
msgstr ""
|
||||
|
||||
#: public/user-login.php:33
|
||||
msgid "Passwort"
|
||||
msgstr ""
|
||||
|
||||
#: public/user-login.php:34
|
||||
msgid "Eingeloggt bleiben"
|
||||
msgstr ""
|
||||
|
||||
#: public/user-login.php:35 public/user-login.php:61
|
||||
msgid "Login"
|
||||
msgstr ""
|
||||
|
||||
#: public/user-login.php:47 public/user-login.php:48
|
||||
msgid "Username oder Email"
|
||||
msgstr "Benutzer oder EMail"
|
||||
|
||||
#: public/user-login.php:51 public/user-login.php:52
|
||||
#: public/user-register.php:117 public/user-register.php:684
|
||||
#: public/user-register.php:685
|
||||
msgid "Password"
|
||||
msgstr "Passwort"
|
||||
|
||||
#: public/user-login.php:56
|
||||
msgid "Be Logged in"
|
||||
msgstr "Sie sind eingeloggt"
|
||||
|
||||
#: public/user-login.php:74
|
||||
msgid "Reset password"
|
||||
msgstr "Passwort vergessen"
|
||||
|
||||
#: public/user-login.php:80 public/user-register.php:128
|
||||
#: public/user-register.php:742
|
||||
msgid "Register"
|
||||
msgstr ""
|
||||
|
||||
#: public/user-login.php:121
|
||||
msgid "<strong>ERROR</strong>: Invalid username or incorrect password."
|
||||
msgstr ""
|
||||
|
||||
#: public/user-register.php:27
|
||||
msgid "You are logged in"
|
||||
msgstr "Sie sind bereits eingeloggt."
|
||||
|
||||
#: public/user-register.php:27
|
||||
msgid "Next"
|
||||
msgstr ""
|
||||
|
||||
#: public/user-register.php:34
|
||||
msgid "Register disabled"
|
||||
msgstr ""
|
||||
|
||||
#: public/user-register.php:56
|
||||
msgid "Your membership has been successfully activated"
|
||||
msgstr ""
|
||||
|
||||
#: public/user-register.php:59 public/user-register.php:106
|
||||
#: public/user-register.php:186
|
||||
msgid "Activation was not successful"
|
||||
msgstr ""
|
||||
|
||||
#: public/user-register.php:116
|
||||
msgid "Username"
|
||||
msgstr ""
|
||||
|
||||
#: public/user-register.php:127
|
||||
msgid "Lost password"
|
||||
msgstr "Passwort vergessen"
|
||||
|
||||
#: public/user-register.php:174
|
||||
msgid "A membership application for this email has already been created."
|
||||
msgstr "Ein Mitgliedsantrag zu dieser Email wurde bereits angelegt."
|
||||
|
||||
#: public/user-register.php:294 public/user-register.php:515
|
||||
msgid "Please enter a valid email address!"
|
||||
msgstr "Bitte geben Sie eine gültige EMail ein!"
|
||||
|
||||
#: public/user-register.php:405
|
||||
msgid ""
|
||||
"Your account has been successfully created. You will receive an email with a "
|
||||
"confirmation link to activate your account."
|
||||
msgstr ""
|
||||
|
||||
#: public/user-register.php:437 public/user-register.php:449
|
||||
#: public/user-register.php:461 public/user-register.php:471
|
||||
#: public/user-register.php:481 public/user-register.php:491
|
||||
#: public/user-register.php:507
|
||||
msgid "Please fill in this field!"
|
||||
msgstr "Bitte füllen Sie dieses Feld aus!"
|
||||
|
||||
#: public/user-register.php:529 public/user-register.php:538
|
||||
msgid "Please enter a password with at least 8 characters!"
|
||||
msgstr ""
|
||||
|
||||
#: public/user-register.php:547
|
||||
msgid "The passwords must be identical."
|
||||
msgstr ""
|
||||
|
||||
#: public/user-register.php:557
|
||||
msgid "Please confirm the terms and conditions."
|
||||
msgstr ""
|
||||
|
||||
#: public/user-register.php:566
|
||||
msgid "Please confirm the privacy policy"
|
||||
msgstr ""
|
||||
|
||||
#: public/user-register.php:601
|
||||
msgid "address"
|
||||
msgstr ""
|
||||
|
||||
#: public/user-register.php:616
|
||||
msgid "Your firstname"
|
||||
msgstr ""
|
||||
|
||||
#: public/user-register.php:622
|
||||
msgid "Your lastname"
|
||||
msgstr ""
|
||||
|
||||
#: public/user-register.php:632
|
||||
msgid "Your street"
|
||||
msgstr "Ihre Straße"
|
||||
|
||||
#: public/user-register.php:637
|
||||
msgid "Your zipcode"
|
||||
msgstr "Ihre PLZ"
|
||||
|
||||
#: public/user-register.php:643
|
||||
msgid "Your City"
|
||||
msgstr ""
|
||||
|
||||
#: public/user-register.php:647
|
||||
msgid "Phone"
|
||||
msgstr "Telefon"
|
||||
|
||||
#: public/user-register.php:648
|
||||
msgid "Your phone"
|
||||
msgstr "Ihre Telefonnummer"
|
||||
|
||||
#: public/user-register.php:670
|
||||
msgid "Name"
|
||||
msgstr "Name"
|
||||
|
||||
#: public/user-register.php:671
|
||||
msgid "Your name"
|
||||
msgstr "Ihr Name"
|
||||
|
||||
#: public/user-register.php:679
|
||||
msgid "EMail"
|
||||
msgstr "EMail"
|
||||
|
||||
#: public/user-register.php:680
|
||||
msgid "Your Email"
|
||||
msgstr "Ihre Email"
|
||||
|
||||
#: public/user-register.php:689 public/user-register.php:690
|
||||
msgid "Repeat password"
|
||||
msgstr "Passwort wiederholen"
|
||||
|
||||
#: public/user-register.php:704
|
||||
msgid "Membership"
|
||||
msgstr "Mitgliedschaft"
|
||||
@@ -0,0 +1,553 @@
|
||||
# Blank WordPress Pot
|
||||
# Copyright 2014 ...
|
||||
# This file is distributed under the GNU General Public License v3 or later.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Aurora Heatmap v1.0.0\n"
|
||||
"Report-Msgid-Bugs-To: Translator Name <translations@example.com>\n"
|
||||
"POT-Creation-Date: 2019-09-20 16:15+0900\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: R3098 <info@seous.info>\n"
|
||||
"Language: ja\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Textdomain-Support: yesX-Generator: Poedit 1.6.4\n"
|
||||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
"X-Poedit-KeywordsList: __;_e;esc_html_e;esc_html_x:1,2c;esc_html__;"
|
||||
"esc_attr_e;esc_attr_x:1,2c;esc_attr__;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;"
|
||||
"_x:1,2c;_n:1,2;_n_noop:1,2;__ngettext:1,2;__ngettext_noop:1,2;_c,_nc:4c,1,2\n"
|
||||
"X-Poedit-Basepath: ..\n"
|
||||
"X-Generator: Poedit 2.2.3\n"
|
||||
"X-Poedit-SearchPath-0: .\n"
|
||||
"X-Poedit-SearchPathExcluded-0: freemius\n"
|
||||
|
||||
#: aurora-heatmap.php:34 class-aurora-heatmap-basic.php:212
|
||||
#: class-aurora-heatmap-basic.php:213 class-aurora-heatmap-basic.php:311
|
||||
#: class-aurora-heatmap-basic.php:446
|
||||
msgid "Aurora Heatmap"
|
||||
msgstr "Aurora Heatmap"
|
||||
|
||||
#: aurora-heatmap.php:35
|
||||
msgid ""
|
||||
"Beautiful like an aurora! A simple WordPress heatmap that can be completed "
|
||||
"with just a plugin."
|
||||
msgstr ""
|
||||
"オーロラのように美しい、プラグインだけで完結するシンプルな WordPress 用ヒート"
|
||||
"マップです。"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:91
|
||||
msgid "Fail to activate. Another version of Aurora Heatmap is already active."
|
||||
msgstr ""
|
||||
"有効化に失敗しました。他のバージョンの Aurora Heatmap が既に有効化されていま"
|
||||
"す。"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:227
|
||||
#: premium/class-aurora-heatmap-standard.php:59
|
||||
msgid "Settings"
|
||||
msgstr "設定"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:232
|
||||
msgid "Premium Version Information"
|
||||
msgstr "有料版のご案内"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:237 class-aurora-heatmap-basic.php:252
|
||||
#: premium/class-aurora-heatmap-standard.php:69
|
||||
#: premium/class-aurora-heatmap-standard.php:84
|
||||
msgid "Click"
|
||||
msgstr "クリック"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:242 class-aurora-heatmap-basic.php:257
|
||||
#: premium/class-aurora-heatmap-standard.php:74
|
||||
#: premium/class-aurora-heatmap-standard.php:89
|
||||
msgid "Breakaway"
|
||||
msgstr "離脱"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:247 class-aurora-heatmap-basic.php:262
|
||||
#: premium/class-aurora-heatmap-standard.php:79
|
||||
#: premium/class-aurora-heatmap-standard.php:94
|
||||
msgid "Attention"
|
||||
msgstr "熟読"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:269
|
||||
#: premium/class-aurora-heatmap-standard.php:64
|
||||
msgid "Help"
|
||||
msgstr "ヘルプ"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:328
|
||||
msgid "Updated options."
|
||||
msgstr "設定を更新しました。"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:332
|
||||
msgid "Deleted heatmap data."
|
||||
msgstr "ヒートマップデータは削除されました。"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:415
|
||||
msgid "PC"
|
||||
msgstr "パソコン"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:421
|
||||
msgid "Mobile"
|
||||
msgstr "モバイル"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:511
|
||||
msgid "<b>Aurora Heatmap</b> has a premium version with extended features."
|
||||
msgstr "<b>Aurora Heatmap</b> は機能を拡張した有料版を用意しています。"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:512
|
||||
msgid "If you like this plugin, please consider upgrading!"
|
||||
msgstr ""
|
||||
"本プラグインを気に入っていただけましたら、ぜひ、アップグレードを検討くださ"
|
||||
"い!"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:515
|
||||
msgid "Features comparison"
|
||||
msgstr "機能比較"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:520
|
||||
msgid "Free Version"
|
||||
msgstr "無料版"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:521
|
||||
msgid "Premium Version"
|
||||
msgstr "有料版"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:524
|
||||
msgid "Free Plan"
|
||||
msgstr "フリープラン"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:525
|
||||
msgid "Standard Plan"
|
||||
msgstr "<span class=\"ib\">スタンダード</span><span class=\"ib\">プラン</span>"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:531
|
||||
msgid "Priority Email Support"
|
||||
msgstr "メールサポート"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:532
|
||||
msgid "Click Heatmap"
|
||||
msgstr "クリックヒートマップ"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:533
|
||||
msgid "Breakaway Heatmap"
|
||||
msgstr "離脱ヒートマップ"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:534
|
||||
msgid "Attention Heatmap"
|
||||
msgstr "熟読ヒートマップ"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:535
|
||||
msgid "URL Organization"
|
||||
msgstr "URL 最適化"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:536
|
||||
msgid "Extended Retension Period (6 months)"
|
||||
msgstr "データ保存期間の延長(6か月)"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:537
|
||||
msgid "Update to the Latest Version"
|
||||
msgstr "最新版への更新"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:550
|
||||
msgid "<b>*</b> The free plan is a premium version with no license or expired."
|
||||
msgstr "※ フリープランはライセンス未契約またはライセンス失効の有料版です。"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:561
|
||||
msgid "Migrate data to the premium version"
|
||||
msgstr "有料版へのデータ移行"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:563
|
||||
msgid ""
|
||||
"<a href=\"https://market.seous.info/aurora-heatmap/premium\">Get the "
|
||||
"installer</a> of the premium version plugin."
|
||||
msgstr ""
|
||||
"有料版プラグインの <a href=\"https://market.seous.info/aurora-heatmap/premium"
|
||||
"\">インストーラを入手</a>。"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:564
|
||||
msgid "<b>Stop</b> the free version plugin."
|
||||
msgstr "無料版プラグインを <b>停止</b>。"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:565
|
||||
msgid "<b>Install</b> / <b>activate</b> the installer."
|
||||
msgstr "インストーラの <b>インストール</b>・<b>有効化</b>。"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:566
|
||||
msgid ""
|
||||
"<b>User registration</b> / <b>license agreement</b> / <b>update plugin</b>."
|
||||
msgstr "<b>ユーザー登録</b>・<b>ライセンス契約</b>・<b>プラグインの更新</b>。"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:567
|
||||
msgid "<b>Delete</b> the free version plugin."
|
||||
msgstr "無料版プラグインの <b>削除</b>。"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:577
|
||||
#: premium/class-aurora-heatmap-standard.php:128
|
||||
msgid "1 month"
|
||||
msgstr "1か月"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:578
|
||||
#: premium/class-aurora-heatmap-standard.php:129
|
||||
msgid "3 months"
|
||||
msgstr "3か月"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:579
|
||||
#: premium/class-aurora-heatmap-standard.php:130
|
||||
msgid "6 months"
|
||||
msgstr "6か月"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:583
|
||||
#: premium/class-aurora-heatmap-standard.php:134
|
||||
msgid "High accuracy"
|
||||
msgstr "高精度"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:584
|
||||
#: premium/class-aurora-heatmap-standard.php:135
|
||||
msgid "Standard"
|
||||
msgstr "標準"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:588
|
||||
#: premium/class-aurora-heatmap-standard.php:139
|
||||
msgid "Show"
|
||||
msgstr "表示する"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:589
|
||||
#: premium/class-aurora-heatmap-standard.php:140
|
||||
msgid "Hide"
|
||||
msgstr "表示しない"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:593 class-aurora-heatmap-basic.php:598
|
||||
#: premium/class-aurora-heatmap-standard.php:144
|
||||
#: premium/class-aurora-heatmap-standard.php:149
|
||||
msgid "Integrated"
|
||||
msgstr "統合"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:594 class-aurora-heatmap-basic.php:599
|
||||
#: premium/class-aurora-heatmap-standard.php:145
|
||||
#: premium/class-aurora-heatmap-standard.php:150
|
||||
msgid "individual display"
|
||||
msgstr "別表示"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:615
|
||||
#: premium/class-aurora-heatmap-standard.php:168
|
||||
msgid "Data settings"
|
||||
msgstr "データ設定"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:619
|
||||
#: premium/class-aurora-heatmap-standard.php:172
|
||||
msgid "Retension period"
|
||||
msgstr "保存期間"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:627
|
||||
#: premium/class-aurora-heatmap-standard.php:180
|
||||
msgid "Are you sure you want to delete all the heatmap data?"
|
||||
msgstr "ヒートマップデータをすべて削除してもよろしいですか?"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:627
|
||||
#: premium/class-aurora-heatmap-standard.php:180
|
||||
msgid "Bulk data deletion"
|
||||
msgstr "データ一括削除"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:630
|
||||
#: premium/class-aurora-heatmap-standard.php:183
|
||||
msgid "Display settings"
|
||||
msgstr "表示設定"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:634
|
||||
#: premium/class-aurora-heatmap-standard.php:187
|
||||
msgid "Accuracy"
|
||||
msgstr "精度"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:638
|
||||
#: premium/class-aurora-heatmap-standard.php:191
|
||||
msgid ""
|
||||
"<b>*</b> If the count amount is not enough, please check in standard mode."
|
||||
msgstr "※ カウント量が十分でない場合は標準モードで確認してみてください。"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:643
|
||||
#: premium/class-aurora-heatmap-standard.php:196
|
||||
msgid "Count bar"
|
||||
msgstr "カウントバー"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:651
|
||||
#: premium/class-aurora-heatmap-standard.php:204
|
||||
msgid "URL hash"
|
||||
msgstr "URL ハッシュ"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:655
|
||||
#: premium/class-aurora-heatmap-standard.php:208
|
||||
msgid "<code>#top</code> etc."
|
||||
msgstr "<code>#top</code> など。"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:661
|
||||
#: premium/class-aurora-heatmap-standard.php:214
|
||||
msgid "URL parameter"
|
||||
msgstr "URL パラメータ"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:665
|
||||
#: premium/class-aurora-heatmap-standard.php:218
|
||||
msgid "<code>?page=2</code>, <code>?utm_source=xxxx</code>, etc."
|
||||
msgstr "<code>?page=2</code> や <code>?utm_source=xxxx</code> など。"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:667
|
||||
#: premium/class-aurora-heatmap-standard.php:220
|
||||
msgid ""
|
||||
"<b>*</b> If the default permalink is set <code>?p=123</code>, use it "
|
||||
"individual display."
|
||||
msgstr ""
|
||||
"※ デフォルトパーマリンク設定 <code>?p=123</code> の場合は別表示で使用くださ"
|
||||
"い。"
|
||||
|
||||
#: class-aurora-heatmap-basic.php:671
|
||||
#: premium/class-aurora-heatmap-standard.php:224
|
||||
msgid "Save"
|
||||
msgstr "保存"
|
||||
|
||||
#: class-aurora-heatmap-list.php:71
|
||||
msgctxt "List_Table"
|
||||
msgid "Count"
|
||||
msgstr "Count"
|
||||
|
||||
#: class-aurora-heatmap-list.php:72
|
||||
msgctxt "List_Table"
|
||||
msgid "URL"
|
||||
msgstr "URL"
|
||||
|
||||
#: class-aurora-heatmap-list.php:73
|
||||
msgctxt "List_Table"
|
||||
msgid "Title"
|
||||
msgstr "Title"
|
||||
|
||||
#: class-aurora-heatmap-list.php:74
|
||||
msgctxt "List_Table"
|
||||
msgid "Heatmap"
|
||||
msgstr "Heatmap"
|
||||
|
||||
#: class-aurora-heatmap-list.php:87
|
||||
msgctxt "List_Table"
|
||||
msgid "Delete"
|
||||
msgstr "削除"
|
||||
|
||||
#: class-aurora-heatmap-list.php:172
|
||||
msgid "* Analysis results can only be viewed from a PC."
|
||||
msgstr "※ 解析結果はパソコンからのみ閲覧できます。"
|
||||
|
||||
#: class-aurora-heatmap-list.php:196
|
||||
msgctxt "Table_List"
|
||||
msgid "Check"
|
||||
msgstr "チェック"
|
||||
|
||||
#: premium/class-aurora-heatmap-free.php:55
|
||||
msgctxt "Free Plan"
|
||||
msgid ""
|
||||
"Due to unlicensed or expired licenses, the premium version features, "
|
||||
"including <b>premium version plugin updates</b>, are limited."
|
||||
msgstr ""
|
||||
"ライセンス未契約または失効のため <b>有料版プラグインの更新</b> を含む有料版の"
|
||||
"機能が制限されています。"
|
||||
|
||||
#: premium/class-aurora-heatmap-free.php:56
|
||||
#, php-format
|
||||
msgctxt "Free Plan"
|
||||
msgid ""
|
||||
"To use the latest version, we recommend the <a href=\"%s\">lisense "
|
||||
"agreement</a> or the <a href=\"%s\">free version</a>. See the <a href=\"%s"
|
||||
"\">help</a> for details."
|
||||
msgstr ""
|
||||
"最新版をご利用いただくため、<a href=\"%s\">ライセンス契約</a> または <a href="
|
||||
"\"%s\">無料版</a> をおすすめします。詳細は <a href=\"%s\">ヘルプ</a> をご覧く"
|
||||
"ださい。"
|
||||
|
||||
#: premium/class-aurora-heatmap-free.php:70
|
||||
msgctxt "Free Plan"
|
||||
msgid "About the free plan"
|
||||
msgstr "フリープランについて"
|
||||
|
||||
#: premium/class-aurora-heatmap-free.php:71
|
||||
msgctxt "Free Plan"
|
||||
msgid "The license has expired, but the free plan can still be used."
|
||||
msgstr ""
|
||||
"現在、ライセンス失効していますが、引き続き無料版としての機能をご利用いただけ"
|
||||
"ます。"
|
||||
|
||||
#: premium/class-aurora-heatmap-free.php:72
|
||||
msgctxt "Free Plan"
|
||||
msgid ""
|
||||
"However, it is not possible to update to the latest version of the premium "
|
||||
"version, so we recommend that you replace the WordPress.org plugin directory "
|
||||
"with the free version."
|
||||
msgstr ""
|
||||
"ただし、最新版への更新などは行えませんので、WordPress.org プラグインディレク"
|
||||
"トリの無料版への入れ替えをお勧めします。"
|
||||
|
||||
#: premium/class-aurora-heatmap-free.php:73
|
||||
msgctxt "Free Plan"
|
||||
msgid "It is also possible to take over the current data."
|
||||
msgstr "その際、既存データを引き継ぐことも可能です。"
|
||||
|
||||
#: premium/class-aurora-heatmap-free.php:75
|
||||
msgctxt "Free Plan"
|
||||
msgid "Migrate data to the free version"
|
||||
msgstr "無料版へのデータ移行"
|
||||
|
||||
#: premium/class-aurora-heatmap-free.php:77
|
||||
msgctxt "Free Plan"
|
||||
msgid "<b>Stop</b> the premium version plugin."
|
||||
msgstr "有料版プラグインの <b>停止</b>。"
|
||||
|
||||
#: premium/class-aurora-heatmap-free.php:78
|
||||
msgctxt "Free Plan"
|
||||
msgid ""
|
||||
"<b>Install</b> / <b>activate</b> <a href=\"plugin-install.php?s=aurora-"
|
||||
"heatmap&tab=search&type=term\">the free version</a> plugin."
|
||||
msgstr ""
|
||||
"<a href=\"plugin-install.php?s=aurora-heatmap&tab=search&type=term\">無料版プ"
|
||||
"ラグイン</a> の <b>インストール</b>・<b>有効化</b>。"
|
||||
|
||||
#: premium/class-aurora-heatmap-free.php:79
|
||||
msgctxt "Free Plan"
|
||||
msgid "<b>Delete</b> the premium version plugin."
|
||||
msgstr "有料版プラグインの <b>削除</b>。"
|
||||
|
||||
#: premium/class-aurora-heatmap-free.php:83
|
||||
msgctxt "Free Plan"
|
||||
msgid "If you can't receive authentication email"
|
||||
msgstr "認証メールが受け取れない場合"
|
||||
|
||||
#: premium/class-aurora-heatmap-free.php:84
|
||||
#, php-format
|
||||
msgctxt "Free Plan"
|
||||
msgid ""
|
||||
"Change the email address of <a href=\"profile.php\">%s</a> and restart the "
|
||||
"user registration with the following button."
|
||||
msgstr ""
|
||||
"<a href=\"profile.php\">%s</a> のメールアドレスを変更の上、次のボタンでユー"
|
||||
"ザー登録をやり直してください。"
|
||||
|
||||
#: premium/class-aurora-heatmap-free.php:85
|
||||
msgctxt "Free Plan"
|
||||
msgid "Restart the user registration"
|
||||
msgstr "ユーザー登録をやり直す"
|
||||
|
||||
#~ msgid "Information"
|
||||
#~ msgstr "案内"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<p>ライセンス未契約または失効のため <b>有料版プラグインの更新</b> を含む有"
|
||||
#~ "料版の機能が制限されています。</p>"
|
||||
#~ msgstr ""
|
||||
#~ "<p>ライセンス未契約または失効のため <b>有料版プラグインの更新</b> を含む有"
|
||||
#~ "料版の機能が制限されています。</p>"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "<p>最新版をご利用いただくため <a href=\"%s\">ライセンス契約</a> または <a "
|
||||
#~ "href=\"%s\">無料版</a> をおすすめします。詳細は <a href=\"%s\">案内タブ</"
|
||||
#~ "a> をご覧ください。</p>"
|
||||
#~ msgstr ""
|
||||
#~ "<p>最新版をご利用いただくため <a href=\"%s\">ライセンス契約</a> または <a "
|
||||
#~ "href=\"%s\">無料版</a> をおすすめします。詳細は <a href=\"%s\">案内タブ</"
|
||||
#~ "a> をご覧ください。</p>"
|
||||
|
||||
#~ msgid "Aurora Heatmap (Installer)"
|
||||
#~ msgstr "Aurora Heatmap (インストーラ)"
|
||||
|
||||
#~ msgid "Important"
|
||||
#~ msgstr "重要事項"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Fail to activate. Another version of <strong>Aurora Heatmap</strong> is "
|
||||
#~ "already active."
|
||||
#~ msgstr ""
|
||||
#~ "有効化に失敗しました。他のバージョンの <strong>Aurora Heatmap</strong> が"
|
||||
#~ "既に有効化されています。"
|
||||
|
||||
#~ msgctxt "Installer"
|
||||
#~ msgid "Aurora Heatmap (Installer)"
|
||||
#~ msgstr "Aurora Heatmap (インストーラ)"
|
||||
|
||||
#~ msgctxt "Installer"
|
||||
#~ msgid "Important"
|
||||
#~ msgstr "重要事項"
|
||||
|
||||
#~ msgctxt "Installer"
|
||||
#~ msgid ""
|
||||
#~ "<strong>%s %s</strong> はライセンス契約後のプラグインの更新でご利用いただ"
|
||||
#~ "けます。"
|
||||
#~ msgstr ""
|
||||
#~ "<strong>%s %s</strong> はライセンス契約後のプラグインの更新でご利用いただ"
|
||||
#~ "けます。"
|
||||
|
||||
#~ msgctxt "Installer"
|
||||
#~ msgid ""
|
||||
#~ "このプラグインはライセンス契約とプラグイン本体の導入を容易にするためのイン"
|
||||
#~ "ストーラです。"
|
||||
#~ msgstr ""
|
||||
#~ "このプラグインはライセンス契約とプラグイン本体の導入を容易にするためのイン"
|
||||
#~ "ストーラです。"
|
||||
|
||||
#~ msgctxt "Installer"
|
||||
#~ msgid ""
|
||||
#~ "<strong>%s %s</strong> をご希望の方は、本インストーラを <b>停止</b>・<b>削"
|
||||
#~ "除</b> して無料版をご利用ください。"
|
||||
#~ msgstr ""
|
||||
#~ "<strong>%s %s</strong> をご希望の方は、本インストーラを <b>停止</b>・<b>削"
|
||||
#~ "除</b> して無料版をご利用ください。"
|
||||
|
||||
#~ msgctxt "Installer"
|
||||
#~ msgid "本インストーラをダウンロード・インストール・有効化します。"
|
||||
#~ msgstr "本インストーラをダウンロード・インストール・有効化します。"
|
||||
|
||||
#~ msgctxt "Installer"
|
||||
#~ msgid "%s より有料版(スタンダードプラン)のライセンス契約を行います。"
|
||||
#~ msgstr "%s より有料版(スタンダードプラン)のライセンス契約を行います。"
|
||||
|
||||
#~ msgctxt "Installer"
|
||||
#~ msgid "スタンダードプランの <b>[ UPGRADE NOW ]</b> をクリックします。"
|
||||
#~ msgstr "スタンダードプランの <b>[ UPGRADE NOW ]</b> をクリックします。"
|
||||
|
||||
#~ msgctxt "Installer"
|
||||
#~ msgid "<b>[ Monthly ]</b> または <b>[ Annually ]</b> を選択します。"
|
||||
#~ msgstr "<b>[ Monthly ]</b> または <b>[ Annually ]</b> を選択します。"
|
||||
|
||||
#~ msgctxt "Installer"
|
||||
#~ msgid ""
|
||||
#~ "クレジットカード または PayPal のお支払い方法を選択して、情報を入力しま"
|
||||
#~ "す。"
|
||||
#~ msgstr ""
|
||||
#~ "クレジットカード または PayPal のお支払い方法を選択して、情報を入力しま"
|
||||
#~ "す。"
|
||||
|
||||
#~ msgctxt "Installer"
|
||||
#~ msgid "<b>[ Review Order ]</b> ボタンをクリックします。"
|
||||
#~ msgstr "<b>[ Review Order ]</b> ボタンをクリックします。"
|
||||
|
||||
#~ msgctxt "Installer"
|
||||
#~ msgid ""
|
||||
#~ "確認画面が表示されますので <b>[ Pay & Subscribe ]</b> ボタンをクリック"
|
||||
#~ "して決済します。"
|
||||
#~ msgstr ""
|
||||
#~ "確認画面が表示されますので <b>[ Pay & Subscribe ]</b> ボタンをクリック"
|
||||
#~ "して決済します。"
|
||||
|
||||
#~ msgctxt "Installer"
|
||||
#~ msgid ""
|
||||
#~ "%s より <strong>%s</strong> を最新の <strong>%s %s</strong> に更新します。"
|
||||
#~ msgstr ""
|
||||
#~ "%s より <strong>%s</strong> を最新の <strong>%s %s</strong> に更新します。"
|
||||
|
||||
#~ msgid "Breakaway (Mobile)"
|
||||
#~ msgstr "離脱 (Mobile)"
|
||||
|
||||
#~ msgid "Attention (Mobile)"
|
||||
#~ msgstr "熟読 (Mobile)"
|
||||
|
||||
#~ msgid "perusal (PC)"
|
||||
#~ msgstr "熟読 (PC)"
|
||||
|
||||
#~ msgid "perusal (Mobile)"
|
||||
#~ msgstr "熟読 (Mobile)"
|
||||
|
||||
#~ msgid "Got invalid nonce."
|
||||
#~ msgstr "不正な nonce です。"
|
||||
258
spec/fixtures/dynamic_finders/plugin_version/avaibook/translation_file/languages/avaibook-pt_PT.po
vendored
Normal file
258
spec/fixtures/dynamic_finders/plugin_version/avaibook/translation_file/languages/avaibook-pt_PT.po
vendored
Normal file
@@ -0,0 +1,258 @@
|
||||
# Copyright (C) 2019 Carlos G. Cerro cgcerro@gmail.com
|
||||
# This file is distributed under the same license as the AvaiBook plugin.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: AvaiBook 1.0.0\n"
|
||||
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/avaibook\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"POT-Creation-Date: 2019-06-25T12:50:01+02:00\n"
|
||||
"PO-Revision-Date: 2019-06-28 09:34+0200\n"
|
||||
"X-Generator: Poedit 2.2.3\n"
|
||||
"X-Domain: avaibook\n"
|
||||
"Last-Translator: \n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"Language: pt_PT\n"
|
||||
|
||||
#. Plugin Name of the plugin
|
||||
msgid "AvaiBook"
|
||||
msgstr "AvaiBook"
|
||||
|
||||
#. Plugin URI of the plugin
|
||||
msgid "http://wordpress.org/plugins/avaibook/"
|
||||
msgstr "http://wordpress.org/plugins/avaibook/"
|
||||
|
||||
#. Description of the plugin
|
||||
msgid "Show Avaibook booking form in your wordpress"
|
||||
msgstr "Mostre o formulário de reserva Avaibook no seu Wordpress"
|
||||
|
||||
#. Author of the plugin
|
||||
msgid "Carlos G. Cerro cgcerro@gmail.com"
|
||||
msgstr ""
|
||||
|
||||
#: avaibook.php:239
|
||||
msgid "Show Avaibook book form 1"
|
||||
msgstr "Mostrar formulário AvaiBook 1"
|
||||
|
||||
#: avaibook.php:260
|
||||
msgid "Show Avaibook book form 2"
|
||||
msgstr "Mostrar formulário AvaiBook 2"
|
||||
|
||||
#: avaibook.php:282
|
||||
msgid "Show Avaibook book form 3"
|
||||
msgstr "Mostrar formulário AvaiBook 3"
|
||||
|
||||
#: includes/admin.php:3
|
||||
msgid "Form 1"
|
||||
msgstr "Formulário 1"
|
||||
|
||||
#: includes/admin.php:3
|
||||
msgid "Form 2"
|
||||
msgstr "Formulário 2"
|
||||
|
||||
#: includes/admin.php:3
|
||||
msgid "Form 3"
|
||||
msgstr "Formulário 3"
|
||||
|
||||
#: includes/admin.php:15
|
||||
msgid ""
|
||||
"You can define three types of form. Each one can have a different "
|
||||
"configuration or presentation."
|
||||
msgstr ""
|
||||
"É possível definir três tipos diferentes de formulários. Cada um com uma "
|
||||
"configuração ou apresentação diferente."
|
||||
|
||||
#: includes/admin.php:33
|
||||
msgid "Rental Id is mandatory with \"single\" rental type."
|
||||
msgstr ""
|
||||
"A identificação do alojamento é obrigatória no tipo de motor \"simples\"."
|
||||
|
||||
#: includes/admin.php:37
|
||||
msgid "Owner Id is mandatory with \"multiple\" rental type."
|
||||
msgstr ""
|
||||
"A identificação do alojamento é obrigatória no tipo de motor \"múltiplo\"."
|
||||
|
||||
#: includes/admin.php:41
|
||||
msgid "Configuration saved."
|
||||
msgstr "Configuração gravada."
|
||||
|
||||
#: includes/admin.php:47
|
||||
msgid "Form"
|
||||
msgstr "Formulário"
|
||||
|
||||
#: includes/admin.php:54
|
||||
msgid "AvaiBook configuration"
|
||||
msgstr "Configuração AvaiBook"
|
||||
|
||||
#: includes/admin.php:56
|
||||
msgid ""
|
||||
"Choose the type of Booking Engine you wish to link, and fill in the "
|
||||
"requested parameters (those marked with * are mandatory and you will find "
|
||||
"their value in your private area of AvaiBook)"
|
||||
msgstr ""
|
||||
"Escolha o tipo de motor de reservas que pretende utilizar. Preencha os "
|
||||
"campos obrigatórios (aqueles marcados com * são obrigatórios e encontrará o "
|
||||
"valor em sua área privada AvaiBook)"
|
||||
|
||||
#: includes/admin.php:61
|
||||
msgid "Booking Engine type"
|
||||
msgstr "Tipo de motor AvaiBook"
|
||||
|
||||
#: includes/admin.php:64
|
||||
msgid "Single"
|
||||
msgstr "Simples"
|
||||
|
||||
#: includes/admin.php:65
|
||||
msgid "Multiple"
|
||||
msgstr "Múltiplo"
|
||||
|
||||
#: includes/admin.php:67
|
||||
msgid ""
|
||||
"Choose the type of booking engine you want to use. To a single accommodation "
|
||||
"or to all your accommodations"
|
||||
msgstr ""
|
||||
"Escolha o tipo de motor de reservas que pretende utilizar. Para um único "
|
||||
"alojamento ou para todos os alojamentos"
|
||||
|
||||
#: includes/admin.php:73
|
||||
msgid "Rental Id"
|
||||
msgstr "ID de Alojamento"
|
||||
|
||||
#: includes/admin.php:75
|
||||
msgid "This is the AvaiBook accommodation Id"
|
||||
msgstr "Este é o identificador do alojamento"
|
||||
|
||||
#: includes/admin.php:79
|
||||
msgid "Reference"
|
||||
msgstr "Referência"
|
||||
|
||||
#: includes/admin.php:81 includes/admin.php:99
|
||||
msgid ""
|
||||
"(optional) the generated reserves will have this reference so that you can "
|
||||
"distinguish them"
|
||||
msgstr ""
|
||||
"(opcional) as reservas geradas terão esta referência anotada para que possa "
|
||||
"distingui-las"
|
||||
|
||||
#: includes/admin.php:92
|
||||
msgid "This is your customer id in AvaiBook"
|
||||
msgstr "Este é o seu ID de cliente no AvaiBook"
|
||||
|
||||
#: includes/admin.php:105
|
||||
msgid "Show rental units"
|
||||
msgstr "Mostrar unidades habitacionais"
|
||||
|
||||
#: includes/admin.php:106
|
||||
msgid "Show zones"
|
||||
msgstr "Mostrar zonas"
|
||||
|
||||
#: includes/admin.php:107
|
||||
msgid "Show people"
|
||||
msgstr "Mostrar pessoas"
|
||||
|
||||
#: includes/admin.php:108
|
||||
msgid "Behavior in the booking engine"
|
||||
msgstr "Comportamento no motor de reservas"
|
||||
|
||||
#: includes/admin.php:116
|
||||
msgid "Display options"
|
||||
msgstr "Opções de apresentação"
|
||||
|
||||
#: includes/admin.php:118
|
||||
msgid ""
|
||||
"Choose how you want your widget to be and what colors you want it to have. "
|
||||
"If you do not mark any of the options below your widget will only be a "
|
||||
"button."
|
||||
msgstr ""
|
||||
"Escolha como quer que seja o seu widget e que cores quer que ele tenha. Se "
|
||||
"não marcar nenhuma das opções, o widget será apenas um botão."
|
||||
|
||||
#: includes/admin.php:121
|
||||
msgid "title"
|
||||
msgstr "título"
|
||||
|
||||
#: includes/admin.php:122
|
||||
msgid "This text title will be showed in your form"
|
||||
msgstr "Este título será exibido no seu formulário"
|
||||
|
||||
#: includes/admin.php:127
|
||||
msgid "Request dates"
|
||||
msgstr "Pedir datas"
|
||||
|
||||
#: includes/admin.php:128
|
||||
msgid "show dates request's fields"
|
||||
msgstr "exibir campos de datas"
|
||||
|
||||
#: includes/admin.php:135
|
||||
msgid "Request guest number"
|
||||
msgstr "Pedir número de clientes"
|
||||
|
||||
#: includes/admin.php:136
|
||||
msgid "show guest's numbers field"
|
||||
msgstr "mostrar no campo o número de pessoas"
|
||||
|
||||
#: includes/admin.php:140
|
||||
msgid "Colour settings"
|
||||
msgstr "Configuração de cores"
|
||||
|
||||
#: includes/admin.php:141
|
||||
msgid "Set empty for keep your default style."
|
||||
msgstr "Mantenha a caixa vazia para deixar o seu estilo por defeito."
|
||||
|
||||
#: includes/admin.php:144
|
||||
msgid "Background colour"
|
||||
msgstr "Cor de fundo"
|
||||
|
||||
#: includes/admin.php:153
|
||||
msgid "Main colour"
|
||||
msgstr "Cor principal"
|
||||
|
||||
#: includes/admin.php:162
|
||||
msgid "Text colour"
|
||||
msgstr "Cor do texto"
|
||||
|
||||
#: includes/admin.php:176
|
||||
msgid "Save changes"
|
||||
msgstr "Guardar modificações"
|
||||
|
||||
#: includes/admin.php:181
|
||||
msgid "Options"
|
||||
msgstr "Opções"
|
||||
|
||||
#: includes/admin.php:183
|
||||
msgid "You can use this shortcode"
|
||||
msgstr "Pode usar o seguinte shortcode"
|
||||
|
||||
#: includes/admin.php:185
|
||||
msgid "Only copy this code, and put it where you want in your post or pages."
|
||||
msgstr "Basta copiar o código e colá-lo onde quiser nos seus posts ou páginas."
|
||||
|
||||
#: includes/admin.php:187
|
||||
msgid "Or you can use our widget"
|
||||
msgstr "Ou pode usar o nosso widget"
|
||||
|
||||
#: includes/admin.php:189
|
||||
msgid ""
|
||||
"Go to <a href=\"%s\">widgets section</a> and drag our widget \"avaibook%s\" "
|
||||
"where you want."
|
||||
msgstr ""
|
||||
"Vá até a seção <a href=\"%s\">widget </a> e arraste o nosso widget \"avaibook"
|
||||
"%s\" onde quiser."
|
||||
|
||||
#: includes/front.php:11
|
||||
msgid "Arrive date"
|
||||
msgstr "Data de chegada"
|
||||
|
||||
#: includes/front.php:16
|
||||
msgid "Departure date"
|
||||
msgstr "Data saída"
|
||||
|
||||
#: includes/front.php:24 includes/front.php:25
|
||||
msgid "Guest Num."
|
||||
msgstr "Número de pessoas."
|
||||
|
||||
#: includes/front.php:29
|
||||
msgid "search"
|
||||
msgstr "procurar"
|
||||
@@ -0,0 +1,951 @@
|
||||
# Copyright (C) 2019 Blockchain of Things
|
||||
# This file is distributed under the same license as the Catenis Blocks plugin.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Catenis Blocks 1.0.0\n"
|
||||
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/CatenisBlocksWPPlugin\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"POT-Creation-Date: 2019-09-04T15:44:23-03:00\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"X-Generator: WP-CLI 2.1.0\n"
|
||||
"X-Domain: catenis-blocks\n"
|
||||
|
||||
#. Plugin Name of the plugin
|
||||
msgid "Catenis Blocks"
|
||||
msgstr ""
|
||||
|
||||
#. Description of the plugin
|
||||
msgid "A set of Gutenberg blocks for interfacing with the Bitcoin blockchain via Catenis Enterprise services"
|
||||
msgstr ""
|
||||
|
||||
#. Author of the plugin
|
||||
msgid "Blockchain of Things"
|
||||
msgstr ""
|
||||
|
||||
#. Author URI of the plugin
|
||||
msgid "https://blockchainofthings.com"
|
||||
msgstr ""
|
||||
|
||||
#: src/CatenisBlocks.php:33
|
||||
msgid "Catenis"
|
||||
msgstr ""
|
||||
|
||||
#: js/SaveMessageBlock.js:195
|
||||
msgid "unnamed"
|
||||
msgstr ""
|
||||
|
||||
#: js/StoreMessageBlockEditor.js:12
|
||||
#: js/SendMessageBlockEditor.js:16
|
||||
msgid "Write your message"
|
||||
msgstr ""
|
||||
|
||||
#: js/StoreMessageBlockEditor.js:13
|
||||
#: js/StoreMessageBlockEditor.js:22
|
||||
msgid "Store Message"
|
||||
msgstr ""
|
||||
|
||||
#: js/StoreMessageBlockEditor.js:14
|
||||
msgid ""
|
||||
"Message successfully stored.\n"
|
||||
"Message Id: {!messageId}"
|
||||
msgstr ""
|
||||
|
||||
#: js/StoreMessageBlockEditor.js:23
|
||||
msgid "Store a text message onto the Bitcoin blockchain"
|
||||
msgstr ""
|
||||
|
||||
#: js/StoreMessageBlockEditor.js:211
|
||||
#: js/SendMessageBlockEditor.js:306
|
||||
msgid "Message Box"
|
||||
msgstr ""
|
||||
|
||||
#: js/StoreMessageBlockEditor.js:214
|
||||
#: js/SendMessageBlockEditor.js:309
|
||||
msgid "Number of Lines"
|
||||
msgstr ""
|
||||
|
||||
#: js/StoreMessageBlockEditor.js:222
|
||||
#: js/SaveMessageBlockEditor.js:165
|
||||
#: js/SendFileBlockEditor.js:292
|
||||
#: js/SendMessageBlockEditor.js:317
|
||||
#: js/StoreFileBlockEditor.js:199
|
||||
#: js/DisplayMessageBlockEditor.js:164
|
||||
msgid "Display"
|
||||
msgstr ""
|
||||
|
||||
#: js/StoreMessageBlockEditor.js:226
|
||||
#: js/SaveMessageBlockEditor.js:169
|
||||
#: js/SendFileBlockEditor.js:296
|
||||
#: js/SendMessageBlockEditor.js:321
|
||||
#: js/StoreFileBlockEditor.js:203
|
||||
#: js/DisplayMessageBlockEditor.js:168
|
||||
msgid "Show Spinner"
|
||||
msgstr ""
|
||||
|
||||
#: js/StoreMessageBlockEditor.js:227
|
||||
msgid "Show animated icon while storing message"
|
||||
msgstr ""
|
||||
|
||||
#: js/StoreMessageBlockEditor.js:233
|
||||
#: js/SaveMessageBlockEditor.js:238
|
||||
#: js/MessageInputBlockEditor.js:93
|
||||
#: js/SendFileBlockEditor.js:303
|
||||
#: js/SendMessageBlockEditor.js:328
|
||||
#: js/StoreFileBlockEditor.js:210
|
||||
#: js/DisplayMessageBlockEditor.js:199
|
||||
msgid "Advanced UI Settings"
|
||||
msgstr ""
|
||||
|
||||
#: js/StoreMessageBlockEditor.js:240
|
||||
#: js/SaveMessageBlockEditor.js:206
|
||||
#: js/SendFileBlockEditor.js:310
|
||||
#: js/SendMessageBlockEditor.js:335
|
||||
#: js/StoreFileBlockEditor.js:217
|
||||
#: js/DisplayMessageBlockEditor.js:204
|
||||
msgid "Spinner Color"
|
||||
msgstr ""
|
||||
|
||||
#: js/StoreMessageBlockEditor.js:260
|
||||
#: js/SendMessageBlockEditor.js:365
|
||||
msgid "Message Placeholder"
|
||||
msgstr ""
|
||||
|
||||
#: js/StoreMessageBlockEditor.js:265
|
||||
#: js/MessageInputBlockEditor.js:102
|
||||
#: js/SendFileBlockEditor.js:345
|
||||
#: js/SendMessageBlockEditor.js:370
|
||||
#: js/StoreFileBlockEditor.js:242
|
||||
msgid "Button Label"
|
||||
msgstr ""
|
||||
|
||||
#: js/StoreMessageBlockEditor.js:270
|
||||
#: js/SendFileBlockEditor.js:350
|
||||
#: js/SendMessageBlockEditor.js:375
|
||||
#: js/StoreFileBlockEditor.js:247
|
||||
msgid "Success Message Template"
|
||||
msgstr ""
|
||||
|
||||
#: js/StoreMessageBlockEditor.js:271
|
||||
#: js/SendFileBlockEditor.js:351
|
||||
#: js/SendMessageBlockEditor.js:376
|
||||
#: js/StoreFileBlockEditor.js:248
|
||||
msgid "Use the term {!messageId} as a placeholder for the returned message ID"
|
||||
msgstr ""
|
||||
|
||||
#: js/StoreMessageBlockEditor.js:282
|
||||
#: js/SendFileBlockEditor.js:362
|
||||
#: js/SendMessageBlockEditor.js:387
|
||||
#: js/StoreFileBlockEditor.js:259
|
||||
msgid "Store Options"
|
||||
msgstr ""
|
||||
|
||||
#: js/StoreMessageBlockEditor.js:286
|
||||
#: js/SendFileBlockEditor.js:378
|
||||
#: js/SendMessageBlockEditor.js:397
|
||||
#: js/StoreFileBlockEditor.js:269
|
||||
msgid "Encrypt"
|
||||
msgstr ""
|
||||
|
||||
#: js/StoreMessageBlockEditor.js:287
|
||||
#: js/SendMessageBlockEditor.js:398
|
||||
msgid "Encrypt message before storing it"
|
||||
msgstr ""
|
||||
|
||||
#: js/StoreMessageBlockEditor.js:287
|
||||
#: js/SendMessageBlockEditor.js:398
|
||||
msgid "Store message as it is"
|
||||
msgstr ""
|
||||
|
||||
#: js/StoreMessageBlockEditor.js:292
|
||||
#: js/SendMessageBlockEditor.js:403
|
||||
msgid "Storage"
|
||||
msgstr ""
|
||||
|
||||
#: js/StoreMessageBlockEditor.js:308
|
||||
#: js/SendFileBlockEditor.js:385
|
||||
#: js/SendMessageBlockEditor.js:419
|
||||
#: js/StoreFileBlockEditor.js:276
|
||||
msgid "Result"
|
||||
msgstr ""
|
||||
|
||||
#: js/StoreMessageBlockEditor.js:312
|
||||
#: js/SendFileBlockEditor.js:389
|
||||
#: js/SendMessageBlockEditor.js:423
|
||||
#: js/StoreFileBlockEditor.js:280
|
||||
msgid "Success Panel ID"
|
||||
msgstr ""
|
||||
|
||||
#: js/StoreMessageBlockEditor.js:313
|
||||
#: js/StoreMessageBlockEditor.js:319
|
||||
#: js/SendFileBlockEditor.js:390
|
||||
#: js/SendFileBlockEditor.js:396
|
||||
#: js/SendMessageBlockEditor.js:424
|
||||
#: js/SendMessageBlockEditor.js:430
|
||||
#: js/StoreFileBlockEditor.js:281
|
||||
#: js/StoreFileBlockEditor.js:287
|
||||
msgid "Enter ID of an HTML element on the page"
|
||||
msgstr ""
|
||||
|
||||
#: js/StoreMessageBlockEditor.js:318
|
||||
#: js/SendFileBlockEditor.js:395
|
||||
#: js/SendMessageBlockEditor.js:429
|
||||
#: js/StoreFileBlockEditor.js:286
|
||||
msgid "Error Panel ID"
|
||||
msgstr ""
|
||||
|
||||
#: js/StoreMessageBlockEditor.js:413
|
||||
#: js/PermissionsBlockEditor.js:533
|
||||
#: js/MessageInboxBlockEditor.js:935
|
||||
#: js/SaveMessageBlockEditor.js:314
|
||||
#: js/SendFileBlockEditor.js:534
|
||||
#: js/SendMessageBlockEditor.js:559
|
||||
#: js/StoreFileBlockEditor.js:390
|
||||
#: js/MessageHistoryBlockEditor.js:1082
|
||||
#: js/DisplayMessageBlockEditor.js:281
|
||||
msgid "Catenis API client not loaded on page"
|
||||
msgstr ""
|
||||
|
||||
#: js/PermissionsBlockEditor.js:25
|
||||
msgid "Permissions"
|
||||
msgstr ""
|
||||
|
||||
#: js/PermissionsBlockEditor.js:26
|
||||
msgid "Manage Catenis permissions"
|
||||
msgstr ""
|
||||
|
||||
#: js/PermissionsBlockEditor.js:155
|
||||
msgid "Permission Selection"
|
||||
msgstr ""
|
||||
|
||||
#: js/PermissionsBlockEditor.js:159
|
||||
msgid "Permission Events"
|
||||
msgstr ""
|
||||
|
||||
#: js/PermissionsBlockEditor.js:160
|
||||
msgid "receive-notify-new-msg"
|
||||
msgstr ""
|
||||
|
||||
#: js/PermissionsBlockEditor.js:166
|
||||
msgid "receive-notify-msg-read"
|
||||
msgstr ""
|
||||
|
||||
#: js/PermissionsBlockEditor.js:172
|
||||
msgid "receive-msg"
|
||||
msgstr ""
|
||||
|
||||
#: js/PermissionsBlockEditor.js:178
|
||||
msgid "send-read-msg-confirm"
|
||||
msgstr ""
|
||||
|
||||
#: js/PermissionsBlockEditor.js:184
|
||||
msgid "disclose-main-props"
|
||||
msgstr ""
|
||||
|
||||
#: js/PermissionsBlockEditor.js:190
|
||||
msgid "disclose-identity-info"
|
||||
msgstr ""
|
||||
|
||||
#: js/PermissionsBlockEditor.js:191
|
||||
msgid "Select the permission rights to choose"
|
||||
msgstr ""
|
||||
|
||||
#: js/PermissionsBlockEditor.js:197
|
||||
msgid "Levels"
|
||||
msgstr ""
|
||||
|
||||
#: js/PermissionsBlockEditor.js:198
|
||||
#: js/PermissionsBlockEditor.js:309
|
||||
#: js/PermissionsBlockEditor.js:428
|
||||
msgid "System"
|
||||
msgstr ""
|
||||
|
||||
#: js/PermissionsBlockEditor.js:204
|
||||
#: js/PermissionsBlockEditor.js:318
|
||||
#: js/PermissionsBlockEditor.js:437
|
||||
msgid "Catenis Node"
|
||||
msgstr ""
|
||||
|
||||
#: js/PermissionsBlockEditor.js:210
|
||||
#: js/PermissionsBlockEditor.js:327
|
||||
#: js/PermissionsBlockEditor.js:446
|
||||
msgid "Client"
|
||||
msgstr ""
|
||||
|
||||
#: js/PermissionsBlockEditor.js:216
|
||||
#: js/PermissionsBlockEditor.js:336
|
||||
#: js/PermissionsBlockEditor.js:455
|
||||
msgid "Device"
|
||||
msgstr ""
|
||||
|
||||
#: js/PermissionsBlockEditor.js:217
|
||||
msgid "Select the levels to choose"
|
||||
msgstr ""
|
||||
|
||||
#: js/PermissionsBlockEditor.js:242
|
||||
#: js/PermissionsBlockEditor.js:379
|
||||
msgid "Receive notification of new message from a device"
|
||||
msgstr ""
|
||||
|
||||
#: js/PermissionsBlockEditor.js:251
|
||||
#: js/PermissionsBlockEditor.js:388
|
||||
msgid "Receive notification of message read by a device"
|
||||
msgstr ""
|
||||
|
||||
#: js/PermissionsBlockEditor.js:260
|
||||
#: js/PermissionsBlockEditor.js:397
|
||||
msgid "Receive message from a device"
|
||||
msgstr ""
|
||||
|
||||
#: js/PermissionsBlockEditor.js:269
|
||||
#: js/PermissionsBlockEditor.js:406
|
||||
msgid "Send read message confirmation to a device"
|
||||
msgstr ""
|
||||
|
||||
#: js/PermissionsBlockEditor.js:278
|
||||
msgid "Disclose device's main properties (name, product unique ID) to a device"
|
||||
msgstr ""
|
||||
|
||||
#: js/PermissionsBlockEditor.js:287
|
||||
msgid "Disclose device's basic identification information to a device"
|
||||
msgstr ""
|
||||
|
||||
#: js/PermissionsBlockEditor.js:496
|
||||
#: js/PermissionsBlock.js:616
|
||||
msgid "allow"
|
||||
msgstr ""
|
||||
|
||||
#: js/PermissionsBlockEditor.js:499
|
||||
#: js/PermissionsBlock.js:617
|
||||
msgid "deny"
|
||||
msgstr ""
|
||||
|
||||
#: js/PermissionsBlockEditor.js:502
|
||||
#: js/PermissionsBlock.js:618
|
||||
msgid "none"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:26
|
||||
msgid "Message Inbox"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:27
|
||||
msgid "Display list with latest received messages"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:347
|
||||
#: js/MessageHistoryBlockEditor.js:374
|
||||
msgid "Message Filtering"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:350
|
||||
#: js/MessageHistoryBlockEditor.js:392
|
||||
msgid "Unread Only"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:351
|
||||
#: js/MessageHistoryBlockEditor.js:393
|
||||
msgid "List only unread messages"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:351
|
||||
#: js/MessageHistoryBlockEditor.js:393
|
||||
msgid "List all messages"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:356
|
||||
#: js/MessageHistoryBlockEditor.js:398
|
||||
msgid "Period"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:359
|
||||
#: js/MessageHistoryBlockEditor.js:401
|
||||
msgid "Today"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:362
|
||||
#: js/MessageHistoryBlockEditor.js:404
|
||||
msgid "Last 7 days"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:365
|
||||
#: js/MessageHistoryBlockEditor.js:407
|
||||
msgid "Last 30 days"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:368
|
||||
#: js/MessageHistoryBlockEditor.js:410
|
||||
msgid "Current month"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:371
|
||||
#: js/MessageHistoryBlockEditor.js:413
|
||||
msgid "Last 3 months"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:374
|
||||
#: js/MessageHistoryBlockEditor.js:416
|
||||
msgid "Last 6 months"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:377
|
||||
#: js/MessageHistoryBlockEditor.js:419
|
||||
msgid "Custom"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:387
|
||||
#: js/MessageInboxBlockEditor.js:411
|
||||
#: js/MessageHistoryBlockEditor.js:429
|
||||
#: js/MessageHistoryBlockEditor.js:453
|
||||
msgid "Start Date"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:430
|
||||
#: js/MessageHistoryBlockEditor.js:512
|
||||
msgid "Message List"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:434
|
||||
#: js/MessageHistoryBlockEditor.js:516
|
||||
msgid "Messages Per Page"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:439
|
||||
#: js/MessageHistoryBlockEditor.js:521
|
||||
msgid "Columns"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:440
|
||||
#: js/MessageInboxBlockEditor.js:552
|
||||
#: js/MessageInboxBlockEditor.js:804
|
||||
#: js/SaveMessageBlockEditor.js:176
|
||||
#: js/MessageHistoryBlockEditor.js:522
|
||||
#: js/MessageHistoryBlockEditor.js:640
|
||||
#: js/MessageHistoryBlockEditor.js:923
|
||||
msgid "Action"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:446
|
||||
#: js/MessageInboxBlockEditor.js:583
|
||||
#: js/MessageInboxBlockEditor.js:830
|
||||
#: js/SaveMessageBlockEditor.js:158
|
||||
#: js/MessageInputBlockEditor.js:8
|
||||
#: js/MessageHistoryBlockEditor.js:528
|
||||
#: js/MessageHistoryBlockEditor.js:671
|
||||
#: js/MessageHistoryBlockEditor.js:949
|
||||
#: js/DisplayMessageBlockEditor.js:157
|
||||
msgid "Message ID"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:452
|
||||
#: js/MessageInboxBlockEditor.js:616
|
||||
#: js/MessageInboxBlockEditor.js:858
|
||||
#: js/MessageHistoryBlockEditor.js:540
|
||||
#: js/MessageHistoryBlockEditor.js:737
|
||||
#: js/MessageHistoryBlockEditor.js:1005
|
||||
msgid "Date"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:458
|
||||
#: js/MessageInboxBlockEditor.js:649
|
||||
#: js/MessageInboxBlockEditor.js:886
|
||||
msgid "From"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:464
|
||||
#: js/MessageInboxBlockEditor.js:682
|
||||
#: js/MessageInboxBlockEditor.js:914
|
||||
#: js/MessageHistoryBlockEditor.js:552
|
||||
#: js/MessageHistoryBlockEditor.js:803
|
||||
#: js/MessageHistoryBlockEditor.js:1061
|
||||
msgid "Read"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:465
|
||||
#: js/MessageHistoryBlockEditor.js:553
|
||||
msgid "Select the columns to be displayed"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:472
|
||||
#: js/MessageHistoryBlockEditor.js:560
|
||||
msgid "Action Links"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:494
|
||||
msgid "Origin Device ID ('From' Column)"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:495
|
||||
#: js/MessageHistoryBlockEditor.js:583
|
||||
msgid "Always show device ID"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:495
|
||||
#: js/MessageHistoryBlockEditor.js:583
|
||||
msgid "Show product unique ID instead if present"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:516
|
||||
#: js/MessageHistoryBlockEditor.js:604
|
||||
msgid "Display HTML Anchor"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:517
|
||||
#: js/MessageHistoryBlockEditor.js:605
|
||||
msgid "Reference to block used to display the message contents"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:526
|
||||
#: js/MessageHistoryBlockEditor.js:614
|
||||
msgid "Save HTML Anchor"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:527
|
||||
#: js/MessageHistoryBlockEditor.js:615
|
||||
msgid "Reference to block used to save the message contents"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:534
|
||||
#: js/MessageHistoryBlockEditor.js:622
|
||||
msgid "Action Target"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:581
|
||||
#: js/MessageInboxBlockEditor.js:614
|
||||
#: js/MessageInboxBlockEditor.js:647
|
||||
#: js/MessageInboxBlockEditor.js:680
|
||||
#: js/MessageInboxBlockEditor.js:829
|
||||
#: js/MessageInboxBlockEditor.js:857
|
||||
#: js/MessageInboxBlockEditor.js:885
|
||||
#: js/MessageInboxBlockEditor.js:913
|
||||
#: js/MessageHistoryBlockEditor.js:669
|
||||
#: js/MessageHistoryBlockEditor.js:702
|
||||
#: js/MessageHistoryBlockEditor.js:735
|
||||
#: js/MessageHistoryBlockEditor.js:768
|
||||
#: js/MessageHistoryBlockEditor.js:801
|
||||
#: js/MessageHistoryBlockEditor.js:948
|
||||
#: js/MessageHistoryBlockEditor.js:976
|
||||
#: js/MessageHistoryBlockEditor.js:1004
|
||||
#: js/MessageHistoryBlockEditor.js:1032
|
||||
#: js/MessageHistoryBlockEditor.js:1060
|
||||
msgid "Sort by"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:734
|
||||
#: js/MessageHistoryBlockEditor.js:856
|
||||
msgid "Reload"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:742
|
||||
msgid "New Message"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:746
|
||||
#: js/MessageHistoryBlockEditor.js:865
|
||||
msgid "First page"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:754
|
||||
#: js/MessageHistoryBlockEditor.js:873
|
||||
msgid "Previous page"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:775
|
||||
#: js/MessageHistoryBlockEditor.js:894
|
||||
msgid "Next page"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInboxBlockEditor.js:783
|
||||
#: js/MessageHistoryBlockEditor.js:902
|
||||
msgid "Last page"
|
||||
msgstr ""
|
||||
|
||||
#: js/SaveMessageBlockEditor.js:11
|
||||
msgid "Save retrieved message"
|
||||
msgstr ""
|
||||
|
||||
#: js/SaveMessageBlockEditor.js:18
|
||||
msgid "Save Message"
|
||||
msgstr ""
|
||||
|
||||
#: js/SaveMessageBlockEditor.js:19
|
||||
msgid "Save message retrieved from the Bitcoin blockchain as a file"
|
||||
msgstr ""
|
||||
|
||||
#: js/SaveMessageBlockEditor.js:155
|
||||
#: js/DisplayMessageBlockEditor.js:154
|
||||
msgid "Message"
|
||||
msgstr ""
|
||||
|
||||
#: js/SaveMessageBlockEditor.js:159
|
||||
#: js/DisplayMessageBlockEditor.js:158
|
||||
msgid "ID of message to be retrieved"
|
||||
msgstr ""
|
||||
|
||||
#: js/SaveMessageBlockEditor.js:170
|
||||
#: js/DisplayMessageBlockEditor.js:169
|
||||
msgid "Show animated icon while loading message"
|
||||
msgstr ""
|
||||
|
||||
#: js/SaveMessageBlockEditor.js:180
|
||||
msgid "Auto Save"
|
||||
msgstr ""
|
||||
|
||||
#: js/SaveMessageBlockEditor.js:181
|
||||
msgid "Automatically save message after it is retrieved"
|
||||
msgstr ""
|
||||
|
||||
#: js/SaveMessageBlockEditor.js:181
|
||||
msgid "Show link to save retrieved message"
|
||||
msgstr ""
|
||||
|
||||
#: js/SaveMessageBlockEditor.js:194
|
||||
msgid "Save Message Link"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInputBlockEditor.js:9
|
||||
msgid "Submit"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInputBlockEditor.js:12
|
||||
msgid "Message Input"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInputBlockEditor.js:13
|
||||
msgid "Enter ID of message for display/saving"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInputBlockEditor.js:83
|
||||
msgid "Target"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInputBlockEditor.js:86
|
||||
msgid "HTML Anchor"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInputBlockEditor.js:87
|
||||
msgid "Reference to block used to display/save the message contents"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageInputBlockEditor.js:97
|
||||
msgid "Message ID Placeholder"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendFileBlockEditor.js:11
|
||||
#: js/SendMessageBlockEditor.js:14
|
||||
msgid "Target device ID"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendFileBlockEditor.js:12
|
||||
#: js/SendMessageBlockEditor.js:15
|
||||
msgid "Target device prod unique ID"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendFileBlockEditor.js:13
|
||||
#: js/StoreFileBlockEditor.js:11
|
||||
msgid "Drop a file or click to select"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendFileBlockEditor.js:14
|
||||
#: js/SendFileBlockEditor.js:24
|
||||
msgid "Send File"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendFileBlockEditor.js:15
|
||||
msgid ""
|
||||
"File successfully sent.\n"
|
||||
"Message Id: {!messageId}"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendFileBlockEditor.js:25
|
||||
msgid "Store a file onto the Bitcoin blockchain addressing it to another Catenis virtual device"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendFileBlockEditor.js:264
|
||||
#: js/SendMessageBlockEditor.js:278
|
||||
msgid "Target Device"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendFileBlockEditor.js:267
|
||||
#: js/SendMessageBlockEditor.js:281
|
||||
msgid "Dynamic Target Device"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendFileBlockEditor.js:268
|
||||
#: js/SendMessageBlockEditor.js:282
|
||||
msgid "Select a different target device for each message"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendFileBlockEditor.js:268
|
||||
#: js/SendMessageBlockEditor.js:282
|
||||
msgid "Use a single predefined target device"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendFileBlockEditor.js:273
|
||||
#: js/SendMessageBlockEditor.js:287
|
||||
msgid "Use Product Unique ID"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendFileBlockEditor.js:274
|
||||
#: js/SendMessageBlockEditor.js:288
|
||||
msgid "Enter product unique ID for target device"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendFileBlockEditor.js:274
|
||||
#: js/SendMessageBlockEditor.js:288
|
||||
msgid "Enter Catenis device ID for target device"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendFileBlockEditor.js:282
|
||||
#: js/SendMessageBlockEditor.js:296
|
||||
msgid "Target Device Product Unique ID"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendFileBlockEditor.js:282
|
||||
#: js/SendMessageBlockEditor.js:296
|
||||
msgid "Target Device ID"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendFileBlockEditor.js:283
|
||||
#: js/SendMessageBlockEditor.js:297
|
||||
msgid "ID of Catenis virtual device to which the message is sent"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendFileBlockEditor.js:297
|
||||
msgid "Show animated icon while sending file"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendFileBlockEditor.js:330
|
||||
#: js/SendMessageBlockEditor.js:355
|
||||
msgid "Target Device ID Placeholder"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendFileBlockEditor.js:335
|
||||
#: js/SendMessageBlockEditor.js:360
|
||||
msgid "Target Device Prod Unique ID Placeholder"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendFileBlockEditor.js:340
|
||||
#: js/StoreFileBlockEditor.js:237
|
||||
msgid "File Drop Box Message"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendFileBlockEditor.js:366
|
||||
#: js/StoreFileBlockEditor.js:263
|
||||
msgid "File Header"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendFileBlockEditor.js:367
|
||||
#: js/StoreFileBlockEditor.js:264
|
||||
msgid "Add header describing file properties"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendFileBlockEditor.js:367
|
||||
#: js/StoreFileBlockEditor.js:264
|
||||
msgid "Only the original file contents are stored"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendFileBlockEditor.js:372
|
||||
#: js/SendMessageBlockEditor.js:391
|
||||
msgid "Read Confirmation"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendFileBlockEditor.js:373
|
||||
msgid "Send file with read confirmation"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendFileBlockEditor.js:373
|
||||
#: js/SendMessageBlockEditor.js:392
|
||||
msgid "No read confirmation requested"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendFileBlockEditor.js:379
|
||||
#: js/StoreFileBlockEditor.js:270
|
||||
msgid "Encrypt file contents before storing them"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendFileBlockEditor.js:379
|
||||
#: js/StoreFileBlockEditor.js:270
|
||||
msgid "Store file contents as they are"
|
||||
msgstr ""
|
||||
|
||||
#: js/StoreMessageBlock.js:164
|
||||
msgid "No message to be stored"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageHistoryBlock.js:512
|
||||
#: js/MessageInboxBlock.js:519
|
||||
msgid "No messages"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageHistoryBlock.js:908
|
||||
#: js/MessageInboxBlock.js:908
|
||||
msgid "true"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageHistoryBlock.js:908
|
||||
#: js/MessageInboxBlock.js:908
|
||||
msgid "false"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendFileBlock.js:312
|
||||
msgid "No file selected to be sent"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendFileBlock.js:321
|
||||
#: js/SendMessageBlock.js:174
|
||||
msgid "No target device product unique ID"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendFileBlock.js:321
|
||||
#: js/SendMessageBlock.js:174
|
||||
msgid "No target device ID"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendFileBlock.js:427
|
||||
msgid "Empty file; nothing to send"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendFileBlock.js:444
|
||||
#: js/StoreFileBlock.js:431
|
||||
msgid "Error reading file: "
|
||||
msgstr ""
|
||||
|
||||
#: js/SendFileBlock.js:449
|
||||
#: js/StoreFileBlock.js:436
|
||||
msgid "Reading of file has been aborted"
|
||||
msgstr ""
|
||||
|
||||
#: js/StoreFileBlock.js:311
|
||||
msgid "No file selected to be stored"
|
||||
msgstr ""
|
||||
|
||||
#: js/StoreFileBlock.js:414
|
||||
msgid "Empty file; nothing to store"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendMessageBlockEditor.js:17
|
||||
#: js/SendMessageBlockEditor.js:27
|
||||
msgid "Send Message"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendMessageBlockEditor.js:18
|
||||
msgid ""
|
||||
"Message successfully sent.\n"
|
||||
"Message Id: {!messageId}"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendMessageBlockEditor.js:28
|
||||
msgid "Store a text message onto the Bitcoin blockchain addressing it to another Catenis virtual device"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendMessageBlockEditor.js:322
|
||||
msgid "Show animated icon while sending message"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendMessageBlockEditor.js:392
|
||||
msgid "Send message with read confirmation"
|
||||
msgstr ""
|
||||
|
||||
#: js/StoreFileBlockEditor.js:12
|
||||
#: js/StoreFileBlockEditor.js:21
|
||||
msgid "Store File"
|
||||
msgstr ""
|
||||
|
||||
#: js/StoreFileBlockEditor.js:13
|
||||
msgid ""
|
||||
"File successfully stored.\n"
|
||||
"Message Id: {!messageId}"
|
||||
msgstr ""
|
||||
|
||||
#: js/StoreFileBlockEditor.js:22
|
||||
msgid "Store a file onto the Bitcoin blockchain"
|
||||
msgstr ""
|
||||
|
||||
#: js/StoreFileBlockEditor.js:204
|
||||
msgid "Show animated icon while storing file"
|
||||
msgstr ""
|
||||
|
||||
#: js/SendMessageBlock.js:165
|
||||
msgid "No message to be sent"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageHistoryBlockEditor.js:28
|
||||
msgid "Message History"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageHistoryBlockEditor.js:29
|
||||
msgid "Display list with latest stored/sent messages"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageHistoryBlockEditor.js:377
|
||||
msgid "Message Type"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageHistoryBlockEditor.js:466
|
||||
#: js/MessageHistoryBlockEditor.js:490
|
||||
msgid "End Date"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageHistoryBlockEditor.js:534
|
||||
#: js/MessageHistoryBlockEditor.js:704
|
||||
#: js/MessageHistoryBlockEditor.js:977
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageHistoryBlockEditor.js:546
|
||||
#: js/MessageHistoryBlockEditor.js:770
|
||||
#: js/MessageHistoryBlockEditor.js:1033
|
||||
msgid "To"
|
||||
msgstr ""
|
||||
|
||||
#: js/MessageHistoryBlockEditor.js:582
|
||||
msgid "Target Device ID ('To' Column)"
|
||||
msgstr ""
|
||||
|
||||
#: js/DisplayMessageBlockEditor.js:19
|
||||
msgid "Display Message"
|
||||
msgstr ""
|
||||
|
||||
#: js/DisplayMessageBlockEditor.js:20
|
||||
msgid "Display a text message retrieved from the Bitcoin blockchain"
|
||||
msgstr ""
|
||||
|
||||
#: js/DisplayMessageBlockEditor.js:174
|
||||
msgid "Strip File Header"
|
||||
msgstr ""
|
||||
|
||||
#: js/DisplayMessageBlockEditor.js:175
|
||||
msgid "Do not display file header if present"
|
||||
msgstr ""
|
||||
|
||||
#: js/DisplayMessageBlockEditor.js:175
|
||||
msgid "Display message as it is"
|
||||
msgstr ""
|
||||
|
||||
#: js/DisplayMessageBlockEditor.js:180
|
||||
msgid "Limit Message"
|
||||
msgstr ""
|
||||
|
||||
#: js/DisplayMessageBlockEditor.js:181
|
||||
msgid "Truncate message if it is too large"
|
||||
msgstr ""
|
||||
|
||||
#: js/DisplayMessageBlockEditor.js:181
|
||||
msgid "Always display the whole message"
|
||||
msgstr ""
|
||||
|
||||
#: js/DisplayMessageBlockEditor.js:188
|
||||
msgid "Max Message Length"
|
||||
msgstr ""
|
||||
|
||||
#: js/DisplayMessageBlockEditor.js:189
|
||||
msgid "Maximum number of characters that can be displayed"
|
||||
msgstr ""
|
||||
|
||||
#: js/DisplayMessageBlockEditor.js:237
|
||||
msgid "Sample retrieved message"
|
||||
msgstr ""
|
||||
@@ -0,0 +1,139 @@
|
||||
# Copyright (C) 2019 Contact Form 7 - mountstride CRM - Integration
|
||||
# This file is distributed under the same license as the Contact Form 7 - mountstride CRM - Integration package.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Contact Form 7 - mountstride CRM - Integration 1.0.0\n"
|
||||
"Report-Msgid-Bugs-To: http://wordpress.org/support/plugin/cf7-to-"
|
||||
"mountstride\n"
|
||||
"POT-Creation-Date: 2019-08-01 10:04:10+00:00\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"PO-Revision-Date: 2019-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
||||
#: admin/partials/cf7-form-fields-template.php:40
|
||||
#: admin/partials/cf7-form-fields-template.php:73
|
||||
#: admin/partials/mappings.php:236 admin/partials/mappings.php:263
|
||||
#: admin/partials/mappings.php:287 admin/partials/mappings.php:325
|
||||
#: admin/partials/mappings.php:358 admin/partials/mappings.php:418
|
||||
#: admin/partials/mappings.php:474
|
||||
msgid "N/A"
|
||||
msgstr ""
|
||||
|
||||
#: admin/partials/cf7-form-fields-template.php:91
|
||||
#: admin/partials/cf7-form-fields-template.php:120
|
||||
#: admin/partials/mappings.php:341 admin/partials/mappings.php:370
|
||||
#: admin/partials/mappings.php:448 admin/partials/mappings.php:491
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#: admin/partials/mappings.php:30 admin/partials/settings.php:29
|
||||
msgid "Please activate Contact Form plugin first."
|
||||
msgstr ""
|
||||
|
||||
#: admin/partials/mappings.php:36 admin/partials/settings.php:35
|
||||
msgid "Please update latest version for Contact Form plugin first."
|
||||
msgstr ""
|
||||
|
||||
#: admin/partials/mappings.php:148
|
||||
msgid "CF7 to mountstride CRM Fields Mapping"
|
||||
msgstr ""
|
||||
|
||||
#: admin/partials/mappings.php:149
|
||||
msgid ""
|
||||
"Map the required mountstride CRM API fields to your current Contact Form 7 "
|
||||
"fields"
|
||||
msgstr ""
|
||||
|
||||
#: admin/partials/mappings.php:184
|
||||
msgid "Enable this form data submitting to mountstride CRM"
|
||||
msgstr ""
|
||||
|
||||
#: admin/partials/mappings.php:188 admin/partials/mappings.php:193
|
||||
msgid "mountstride CRM General Fields"
|
||||
msgstr ""
|
||||
|
||||
#: admin/partials/mappings.php:194
|
||||
msgid "CF7 Fields"
|
||||
msgstr ""
|
||||
|
||||
#: admin/partials/mappings.php:195 admin/partials/mappings.php:391
|
||||
msgid "Action"
|
||||
msgstr ""
|
||||
|
||||
#: admin/partials/mappings.php:376
|
||||
msgid "Add New Field"
|
||||
msgstr ""
|
||||
|
||||
#: admin/partials/mappings.php:383
|
||||
msgid "mountstride CRM Master Data Fields"
|
||||
msgstr ""
|
||||
|
||||
#: admin/partials/mappings.php:389
|
||||
msgid "Extra Field Name"
|
||||
msgstr ""
|
||||
|
||||
#: admin/partials/mappings.php:390
|
||||
msgid "Value"
|
||||
msgstr ""
|
||||
|
||||
#: admin/partials/mappings.php:498
|
||||
msgid "Add New Master Data Field"
|
||||
msgstr ""
|
||||
|
||||
#: admin/partials/mappings.php:503
|
||||
msgid "Save"
|
||||
msgstr ""
|
||||
|
||||
#: admin/partials/settings.php:211
|
||||
msgid "CF7 to mountstride CRM API Settings"
|
||||
msgstr ""
|
||||
|
||||
#: admin/partials/settings.php:236
|
||||
msgid "Enable mountstride CRM API"
|
||||
msgstr ""
|
||||
|
||||
#: admin/partials/settings.php:242
|
||||
msgid "API Endpoint*"
|
||||
msgstr ""
|
||||
|
||||
#: admin/partials/settings.php:248
|
||||
msgid "Authorization Key*"
|
||||
msgstr ""
|
||||
|
||||
#: admin/partials/settings.php:254
|
||||
msgid "Token Key*"
|
||||
msgstr ""
|
||||
|
||||
#: admin/partials/settings.php:260
|
||||
msgid "Enable Log"
|
||||
msgstr ""
|
||||
|
||||
#: admin/partials/settings.php:263
|
||||
msgid "View debug log"
|
||||
msgstr ""
|
||||
|
||||
#. Plugin Name of the plugin/theme
|
||||
msgid "Contact Form 7 - mountstride CRM - Integration"
|
||||
msgstr ""
|
||||
|
||||
#. #-#-#-#-# cf7-to-mountstride.pot (Contact Form 7 - mountstride CRM - Integration 1.0.0) #-#-#-#-#
|
||||
#. Plugin URI of the plugin/theme
|
||||
#. #-#-#-#-# cf7-to-mountstride.pot (Contact Form 7 - mountstride CRM - Integration 1.0.0) #-#-#-#-#
|
||||
#. Author URI of the plugin/theme
|
||||
msgid "https://profiles.wordpress.org/vsourz1td/"
|
||||
msgstr ""
|
||||
|
||||
#. Description of the plugin/theme
|
||||
msgid ""
|
||||
"Contact Form 7 mountstride CRM for WordPress is the optimum way to manage "
|
||||
"leads in easiest way. It’s a plug & play tool which allows you to capture "
|
||||
"and store customer’s data by integrating the Contact Form and our plugin. No "
|
||||
"hand-written customization code required."
|
||||
msgstr ""
|
||||
|
||||
#. Author of the plugin/theme
|
||||
msgid "Vsourz Digital"
|
||||
msgstr ""
|
||||
@@ -1011,4 +1011,11 @@ If above timestamp is not current time, this page is cached.</p> -->
|
||||
<!-- HubSpot WordPress Plugin v7.5.4: embed JS disabled as a portalId has not yet been configured -->
|
||||
|
||||
|
||||
<!-- reachdrip-web-push-notifications -->
|
||||
<!-- Push Notifications for this site is powered by ReachDrip. Push Notifications for Chrome, Safari, FireFox, Opera. - Plugin version 2.0.1 - https://reachdrip.com/ -->
|
||||
|
||||
|
||||
<!-- scrolltotop -->
|
||||
<!-- Do you want the same scroll up bar on your WordPress blog? This site uses free scrollToTop plugin v1.1 - https://wordpress.org/plugins/scrolltotop/ -->
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,468 @@
|
||||
# Copyright (C) 2019 Anssi Laitila
|
||||
# This file is distributed under the same license as the Contact List plugin.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Contact List 2.3.5\n"
|
||||
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/trunk\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"POT-Creation-Date: 2019-09-22T22:50:46+03:00\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"X-Generator: WP-CLI 2.1.0\n"
|
||||
"X-Domain: contact-list\n"
|
||||
|
||||
#. Plugin Name of the plugin
|
||||
#: admin/class-contact-list-admin.php:71
|
||||
msgid "Contact List"
|
||||
msgstr ""
|
||||
|
||||
#. Description of the plugin
|
||||
msgid "Easily display contact information on your site with this simple plugin."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-contact-list-custom-fields.php:172
|
||||
msgid "Contact Details"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:72
|
||||
msgid "Contact"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:73
|
||||
msgid "Add New Contact"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:74
|
||||
msgid "Edit Contact"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:75
|
||||
#: partials/list-all-contacts.php:106
|
||||
#: partials/list-contacts.php:95
|
||||
#: public/shortcode_contact_list_groups.php:12
|
||||
#: public/class-contact-list-public.php:342
|
||||
msgid "No contacts found."
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:76
|
||||
msgid "All Contacts"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:97
|
||||
msgid "ID"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:98
|
||||
#: admin/class-settings-page.php:92
|
||||
#: admin/class-settings-page.php:96
|
||||
#: admin/class-settings-page.php:301
|
||||
#: public/shortcode_contact_list_form.php:59
|
||||
msgid "First name"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:99
|
||||
#: admin/class-settings-page.php:101
|
||||
#: admin/class-settings-page.php:105
|
||||
#: admin/class-settings-page.php:300
|
||||
#: public/shortcode_contact_list_form.php:63
|
||||
msgid "Last name"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:100
|
||||
#: admin/class-settings-page.php:110
|
||||
#: admin/class-settings-page.php:114
|
||||
#: public/shortcode_contact_list_form.php:68
|
||||
msgid "Job title"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:101
|
||||
#: admin/class-settings-page.php:119
|
||||
#: admin/class-settings-page.php:123
|
||||
msgid "Email"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:102
|
||||
#: admin/class-settings-page.php:128
|
||||
#: admin/class-settings-page.php:132
|
||||
#: public/shortcode_contact_list_form.php:76
|
||||
msgid "Phone"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:103
|
||||
#: admin/class-settings-page.php:137
|
||||
#: admin/class-settings-page.php:141
|
||||
#: public/shortcode_contact_list_form.php:80
|
||||
msgid "LinkedIn URL"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:104
|
||||
#: admin/class-settings-page.php:146
|
||||
#: admin/class-settings-page.php:150
|
||||
#: public/shortcode_contact_list_form.php:84
|
||||
msgid "Twitter URL"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:105
|
||||
#: admin/class-settings-page.php:155
|
||||
#: admin/class-settings-page.php:159
|
||||
#: public/shortcode_contact_list_form.php:88
|
||||
msgid "Facebook URL"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:183
|
||||
#: admin/class-contact-list-admin.php:342
|
||||
msgid "Send email to contacts"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:184
|
||||
msgid "Send email"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:199
|
||||
#: admin/class-contact-list-admin.php:442
|
||||
msgid "How to use the Contact List plugin"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:200
|
||||
msgid "Help / Support"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:210
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:216
|
||||
#: admin/class-contact-list-admin.php:217
|
||||
msgid "Group"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:218
|
||||
msgid "Search Groups"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:219
|
||||
msgid "All Groups"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:220
|
||||
msgid "Parent Group"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:221
|
||||
msgid "Parent Group:"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:222
|
||||
msgid "Edit Group"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:223
|
||||
msgid "Update Group"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:224
|
||||
msgid "Add New Group"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:225
|
||||
msgid "Groups"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:226
|
||||
msgid "No groups found."
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:345
|
||||
msgid "The emails are sent by the plugin developers own server and using <a href=\"https://www.mailgun.com\" target=\"_blank\">Mailgun</a>. The server is a DigitalOcean Droplet hosted in the EU. This method was chosen to ensure reliable mail delivery."
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:349
|
||||
msgid "Subject"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:354
|
||||
msgid "Message"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:358
|
||||
msgid "Recipients"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:358
|
||||
msgid "total of"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:358
|
||||
msgid "contacts with email addresses"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:362
|
||||
msgid "Send"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:443
|
||||
msgid "Only contacts, no groups"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:446
|
||||
msgid "Add the contacts via the All Contacts page."
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:447
|
||||
msgid "Insert the shortcode [contact_list] to the content editor of any page you wish the contact list to appear."
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:450
|
||||
msgid "Contacts with groups"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:452
|
||||
msgid "Add the groups via the Groups page. There may be groups under groups (hierarchial groups, 2 or more levels)."
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:453
|
||||
msgid "Add the contacts via the All Contacts page. You may select the appropriate group(s) at this point."
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:454
|
||||
msgid "Insert the shortcode [contact_list_groups] to the content editor of any page you wish the group list to appear. When a user selects a group, then a list of contacts belonging to that group is displayed. Also, if there are subgroups under that group, those will be displayed."
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:457
|
||||
msgid "Contacts from specific group"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:459
|
||||
msgid "Insert the shortcode [contact_list_groups group=GROUP_SLUG] to the content editor of any page you wish the contact list to appear. Replace GROUP_SLUG with the appropriate slug that can be found from group management."
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:462
|
||||
msgid "Single contact"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:464
|
||||
msgid "Insert the shortcode [contact_list contact=CONTACT_ID] to the content editor of any page you wish the contact to appear. Replace CONTACT_ID with the appropriate id that can be found from contact management. There's a column \"ID\" in the All Contacts -page, which contains the numeric value."
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:467
|
||||
msgid "Allow visitors to add new contacts"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:469
|
||||
msgid "Insert the shortcode [contact_list_form] to the page you wish the form to appear on."
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:470
|
||||
msgid "When a user submits the form, a new contact is saved to the contacts. The status of that contact is \"Pending Review\" and a site administrator must publish/edit/delete the contact."
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:475
|
||||
msgid "Send feedback"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:476
|
||||
msgid "Any feedback is welcome. You may contact the author at"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:476
|
||||
msgid "or e-mail directly:"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:478
|
||||
msgid "Give a rating for the plugin"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:479
|
||||
msgid "Whether it's 1 star or 5 stars, I'm grateful for your rating. You may rate the plugin"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:479
|
||||
msgid "here"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:481
|
||||
msgid "Send direct feedback to the author"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:482
|
||||
msgid "Fill out the form below to send feedback or questions to the author. Only the information provided below is sent. Thanks!"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-contact-list-admin.php:494
|
||||
msgid "Donate to this plugin"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-settings-page.php:15
|
||||
msgid "General settings"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-settings-page.php:22
|
||||
msgid "Send an email notify when a contact is added via the public form"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-settings-page.php:31
|
||||
msgid "Notification recipient email"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-settings-page.php:40
|
||||
msgid "Display group checkboxes on public form"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-settings-page.php:49
|
||||
msgid "Sort contact list by"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-settings-page.php:58
|
||||
msgid "Change default titles and texts"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-settings-page.php:65
|
||||
#: admin/class-settings-page.php:69
|
||||
#: public/class-contact-list-public.php:209
|
||||
msgid "Search contacts..."
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-settings-page.php:74
|
||||
#: admin/class-settings-page.php:78
|
||||
#: public/shortcode_contact_list_groups.php:10
|
||||
msgid "Search all contacts..."
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-settings-page.php:83
|
||||
msgid "\"Back\"-link title"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-settings-page.php:87
|
||||
#: public/shortcode_contact_list_groups.php:74
|
||||
msgid "Back"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-settings-page.php:164
|
||||
#: admin/class-settings-page.php:168
|
||||
#: admin/class-settings-page.php:173
|
||||
#: partials/list-all-contacts.php:54
|
||||
#: partials/list-contacts.php:43
|
||||
#: public/shortcode_contact_list_form.php:92
|
||||
#: public/class-contact-list-public.php:151
|
||||
#: public/class-contact-list-public.php:290
|
||||
msgid "Address"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-settings-page.php:173
|
||||
#: admin/class-settings-page.php:227
|
||||
msgid "Hide"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-settings-page.php:173
|
||||
#: admin/class-settings-page.php:227
|
||||
msgid "-title"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-settings-page.php:182
|
||||
#: admin/class-settings-page.php:186
|
||||
#: public/shortcode_contact_list_form.php:95
|
||||
msgid "Address line 1"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-settings-page.php:191
|
||||
#: admin/class-settings-page.php:195
|
||||
#: public/shortcode_contact_list_form.php:99
|
||||
msgid "Address line 2"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-settings-page.php:200
|
||||
#: admin/class-settings-page.php:204
|
||||
#: public/shortcode_contact_list_form.php:103
|
||||
msgid "Address line 3"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-settings-page.php:209
|
||||
#: admin/class-settings-page.php:213
|
||||
#: public/shortcode_contact_list_form.php:107
|
||||
msgid "Address line 4"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-settings-page.php:218
|
||||
#: admin/class-settings-page.php:222
|
||||
#: admin/class-settings-page.php:227
|
||||
#: admin/class-settings-page.php:257
|
||||
#: partials/list-all-contacts.php:74
|
||||
#: partials/list-contacts.php:63
|
||||
#: public/shortcode_contact_list_form.php:142
|
||||
#: public/class-contact-list-public.php:166
|
||||
#: public/class-contact-list-public.php:310
|
||||
msgid "Additional information"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-settings-page.php:236
|
||||
msgid "Thank you page / title"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-settings-page.php:240
|
||||
#: public/shortcode_contact_list_form.php:41
|
||||
msgid "Thank you"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-settings-page.php:245
|
||||
msgid "Thank you page / content"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-settings-page.php:249
|
||||
#: public/shortcode_contact_list_form.php:42
|
||||
msgid "The form was successfully processed and the contents will be reviewed by site administrator before publishing."
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-settings-page.php:281
|
||||
msgid "By activating this you agree that the email sending is handled by the plugin developers own server and using <a href=\"https://www.mailgun.com\" target=\"_blank\">Mailgun</a>. The server is a DigitalOcean Droplet hosted in the EU. This method was chosen to ensure reliable mail delivery."
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-settings-page.php:309
|
||||
msgid "You may enter alternative titles and texts here. The values defined here will override the default values."
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-settings-page.php:346
|
||||
msgid "Contact List Settings"
|
||||
msgstr ""
|
||||
|
||||
#: public/shortcode_contact_list_groups.php:6
|
||||
#: public/class-contact-list-public.php:204
|
||||
msgid "contact"
|
||||
msgstr ""
|
||||
|
||||
#: public/shortcode_contact_list_groups.php:7
|
||||
#: public/class-contact-list-public.php:205
|
||||
msgid "contacts"
|
||||
msgstr ""
|
||||
|
||||
#: public/shortcode_contact_list_groups.php:8
|
||||
#: public/class-contact-list-public.php:206
|
||||
msgid "found"
|
||||
msgstr ""
|
||||
|
||||
#: public/shortcode_contact_list_groups.php:61
|
||||
#: public/shortcode_contact_list_groups.php:162
|
||||
msgid "There are no contacts in this group."
|
||||
msgstr ""
|
||||
|
||||
#: public/shortcode_contact_list_groups.php:193
|
||||
msgid "There are no groups."
|
||||
msgstr ""
|
||||
|
||||
#: public/shortcode_contact_list_form.php:44
|
||||
msgid "Error processing data."
|
||||
msgstr ""
|
||||
|
||||
#: public/shortcode_contact_list_form.php:65
|
||||
msgid "Please insert at least last name first."
|
||||
msgstr ""
|
||||
|
||||
#: public/shortcode_contact_list_form.php:133
|
||||
msgid "Group(s)"
|
||||
msgstr ""
|
||||
|
||||
#: public/shortcode_contact_list_form.php:156
|
||||
msgid "Submit"
|
||||
msgstr ""
|
||||
@@ -0,0 +1,49 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: xq-xe-xt-xy 1.0\n"
|
||||
"POT-Creation-Date: 2018-07-11 09:44+0300\n"
|
||||
"PO-Revision-Date: 2018-07-11 09:44+0300\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Marko Maksym\n"
|
||||
"Language: uk_UA\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.0.6\n"
|
||||
"X-Poedit-Basepath: ../includes\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
"X-Poedit-KeywordsList: __;_e\n"
|
||||
"X-Poedit-SearchPath-0: .\n"
|
||||
|
||||
#: admin/class-admin-main.php:66
|
||||
msgid "Title of the page"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-admin-main.php:66
|
||||
msgid "Link Name"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-admin-main.php:69
|
||||
msgid "Submenu title"
|
||||
msgstr ""
|
||||
|
||||
#: admin/class-admin-main.php:69
|
||||
msgid "Submenu item"
|
||||
msgstr ""
|
||||
|
||||
#: admin/templates/index.php:8
|
||||
msgid "Settings Page"
|
||||
msgstr ""
|
||||
|
||||
#: admin/templates/main_module_menu.php:10
|
||||
msgid "Main page"
|
||||
msgstr ""
|
||||
|
||||
#: admin/templates/main_module_menu.php:13 admin/templates/page1.php:8
|
||||
msgid "Page 1"
|
||||
msgstr ""
|
||||
|
||||
#: admin/templates/main_module_menu.php:16 admin/templates/page2.php:8
|
||||
msgid "Page 2"
|
||||
msgstr ""
|
||||
465
spec/fixtures/dynamic_finders/plugin_version/customizely/translation_file/languages/customizely.pot
vendored
Normal file
465
spec/fixtures/dynamic_finders/plugin_version/customizely/translation_file/languages/customizely.pot
vendored
Normal file
@@ -0,0 +1,465 @@
|
||||
# Copyright (C) 2019 KitThemes
|
||||
# This file is distributed under the same license as the Customizely plugin.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Customizely 1.0.0\n"
|
||||
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/customizely\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"POT-Creation-Date: 2019-08-03T10:28:57+00:00\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"X-Generator: WP-CLI 2.2.0\n"
|
||||
"X-Domain: customizely\n"
|
||||
|
||||
#. Plugin Name of the plugin
|
||||
#: includes/class-plugin.php:555
|
||||
#: views/customizely.php:15
|
||||
msgid "Customizely"
|
||||
msgstr ""
|
||||
|
||||
#. Plugin URI of the plugin
|
||||
msgid "https://wordpress.org/plugins/customizely/"
|
||||
msgstr ""
|
||||
|
||||
#. Description of the plugin
|
||||
msgid "Style WP site with customizer"
|
||||
msgstr ""
|
||||
|
||||
#. Author of the plugin
|
||||
msgid "KitThemes"
|
||||
msgstr ""
|
||||
|
||||
#. Author URI of the plugin
|
||||
msgid "https://www.kitthemes.com/"
|
||||
msgstr ""
|
||||
|
||||
#: controls/class-checkbox.php:90
|
||||
#: controls/class-radio.php:91
|
||||
#: controls/class-select.php:110
|
||||
msgid "Choices"
|
||||
msgstr ""
|
||||
|
||||
#: controls/class-checkbox.php:102
|
||||
#: controls/class-checkbox.php:122
|
||||
#: controls/class-radio.php:103
|
||||
#: controls/class-select.php:122
|
||||
msgid "Value"
|
||||
msgstr ""
|
||||
|
||||
#: controls/class-checkbox.php:108
|
||||
#: controls/class-radio.php:109
|
||||
#: controls/class-select.php:128
|
||||
msgid "Label"
|
||||
msgstr ""
|
||||
|
||||
#: controls/class-checkbox.php:123
|
||||
msgid "Enter a valid value from `Choices` option."
|
||||
msgstr ""
|
||||
|
||||
#: controls/class-color.php:122
|
||||
msgid "Enable RGBA"
|
||||
msgstr ""
|
||||
|
||||
#: controls/class-color.php:136
|
||||
msgid "Color"
|
||||
msgstr ""
|
||||
|
||||
#: controls/class-number.php:188
|
||||
#: controls/class-range.php:193
|
||||
msgid "Minimum"
|
||||
msgstr ""
|
||||
|
||||
#: controls/class-number.php:189
|
||||
#: controls/class-number.php:196
|
||||
#: controls/class-number.php:203
|
||||
#: controls/class-number.php:210
|
||||
#: controls/class-number.php:217
|
||||
#: controls/class-range.php:194
|
||||
#: controls/class-range.php:201
|
||||
#: controls/class-range.php:208
|
||||
#: controls/class-range.php:215
|
||||
#: controls/class-range.php:222
|
||||
#: includes/functions.php:240
|
||||
msgid "Order priority to load the input."
|
||||
msgstr ""
|
||||
|
||||
#: controls/class-number.php:195
|
||||
#: controls/class-range.php:200
|
||||
msgid "Maximum"
|
||||
msgstr ""
|
||||
|
||||
#: controls/class-number.php:202
|
||||
#: controls/class-range.php:207
|
||||
msgid "Step"
|
||||
msgstr ""
|
||||
|
||||
#: controls/class-number.php:209
|
||||
#: controls/class-range.php:214
|
||||
msgid "No Unit"
|
||||
msgstr ""
|
||||
|
||||
#: controls/class-number.php:216
|
||||
#: controls/class-range.php:221
|
||||
msgid "Default Unit"
|
||||
msgstr ""
|
||||
|
||||
#: controls/class-number.php:230
|
||||
#: controls/class-range.php:235
|
||||
msgid "Valid CSS Units"
|
||||
msgstr ""
|
||||
|
||||
#: controls/class-number.php:234
|
||||
#: controls/class-range.php:239
|
||||
msgid "Unit"
|
||||
msgstr ""
|
||||
|
||||
#: controls/class-number.php:235
|
||||
#: controls/class-range.php:240
|
||||
msgid "Enter a valid CSS unit. All valid CSS Units are `px`, `%,` `em`, `rem`, `ex`, `ch`, `vw`, `vh`, `vmin`, `vmax`, `cm`, `mm`, `in`, `pt` and `pc`."
|
||||
msgstr ""
|
||||
|
||||
#: controls/class-number.php:256
|
||||
msgid "Number"
|
||||
msgstr ""
|
||||
|
||||
#: controls/class-text.php:88
|
||||
msgid "Text"
|
||||
msgstr ""
|
||||
|
||||
#: controls/class-textarea.php:94
|
||||
msgid "Textarea"
|
||||
msgstr ""
|
||||
|
||||
#: controls/class-url.php:88
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:128
|
||||
#: includes/class-plugin.php:141
|
||||
msgid "Something went wrong."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:205
|
||||
#: includes/functions.php:89
|
||||
msgid "General"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:209
|
||||
msgid "Panel ID"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:215
|
||||
#: includes/functions.php:100
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:221
|
||||
#: includes/functions.php:107
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:229
|
||||
#: includes/functions.php:224
|
||||
msgid "Advance"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:233
|
||||
#: includes/functions.php:239
|
||||
msgid "Priority"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:239
|
||||
#: includes/functions.php:246
|
||||
msgid "Capability"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:247
|
||||
msgid "Panel"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:253
|
||||
msgid "Section ID"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:257
|
||||
msgid "Hide description"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:263
|
||||
msgid "Section"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:631
|
||||
msgid "Enter laptop preview mode"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-plugin.php:636
|
||||
msgid "Enter mobile landscape preview mode"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-post-type.php:46
|
||||
msgctxt "post type general name"
|
||||
msgid "Options"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-post-type.php:47
|
||||
msgctxt "post type singular name"
|
||||
msgid "Option"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-post-type.php:48
|
||||
msgctxt "admin menu"
|
||||
msgid "Options"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-post-type.php:49
|
||||
msgctxt "add new on admin bar"
|
||||
msgid "Option"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-post-type.php:50
|
||||
msgctxt "book"
|
||||
msgid "Add New"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-post-type.php:51
|
||||
msgid "Add New Option"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-post-type.php:52
|
||||
msgid "New Option"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-post-type.php:53
|
||||
msgid "Edit Option"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-post-type.php:54
|
||||
msgid "View Option"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-post-type.php:55
|
||||
msgid "All Options"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-post-type.php:56
|
||||
msgid "Search Options"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-post-type.php:57
|
||||
msgid "Parent Options:"
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-post-type.php:58
|
||||
msgid "No books found."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-post-type.php:59
|
||||
msgid "No books found in Trash."
|
||||
msgstr ""
|
||||
|
||||
#: includes/class-post-type.php:64
|
||||
msgid "Option post type for saving customizely options."
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:93
|
||||
msgid "ID"
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:94
|
||||
msgid "Unique ID for input."
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:101
|
||||
msgid "Title of this input."
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:108
|
||||
msgid "Description or help text for this input."
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:116
|
||||
msgid "Values"
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:120
|
||||
msgid "Responsive"
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:121
|
||||
msgid "Turn on or off resposive input."
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:127
|
||||
msgid "Default"
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:128
|
||||
msgid "Default value for this input."
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:134
|
||||
msgid "Default (Laptop)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:135
|
||||
msgid "Default value for this input for only Laptop view."
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:142
|
||||
msgid "Default (Tablet)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:143
|
||||
msgid "Default value for this input for only Tablet view."
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:150
|
||||
msgid "Default (Mobile Landscape)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:151
|
||||
msgid "Default value for this input for only Mobile Landscape view."
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:158
|
||||
msgid "Default (Mobile)"
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:159
|
||||
msgid "Default value for this input for only Mobile view."
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:168
|
||||
#: includes/functions.php:179
|
||||
msgid "CSS"
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:172
|
||||
msgid "CSS Output"
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:173
|
||||
msgid "Use as CSS output"
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:192
|
||||
msgid "Selector"
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:193
|
||||
msgid "Valid CSS selector. Multiple selector can be separated by \",\"."
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:199
|
||||
msgid "Property"
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:200
|
||||
msgid "Valid CSS Property. Accept only single property."
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:206
|
||||
msgid "Replace"
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:207
|
||||
msgid "Custom value with extended values. Use `{{value}}` tag to replace value. Example for border: `1px {{value}} #000`"
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:228
|
||||
msgid "Transport"
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:229
|
||||
msgid "Options for rendering the live preview of changes in Customizer. Using **Refresh** makes the change visible by reloading the whole preview. Using **Post Message** allows to change without reloading."
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:232
|
||||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:233
|
||||
msgid "Post Message"
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:247
|
||||
msgid "Capability required for the input."
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:302
|
||||
#: includes/functions.php:363
|
||||
msgid "Not authorized"
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:317
|
||||
msgid "Untitled"
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:324
|
||||
#: includes/functions.php:339
|
||||
msgid "Something wrong!"
|
||||
msgstr ""
|
||||
|
||||
#. translators: Post ID.
|
||||
#: includes/functions.php:331
|
||||
msgid "Untitled #%d"
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:346
|
||||
msgid "Successfully saved!"
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:349
|
||||
msgid "Nothing changed!"
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:369
|
||||
msgid "Option ID is empty."
|
||||
msgstr ""
|
||||
|
||||
#: includes/functions.php:378
|
||||
msgid "Something wrong."
|
||||
msgstr ""
|
||||
|
||||
#: views/addons.php:15
|
||||
msgid "Addons"
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/builder.js:14077
|
||||
#: assets/js/builder.js:14081
|
||||
msgid "Changed will not save. Are you sure to leave?"
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/builder.js:14360
|
||||
msgid "Error: unable to send request."
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/builder.js:15149
|
||||
msgid "Containers"
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/builder.js:15160
|
||||
msgid "Controls"
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/builder.js:15268
|
||||
msgid "Drop a section here."
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/builder.js:15392
|
||||
msgid "Drop a panel or section here."
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/builder.js:15512
|
||||
msgid "Drop a control here."
|
||||
msgstr ""
|
||||
|
||||
#: assets/js/customizely.js:435
|
||||
#: assets/js/customizely.js:630
|
||||
#: assets/js/customizely.js:665
|
||||
msgid "Invalid Unit"
|
||||
msgstr ""
|
||||
@@ -0,0 +1,55 @@
|
||||
# Copyright (C) 2019 Davon Team
|
||||
# This file is distributed under the same license as the Davon’s Floating Admin Bar plugin.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Davon’s Floating Admin Bar 1.0.0\n"
|
||||
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/davon-floating-"
|
||||
"admin-bar\n"
|
||||
"Last-Translator: Joel <joel.stuedle@gmail.com>\n"
|
||||
"Language-Team: German\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"POT-Creation-Date: 2019-05-24T13:03:52+00:00\n"
|
||||
"PO-Revision-Date: 2019-05-24 13:06+0000\n"
|
||||
"X-Generator: Loco https://localise.biz/\n"
|
||||
"X-Domain: davon-floating-admin-bar\n"
|
||||
"Language: de_DE\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Loco-Version: 2.2.2; wp-5.2.1"
|
||||
|
||||
#. Plugin Name of the plugin
|
||||
msgid "Davon’s Floating Admin Bar"
|
||||
msgstr "Davon’s Floating Admin Bar"
|
||||
|
||||
#. Plugin URI of the plugin
|
||||
#. Author URI of the plugin
|
||||
msgid "https://joelstuedle.ch/"
|
||||
msgstr "https://joelstuedle.ch/"
|
||||
|
||||
#. Description of the plugin
|
||||
msgid ""
|
||||
"The Davon’s Floating Admin Bar floats at the top of your Website with "
|
||||
"minimal impact on the website’s appearance."
|
||||
msgstr ""
|
||||
"Die Davon’s Floating Admin Bar positioniert sich oberhalb des Viewports mit "
|
||||
"minimalem Einfluss auf die Erscheinung der Webseite."
|
||||
|
||||
#. Author of the plugin
|
||||
msgid "Davon Team"
|
||||
msgstr "Davon Team"
|
||||
|
||||
#. translators: Compatibility-Check failed Warning
|
||||
#: davon-floating-admin-bar.php:52
|
||||
msgctxt "Compatibility-Check failed Warning"
|
||||
msgid ""
|
||||
"%1$s requires PHP %2$s (or newer) and WordPress %3$s (or newer) to function "
|
||||
"properly. Your Site is using PHP %4$s and WordPress %5$s. Please upgrade. "
|
||||
"The Plugin has been deactivated automatically. Don’t hesitate to ask for "
|
||||
"Help @%6$s."
|
||||
msgstr ""
|
||||
"%1$s benötigt PHP %2$s (oder neuer) and WordPress %3$s (oder neuer) um "
|
||||
"fehlerfrei zu funktionieren. Deine Seite benutzt PHP %4$s und WordPress %5$s."
|
||||
" Bitte aktualisiere deine Komponenten. Das Plugin wurde automatisch "
|
||||
"deaktiviert. Bei Fragen und Problemen stehen wir dir gerne zur Verfügung "
|
||||
"@%6$s."
|
||||
@@ -0,0 +1,278 @@
|
||||
# Display Post Types.
|
||||
# Copyright (C) 2019 vedathemes
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <contact@vedathemes.com>, 2019.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: display-post-types 1.0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-08-22 22:24+0530\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: backend/inc/class-block.php:229
|
||||
msgid "Post Type"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-block.php:247
|
||||
msgid "Taxonomy"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:121
|
||||
msgid "Publish Date"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:122
|
||||
msgid "Modified Date"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:123 backend/inc/class-widget.php:150
|
||||
#: backend/inc/class-widget.php:209
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:124
|
||||
msgid "Author"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:125
|
||||
msgid "Comment Count"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:126
|
||||
msgid "Random"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:130
|
||||
msgid "Top Left Cropping"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:131
|
||||
msgid "Top Center Cropping"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:132
|
||||
msgid "Center Cropping"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:133
|
||||
msgid "Bottom Left Cropping"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:134
|
||||
msgid "Bottom Center Cropping"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:138
|
||||
msgid "No Cropping"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:139
|
||||
msgid "Landscape (4:3)"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:140
|
||||
msgid "Landscape (3:2)"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:141
|
||||
msgid "Portrait (3:4)"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:142
|
||||
msgid "Portrait (2:3)"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:143
|
||||
msgid "Widescreen (16:9)"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:144
|
||||
msgid "Square (1:1)"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:149
|
||||
msgid "Thumbnail"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:151
|
||||
msgid "Meta info"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:152
|
||||
msgid "Category"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:153
|
||||
msgid "Excerpt"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:159
|
||||
msgid "Create a display post types widget."
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:162
|
||||
msgid "Display Post Types"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:216
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:217
|
||||
msgid "Select Post Type"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:222
|
||||
msgid "Get items to be displayed"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:231
|
||||
msgid "Get items by Post IDs (optional)"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:232
|
||||
msgctxt "Placeholder text for post ids"
|
||||
msgid "Comma separated ids, i.e. 230,300"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:244
|
||||
msgid "Number of items to display"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:250
|
||||
msgid "Order By"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:257
|
||||
msgid "Sort Order"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:259
|
||||
msgid "Descending"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:260
|
||||
msgid "Ascending"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:268
|
||||
msgid "Styling selected items"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:273
|
||||
msgid "Display Style"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:285
|
||||
msgid "Image Cropping"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:292
|
||||
msgid "Image Cropping Position"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:300
|
||||
msgid "Left Aligned"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:301
|
||||
msgid "Right Aligned"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:303
|
||||
msgid "Image Alignment"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:309
|
||||
msgid "Border Radius (in px)"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:314
|
||||
msgid "Number of grid columns"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:319
|
||||
msgid "Thumbnail Placeholder"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:428
|
||||
msgid "Select Pages"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:458
|
||||
msgid "Select Terms"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:488
|
||||
msgid "Items supported by display style"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/class-widget.php:518
|
||||
msgid "Get items by Taxonomy"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/functions.php:18
|
||||
msgid "Posts"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/functions.php:19
|
||||
msgid "Pages"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/functions.php:45
|
||||
msgid "Ignore Taxonomy"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/functions.php:46
|
||||
msgid "Categories"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/functions.php:47
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
#: backend/inc/functions.php:92
|
||||
msgid "- Ignore Taxonomy -"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/class-frontend.php:58
|
||||
msgid "List - Full"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/class-frontend.php:62
|
||||
msgid "List - Mini"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/class-frontend.php:66
|
||||
msgid "Grid - Normal"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/class-frontend.php:70
|
||||
msgid "Grid - Overlay"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/class-frontend.php:74
|
||||
msgid "Slider - Normal"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/class-frontend.php:383
|
||||
#, php-format
|
||||
msgctxt "human-readable time difference"
|
||||
msgid "%s ago"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/class-frontend.php:510
|
||||
msgid "Continue Reading"
|
||||
msgstr ""
|
||||
|
||||
#: frontend/class-frontend.php:553
|
||||
msgid "on"
|
||||
msgstr ""
|
||||
@@ -0,0 +1,35 @@
|
||||
# Copyright (C) 2019 SEO Themes
|
||||
# This file is distributed under the same license as the Display Terms Shortcode plugin.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Display Terms Shortcode 1.0.4\n"
|
||||
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/display-terms-shortcode\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"POT-Creation-Date: 2019-08-11T10:12:52+00:00\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"X-Generator: WP-CLI 2.1.0\n"
|
||||
"X-Domain: display-terms-shortcode\n"
|
||||
|
||||
#. Plugin Name of the plugin
|
||||
msgid "Display Terms Shortcode"
|
||||
msgstr ""
|
||||
|
||||
#. Plugin URI of the plugin
|
||||
msgid "https://github.com/seothemes/display-terms-shortcode/"
|
||||
msgstr ""
|
||||
|
||||
#. Description of the plugin
|
||||
msgid "Display a list of terms using the [display-terms] shortcode."
|
||||
msgstr ""
|
||||
|
||||
#. Author of the plugin
|
||||
msgid "SEO Themes"
|
||||
msgstr ""
|
||||
|
||||
#. Author URI of the plugin
|
||||
msgid "https://seothemes.com/"
|
||||
msgstr ""
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user