wovnrb 2.2.4 → 2.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6cda8576fa90acfe5742dfdb5b96b7a6a7e5cb5905a208faa41fcf97d4ca32a6
4
- data.tar.gz: 5468906a83cfe9b2cb7b08025e644264e02f51c7727296aa88f1fe766774de1a
3
+ metadata.gz: a1667b83e9b8a2a2a79d1c152c71fac66ecc1acfe98b53f062e6929dda1d267c
4
+ data.tar.gz: 6fe79d1445f3e87ebd65e9d5beca3c173da6e3ae25e92de97c9b85bed95c8547
5
5
  SHA512:
6
- metadata.gz: 87e18f2650e806066452abdd5397ac02b4443e4c6550a61d07835dd9b9eda1682f465b35618eabb22d6eba4f12fa4cf95ecaad394a66a971616b4a8de05a2ff5
7
- data.tar.gz: 3700452cb17292a0ff7f6bd8989c192d6b7901dee3e5643c98d702f6b9127698059efc1fef463734eed3e54b804d63abf462d806a27033c4a073d3de2c9dd29f
6
+ metadata.gz: 560317e910fdf2966f10919126b8e7ec255ce07a9325bcd24c610eda52bb2686347e76e7123e9ffe0c22d7373220aab5e270b3d63a324dda1acec6c5a1c0d9cb
7
+ data.tar.gz: dbcb9693c55eb8a5b7e77d1b98e53d1bd8ae15989d498e585505a2b04137bf068ab20f4efedf4205c1c412d2882e33774875ffa14294635e2e0f1772efbda08a
data/README.en.md ADDED
@@ -0,0 +1,174 @@
1
+ # WOVN.io Ruby Library
2
+
3
+ The WOVN.io Ruby library is a library that uses WOVN.io in order to provide translations. The WOVN.io Ruby Library is packaged as Rack Middleware.
4
+
5
+ This document explains the process of installing WOVN.io Ruby, as well as set up and configuration process.
6
+
7
+ ## 1. Install
8
+
9
+ ### 1.1. Creating a WOVN.io account.
10
+
11
+ In order to use the WOVN.io Ruby Library, you need a WOVN.io account. If you do not have an account, please first sign up for one at WOVN.io.
12
+
13
+ ### 1.2. Adding a Page
14
+
15
+ After logging into WOVN.io, add a page that you would like translated.
16
+
17
+ ### 1.3. Ruby Application Settings
18
+
19
+ To use the WOVN.io Ruby Library, insert the following line into your Ruby Application's Gemfile. WOVN.io currently supports version 2.0.1 and up.
20
+
21
+ ```ruby
22
+ gem 'wovnrb', '>= 2.0.1'
23
+ ```
24
+
25
+ After setting the above, execute the following command to install the WOVN.io Ruby Library.
26
+
27
+ ```bash
28
+ bundle install
29
+ ```
30
+
31
+ After installing the library, insert the following into your Ruby Application's settings file.
32
+
33
+ * If you're using Ruby on Rails
34
+
35
+ Insert the following into either config/application.rb or config/environments/.
36
+
37
+ ```ruby
38
+ ...
39
+
40
+ config.wovnrb = {
41
+ :project_token => 'EnS!t3',
42
+ :default_lang => 'en',
43
+ :supported_langs => ['en'],
44
+ :url_pattern => 'path'
45
+ }
46
+
47
+ ...
48
+ ```
49
+
50
+ * If you're using Sinatra
51
+
52
+ Insert the following into either the Application File or config.ru.
53
+
54
+ ```ruby
55
+ ...
56
+
57
+ require 'wovnrb'
58
+
59
+ use Wovnrb::Interceptor, {
60
+ :project_token => 'EnS!t3',
61
+ :default_lang => 'en',
62
+ :supported_langs => ['en'],
63
+ :url_pattern => 'path'
64
+ }
65
+
66
+ ...
67
+ ```
68
+
69
+ After completing setup, start the Ruby Application, and make sure the WOVN.io library is working correctly.
70
+
71
+ ## 2. Parameter Setting
72
+
73
+ The following is a list of the WOVN.io Ruby Library's valid parameters.
74
+
75
+ Parameter Name | Required | Default Setting
76
+ ------------------ | -------- | ----------------
77
+ project_token | yes | ''
78
+ default_lang | yes | 'en'
79
+ supported_langs | yes | ['en']
80
+ url_pattern | yes | 'path'
81
+ lang_param_name | | 'wovn'
82
+ query | | []
83
+ ignore_class | | []
84
+ translate_fragment | | true
85
+ ignore_paths | | []
86
+
87
+ ### 2.1. project_token
88
+
89
+ Set your WOVN.io Account's Project token. This parameter is required.
90
+
91
+ ### 2.2. default_lang
92
+
93
+ This sets the Ruby application's default language. The default value is English ('en').
94
+
95
+ If, for a requested page, the default language parameter is included in the URL, the request is redirected before translating. The default_lang parameter is used for this purpose.
96
+
97
+ If the default_lang is set to 'en', when receiving a request for the following URL,
98
+
99
+ https://wovn.io/en/contact
100
+
101
+ Then the library will redirect to the following URL.
102
+
103
+ https://wovn.io/contact
104
+
105
+ ### 2.3. supported_langs
106
+ This tells the library which languages are being used on the website (including
107
+ the original language). This setting allows for inserting metadata necessary for
108
+ SEO (Search Engine Optimization).
109
+
110
+ If your website is in English and you are using WOVN.io to localize it in
111
+ Japanese, then you should use the following setting:
112
+ ```
113
+ :supported_langs => ['en', 'ja']
114
+ ```
115
+ **Note:** The order of the languages in the list does not matter.
116
+
117
+ ### 2.4. url_pattern
118
+
119
+ The Library works in the Ruby Application by adding new URLs to be translated. You can set the type of url with the `url_pattern` parameter. There are 3 types that can be set.
120
+
121
+ parameters | Translated page's URL | Notes
122
+ ----------- | ------------------------------- | -------
123
+ 'path' | https://wovn.io/ja/contact | Default Value. If no settings have been set, url_pattern defaults to this value.
124
+ 'subdomain' | https://ja.wovn.io/contact | DNS settings must be set.
125
+ 'query' | https://wovn.io/contact?wovn=ja | The least amount of changes to the application required to complete setup.
126
+
127
+ ※ The following is an example of a URL that has been translated by the library using the above URLs.
128
+
129
+ https://wovn.io/contact
130
+
131
+ ### 2.5 lang_param_name
132
+ This parameter is only valid for when `url_pattern` is set to `'query'`.
133
+
134
+ It allows you to set the query parameter name for declaring the language of the
135
+ page. The default value for this setting is `'wovn'`, such that a page URL in
136
+ translated language English has the form
137
+ `https://my-website.com/index.php?wovn=en`. If you instead set the value to
138
+ `'lang'`, then the later URL example would have the form
139
+ `https://my-website.com/index.php?lang=en`.
140
+
141
+ ### 2.6. query
142
+
143
+ WOVN.io ignores query parameters when searching a translated page. If you want to add a query parameter to translated page's URL, you should configure the `query` parameter. (You need to configure WOVN.io too)
144
+
145
+ https://wovn.io/ja/contact?os=mac&keyboard=us
146
+
147
+ If the `default_lang` is 'en', and the query is set to '', the above URL will be modified into the following URL to search for the page's translation.
148
+
149
+ https://wovn.io/contact
150
+
151
+ If the `default_lang` is 'en', and the query is set to 'os', the above URL will be modified into the following URL to search for the page's translation.
152
+
153
+ https://wovn.io/contact?os=mac
154
+
155
+ ### 2.7. ignore_class
156
+
157
+ This sets "Ignore class" which prevents WOVN from translating HTML elements that have a class contained in this array.
158
+
159
+ ### 2.8. translate_fragment
160
+
161
+ This option allows to disable translating partial HTML content. By default,
162
+ partial HTML content is translated but no widget snippet is added. Set
163
+ `translate_fragment` to `false` to prevent translating partial HTML content.
164
+
165
+ ### 2.9 ignore_paths
166
+
167
+ This parameter tells WOVN.rb to not localize content withing given directories.
168
+
169
+ The directories given will only be matched against the beginning of the URL path.
170
+
171
+ For instance, if you want to not localize the admin directory of your website, you should add the following to you WOVN.rb configuration.
172
+ ```
173
+ 'ignore_paths' => ['/admin/']
174
+ ```
data/README.ja.md ADDED
@@ -0,0 +1,180 @@
1
+ # WOVN.io Ruby Library
2
+
3
+ For English users: [English](README.en.md)
4
+
5
+ WOVN.io Rubyライブラリは、翻訳を提供するためにWOVN.ioを利用したライブラリです。
6
+ WOVN.io Ruby ライブラリは Rack Middleware としてパッケージ化されています。
7
+
8
+ このドキュメントでは、WOVN.io Rubyをインストールするまでの手順や、セットアップ・設定の流れを説明しています。
9
+
10
+ ## 1. インストール
11
+
12
+ ### 1.1. WOVN.ioアカウントを作成
13
+
14
+ WOVN.io Ruby Libraryを利用するには、WOVN.ioのアカウントが必要です。
15
+ アカウントをお持ちでない方は、まずはWOVN.ioに登録してください。
16
+
17
+ ### 1.2. ページ追加
18
+
19
+ WOVN.ioにログイン後、翻訳したいページを追加します。
20
+
21
+ ### 1.3. Rubyアプリケーションの設定
22
+
23
+ WOVN.io Ruby ライブラリを使用するには、以下の行を Ruby アプリケーションの Gemfile に挿入します。
24
+ WOVN.ioは現在、バージョン2.0.1以上をサポートしています。
25
+
26
+ ```ruby
27
+ gem 'wovnrb', '>= 2.0.1'
28
+ ```
29
+
30
+ 以上の設定を行った後、以下のコマンドを実行して、WOVN.io Rubyライブラリをインストールします。
31
+
32
+ ```bash
33
+ bundle install
34
+ ```
35
+
36
+ ライブラリをインストールしたら、Rubyアプリケーションの設定ファイルに以下を挿入します。
37
+
38
+ * Ruby on Rails を使っている場合
39
+
40
+ `config/application.rb` または `config/environments/` に以下を挿入します。
41
+
42
+ ```ruby
43
+ ...
44
+
45
+ config.wovnrb = {
46
+ :project_token => 'EnS!t3',
47
+ :default_lang => 'en',
48
+ :supported_langs => ['en'],
49
+ :url_pattern => 'path'
50
+ }
51
+
52
+ ...
53
+ ```
54
+
55
+ * Sinatra を使っている場合
56
+
57
+ アプリケーション・ファイルまたは `config.ru` のいずれかに以下を挿入します。
58
+
59
+ ```ruby
60
+ ...
61
+
62
+ require 'wovnrb'
63
+
64
+ use Wovnrb::Interceptor, {
65
+ :project_token => 'EnS!t3',
66
+ :default_lang => 'en',
67
+ :supported_langs => ['en'],
68
+ :url_pattern => 'path'
69
+ }
70
+
71
+ ...
72
+ ```
73
+
74
+ セットアップが完了したら、Rubyアプリケーションを起動し、WOVN.ioライブラリが正常に動作していることを確認します。
75
+
76
+ ## 2. パラメータ設定
77
+
78
+ 以下に、WOVN.io Ruby ライブラリの有効なパラメータの一覧を示します。
79
+
80
+ パラメータ名 | 必須 | デフォルト設定
81
+ ------------------ | -------- | ----------------
82
+ project_token | yes | ''
83
+ default_lang | yes | 'en'
84
+ supported_langs | yes | ['en']
85
+ url_pattern | yes | 'path'
86
+ lang_param_name | | 'wovn'
87
+ query | | []
88
+ ignore_class | | []
89
+ translate_fragment | | true
90
+ ignore_paths | | []
91
+
92
+ ### 2.1. project_token
93
+
94
+ WOVN.ioアカウントのプロジェクトトークンを設定します。このパラメータは必須です。
95
+
96
+ ### 2.2. default_lang
97
+
98
+ これはRubyアプリケーションのデフォルト言語を設定します。デフォルト値は英語('en')です。
99
+
100
+ リクエストされたページで、デフォルトの言語パラメータが URL に含まれている場合、リクエストは翻訳前にリダイレクトされます。
101
+ このために `default_lang` パラメータを使用します。
102
+
103
+ `default_lang` が 'en' に設定されている時に、以下のURLへのリクエストを受信した場合。
104
+
105
+ https://wovn.io/en/contact
106
+
107
+ ライブラリは以下のURLにリダイレクトされます。
108
+
109
+ https://wovn.io/contact
110
+
111
+ ### 2.3. supported_langs
112
+
113
+ これは、ウェブサイトで使用されている言語(翻訳元を含む)をライブラリに伝えます。
114
+ この設定では、SEO(検索エンジン最適化)に必要なメタデータを挿入することができます。
115
+
116
+ ウェブサイトが英語で、WOVN.ioを使って日本語にローカライズしている場合は、以下の設定にしてください。
117
+ ```
118
+ :supported_langs => ['en', 'ja']
119
+ ```
120
+ **注意:** 配列の言語の順番は関係ありません。
121
+
122
+ ### 2.4. url_pattern
123
+
124
+ ライブラリはRubyアプリケーションの中で、翻訳されるURLを新たに追加することで動作します。
125
+ urlの種類は `url_pattern` パラメータで設定できます。設定できるタイプは3種類。
126
+
127
+
128
+ パラメータ | 翻訳されたページのURL | 備考
129
+ ----------- | ------------------------------- | -------
130
+ 'path' | https://wovn.io/ja/contact | デフォルト値、何も設定されていない場合、 `url_pattern` のデフォルト値はこの値になります
131
+ 'subdomain' | https://ja.wovn.io/contact | DNSの設定が必要です
132
+ 'query' | https://wovn.io/contact?wovn=ja | セットアップを完了するために必要なアプリケーションへの変更の最小量
133
+
134
+ ※ 上記は、以下のURLを使用してライブラリが翻訳したURLの例です。
135
+
136
+ https://wovn.io/contact
137
+
138
+ ### 2.5 lang_param_name
139
+
140
+ このパラメータは `url_pattern` が `query` に設定されている場合のみ有効です。
141
+
142
+ ページの言語を指定するためのクエリパラメータ名を設定することができます。
143
+
144
+ この設定のデフォルト値は `wovn` であり、翻訳された英語のページのURLが `https://my-website.com/index.php?wovn=en` という形式になります。
145
+ 代わりに `lang` に値を設定すると、URLの例は `https://my-website.com/index.php?lang=en` という形式になります。
146
+
147
+ ### 2.6. query
148
+
149
+ WOVN.ioは翻訳されたページを検索する際にクエリパラメータを無視します。
150
+ 翻訳ページのURLにクエリパラメータを追加したい場合は、`query` パラメータを設定する必要があります。(WOVN.ioも設定する必要があります)
151
+
152
+ https://wovn.io/ja/contact?os=mac&keyboard=us
153
+
154
+ `default_lang` が `en` でクエリが空に設定されている場合、上記のURLは以下のURLに変更され、ページの翻訳を検索するようになります。
155
+
156
+ https://wovn.io/contact
157
+
158
+ `default_lang` が `en` でクエリが `os` に設定されている場合、上記のURLは以下のURLに変更され、ページの翻訳を検索するようになります。
159
+
160
+ https://wovn.io/contact?os=mac
161
+
162
+ ### 2.7. ignore_class
163
+
164
+ これは「無視するクラス」を設定し、WOVNがこの配列に含まれるクラスを持つHTML要素を変換できないようにします。
165
+
166
+ ### 2.8. translate_fragment
167
+
168
+ このオプションでは、部分的なHTMLコンテンツの翻訳を無効にすることができます。
169
+ デフォルトでは、部分的なHTMLコンテンツは翻訳されますが、ウィジェットのスニペットは追加されません。
170
+ `translate_fragment` を `false` に設定すると、HTMLの一部が翻訳されないようになります。
171
+
172
+ ### 2.9 ignore_paths
173
+
174
+ このパラメータは、WOVN.rbが指定されたディレクトリ内のコンテンツをローカライズしないように指示します。
175
+ 指定されたディレクトリは、URLパスの先頭にのみマッチします。
176
+ 例えば、ウェブサイトの管理者ディレクトリをローカライズしたくない場合は、WOVN.rbの設定に次のように追加します。
177
+
178
+ ```
179
+ 'ignore_paths' => ['/admin/']
180
+ ```
data/README.md ADDED
@@ -0,0 +1 @@
1
+ ./README.ja.md
data/lib/wovnrb.rb CHANGED
@@ -109,7 +109,7 @@ module Wovnrb
109
109
  end
