wovnrb 2.2.4 → 2.5.1

Sign up to get free protection for your applications and to get access to all the features.
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