|
1 | 1 | <script setup lang="ts"> |
| 2 | +import { useI18n } from 'vue-i18n'; |
2 | 3 | import { useQueryParamOrStorage } from '@/composable/queryParams'; |
3 | 4 |
|
| 5 | +const { t } = useI18n(); |
| 6 | +
|
4 | 7 | const dbType = useQueryParamOrStorage({ name: 'type', storageName: 'conn-string-builder:t', defaultValue: 'postgres' }); |
5 | 8 | const dbOptions = [ |
6 | | - { label: 'MySQL', value: 'mysql' }, |
7 | | - { label: 'PostgreSQL', value: 'postgres' }, |
8 | | - { label: 'SQL Server', value: 'sqlserver' }, |
9 | | - { label: 'SQLite', value: 'sqlite' }, |
10 | | - { label: 'MongoDB', value: 'mongodb' }, |
| 9 | + { label: t('tools.database-connection-string-builder.texts.label-mysql'), value: 'mysql' }, |
| 10 | + { label: t('tools.database-connection-string-builder.texts.label-postgresql'), value: 'postgres' }, |
| 11 | + { label: t('tools.database-connection-string-builder.texts.label-sql-server'), value: 'sqlserver' }, |
| 12 | + { label: t('tools.database-connection-string-builder.texts.label-sqlite'), value: 'sqlite' }, |
| 13 | + { label: t('tools.database-connection-string-builder.texts.label-mongodb'), value: 'mongodb' }, |
11 | 14 | ]; |
12 | 15 |
|
13 | 16 | const formatOptions = [ |
14 | | - { label: 'URI Scheme', value: 'uri' }, |
15 | | - { label: 'Keyword-Value Pairs', value: 'kvp' }, |
| 17 | + { label: t('tools.database-connection-string-builder.texts.label-uri-scheme'), value: 'uri' }, |
| 18 | + { label: t('tools.database-connection-string-builder.texts.label-keyword-value-pairs'), value: 'kvp' }, |
16 | 19 | ]; |
17 | 20 |
|
18 | 21 | const authOptions: Record<string, { label: string; value: string }[]> = { |
19 | | - mysql: [{ label: 'Username/Password', value: 'basic' }], |
| 22 | + mysql: [{ label: t('tools.database-connection-string-builder.texts.label-username-password'), value: 'basic' }], |
20 | 23 | postgres: [ |
21 | | - { label: 'Username/Password', value: 'basic' }, |
22 | | - { label: 'Peer', value: 'peer' }, |
23 | | - { label: 'GSSAPI/SSPI', value: 'gssapi' }, |
| 24 | + { label: t('tools.database-connection-string-builder.texts.label-username-password'), value: 'basic' }, |
| 25 | + { label: t('tools.database-connection-string-builder.texts.label-peer'), value: 'peer' }, |
| 26 | + { label: t('tools.database-connection-string-builder.texts.label-gssapi-sspi'), value: 'gssapi' }, |
24 | 27 | ], |
25 | 28 | sqlserver: [ |
26 | | - { label: 'Username/Password', value: 'basic' }, |
27 | | - { label: 'Windows Integrated', value: 'windows' }, |
| 29 | + { label: t('tools.database-connection-string-builder.texts.label-username-password'), value: 'basic' }, |
| 30 | + { label: t('tools.database-connection-string-builder.texts.label-windows-integrated'), value: 'windows' }, |
28 | 31 | ], |
29 | 32 | sqlite: [], |
30 | 33 | mongodb: [ |
31 | | - { label: 'Username/Password (SCRAM)', value: 'basic' }, |
32 | | - { label: 'X.509 Certificate', value: 'x509' }, |
| 34 | + { label: t('tools.database-connection-string-builder.texts.label-username-password-scram'), value: 'basic' }, |
| 35 | + { label: t('tools.database-connection-string-builder.texts.label-x-509-certificate'), value: 'x509' }, |
33 | 36 | ], |
34 | 37 | }; |
35 | 38 |
|
@@ -123,74 +126,74 @@ const connectionString = computed(() => { |
123 | 126 | </script> |
124 | 127 |
|
125 | 128 | <template> |
126 | | - <n-card title="Database Connection String Generator" style="max-width: 750px; margin: auto;"> |
| 129 | + <n-card :title="t('tools.database-connection-string-builder.texts.title-database-connection-string-generator')" style="max-width: 750px; margin: auto;"> |
127 | 130 | <c-select |
128 | 131 | v-model:value="dbType" |
129 | 132 | :options="dbOptions" |
130 | | - placeholder="Select a database" |
131 | | - label="Database type:" |
| 133 | + :placeholder="t('tools.database-connection-string-builder.texts.placeholder-select-a-database')" |
| 134 | + :label="t('tools.database-connection-string-builder.texts.label-database-type')" |
132 | 135 | label-position="left" |
133 | 136 | mb-2 |
134 | 137 | /> |
135 | 138 |
|
136 | 139 | <c-select |
137 | 140 | v-model:value="form.format" |
138 | 141 | :options="formatOptions" |
139 | | - placeholder="Select format" |
140 | | - label="Connection String Format:" |
| 142 | + :placeholder="t('tools.database-connection-string-builder.texts.placeholder-select-format')" |
| 143 | + :label="t('tools.database-connection-string-builder.texts.label-connection-string-format')" |
141 | 144 | label-position="left" |
142 | 145 | mb-2 |
143 | 146 | /> |
144 | 147 |
|
145 | | - <n-divider>Options</n-divider> |
| 148 | + <n-divider>{{ t('tools.database-connection-string-builder.texts.tag-options') }}</n-divider> |
146 | 149 |
|
147 | 150 | <n-form :model="form" label-placement="left" label-width="140"> |
148 | | - <n-form-item v-if="authOptions[dbType]?.length" label="Authentication Type"> |
| 151 | + <n-form-item v-if="authOptions[dbType]?.length" :label="t('tools.database-connection-string-builder.texts.label-authentication-type')"> |
149 | 152 | <n-select |
150 | 153 | v-model:value="form.authType" |
151 | 154 | :options="authOptions[dbType]" |
152 | | - placeholder="Select authentication" |
| 155 | + :placeholder="t('tools.database-connection-string-builder.texts.placeholder-select-authentication')" |
153 | 156 | /> |
154 | 157 | </n-form-item> |
155 | 158 |
|
156 | 159 | <template v-if="dbType !== 'sqlite' && form.authType !== 'peer' && form.authType !== 'windows' && form.authType !== 'x509'"> |
157 | | - <n-form-item label="Host"> |
158 | | - <n-input v-model:value="form.host" placeholder="e.g. localhost" /> |
| 160 | + <n-form-item :label="t('tools.database-connection-string-builder.texts.label-host')"> |
| 161 | + <n-input v-model:value="form.host" :placeholder="t('tools.database-connection-string-builder.texts.placeholder-e-g-localhost')" /> |
159 | 162 | </n-form-item> |
160 | | - <n-form-item label="Port"> |
| 163 | + <n-form-item :label="t('tools.database-connection-string-builder.texts.label-port')"> |
161 | 164 | <n-input-number v-model:value="form.port" :min="1" :max="65535" /> |
162 | 165 | </n-form-item> |
163 | | - <n-form-item label="Username"> |
| 166 | + <n-form-item :label="t('tools.database-connection-string-builder.texts.label-username')"> |
164 | 167 | <n-input v-model:value="form.username" /> |
165 | 168 | </n-form-item> |
166 | | - <n-form-item label="Password"> |
| 169 | + <n-form-item :label="t('tools.database-connection-string-builder.texts.label-password')"> |
167 | 170 | <n-input v-model:value="form.password" type="password" /> |
168 | 171 | </n-form-item> |
169 | 172 | </template> |
170 | 173 |
|
171 | | - <n-form-item label="Database"> |
172 | | - <n-input v-model:value="form.database" placeholder="e.g. mydb" /> |
| 174 | + <n-form-item :label="t('tools.database-connection-string-builder.texts.label-database')"> |
| 175 | + <n-input v-model:value="form.database" :placeholder="t('tools.database-connection-string-builder.texts.placeholder-e-g-mydb')" /> |
173 | 176 | </n-form-item> |
174 | 177 |
|
175 | | - <n-form-item v-if="dbType === 'sqlite'" label="File Path"> |
176 | | - <n-input v-model:value="form.filePath" placeholder="/path/to/sqlite.db" /> |
| 178 | + <n-form-item v-if="dbType === 'sqlite'" :label="t('tools.database-connection-string-builder.texts.label-file-path')"> |
| 179 | + <n-input v-model:value="form.filePath" :placeholder="t('tools.database-connection-string-builder.texts.placeholder-path-to-sqlite-db')" /> |
177 | 180 | </n-form-item> |
178 | 181 |
|
179 | 182 | <details mb-3> |
180 | | - <summary>Advanced Options</summary> |
181 | | - <n-form-item label="SSL Enabled"> |
| 183 | + <summary>{{ t('tools.database-connection-string-builder.texts.tag-advanced-options') }}</summary> |
| 184 | + <n-form-item :label="t('tools.database-connection-string-builder.texts.label-ssl-enabled')"> |
182 | 185 | <n-switch v-model:value="form.ssl" /> |
183 | 186 | </n-form-item> |
184 | | - <n-form-item label="Timeout (s)"> |
| 187 | + <n-form-item :label="t('tools.database-connection-string-builder.texts.label-timeout-s')"> |
185 | 188 | <n-input-number v-model:value="form.timeout" :min="0" /> |
186 | 189 | </n-form-item> |
187 | | - <n-form-item label="Extra Params"> |
188 | | - <n-input v-model:value="form.extra" placeholder="e.g. charset=utf8&applicationName=myapp" /> |
| 190 | + <n-form-item :label="t('tools.database-connection-string-builder.texts.label-extra-params')"> |
| 191 | + <n-input v-model:value="form.extra" :placeholder="t('tools.database-connection-string-builder.texts.placeholder-e-g-charset-utf8-applicationname-myapp')" /> |
189 | 192 | </n-form-item> |
190 | 193 | </details> |
191 | 194 | </n-form> |
192 | 195 |
|
193 | | - <c-card title="Generate Connection String"> |
| 196 | + <c-card :title="t('tools.database-connection-string-builder.texts.title-generate-connection-string')"> |
194 | 197 | <textarea-copyable :value="connectionString" /> |
195 | 198 | </c-card> |
196 | 199 | </n-card> |
|
0 commit comments