110
110
 
111
111
  def wovn_ignored?(html_body)
112
- !html_body.xpath('//html[@wovn-ignore]').empty?
112
+ !html_body.xpath('//html[@wovn-ignore or @data-wovn-ignore]').empty?
113
113
  end
114
114
 
115
115
  def ignore_path?(path)
@@ -8,7 +8,6 @@ module Wovnrb
8
8
  attr_reader :unmasked_pathname
9
9
  attr_reader :pathname
10
10
  attr_reader :pathname_with_trailing_slash_if_present
11
- attr_reader :redis_url
12
11
 
13
12
  # Generates new instance of Wovnrb::Headers.
14
13
  # Its parameters are set by parsing env variable.
@@ -62,7 +61,6 @@ module Wovnrb
62
61
  @query = remove_lang(@query, lang_code)
63
62
  @pathname_with_trailing_slash_if_present = @pathname
64
63
  @pathname = @pathname.gsub(/\/$/, '')
65
- @redis_url = "#{@host}#{@pathname}#{@query}"
66
64
  end
67
65
 
68
66
  def unmasked_pathname_without_trailing_slash
data/lib/wovnrb/lang.rb CHANGED
@@ -76,7 +76,10 @@ module Wovnrb
76
76
  'tr' => { name: 'Türkçe', code: 'tr', en: 'Turkish' },
