Skip to content

Commit b272746

Browse files
authored
Add language dropdown menu but only for versions 3.13 and later (#725)
* Enable language dropdown menu * Make specific versions show language dropdown menu Add a conditional statement where only certain versions specified in `docusaurus.config.js` should show language dropdown menu. * Add custom field (`allowedLanguageDropdownVersions`) The custom field `allowedLanguageDropdownVersions` specifies which versions of docs should show the language dropdown menu. This custom field is based on the conditional statements in `src/theme/NavbarItem/LocaleDropdownNavbarItem/index.js`. * Redirect visitors on versions without Japanese docs If a version doesn't have Japanese docs, redirect visitors to the English page and URL. Without this fix, visitors would see English content with Japanese UI elements on a link with `ja-jp` in the URL. * Show Google Translate widget only on 3.4 to 3.12 Since ScalarDB 3.13 and later will have Japanese versions of docs, the Google Translate widget should still appear at the top of the page for earlier versions. * Fix Google Translate widget not reappearing on versions This commit fixes an issue with the Google Translate widget not reappearing when navigating from a version that has Japanese docs (like 3.13), to a version that doesn't have Japanese docs (like 3.12), then moving back to a version that has Japanese docs, (like 3.13), and then back to a version that doesn't have Japanese docs (like 3.11). * Update README.mdx * Create README.mdx * Remove redirect Redirects don't seem to work for docs in the non-primary language.
1 parent 7482f41 commit b272746

File tree

5 files changed

+241
-69
lines changed

5 files changed

+241
-69
lines changed

docusaurus.config.js

Lines changed: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -29,26 +29,26 @@ const config = {
2929
// Even if you don't use internationalization, you can use this field to set
3030
// useful metadata like html lang. For example, if your site is Chinese, you
3131
// may want to replace "en" with "zh-Hans".
32-
// i18n: {
33-
// defaultLocale: 'en-us',
34-
// locales: ['en-us', 'ja-jp'],
35-
// localeConfigs: {
36-
// 'en-us': {
37-
// label: 'English',
38-
// direction: 'ltr',
39-
// htmlLang: 'en-US',
40-
// calendar: 'gregory',
41-
// path: 'versioned_docs/en-us',
42-
// },
43-
// 'ja-jp': {
44-
// label: '日本語',
45-
// direction: 'ltr',
46-
// htmlLang: 'ja-JP',
47-
// calendar: 'gregory',
48-
// path: 'versioned_docs/ja-jp',
49-
// },
50-
// },
51-
// },
32+
i18n: {
33+
defaultLocale: 'en-us',
34+
locales: ['en-us', 'ja-jp'],
35+
localeConfigs: {
36+
'en-us': {
37+
label: 'English',
38+
direction: 'ltr',
39+
htmlLang: 'en-US',
40+
calendar: 'gregory',
41+
path: 'versioned_docs/en-us',
42+
},
43+
'ja-jp': {
44+
label: '日本語',
45+
direction: 'ltr',
46+
htmlLang: 'ja-JP',
47+
calendar: 'gregory',
48+
path: 'versioned_docs/ja-jp',
49+
},
50+
},
51+
},
5252

5353
presets: [
5454
[
@@ -148,6 +148,11 @@ const config = {
148148
],
149149
],
150150

151+
// The following versions have Japanese docs, so the language dropdown should be displayed only when visitors are reading these versions of docs.
152+
customFields: {
153+
allowedLanguageDropdownVersions: ["current", "latest", "3.13"],
154+
},
155+
151156
plugins: [
152157
[
153158
'@docusaurus/plugin-client-redirects',
@@ -344,19 +349,16 @@ const config = {
344349
position: 'right',
345350
label: 'Scalar Docs Home',
346351
},
352+
{
353+
type: 'localeDropdown',
354+
position: 'right',
355+
},
347356
{
348357
href: 'https://github.com/scalar-labs/scalardb',
349358
position: 'right',
350359
className: 'header-github-link',
351360
'aria-label': 'GitHub repository',
352361
},
353-
/*
354-
The "localeDropdown" configuration should be uncommented (enabled) after we create Japanese versions of docs.
355-
*/
356-
// {
357-
// type: 'localeDropdown',
358-
// position: 'right',
359-
// },
360362
],
361363
},
362364
algolia: {

i18n/versioned_docs/ja-jp/docusaurus-plugin-content-docs/current/scalar-licensing/README.mdx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ tags:
99
import Tabs from '@theme/Tabs';
1010
import TabItem from '@theme/TabItem';
1111
import TranslationBanner from '/src/components/_translation-ja-jp.mdx';
12+
import Tabs from '@theme/Tabs';
13+
import TabItem from '@theme/TabItem';
1214

1315
<TranslationBanner />
1416

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
---
2+
tags:
3+
- Enterprise Standard
4+
- Enterprise Premium
5+
---
6+
7+
# 製品ライセンスキーの設定方法
8+
9+
import TranslationBanner from '/src/components/_translation-ja-jp.mdx';
10+
import Tabs from '@theme/Tabs';
11+
import TabItem from '@theme/TabItem';
12+
13+
<TranslationBanner />
14+
15+
Scalar 製品を実行するには、`.properties` ファイルを作成し、製品のライセンスキーと証明書をそのファイルに追加する必要があります。 `.properties` ファイルで、使用している製品に基づいて次の構成のいずれかをコピーし、その内容を `.properties` ファイルに貼り付けて、`<YOUR_LICENSE_KEY>` をライセンスキーに置き換えます。
16+
17+
:::note
18+
19+
ライセンスキーをお持ちでない場合は、[お問い合わせ](https://www.scalar-labs.com/contact)までご連絡ください。
20+
21+
:::
22+
23+
:::warning
24+
25+
トライアルライセンスを使用している場合は、使用している Scalar 製品をインターネットに接続する必要があります。トライアルライセンスが有効で期限が切れていないかどうかを確認するには、インターネット接続が必要です。
26+
27+
:::
28+
29+
## ScalarDB
30+
31+
使用している製品を選択して、製品のライセンスキーと証明書の構成を確認します。
32+
33+
### ScalarDB Enterprise Edition
34+
35+
<Tabs groupId="scalardb-enterprise" queryString>
36+
<TabItem value="scalardb-enterprise-edition-standard" label="ScalarDB Enterprise Edition (Standard)" default>
37+
```properties
38+
scalar.db.cluster.node.licensing.license_key=<YOUR_LICENSE_KEY>
39+
scalar.db.cluster.node.licensing.license_check_cert_pem=-----BEGIN CERTIFICATE-----\nMIICKzCCAdKgAwIBAgIIBXxj3s8NU+owCgYIKoZIzj0EAwIwbDELMAkGA1UEBhMC\nSlAxDjAMBgNVBAgTBVRva3lvMREwDwYDVQQHEwhTaGluanVrdTEVMBMGA1UEChMM\nU2NhbGFyLCBJbmMuMSMwIQYDVQQDExplbnRlcnByaXNlLnNjYWxhci1sYWJzLmNv\nbTAeFw0yMzExMTYwNzExNTdaFw0yNDAyMTUxMzE2NTdaMGwxCzAJBgNVBAYTAkpQ\nMQ4wDAYDVQQIEwVUb2t5bzERMA8GA1UEBxMIU2hpbmp1a3UxFTATBgNVBAoTDFNj\nYWxhciwgSW5jLjEjMCEGA1UEAxMaZW50ZXJwcmlzZS5zY2FsYXItbGFicy5jb20w\nWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATJx5gvAr+GZAHcBpUvDFDsUlFo4GNw\npRfsntzwStIP8ac3dew7HT4KbGBWei0BvIthleaqpv0AEP7JT6eYAkNvo14wXDAO\nBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwG\nA1UdEwEB/wQCMAAwHQYDVR0OBBYEFMIe+XuuZcnDX1c3TmUPlu3kNv/wMAoGCCqG\nSM49BAMCA0cAMEQCIGGlqKpgv+KW+Z1ZkjfMHjSGeUZKBLwfMtErVyc9aTdIAiAy\nvsZyZP6Or9o40x3l3pw/BT7wvy93Jm0T4vtVQH6Zuw==\n-----END CERTIFICATE-----
40+
```
41+
</TabItem>
42+
<TabItem value="scalardb-enterprise-edition-premium" label="ScalarDB Enterprise Edition (Premium)">
43+
```properties
44+
scalar.db.cluster.node.licensing.license_key=<YOUR_LICENSE_KEY>
45+
scalar.db.cluster.node.licensing.license_check_cert_pem=-----BEGIN CERTIFICATE-----\nMIICKzCCAdKgAwIBAgIIBXxj3s8NU+owCgYIKoZIzj0EAwIwbDELMAkGA1UEBhMC\nSlAxDjAMBgNVBAgTBVRva3lvMREwDwYDVQQHEwhTaGluanVrdTEVMBMGA1UEChMM\nU2NhbGFyLCBJbmMuMSMwIQYDVQQDExplbnRlcnByaXNlLnNjYWxhci1sYWJzLmNv\nbTAeFw0yMzExMTYwNzExNTdaFw0yNDAyMTUxMzE2NTdaMGwxCzAJBgNVBAYTAkpQ\nMQ4wDAYDVQQIEwVUb2t5bzERMA8GA1UEBxMIU2hpbmp1a3UxFTATBgNVBAoTDFNj\nYWxhciwgSW5jLjEjMCEGA1UEAxMaZW50ZXJwcmlzZS5zY2FsYXItbGFicy5jb20w\nWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATJx5gvAr+GZAHcBpUvDFDsUlFo4GNw\npRfsntzwStIP8ac3dew7HT4KbGBWei0BvIthleaqpv0AEP7JT6eYAkNvo14wXDAO\nBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwG\nA1UdEwEB/wQCMAAwHQYDVR0OBBYEFMIe+XuuZcnDX1c3TmUPlu3kNv/wMAoGCCqG\nSM49BAMCA0cAMEQCIGGlqKpgv+KW+Z1ZkjfMHjSGeUZKBLwfMtErVyc9aTdIAiAy\nvsZyZP6Or9o40x3l3pw/BT7wvy93Jm0T4vtVQH6Zuw==\n-----END CERTIFICATE-----
46+
```
47+
</TabItem>
48+
<TabItem value="scalardb-enterprise-edition-trial" label="ScalarDB Enterprise Edition (トライアルライセンス)">
49+
```properties
50+
scalar.db.cluster.node.licensing.license_key=<YOUR_LICENSE_KEY>
51+
scalar.db.cluster.node.licensing.license_check_cert_pem=-----BEGIN CERTIFICATE-----\nMIICIzCCAcigAwIBAgIIKT9LIGX1TJQwCgYIKoZIzj0EAwIwZzELMAkGA1UEBhMC\nSlAxDjAMBgNVBAgTBVRva3lvMREwDwYDVQQHEwhTaGluanVrdTEVMBMGA1UEChMM\nU2NhbGFyLCBJbmMuMR4wHAYDVQQDExV0cmlhbC5zY2FsYXItbGFicy5jb20wHhcN\nMjMxMTE2MDcxMDM5WhcNMjQwMjE1MTMxNTM5WjBnMQswCQYDVQQGEwJKUDEOMAwG\nA1UECBMFVG9reW8xETAPBgNVBAcTCFNoaW5qdWt1MRUwEwYDVQQKEwxTY2FsYXIs\nIEluYy4xHjAcBgNVBAMTFXRyaWFsLnNjYWxhci1sYWJzLmNvbTBZMBMGByqGSM49\nAgEGCCqGSM49AwEHA0IABBSkIYAk7r5FRDf5qRQ7dbD3ib5g3fb643h4hqCtK+lC\nwM4AUr+PPRoquAy+Ey2sWEvYrWtl2ZjiYyyiZw8slGCjXjBcMA4GA1UdDwEB/wQE\nAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIw\nADAdBgNVHQ4EFgQUbFyOWFrsjkkOvjw6vK3gGUADGOcwCgYIKoZIzj0EAwIDSQAw\nRgIhAKwigOb74z9BdX1+dUpeVG8WrzLTIqdIU0w+9jhAueXoAiEA6cniJ3qsP4j7\nsck62kHnFpH1fCUOc/b/B8ZtfeXI2Iw=\n-----END CERTIFICATE-----
52+
```
53+
</TabItem>
54+
</Tabs>
55+
56+
### ScalarDB Analytics with Spark
57+
58+
<Tabs groupId="scalardb-analytics-with-spark" queryString>
59+
<TabItem value="scalardb-analytics-with-spark" label="ScalarDB Analytics with Spark">
60+
```apacheconf
61+
spark.sql.catalog.scalardb_catalog.license.key <YOUR_LICENSE_KEY>
62+
spark.sql.catalog.scalardb_catalog.license.cert_pem -----BEGIN CERTIFICATE-----\nMIICKzCCAdKgAwIBAgIIBXxj3s8NU+owCgYIKoZIzj0EAwIwbDELMAkGA1UEBhMC\nSlAxDjAMBgNVBAgTBVRva3lvMREwDwYDVQQHEwhTaGluanVrdTEVMBMGA1UEChMM\nU2NhbGFyLCBJbmMuMSMwIQYDVQQDExplbnRlcnByaXNlLnNjYWxhci1sYWJzLmNv\nbTAeFw0yMzExMTYwNzExNTdaFw0yNDAyMTUxMzE2NTdaMGwxCzAJBgNVBAYTAkpQ\nMQ4wDAYDVQQIEwVUb2t5bzERMA8GA1UEBxMIU2hpbmp1a3UxFTATBgNVBAoTDFNj\nYWxhciwgSW5jLjEjMCEGA1UEAxMaZW50ZXJwcmlzZS5zY2FsYXItbGFicy5jb20w\nWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATJx5gvAr+GZAHcBpUvDFDsUlFo4GNw\npRfsntzwStIP8ac3dew7HT4KbGBWei0BvIthleaqpv0AEP7JT6eYAkNvo14wXDAO\nBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwG\nA1UdEwEB/wQCMAAwHQYDVR0OBBYEFMIe+XuuZcnDX1c3TmUPlu3kNv/wMAoGCCqG\nSM49BAMCA0cAMEQCIGGlqKpgv+KW+Z1ZkjfMHjSGeUZKBLwfMtErVyc9aTdIAiAy\nvsZyZP6Or9o40x3l3pw/BT7wvy93Jm0T4vtVQH6Zuw==\n-----END CERTIFICATE-----
63+
```
64+
</TabItem>
65+
<TabItem value="scalardb-analytics-with-spark-trial" label="ScalarDB Analytics with Spark (トライアルライセンス)">
66+
```apacheconf
67+
spark.sql.catalog.scalardb_catalog.license.key <YOUR_LICENSE_KEY>
68+
spark.sql.catalog.scalardb_catalog.license.cert_pem -----BEGIN CERTIFICATE-----\nMIICIzCCAcigAwIBAgIIKT9LIGX1TJQwCgYIKoZIzj0EAwIwZzELMAkGA1UEBhMC\nSlAxDjAMBgNVBAgTBVRva3lvMREwDwYDVQQHEwhTaGluanVrdTEVMBMGA1UEChMM\nU2NhbGFyLCBJbmMuMR4wHAYDVQQDExV0cmlhbC5zY2FsYXItbGFicy5jb20wHhcN\nMjMxMTE2MDcxMDM5WhcNMjQwMjE1MTMxNTM5WjBnMQswCQYDVQQGEwJKUDEOMAwG\nA1UECBMFVG9reW8xETAPBgNVBAcTCFNoaW5qdWt1MRUwEwYDVQQKEwxTY2FsYXIs\nIEluYy4xHjAcBgNVBAMTFXRyaWFsLnNjYWxhci1sYWJzLmNvbTBZMBMGByqGSM49\nAgEGCCqGSM49AwEHA0IABBSkIYAk7r5FRDf5qRQ7dbD3ib5g3fb643h4hqCtK+lC\nwM4AUr+PPRoquAy+Ey2sWEvYrWtl2ZjiYyyiZw8slGCjXjBcMA4GA1UdDwEB/wQE\nAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIw\nADAdBgNVHQ4EFgQUbFyOWFrsjkkOvjw6vK3gGUADGOcwCgYIKoZIzj0EAwIDSQAw\nRgIhAKwigOb74z9BdX1+dUpeVG8WrzLTIqdIU0w+9jhAueXoAiEA6cniJ3qsP4j7\nsck62kHnFpH1fCUOc/b/B8ZtfeXI2Iw=\n-----END CERTIFICATE-----
69+
```
70+
</TabItem>
71+
</Tabs>
72+
73+
## ScalarDL
74+
75+
使用している製品を選択して、製品のライセンスキーと証明書の構成を確認します。
76+
77+
### ScalarDL Ledger
78+
79+
<Tabs groupId="scalardl-ledger" queryString>
80+
<TabItem value="scalardl-ledger" label="ScalarDL Ledger">
81+
```properties
82+
scalar.dl.licensing.license_key=<YOUR_LICENSE_KEY>
83+
scalar.dl.licensing.license_check_cert_pem=-----BEGIN CERTIFICATE-----\nMIICKzCCAdKgAwIBAgIIBXxj3s8NU+owCgYIKoZIzj0EAwIwbDELMAkGA1UEBhMC\nSlAxDjAMBgNVBAgTBVRva3lvMREwDwYDVQQHEwhTaGluanVrdTEVMBMGA1UEChMM\nU2NhbGFyLCBJbmMuMSMwIQYDVQQDExplbnRlcnByaXNlLnNjYWxhci1sYWJzLmNv\nbTAeFw0yMzExMTYwNzExNTdaFw0yNDAyMTUxMzE2NTdaMGwxCzAJBgNVBAYTAkpQ\nMQ4wDAYDVQQIEwVUb2t5bzERMA8GA1UEBxMIU2hpbmp1a3UxFTATBgNVBAoTDFNj\nYWxhciwgSW5jLjEjMCEGA1UEAxMaZW50ZXJwcmlzZS5zY2FsYXItbGFicy5jb20w\nWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATJx5gvAr+GZAHcBpUvDFDsUlFo4GNw\npRfsntzwStIP8ac3dew7HT4KbGBWei0BvIthleaqpv0AEP7JT6eYAkNvo14wXDAO\nBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwG\nA1UdEwEB/wQCMAAwHQYDVR0OBBYEFMIe+XuuZcnDX1c3TmUPlu3kNv/wMAoGCCqG\nSM49BAMCA0cAMEQCIGGlqKpgv+KW+Z1ZkjfMHjSGeUZKBLwfMtErVyc9aTdIAiAy\nvsZyZP6Or9o40x3l3pw/BT7wvy93Jm0T4vtVQH6Zuw==\n-----END CERTIFICATE-----
84+
```
85+
</TabItem>
86+
<TabItem value="scalardl-ledger-trial" label="ScalarDL Ledger (トライアルライセンス)">
87+
```properties
88+
scalar.dl.licensing.license_key=<YOUR_LICENSE_KEY>
89+
scalar.dl.licensing.license_check_cert_pem=-----BEGIN CERTIFICATE-----\nMIICIzCCAcigAwIBAgIIKT9LIGX1TJQwCgYIKoZIzj0EAwIwZzELMAkGA1UEBhMC\nSlAxDjAMBgNVBAgTBVRva3lvMREwDwYDVQQHEwhTaGluanVrdTEVMBMGA1UEChMM\nU2NhbGFyLCBJbmMuMR4wHAYDVQQDExV0cmlhbC5zY2FsYXItbGFicy5jb20wHhcN\nMjMxMTE2MDcxMDM5WhcNMjQwMjE1MTMxNTM5WjBnMQswCQYDVQQGEwJKUDEOMAwG\nA1UECBMFVG9reW8xETAPBgNVBAcTCFNoaW5qdWt1MRUwEwYDVQQKEwxTY2FsYXIs\nIEluYy4xHjAcBgNVBAMTFXRyaWFsLnNjYWxhci1sYWJzLmNvbTBZMBMGByqGSM49\nAgEGCCqGSM49AwEHA0IABBSkIYAk7r5FRDf5qRQ7dbD3ib5g3fb643h4hqCtK+lC\nwM4AUr+PPRoquAy+Ey2sWEvYrWtl2ZjiYyyiZw8slGCjXjBcMA4GA1UdDwEB/wQE\nAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIw\nADAdBgNVHQ4EFgQUbFyOWFrsjkkOvjw6vK3gGUADGOcwCgYIKoZIzj0EAwIDSQAw\nRgIhAKwigOb74z9BdX1+dUpeVG8WrzLTIqdIU0w+9jhAueXoAiEA6cniJ3qsP4j7\nsck62kHnFpH1fCUOc/b/B8ZtfeXI2Iw=\n-----END CERTIFICATE-----
90+
```
91+
</TabItem>
92+
</Tabs>
93+
94+
### ScalarDL Auditor
95+
96+
<Tabs groupId="scalardl-auditor" queryString>
97+
<TabItem value="scalardl-auditor" label="ScalarDL Auditor">
98+
```properties
99+
scalar.dl.licensing.license_key=<YOUR_LICENSE_KEY>
100+
scalar.dl.licensing.license_check_cert_pem=-----BEGIN CERTIFICATE-----\nMIICKzCCAdKgAwIBAgIIBXxj3s8NU+owCgYIKoZIzj0EAwIwbDELMAkGA1UEBhMC\nSlAxDjAMBgNVBAgTBVRva3lvMREwDwYDVQQHEwhTaGluanVrdTEVMBMGA1UEChMM\nU2NhbGFyLCBJbmMuMSMwIQYDVQQDExplbnRlcnByaXNlLnNjYWxhci1sYWJzLmNv\nbTAeFw0yMzExMTYwNzExNTdaFw0yNDAyMTUxMzE2NTdaMGwxCzAJBgNVBAYTAkpQ\nMQ4wDAYDVQQIEwVUb2t5bzERMA8GA1UEBxMIU2hpbmp1a3UxFTATBgNVBAoTDFNj\nYWxhciwgSW5jLjEjMCEGA1UEAxMaZW50ZXJwcmlzZS5zY2FsYXItbGFicy5jb20w\nWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATJx5gvAr+GZAHcBpUvDFDsUlFo4GNw\npRfsntzwStIP8ac3dew7HT4KbGBWei0BvIthleaqpv0AEP7JT6eYAkNvo14wXDAO\nBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwG\nA1UdEwEB/wQCMAAwHQYDVR0OBBYEFMIe+XuuZcnDX1c3TmUPlu3kNv/wMAoGCCqG\nSM49BAMCA0cAMEQCIGGlqKpgv+KW+Z1ZkjfMHjSGeUZKBLwfMtErVyc9aTdIAiAy\nvsZyZP6Or9o40x3l3pw/BT7wvy93Jm0T4vtVQH6Zuw==\n-----END CERTIFICATE-----
101+
```
102+
</TabItem>
103+
<TabItem value="scalardl-auditor-trial" label="ScalarDL Auditor (トライアルライセンス)">
104+
```properties
105+
scalar.dl.licensing.license_key=<YOUR_LICENSE_KEY>
106+
scalar.dl.licensing.license_check_cert_pem=-----BEGIN CERTIFICATE-----\nMIICIzCCAcigAwIBAgIIKT9LIGX1TJQwCgYIKoZIzj0EAwIwZzELMAkGA1UEBhMC\nSlAxDjAMBgNVBAgTBVRva3lvMREwDwYDVQQHEwhTaGluanVrdTEVMBMGA1UEChMM\nU2NhbGFyLCBJbmMuMR4wHAYDVQQDExV0cmlhbC5zY2FsYXItbGFicy5jb20wHhcN\nMjMxMTE2MDcxMDM5WhcNMjQwMjE1MTMxNTM5WjBnMQswCQYDVQQGEwJKUDEOMAwG\nA1UECBMFVG9reW8xETAPBgNVBAcTCFNoaW5qdWt1MRUwEwYDVQQKEwxTY2FsYXIs\nIEluYy4xHjAcBgNVBAMTFXRyaWFsLnNjYWxhci1sYWJzLmNvbTBZMBMGByqGSM49\nAgEGCCqGSM49AwEHA0IABBSkIYAk7r5FRDf5qRQ7dbD3ib5g3fb643h4hqCtK+lC\nwM4AUr+PPRoquAy+Ey2sWEvYrWtl2ZjiYyyiZw8slGCjXjBcMA4GA1UdDwEB/wQE\nAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIw\nADAdBgNVHQ4EFgQUbFyOWFrsjkkOvjw6vK3gGUADGOcwCgYIKoZIzj0EAwIDSQAw\nRgIhAKwigOb74z9BdX1+dUpeVG8WrzLTIqdIU0w+9jhAueXoAiEA6cniJ3qsP4j7\nsck62kHnFpH1fCUOc/b/B8ZtfeXI2Iw=\n-----END CERTIFICATE-----
107+
```
108+
</TabItem>
109+
</Tabs>

src/theme/NavbarItem/HtmlNavbarItem.tsx

Lines changed: 67 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -5,64 +5,89 @@
55
* LICENSE file in the root directory of this source tree.
66
*/
77

8-
import React, {useEffect} from 'react';
8+
import React, { useEffect } from 'react';
99
import clsx from 'clsx';
10+
import { useLocation } from '@docusaurus/router';
11+
import type { Props } from '@theme/NavbarItem/HtmlNavbarItem';
1012

11-
import type {Props} from '@theme/NavbarItem/HtmlNavbarItem';
13+
function loadGoogleTranslateScript(callback: () => void) {
14+
if (typeof window !== 'undefined' && typeof document !== 'undefined') {
15+
const existingScript = document.getElementById('google-translate-script');
16+
if (!existingScript) {
17+
const addScript = document.createElement('script');
18+
addScript.src = '//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit';
19+
addScript.async = true;
20+
addScript.id = 'google-translate-script';
21+
addScript.onload = callback; // Trigger callback once loaded.
22+
document.body.appendChild(addScript);
23+
} else {
24+
callback(); // Script already exists, proceed to callback directly.
25+
}
26+
}
27+
}
1228

13-
function loadGoogleTranslateScript() {
14-
if (typeof window !== "undefined" && typeof document !== "undefined") {
15-
const addScript = document.createElement('script');
16-
addScript.src = '//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit';
17-
addScript.async = true;
18-
document.body.appendChild(addScript);
19-
window.googleTranslateElementInit = async function () {
20-
// Function to initialize the Google Translate widget
21-
const initGoogleTranslate = () => {
22-
new google.translate.TranslateElement(
29+
function initializeGoogleTranslate() {
30+
if (typeof window !== 'undefined' && window.google && window.google.translate) {
31+
const targetElement = document.getElementById('google_translate_element');
32+
if (targetElement && !window.googleTranslateElement) {
33+
try {
34+
window.googleTranslateElement = new window.google.translate.TranslateElement(
2335
{ pageLanguage: 'en', includedLanguages: 'ja' },
2436
'google_translate_element'
2537
);
26-
};
27-
28-
// Function will wait for element id to be available
29-
const waitForElement = () => {
30-
return new Promise<void>((resolve) => {
31-
const checkElement = () => {
32-
const targetElement = document.getElementById('google_translate_element');
33-
if (targetElement) {
34-
// If the target element is available, resolve the Promise
35-
resolve();
36-
} else {
37-
// If the target element is not available, wait and check again
38-
setTimeout(checkElement, 100); // Adjust the time delay as needed
39-
}
40-
};
41-
checkElement(); // Start checking for the element
42-
});
43-
};
44-
45-
// Wait for the target element to be available before initializing the widget
46-
await waitForElement();
47-
initGoogleTranslate();
48-
};
49-
38+
} catch (error) {
39+
console.error('Error initializing Google Translate:', error);
40+
}
41+
}
5042
}
5143
}
44+
45+
function removeGoogleTranslateWidget() {
46+
const existingElement = document.getElementById('google_translate_element');
47+
if (existingElement) existingElement.innerHTML = ''; // Clear content.
48+
const script = document.getElementById('google-translate-script');
49+
if (script) script.remove(); // Remove the Google Translate script.
50+
window.googleTranslateElement = null;
51+
}
52+
5253
export default function HtmlNavbarItem({
5354
value,
5455
className,
5556
mobile = false,
5657
isDropdownItem = false,
5758
}: Props): JSX.Element {
5859
const Comp = isDropdownItem ? 'li' : 'div';
60+
const { pathname } = useLocation();
61+
62+
const allowedVersions = ['3.4', '3.5', '3.6', '3.7', '3.8', '3.9', '3.10', '3.11', '3.12'];
63+
const versionMatch = pathname.match(/\/docs\/(\d+\.\d+)\//);
64+
const currentVersion = versionMatch ? versionMatch[1] : null;
65+
5966
useEffect(() => {
60-
if(process.env.NODE_ENV !== 'development') {
61-
loadGoogleTranslateScript();
67+
if (currentVersion && allowedVersions.includes(currentVersion)) {
68+
// Ensure Google Translate script is loaded.
69+
loadGoogleTranslateScript(() => {
70+
if (!sessionStorage.getItem('googleTranslateInitialized')) {
71+
window.googleTranslateElementInit = () => {
72+
initializeGoogleTranslate();
73+
sessionStorage.setItem('googleTranslateInitialized', 'true');
74+
};
75+
} else {
76+
initializeGoogleTranslate(); // Re-initialize if already loaded.
77+
}
78+
});
6279
} else {
63-
console.log('Google Translate Not loaded in Dev');
80+
// Clear widget if on an unallowed version.
81+
removeGoogleTranslateWidget();
82+
sessionStorage.removeItem('googleTranslateInitialized');
6483
}
65-
},[]);
84+
}, [currentVersion]);
85+
86+
// Hide component if version is not in allowed versions.
87+
if (currentVersion && !allowedVersions.includes(currentVersion)) {
88+
return null;
89+
}
90+
6691
return (
6792
<Comp
6893
className={clsx(
@@ -72,7 +97,7 @@ export default function HtmlNavbarItem({
7297
},
7398
className,
7499
)}
75-
dangerouslySetInnerHTML={{__html: value}}
100+
dangerouslySetInnerHTML={{ __html: value }}
76101
/>
77102
);
78-
}
103+
}

0 commit comments

Comments
 (0)