77
77
  'uk' => { name: 'Українська', code: 'uk', en: 'Ukrainian' },
78
78
  'ur' => { name: 'اردو', code: 'ur', en: 'Urdu' },
79
- 'vi' => { name: 'Tiếng Việt', code: 'vi', en: 'Vietnamese' }
79
+ 'vi' => { name: 'Tiếng Việt', code: 'vi', en: 'Vietnamese' },
80
+ 'km' => { name: 'ភាសាខ្មែរ', code: 'km', en: 'Khmer' },
81
+ 'ta' => { name: 'தமிழ்', code: 'ta', en: 'Tamil' },
82
+ 'si' => { name: 'සිංහල', code: 'si', en: 'Sinhala' }
80
83
  }.freeze
81
84
 
82
85
  # Provides the ISO639-1 code for a given lang code.
@@ -1,7 +1,7 @@
1
1
  module Wovnrb
2
2
  def self.middleware_inserted?(app, middleware)
3
3
  app.middleware.send(:operations).each do |_, middlewares, _|
4
- return true if middlewares.include?(middleware)
4
+ return true if middlewares&.include?(middleware)
5
5
  end
6
6
 
7
7
  false
@@ -43,6 +43,7 @@ module Wovnrb
43
43
 
44
44
  insert_snippet(true)
45
45
  insert_hreflang_tags
46
+ inject_lang_html_tag
46
47
 
47
48
  html
48
49
  end
@@ -84,7 +85,7 @@ module Wovnrb
84
85
  end
85
86
 
86
87
  def strip_wovn_ignore(node, marker)
87
- put_replace_marker(node, marker) if node && node.get_attribute('wovn-ignore')
88
+ put_replace_marker(node, marker) if node && (node.get_attribute('wovn-ignore') || node.get_attribute('data-wovn-ignore'))
88
89
  end
89
90
 
90
91
  def put_replace_marker(node, marker)
@@ -108,15 +109,9 @@ module Wovnrb
108
109
  def inject_lang_html_tag
109
110
  root = @dom.at_css('html')
110
111
  return unless root
112
+ return if root['lang']
111
113
 
112
- current_lang = @headers.lang_code
113
- default_lang = @store.default_lang
114
-
115
- if current_lang != default_lang
116
- root['lang'] = current_lang
117
- else
118
- root.delete('lang')
119
- end
114
+ root['lang'] = @store.default_lang
120
115
  end
121
116
 
122
117
  def replace_hreflangs
data/lib/wovnrb/store.rb CHANGED
@@ -185,7 +185,7 @@ module Wovnrb
185
185
 
186
186
  def wovn_host
187
187
  if @settings['wovn_dev_mode']
188
- 'dev-wovn.io:3000'
188
+ 'dev-wovn.io'
189
189
  else
190
190
  'wovn.io'
191
191
  end
@@ -1,3 +1,3 @@
1
1
  module Wovnrb
2
- VERSION = '2.2.4'.freeze
2
+ VERSION = '2.5.1'.freeze
3
3
  end
@@ -74,24 +74,6 @@ module Wovnrb
74
74
  assert_equal('localhost', env['SERVER_NAME'])
75
75
  end
76
76
 
77
- def test_initialize_without_query
78
- env = Wovnrb.get_env
79
- h = Wovnrb::Headers.new(env, Wovnrb.get_settings)
80
- assert_equal('wovn.io/dashboard', h.redis_url)
81
- end
82
-
83
- def test_initialize_with_query
84
- env = Wovnrb.get_env
85
- h = Wovnrb::Headers.new(env, Wovnrb.get_settings('query' => ['param']))
86
- assert_equal('wovn.io/dashboard?param=val', h.redis_url)
87
- end
88
-
89
- def test_initialize_with_not_matching_query
90
- env = Wovnrb.get_env
91
- h = Wovnrb::Headers.new(env, Wovnrb.get_settings('query' => ['aaa']))
92
- assert_equal('wovn.io/dashboard', h.redis_url)
93
- end
94
-
95
77
  def test_initialize_with_proto_header
96
78
  env = Wovnrb.get_env('url' => 'http://page.com', 'HTTP_X_FORWARDED_PROTO' => 'https')
97
79
  h = Wovnrb::Headers.new(env, Wovnrb.get_settings('query' => ['aaa']))
@@ -6232,7 +6214,7 @@ module Wovnrb
6232
6214
  h = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings)
6233
6215
 
6234
6216
  keys = Wovnrb::Lang::LANG.keys
6235
- assert_equal(74, keys.size)
6217
+ assert_equal(77, keys.size)
6236
6218
 
6237
6219
  for key in keys
6238
6220
  uri_without_scheme = h.remove_lang("wovn.io/#{key}", key)
@@ -6246,7 +6228,7 @@ module Wovnrb
6246
6228
  def test_remove_lang_path_with_nil_lang
6247
6229
  h = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings)
6248
6230
  keys = Wovnrb::Lang::LANG.keys
6249
- assert_equal(74, keys.size)
6231
+ assert_equal(77, keys.size)
6250
6232
 
6251
6233
  uri_without_scheme = h.remove_lang('wovn.io', nil)
6252
6234
  assert_equal('wovn.io', uri_without_scheme)
@@ -6269,7 +6251,7 @@ module Wovnrb
6269
6251
  h = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings('url_pattern' => 'query'))
6270
6252
 
6271
6253
  keys = Wovnrb::Lang::LANG.keys
6272
- assert_equal(74, keys.size)
6254
+ assert_equal(77, keys.size)
6273
6255
 
6274
6256
  for key in keys
6275
6257
  uri_without_scheme = h.remove_lang("wovn.io/?wovn=#{key}", key)
@@ -6284,7 +6266,7 @@ module Wovnrb
6284
6266
  sut = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings('url_pattern' => 'query', 'lang_param_name' => 'lang'))
6285
6267
 
6286
6268
  keys = Wovnrb::Lang::LANG.keys
6287
- assert_equal(74, keys.size)
6269
+ assert_equal(77, keys.size)
6288
6270
 
6289
6271
  for key in keys
6290
6272
  uri_without_custom_lang_param = "wovn.io/?wovn=#{key}"
@@ -6302,7 +6284,7 @@ module Wovnrb
6302
6284
  def test_remove_lang_query_with_nil_lang
6303
6285
  h = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings('url_pattern' => 'query'))
6304
6286
  keys = Wovnrb::Lang::LANG.keys
6305
- assert_equal(74, keys.size)
6287
+ assert_equal(77, keys.size)
6306
6288
 
6307
6289
  uri_without_scheme = h.remove_lang('wovn.io', nil)
6308
6290
  assert_equal('wovn.io', uri_without_scheme)
@@ -6325,7 +6307,7 @@ module Wovnrb
6325
6307
  h = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings('url_pattern' => 'subdomain'))
6326
6308
 
6327
6309
  keys = Wovnrb::Lang::LANG.keys
6328
- assert_equal(74, keys.size)
6310
+ assert_equal(77, keys.size)
6329
6311
 
6330
6312
  for key in keys
6331
6313
  uri_without_scheme = h.remove_lang("#{key.downcase}.wovn.io/", key)
@@ -6339,7 +6321,7 @@ module Wovnrb
6339
6321
  def test_remove_lang_subdomain_with_nil_lang
6340
6322
  h = Wovnrb::Headers.new(Wovnrb.get_env, Wovnrb.get_settings('url_pattern' => 'subdomain'))
6341
6323
  keys = Wovnrb::Lang::LANG.keys
6342
- assert_equal(74, keys.size)
6324
+ assert_equal(77, keys.size)
6343
6325
 
6344
6326
  uri_without_scheme = h.remove_lang('wovn.io', nil)
6345
6327
  assert_equal('wovn.io', uri_without_scheme)
@@ -7,7 +7,7 @@ module Wovnrb
7
7
  end
8
8
 
9
9
  def test_langs_length
10
- assert_equal(74, Wovnrb::Lang::LANG.length)
10
+ assert_equal(77, Wovnrb::Lang::LANG.length)
11
11
  end
12
12
 
13
13
  def test_keys_exist
@@ -6,7 +6,7 @@ module Wovnrb
6
6
  converter = prepare_html_converter('<html><body><a class="test">hello</a></body></html>', supported_langs: %w[en vi])
7
7
  converted_html, = converter.build_api_compatible_html
8
8
 
9
- expected_html = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body><a class=\"test\">hello</a></body></html>"
9
+ expected_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body><a class=\"test\">hello</a></body></html>"
10
10
  assert_equal(expected_html, converted_html)
11
11
  end
12
12
 
@@ -19,7 +19,7 @@ module Wovnrb
19
19
  converter = prepare_html_converter('<html><body><a class="test">hello</a></body></html>', settings)
20
20
  converted_html, = converter.build_api_compatible_html
21
21
 
22
- expected_html = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=lang&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?lang=vi\"></head><body><a class=\"test\">hello</a></body></html>"
22
+ expected_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=lang&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?lang=vi\"></head><body><a class=\"test\">hello</a></body></html>"
23
23
  assert_equal(expected_html, converted_html)
24
24
  end
25
25
 
@@ -28,7 +28,7 @@ module Wovnrb
28
28
  converter = prepare_html_converter('<html><body><p>' + long_string + '</p></body></html>', supported_langs: %w[en vi])
29
29
  converted_html, = converter.build_api_compatible_html
30
30
 
31
- expected_html = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body><p>" + long_string + '</p></body></html>'
31
+ expected_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body><p>" + long_string + '</p></body></html>'
32
32
  assert_equal(expected_html, converted_html)
33
33
  end
34
34
 
@@ -36,6 +36,7 @@ module Wovnrb
36
36
  html = [
37
37
  '<html><body>',
38
38
  '<p>Hello <span wovn-ignore>WOVN</span><p>',
39
+ '<p>Hello <span data-wovn-ignore>WOVN</span><p>',
39
40
  '<div><span class="ignore-me">should be ignored</span></div>',
40
41
  '<span>Have a nice day!</span>',
41
42
  '</body></html>'
@@ -44,7 +45,7 @@ module Wovnrb
44
45
  converter = prepare_html_converter(html, ignore_class: ['ignore-me'])
45
46
  converted_html, = converter.build_api_compatible_html
46
47
 
47
- expected_convert_html = "<html><head><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"fr\" href=\"http://my-site.com/?wovn=fr\"><link rel=\"alternate\" hreflang=\"ja\" href=\"http://my-site.com/?wovn=ja\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body><p>Hello <span wovn-ignore=\"\"><!-- __wovn-backend-ignored-key-0 --></span></p><p></p><div><span class=\"ignore-me\"><!-- __wovn-backend-ignored-key-1 --></span></div><span>Have a nice day!</span></body></html>"
48
+ expected_convert_html = "<html lang=\"en\"><head><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"fr\" href=\"http://my-site.com/?wovn=fr\"><link rel=\"alternate\" hreflang=\"ja\" href=\"http://my-site.com/?wovn=ja\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body><p>Hello <span wovn-ignore=\"\"><!-- __wovn-backend-ignored-key-0 --></span></p><p></p><p>Hello <span data-wovn-ignore=\"\"><!-- __wovn-backend-ignored-key-1 --></span></p><p></p><div><span class=\"ignore-me\"><!-- __wovn-backend-ignored-key-2 --></span></div><span>Have a nice day!</span></body></html>"
48
49
  assert_equal(expected_convert_html, converted_html)
49
50
  end
50
51
 
@@ -61,7 +62,7 @@ module Wovnrb
61
62
  converter = prepare_html_converter(html, ignore_class: [])
62
63
  converted_html, = converter.build_api_compatible_html
63
64
 
64
- expected_convert_html = "<html><head><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"fr\" href=\"http://my-site.com/?wovn=fr\"><link rel=\"alternate\" hreflang=\"ja\" href=\"http://my-site.com/?wovn=ja\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body><form action=\"/test\" method=\"POST\"><!-- __wovn-backend-ignored-key-0 --></form></body></html>"
65
+ expected_convert_html = "<html lang=\"en\"><head><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"fr\" href=\"http://my-site.com/?wovn=fr\"><link rel=\"alternate\" hreflang=\"ja\" href=\"http://my-site.com/?wovn=ja\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body><form action=\"/test\" method=\"POST\"><!-- __wovn-backend-ignored-key-0 --></form></body></html>"
65
66
  assert_equal(expected_convert_html, converted_html)
66
67
  end
67
68
 
@@ -79,7 +80,7 @@ module Wovnrb
79
80
  converted_html, = converter.build_api_compatible_html
80
81
 
81
82
  expected_convert_html = [
82
- '<html><head>',
83
+ '<html lang="en"><head>',
83
84
  "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"fr\" href=\"http://my-site.com/?wovn=fr\"><link rel=\"alternate\" hreflang=\"ja\" href=\"http://my-site.com/?wovn=ja\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body>",
84
85
  '<input id="user-id" type="hidden" value="__wovn-backend-ignored-key-0">',
85
86
  '<input id="password" type="hidden" value="__wovn-backend-ignored-key-1">',
@@ -94,7 +95,7 @@ module Wovnrb
94
95
  converter = prepare_html_converter('<html><body><a>hello</a></body></html>', supported_langs: %w[en vi])
95
96
  translated_html = converter.build
96
97
 
97
- expected_html = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body><a>hello</a></body></html>"
98
+ expected_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body><a>hello</a></body></html>"
98
99
  assert_equal(expected_html, translated_html)
99
100
  end
100
101
 
@@ -102,7 +103,7 @@ module Wovnrb
102
103
  converter = prepare_html_converter('<html><body><a>hello</a></body></html>', supported_langs: [])
103
104
  translated_html = converter.build
104
105
 
105
- expected_html = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script></head><body><a>hello</a></body></html>"
106
+ expected_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script></head><body><a>hello</a></body></html>"
106
107
  assert_equal(expected_html, translated_html)
107
108
  end
108
109
 
@@ -110,7 +111,7 @@ module Wovnrb
110
111
  converter = prepare_html_converter('<html><head><title>TITLE</title></head><body><a>hello</a></body></html>', supported_langs: %w[en vi])
111
112
  translated_html = converter.build
112
113
 
113
- expected_html = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><title>TITLE</title><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body><a>hello</a></body></html>"
114
+ expected_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><title>TITLE</title><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body><a>hello</a></body></html>"
114
115
  assert_equal(expected_html, translated_html)
115
116
  end
116
117
 
@@ -118,7 +119,7 @@ module Wovnrb
118
119
  converter = prepare_html_converter('<html>hello<a>world</a></html>', supported_langs: [])
119
120
  translated_html = converter.build
120
121
 
121
- expected_html = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script></head><body>hello<a>world</a></body></html>"
122
+ expected_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script></head><body>hello<a>world</a></body></html>"
122
123
  assert_equal(expected_html, translated_html)
123
124
  end
124
125
 
@@ -133,7 +134,7 @@ module Wovnrb
133
134
  converter = HtmlConverter.new(dom, store, headers)
134
135
  translated_html = converter.build
135
136
 
136
- expected_html = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"ja\" href=\"http://my-site.com/?wovn=ja\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body>hello<a>world</a></body></html>"
137
+ expected_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=query&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"ja\" href=\"http://my-site.com/?wovn=ja\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/?wovn=vi\"></head><body>hello<a>world</a></body></html>"
137
138
  assert_equal(expected_html, translated_html)
138
139
  end
139
140
 
@@ -148,7 +149,7 @@ module Wovnrb
148
149
  converter = HtmlConverter.new(dom, store, headers)
149
150
  translated_html = converter.build
150
151
 
151
- expected_html = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=path&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"ja\" href=\"http://my-site.com/ja/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/vi/\"></head><body>hello<a>world</a></body></html>"
152
+ expected_html = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><script src=\"//j.wovn.io/1\" async=\"true\" data-wovnio=\"key=123456&amp;backend=true&amp;currentLang=en&amp;defaultLang=en&amp;urlPattern=path&amp;langCodeAliases={}&amp;langParamName=wovn&amp;version=WOVN.rb_#{VERSION}\" data-wovnio-type=\"fallback_snippet\"></script><link rel=\"alternate\" hreflang=\"en\" href=\"http://my-site.com/\"><link rel=\"alternate\" hreflang=\"ja\" href=\"http://my-site.com/ja/\"><link rel=\"alternate\" hreflang=\"vi\" href=\"http://my-site.com/vi/\"></head><body>hello<a>world</a></body></html>"
152
153
  assert_equal(expected_html, translated_html)
153
154
  end
154
155
 
@@ -168,18 +169,33 @@ module Wovnrb
168
169
  assert_equal(expected_html, converter.send(:html))
169
170
  end
170
171
 
171
- def test_inject_lang_html_tag
172
+ def test_inject_lang_html_tag_with_no_lang_in_html_tag
172
173
  settings = default_store_settings
173
174
  store = Wovnrb::Store.instance
174
175
  store.update_settings(settings)
175
176
 
176
177
  headers = Wovnrb::Headers.new(
177
- Wovnrb.get_env('url' => 'http://my-site.com/?wovn=ja'),
178
+ Wovnrb.get_env('url' => 'http://my-site.com/'),
178
179
  Wovnrb.get_settings(settings)
179
180
  )
180
181
  converter = HtmlConverter.new(get_dom('<html><body>hello</body></html>'), store, headers)
181
182
  converter.send(:inject_lang_html_tag)
182
- expected_html = '<html lang="ja"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body>hello</body></html>'
183
+ expected_html = '<html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body>hello</body></html>'
184
+ assert_equal(expected_html, converter.send(:html))
185
+ end
186
+
187
+ def test_inject_lang_html_tag_with_lang_in_html_tag
188
+ settings = default_store_settings
189
+ store = Wovnrb::Store.instance
190
+ store.update_settings(settings)
191
+
192
+ headers = Wovnrb::Headers.new(
193
+ Wovnrb.get_env('url' => 'http://my-site.com/'),
194
+ Wovnrb.get_settings(settings)
195
+ )
196
+ converter = HtmlConverter.new(get_dom('<html lang="th"><body>hello</body></html>'), store, headers)
197
+ converter.send(:inject_lang_html_tag)
198
+ expected_html = '<html lang="th"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body>hello</body></html>'
183
199
  assert_equal(expected_html, converter.send(:html))
184
200
  end
185
201
 
@@ -132,6 +132,7 @@ module Wovnrb
132
132
  store.update_settings('wovn_dev_mode' => true)
133
133
 
134
134
  assert(store.dev_mode?)
135
+ assert_equal('dev-wovn.io', store.wovn_host)
135
136
  assert_equal('http://dev-wovn.io:3001/v0/', store.settings['api_url'])
136
137
  assert_equal(3, store.settings['api_timeout_seconds'])
137
138
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wovnrb
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.4
4
+ version: 2.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Sandford
8
8
  - Antoine David
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-04-28 00:00:00.000000000 Z
12
+ date: 2021-03-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -410,6 +410,8 @@ files:
410
410
  - Gemfile
411
411
  - LICENSE.txt
412
412
  - PULL_REQUEST_TEMPLATE
413
+ - README.en.md
414
+ - README.ja.md
413
415
  - README.md
414
416
  - Rakefile
415
417
  - lib/wovnrb.rb
@@ -446,7 +448,7 @@ homepage: ''
446
448
  licenses:
447
449
  - MIT
448
450
  metadata: {}
449
- post_install_message:
451
+ post_install_message:
450
452
  rdoc_options: []
451
453
  require_paths:
452
454
  - lib
@@ -461,9 +463,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
461
463
  - !ruby/object:Gem::Version
462
464
  version: '0'
463
465
  requirements: []
464
- rubyforge_project:
465
- rubygems_version: 2.7.6.2
466
- signing_key:
466
+ rubygems_version: 3.0.3
467
+ signing_key:
467
468
  specification_version: 4
468
469
  summary: Gem for WOVN.io
469
470
  test_files:
data/README.md DELETED
@@ -1,182 +0,0 @@
1
- # WOVN.io Ruby Library
2
-
3
- The WOVN.io Ruby library is a library that uses WOVN.io in order to provide translations. The WOVN.io Ruby Library is packaged as Rack Middleware.
4
-
5
- This document explains the process of installing WOVN.io Ruby, as well as set up and configuration process.
6
-
7
- ## 1. Install
8
-
9
- ### 1.1. Creating a WOVN.io account.
10
-
11
- In order to use the WOVN.io Ruby Library, you need a WOVN.io account. If you do not have an account, please first sign up for one at WOVN.io.
12
-
13
- ### 1.2. Adding a Page
14
-
15
- After logging into WOVN.io, add a page that you would like translated.
16
-
17
- ### 1.3. Ruby Application Settings
18
-
19
- To use the WOVN.io Ruby Library, insert the following line into your Ruby Application's Gemfile. WOVN.io currently supports version 2.0.1 and up.
20
-
21
- ```ruby
22
- gem 'wovnrb', '>= 2.0.1'
23
- ```
24
-
25
- After setting the above, execute the following command to install the WOVN.io Ruby Library.
26
-
27
- ```bash
28
- bundle install
29
- ```
30
-
31
- After installing the library, insert the following into your Ruby Application's settings file.
32
-
33
- * If you're using Ruby on Rails
34
-
35
- Insert the following into either config/application.rb or config/environments/.
36
-
37
- ```ruby
38
- ...
39
-
40
- config.wovnrb = {
41
- :project_token => 'EnS!t3',
42
- :default_lang => 'en',
43
- :supported_langs => ['en'],
44
- :url_pattern => 'path'
45
- }
46
-
47
- ...
48
- ```
49
-
50
- * If you're using Sinatra
51
-
52
- Insert the following into either the Application File or config.ru.
53
-
54
- ```ruby
55
- ...
56
-
57
- require 'wovnrb'
58
-
59
- use Wovnrb::Interceptor, {
60
- :project_token => 'EnS!t3',
61
- :default_lang => 'en',
62
- :supported_langs => ['en'],
63
- :url_pattern => 'path'
64
- }
65
-
66
- ...
67
- ```
68
-
69
- After completing setup, start the Ruby Application, and make sure the WOVN.io library is working correctly.
70
-
71
- ## 2. Parameter Setting
72
-
73
- The following is a list of the WOVN.io Ruby Library's valid parameters.
74
-
75
- Parameter Name | Required | Default Setting
76
- ------------------ | -------- | ----------------
77
- project_token | yes | ''
78
- default_lang | yes | 'en'
79
- supported_langs | yes | ['en']
80
- url_pattern | yes | 'path'
81
- lang_param_name | | 'wovn'
82
- query | | []
83
- ignore_class | | []
84
- translate_fragment | | true
85
- ignore_paths | | []
86
-
87
- ### 2.1. project_token
88
-
89
- Set your WOVN.io Account's Project token. This parameter is required.
90
-
91
- ### 2.2. default_lang
92
-
93
- This sets the Ruby application's default language. The default value is English ('en').
94
-
95
- If, for a requested page, the default language parameter is included in the URL, the request is redirected before translating. The default_lang parameter is used for this purpose.
96
-
97
- If the default_lang is set to 'en', when receiving a request for the following URL,
98
-
99
- https://wovn.io/en/contact
100
-
101
- Then the library will redirect to the following URL.
102
-
103
- https://wovn.io/contact
104
-
105
- ### 2.3. supported_langs
106
- This tells the library which languages are being used on the website (including
107
- the original language). This setting allows for inserting metadata necessary for
108
- SEO (Search Engine Optimization).
109
-
110
- If your website is in English and you are using WOVN.io to localize it in
111
- Japanese, then you should use the following setting:
112
- ```
113
- :supported_langs => ['en', 'ja']
114
- ```
115
- **Note:** The order of the languages in the list does not matter.
116
-
117
- ### 2.4. url_pattern
118
-
119
- The Library works in the Ruby Application by adding new URLs to be translated. You can set the type of url with the `url_pattern` parameter. There are 3 types that can be set.
120
-
121
- parameters | Translated page's URL | Notes
122
- ----------- | ------------------------------- | -------
123
- 'path' | https://wovn.io/ja/contact | Default Value. If no settings have been set, url_pattern defaults to this value.
124
- 'subdomain' | https://ja.wovn.io/contact | DNS settings must be set.
125
- 'query' | https://wovn.io/contact?wovn=ja | The least amount of changes to the application required to complete setup.
126
-
127
- ※ The following is an example of a URL that has been translated by the library using the above URLs.
128
-
129
- https://wovn.io/contact
130
-
131
- ### 2.5 lang_param_name
132
- This parameter is only valid for when `url_pattern_name` is set to `'query'`.
133
-
134
- It allows you to set the query parameter name for declaring the language of the
135
- page. The default value for this setting is `'wovn'`, such that a page URL in
136
- translated language English has the form
137
- `https://my-website.com/index.php?wovn=en`. If you instead set the value to
138
- `'lang'`, then the later URL example would have the form
139
- `https://my-website.com/index.php?lang=en`.
140
-
141
- ### 2.6. query
142
-
143
- WOVN.io ignores query parameters when searching a translated page. If you want to add a query parameter to translated page's URL, you should configure the `query` parameter. (You need to configure WOVN.io too)
144
-
145
- https://wovn.io/ja/contact?os=mac&keyboard=us
146
-
147
- If the `default_lang` is 'en', and the query is set to '', the above URL will be modified into the following URL to search for the page's translation.
148
-
149
- https://wovn.io/contact
150
-
151
- If the `default_lang` is 'en', and the query is set to 'os', the above URL will be modified into the following URL to search for the page's translation.
152
-
153
- https://wovn.io/contact?os=mac
154
-
155
- ### 2.7. ignore_class
156
-
157
- This sets "Ignore class" which prevents WOVN from translating HTML elements that have a class contained in this array.
158
-
159
- ### 2.8. translate_fragment
160
-
161
- This option allows to disable translating partial HTML content. By default,
162
- partial HTML content is translated but no widget snippet is added. Set
163
- `translate_fragment` to `false` to prevent translating partial HTML content.
164
-
165
- ### 2.9 ignore_paths
166
-
167
- This parameter tells WOVN.rb to not localize content withing given directories.
168
-
169
- The directories given will only be matched against the beginning of the URL path.
170
-
171
- For instance, if you want to not localize the admin directory of your website, you should add the following to you WOVN.rb configuration.
172
- ```
173
- 'ignore_paths' => ['/admin/']
174
- ```
175
-
176
- ## 3. Contributing
177
-
178
- 1. Fork it ( https://github.com/WOVNio/wovnrb/fork )
179
- 2. Create your feature branch (`git checkout -b my-new-feature`)
180
- 3. Commit your changes (`git commit -am 'Add some feature'`)
181
- 4. Push to the branch (`git push origin my-new-feature`)
182
- 5. Create a new Pull Request