chore: update i18n labels (#2871)

---------

Co-authored-by: dni  <office@dnilabs.com>
This commit is contained in:
Tiago Vasconcelos 2025-01-10 11:15:51 +00:00 committed by GitHub
parent 8fa5c81088
commit dfdb34852c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
15 changed files with 387 additions and 175 deletions

View file

@ -15,11 +15,8 @@
/> />
</q-item-section> </q-item-section>
<q-item-section> <q-item-section>
<q-item-label>Enable audit</q-item-label> <q-item-label v-text="$t('enable_audit')"></q-item-label>
<q-item-label caption <q-item-label caption v-text="$t('audit_desc')"></q-item-label>
>Record HTTP requests according with the specified
filters</q-item-label
>
</q-item-section> </q-item-section>
</q-item> </q-item>
</div> </div>
@ -48,14 +45,16 @@
/> />
</q-item-section> </q-item-section>
<q-item-section> <q-item-section>
<q-item-label>Record Request Body</q-item-label> <q-item-label v-text="$t('audit_record_req')"></q-item-label>
<q-item-label caption <q-item-label caption>
>Warning: <span v-text="$t('audit_record_warning')"></span>
<br />
<ul> <ul>
<li>confidential data (like passwords) will be logged</li> <li><span v-text="$t('audit_record_req_warning_1')"></span></li>
<li>the request body can have large size.</li> <li><span v-text="$t('audit_record_req_warning_2')"></span></li>
</ul> </ul>
Use it with caution. <br />
<span v-text="$t('audit_record_use')"></span>
</q-item-label> </q-item-label>
</q-item-section> </q-item-section>
</q-item> </q-item>
@ -72,8 +71,12 @@
/> />
</q-item-section> </q-item-section>
<q-item-section> <q-item-section>
<q-item-label>Record IP Address</q-item-label> <q-item-label>
<q-item-label caption>Save the client IP address.</q-item-label> <span v-text="$t('audit_ip')"></span>
</q-item-label>
<q-item-label caption>
<span v-text="$t('audit_ip_desc')"></span>
</q-item-label>
</q-item-section> </q-item-section>
</q-item> </q-item>
</div> </div>
@ -89,8 +92,12 @@
/> />
</q-item-section> </q-item-section>
<q-item-section> <q-item-section>
<q-item-label>Record Path Parameters</q-item-label> <q-item-label>
<q-item-label caption>Recommended. </q-item-label> <span v-text="$t('audit_path_params')"></span>
</q-item-label>
<q-item-label caption>
<span v-text="$t('recommended')"></span>
</q-item-label>
</q-item-section> </q-item-section>
</q-item> </q-item>
</div> </div>
@ -106,8 +113,12 @@
/> />
</q-item-section> </q-item-section>
<q-item-section> <q-item-section>
<q-item-label>Record Query Parameters</q-item-label> <q-item-label>
<q-item-label caption>Recommended.</q-item-label> <span v-text="$t('audit_query_params')"></span>
</q-item-label>
<q-item-label caption>
<span v-text="$t('recommended')"></span>
</q-item-label>
</q-item-section> </q-item-section>
</q-item> </q-item>
</div> </div>
@ -115,25 +126,26 @@
<q-separator class="q-mb-xl q-mt-sm"></q-separator> <q-separator class="q-mb-xl q-mt-sm"></q-separator>
<div class="row q-mb-lg"> <div class="row q-mb-lg">
<div class="col-md-6 col-sm-12 q-pr-sm"> <div class="col-md-6 col-sm-12 q-pr-sm">
<p>Include HTTP Methods</p> <p><span v-text="$t('audit_http_methods')"></span></p>
<q-select <q-select
filled filled
v-model="formData.lnbits_audit_http_methods" v-model="formData.lnbits_audit_http_methods"
multiple multiple
hint="List of HTTP methods to be included. Empty lists means all." :hint="$t('audit_http_methods_hint')"
label="HTTP Methods" :label="$t('audit_http_methods_label')"
:options="['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS']" :options="['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS']"
></q-select> ></q-select>
</div> </div>
<div class="col-md-6 col-sm-12 q-pr-sm"> <div class="col-md-6 col-sm-12 q-pr-sm">
<p>Include HTTP Response Codes</p> <p><span v-text="$t('audit_resp_codes')"></span></p>
<q-input <q-input
class="q-mb-md"
filled filled
v-model="formAddIncludeResponseCode" v-model="formAddIncludeResponseCode"
@keydown.enter="addIncludeResponseCode" @keydown.enter="addIncludeResponseCode"
type="text" type="text"
label="HTTP Response code (regex)" :label="$t('audit_resp_codes_label')"
hint="List of HTTP codes to be included (regex match). Empty lists means all. Eg: 4.*, 5.*" :hint="$t('audit_resp_codes_hint')"
> >
<q-btn @click="addIncludeResponseCode" dense flat icon="add"></q-btn> <q-btn @click="addIncludeResponseCode" dense flat icon="add"></q-btn>
</q-input> </q-input>
@ -154,14 +166,15 @@
<div class="row"> <div class="row">
<div class="col-md-6 col-sm-12 q-pr-sm"> <div class="col-md-6 col-sm-12 q-pr-sm">
<p>Include Paths</p> <p><span v-text="$t('audit_paths')"></span></p>
<q-input <q-input
class="q-mb-md"
filled filled
v-model="formAddIncludePath" v-model="formAddIncludePath"
@keydown.enter="addIncludePath" @keydown.enter="addIncludePath"
type="text" type="text"
label="HTTP Path (regex)" :label="$t('audit_paths_label')"
hint="List of paths to be included (regex match). Empty list means all." :hint="$t('audit_paths_hint')"
> >
<q-btn @click="addIncludePath" dense flat icon="add"></q-btn> <q-btn @click="addIncludePath" dense flat icon="add"></q-btn>
</q-input> </q-input>
@ -180,14 +193,17 @@
<br /> <br />
</div> </div>
<div class="col-md-6 col-sm-12"> <div class="col-md-6 col-sm-12">
<p>Exclude Paths</p> <p>
<span v-text="$t('audit_paths_exclude')"></span>
</p>
<q-input <q-input
class="q-mb-md"
filled filled
v-model="formAddExcludePath" v-model="formAddExcludePath"
@keydown.enter="addExcludePath" @keydown.enter="addExcludePath"
type="text" type="text"
label="HTTP Path (regex)" :label="$t('audit_paths_exclude_label')"
hint="List of paths to be excluded (regex match). Empty list means none." :hint="$t('audit_paths_exclude_hint')"
> >
<q-btn @click="addExcludePath" dense flat icon="add"></q-btn> <q-btn @click="addExcludePath" dense flat icon="add"></q-btn>
</q-input> </q-input>

View file

@ -1,5 +1,7 @@
<q-tab-panel name="exchange_providers"> <q-tab-panel name="exchange_providers">
<h6 class="q-my-none q-mb-sm">Exchange Providers</h6> <h6 class="q-my-none q-mb-sm">
<span v-text="$t('exchange_providers')"></span>
</h6>
<div class="row"> <div class="row">
<div class="col-md-8 col-sm-12"> <div class="col-md-8 col-sm-12">

View file

@ -1,17 +1,22 @@
<q-tab-panel name="extensions"> <q-tab-panel name="extensions">
<q-card-section class="q-pa-none"> <q-card-section class="q-pa-none">
<div> <div>
<h6 class="q-my-none">Extensions</h6> <h6 class="q-my-none">
<span v-text="$t('extensions')"></span>
</h6>
<div class="row q-col-gutter-md"> <div class="row q-col-gutter-md">
<div class="col-12"> <div class="col-12 q-mb-md">
<p>Extension Sources</p> <p>
<span v-text="$t('extension_sources')"></span>
</p>
<q-input <q-input
class="q-mb-md"
filled filled
v-model="formAddExtensionsManifest" v-model="formAddExtensionsManifest"
@keydown.enter="addExtensionsManifest" @keydown.enter="addExtensionsManifest"
type="text" type="text"
label="Source URL (only use the official LNbits extension source, and sources you can trust)" :label="$t('ext_sources_label')"
hint="Repositories from where the extensions can be downloaded" :hint="$t('ext_sources_hint')"
> >
<q-btn @click="addExtensionsManifest" dense flat icon="add"></q-btn> <q-btn @click="addExtensionsManifest" dense flat icon="add"></q-btn>
</q-input> </q-input>
@ -30,34 +35,44 @@
</div> </div>
<div class="row q-col-gutter-md"> <div class="row q-col-gutter-md">
<div class="col-12 col-md-6"> <div class="col-12 col-md-6">
<p>Admin Extensions</p> <p>
<span v-text="$t('admin_extensions')"></span>
</p>
<q-select <q-select
filled filled
v-model="formData.lnbits_admin_extensions" v-model="formData.lnbits_admin_extensions"
multiple multiple
hint="Extensions only user with admin privileges can use" :label="$t('admin_extensions_label')"
label="Admin extensions" :hint="$t('admin_extensions_hint')"
:options="g.extensions" :options="g.extensions"
></q-select> ></q-select>
</div> </div>
<div class="col-12 col-md-6"> <div class="col-12 col-md-6">
<p>User Default Extensions</p> <p>
<span v-text="$t('user_default_extensions')"></span>
</p>
<q-select <q-select
filled filled
v-model="formData.lnbits_user_default_extensions" v-model="formData.lnbits_user_default_extensions"
multiple multiple
hint="Extensions that will be enabled by default for the users." :label="$t('user_default_extensions_label')"
label="User extensions" :hint="$t('user_default_extensions_hint')"
:options="g.extensions" :options="g.extensions"
></q-select> ></q-select>
</div> </div>
<div class="col-12 col-md-6"> <div class="col-12 col-md-6">
<p>Miscellaneous</p> <p>
<span v-text="$t('miscellaneous')"></span>
</p>
<q-item tag="label" v-ripple> <q-item tag="label" v-ripple>
<q-item-section> <q-item-section>
<q-item-label>Disable Extensions</q-item-label> <q-item-label>
<q-item-label caption>Disables all extensions</q-item-label> <span v-text="$t('misc_disable_extensions')"></span>
</q-item-label>
<q-item-label caption>
<span v-text="$t('misc_disable_extensions_label')"></span>
</q-item-label>
</q-item-section> </q-item-section>
<q-item-section avatar> <q-item-section avatar>
<q-toggle <q-toggle
@ -71,10 +86,12 @@
</q-item> </q-item>
<q-item tag="label" v-ripple> <q-item tag="label" v-ripple>
<q-item-section> <q-item-section>
<q-item-label>Hide API</q-item-label> <q-item-label>
<q-item-label caption <span v-text="$t('misc_hide_api')"></span>
>Hides wallet api, extensions can choose to honor</q-item-label </q-item-label>
> <q-item-label caption>
<span v-text="$t('misc_hide_api_label')"></span>
</q-item-label>
</q-item-section> </q-item-section>
<q-item-section avatar> <q-item-section avatar>
<q-toggle <q-toggle

View file

@ -1,74 +1,79 @@
<q-tab-panel name="funding"> <q-tab-panel name="funding">
<q-card-section class="q-pa-none"> <q-card-section class="q-pa-none">
<h6 class="q-my-none">Wallets Management</h6> <h6 class="q-my-none">
<span v-text="$t('wallets_management')"></span>
</h6>
<br /> <br />
<div> <div>
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<p>Funding Source Info</p> <p>
<span v-text="$t('funding_source_info')"></span>
</p>
<ul> <ul>
<li <li
v-text="'Funding Source: '+ settings.lnbits_backend_wallet_class" v-text="$t('funding_source', {wallet_class: settings.lnbits_backend_wallet_class})"
></li> ></li>
<li <li
v-text="'Node Balance: ' + (auditData.node_balance_msats / v-text="$t('node_balance', {balance: (auditData.node_balance_msats / 1000).toLocaleString()})"
1000).toLocaleString() + ' sats'"
></li> ></li>
<li <li
v-text="'LNbits Balance: ' + (auditData.lnbits_balance_msats / v-text="$t('lnbits_balance', {balance: (auditData.lnbits_balance_msats / 1000).toLocaleString()})"
1000).toLocaleString() + ' sats'"
></li> ></li>
<li <li
v-text="'Reserve Percent: ' + (auditData.node_balance_msats / v-text="$t('funding_reserve_percent', {
auditData.lnbits_balance_msats * 100).toFixed(2) + ' %'" percent: auditData.lnbits_balance_msats > 0
? (auditData.node_balance_msats / auditData.lnbits_balance_msats * 100).toFixed(2)
: 100
})"
></li> ></li>
</ul> </ul>
<br /> <br />
</div> </div>
<div class="col"> <div class="col">
{% if LNBITS_NODE_UI_AVAILABLE %} {% if LNBITS_NODE_UI_AVAILABLE %}
<p>Node Management</p> <p><span v-text="$t('node_management')"></span></p>
<q-toggle <q-toggle
label="Node UI" :label="$t('toggle_node_ui')"
v-model="formData.lnbits_node_ui" v-model="formData.lnbits_node_ui"
></q-toggle> ></q-toggle>
<q-toggle <q-toggle
v-if="formData.lnbits_node_ui" v-if="formData.lnbits_node_ui"
label="Public node UI" :label="$('toggle_public_node_ui')"
v-model="formData.lnbits_public_node_ui" v-model="formData.lnbits_public_node_ui"
></q-toggle> ></q-toggle>
<br /> <br />
<q-toggle <q-toggle
v-if="formData.lnbits_node_ui" v-if="formData.lnbits_node_ui"
label="Transactions Tab (Disable on large CLN nodes)" :label="$('toggle_transactions_node_ui')"
v-model="formData.lnbits_node_ui_transactions" v-model="formData.lnbits_node_ui_transactions"
></q-toggle> ></q-toggle>
{% else %} {% else %}
<p>Node Management not supported by active funding source</p> <p><span v-text="$t('node_management_not_supported')"></span></p>
{% endif %} {% endif %}
</div> </div>
</div> </div>
<div class="row q-col-gutter-md"> <div class="row q-col-gutter-md">
<div class="col-12 col-md-4"> <div class="col-12 col-md-4">
<p>Invoice Expiry</p> <p><span v-text="$t('invoice_expiry')"></span></p>
<q-input <q-input
filled filled
v-model.number="formData.lightning_invoice_expiry" v-model.number="formData.lightning_invoice_expiry"
type="number" type="number"
label="Invoice expiry (seconds)" :label="$t('invoice_expiry_label')"
mask="#######" mask="#######"
> >
</q-input> </q-input>
</div> </div>
<div class="col-12 col-md-8"> <div class="col-12 col-md-8">
<p>Fee reserve</p> <p><span v-text="$t('fee_reserve')"></span></p>
<div class="row q-col-gutter-md"> <div class="row q-col-gutter-md">
<div class="col-6"> <div class="col-6">
<q-input <q-input
type="number" type="number"
filled filled
v-model="formData.lnbits_reserve_fee_min" v-model="formData.lnbits_reserve_fee_min"
label="Reserve fee in msats" :label="$t('fee_reserve_msats')"
> >
</q-input> </q-input>
</div> </div>
@ -78,7 +83,7 @@
filled filled
name="lnbits_reserve_fee_percent" name="lnbits_reserve_fee_percent"
v-model="formData.lnbits_reserve_fee_percent" v-model="formData.lnbits_reserve_fee_percent"
label="Reserve fee in percent" :label="$t('fee_reserve_percent')"
step="0.1" step="0.1"
></q-input> ></q-input>
</div> </div>

View file

@ -1,26 +1,28 @@
<q-tab-panel name="security"> <q-tab-panel name="security">
<q-card-section class="q-pa-none"> <q-card-section class="q-pa-none">
<h6 class="q-my-none">Server Management</h6> <h6 class="q-my-none"><span v-text="$t('server_management')"></span></h6>
<div class="row"> <div class="row">
<div class="col-md-6"> <div class="col-md-6">
<p>Base URL</p> <p><span v-text="$t('base_url')"></span></p>
<q-input <q-input
filled filled
v-model.number="formData.lnbits_baseurl" v-model.number="formData.lnbits_baseurl"
label="Static/Base url for the server" :label="$t('base_url_label')"
></q-input> ></q-input>
<br /> <br />
</div> </div>
</div> </div>
<h6 class="q-my-none q-mb-sm">Authentication</h6> <h6 class="q-my-none q-mb-sm">
<span v-text="$t('authentication')"></span>
</h6>
<div class="row q-col-gutter-sm"> <div class="row q-col-gutter-sm">
<div class="col-12 col-sm-6"> <div class="col-12 col-sm-6">
<q-input <q-input
filled filled
v-model="formData.auth_token_expire_minutes" v-model="formData.auth_token_expire_minutes"
type="number" type="number"
label="Token expire minutes" :label="$t('auth_token_expiry_label')"
hint="Time in minutes until the token expires" :hint="$t('auth_token_expiry_hint')"
> >
</q-input> </q-input>
</div> </div>
@ -29,8 +31,8 @@
filled filled
v-model="formData.auth_allowed_methods" v-model="formData.auth_allowed_methods"
multiple multiple
hint="Allowed authorization methods" :hint="t$('auth_allowed_methods_hint')"
label="Select authorization methods" :label="$t('auth_allowed_methods_label')"
:options="formData.auth_all_methods" :options="formData.auth_all_methods"
></q-select> ></q-select>
</div> </div>
@ -50,8 +52,8 @@
v-model="nostrAcceptedUrl" v-model="nostrAcceptedUrl"
@keydown.enter="addNostrUrl" @keydown.enter="addNostrUrl"
type="text" type="text"
label="Nostr Request URL" :label="$t('auth_nostr_label')"
hint="Absolute URL that the clients will use to login." :hint="$t('auth_nostr_hint')"
> >
<q-btn @click="addNostrUrl" dense flat icon="add"></q-btn> <q-btn @click="addNostrUrl" dense flat icon="add"></q-btn>
</q-input> </q-input>
@ -81,8 +83,8 @@
<q-input <q-input
filled filled
v-model="formData.google_client_id" v-model="formData.google_client_id"
label="Google Client ID" :label="$t('auth_google_ci_label')"
hint="Make sure thant the authorized redirect URIs contain https://{domain}/api/v1/auth/google/token" :hint="$t('auth_google_ci_hint')"
> >
</q-input> </q-input>
</div> </div>
@ -91,7 +93,7 @@
filled filled
v-model="formData.google_client_secret" v-model="formData.google_client_secret"
type="password" type="password"
label="Google Client Secret" :label="$t('auth_google_cs_label')"
> >
</q-input> </q-input>
</div> </div>
@ -108,8 +110,8 @@
<q-input <q-input
filled filled
v-model="formData.github_client_id" v-model="formData.github_client_id"
label="GitHub Client ID" :label="$t('auth_gh_client_id_label')"
hint="Make sure thant the authorization callback URL is set to https://{domain}/api/v1/auth/github/token" :hint="$t('auth_gh_client_id_hint')"
> >
</q-input> </q-input>
</div> </div>
@ -118,7 +120,7 @@
filled filled
v-model="formData.github_client_secret" v-model="formData.github_client_secret"
type="password" type="password"
label="GitHub Client Secret" :label="$t('auth_gh_client_secret_label')"
> >
</q-input> </q-input>
</div> </div>
@ -135,7 +137,7 @@
<q-input <q-input
filled filled
v-model="formData.keycloak_discovery_url" v-model="formData.keycloak_discovery_url"
label="Keycloak Discovey URL" :label="$t('auth_keycloak_label')"
> >
</q-input> </q-input>
</div> </div>
@ -143,8 +145,8 @@
<q-input <q-input
filled filled
v-model="formData.keycloak_client_id" v-model="formData.keycloak_client_id"
label="Keycloak Client ID" :label="$t('auth_keycloak_ci_label')"
hint="Make sure thant the authorization callback URL is set to https://{domain}/api/v1/auth/keycloak/token" :hint="$t('auth_keycloak_ci_hint')"
> >
</q-input> </q-input>
</div> </div>
@ -153,7 +155,7 @@
filled filled
v-model="formData.keycloak_client_secret" v-model="formData.keycloak_client_secret"
type="password" type="password"
label="Keycloak Client Secret" :label="$t('auth_keycloak_cs_label')"
> >
</q-input> </q-input>
</div> </div>

View file

@ -1,28 +1,28 @@
<q-tab-panel name="server"> <q-tab-panel name="server">
<q-card-section class="q-pa-none"> <q-card-section class="q-pa-none">
<div> <div>
<h6 class="q-my-none">Currency Settings</h6> <h6 class="q-my-none"><span v-text="$t('currency_settings')"></span></h6>
<div class="row q-col-gutter-md"> <div class="row q-col-gutter-md">
<div class="col-12 col-md-6"> <div class="col-12 col-md-6">
<p>Allowed currencies</p> <p><span v-text="$t('allowed_currencies')"></span></p>
<q-select <q-select
filled filled
v-model="formData.lnbits_allowed_currencies" v-model="formData.lnbits_allowed_currencies"
multiple multiple
hint="Limit the number of available fiat currencies" :hint="$t('allowed_currencies_hint')"
label="Allowed currencies" :label="$t('allowed_currencies')"
:options="{{ currencies | safe }}" :options="{{ currencies | safe }}"
></q-select> ></q-select>
<br /> <br />
</div> </div>
<div class="col-12 col-md-6"> <div class="col-12 col-md-6">
<p>Default Accounting Currency</p> <p><span v-text="$t('default_account_currency')"></span></p>
<q-select <q-select
filled filled
v-model="formData.lnbits_default_accounting_currency" v-model="formData.lnbits_default_accounting_currency"
clearable clearable
hint="Default currency for accounting" :hint="$t('default_account_currency_hint')"
label="Currency" :label="$t('currency')"
:options="formData.lnbits_allowed_currencies?.length ? formData.lnbits_allowed_currencies : {{ currencies }}" :options="formData.lnbits_allowed_currencies?.length ? formData.lnbits_allowed_currencies : {{ currencies }}"
></q-select> ></q-select>
<br /> <br />
@ -30,50 +30,50 @@
</div> </div>
<br /> <br />
<h6 class="q-my-none">Service Fee</h6> <h6 class="q-my-none"><span v-text="$t('service_fee')"></span></h6>
<div class="row q-col-gutter-md"> <div class="row q-col-gutter-md">
<div class="col-12 col-md-6"> <div class="col-12 col-md-6">
<p>Service Fee</p> <p><span v-text="$t('service_fee')"></span></p>
<q-input <q-input
filled filled
type="number" type="number"
v-model.number="formData.lnbits_service_fee" v-model.number="formData.lnbits_service_fee"
label="Service fee (%)" :label="$t('service_fee_label')"
step="0.1" step="0.1"
hint="Fee charged per tx (%)" :hint="$t('service_fee_hint')"
></q-input> ></q-input>
<br /> <br />
</div> </div>
<div class="col-12 col-md-6"> <div class="col-12 col-md-6">
<p>Service fee max</p> <p><span v-text="$t('service_fee_max')"></span></p>
<q-input <q-input
filled filled
type="number" type="number"
v-model.number="formData.lnbits_service_fee_max" v-model.number="formData.lnbits_service_fee_max"
label="Service fee max (sats)" :label="$t('service_fee_max_label')"
hint="Max service fee to charge in (sats)" :hint="$t('service_fee_max_hint')"
></q-input> ></q-input>
<br /> <br />
</div> </div>
<div class="col-12 col-md-6"> <div class="col-12 col-md-6">
<p>Fee Wallet</p> <p><span v-text="$t('fee_wallet')"></span></p>
<q-input <q-input
filled filled
v-model="formData.lnbits_service_fee_wallet" v-model="formData.lnbits_service_fee_wallet"
label="Fee wallet (wallet ID)" :label="$t('fee_wallet_label')"
hint="Wallet ID to send funds to" :hint="$t('fee_wallet_hint')"
></q-input> ></q-input>
<br /> <br />
</div> </div>
<div class="col-12 col-md-6"> <div class="col-12 col-md-6">
<p>Disable Service Fee for Internal Payments</p> <p><span v-text="$t('disable_fee_internal')"></span></p>
<q-item tag="label" v-ripple> <q-item tag="label" v-ripple>
<q-item-section> <q-item-section>
<q-item-label>Disable Fee</q-item-label> <q-item-label v-text="$t('disable_fee')"></q-item-label>
<q-item-label caption <q-item-label
>Disable Service Fee for Internal Lightning caption
Payments</q-item-label v-text="$t('disable_fee_internal_desc')"
> ></q-item-label>
</q-item-section> </q-item-section>
<q-item-section avatar> <q-item-section avatar>
<q-toggle <q-toggle

View file

@ -1,82 +1,82 @@
<q-tab-panel name="site_customisation"> <q-tab-panel name="site_customisation">
<q-card-section class="q-pa-none"> <q-card-section class="q-pa-none">
<h6 class="q-my-none">UI Management</h6> <h6 class="q-my-none"><span v-text="$t('ui_management')"></span></h6>
<br /> <br />
<div> <div>
<div class="row q-col-gutter-md"> <div class="row q-col-gutter-md">
<div class="col-12 col-md-5"> <div class="col-12 col-md-5">
<p>Site Title</p> <p><span v-text="$t('ui_site_title')"></span></p>
<q-input <q-input
filled filled
type="text" type="text"
v-model="formData.lnbits_site_title" v-model="formData.lnbits_site_title"
label="Site title" :label="$t('ui_site_title')"
></q-input> ></q-input>
<br /> <br />
</div> </div>
<div class="col-12 col-md-5"> <div class="col-12 col-md-5">
<p>Site Tagline</p> <p><span v-text="$t('ui_site_tagline')"></span></p>
<q-input <q-input
filled filled
type="text" type="text"
v-model="formData.lnbits_site_tagline" v-model="formData.lnbits_site_tagline"
label="Site tagline" :label="$t('ui_site_tagline')"
></q-input> ></q-input>
<br /> <br />
</div> </div>
<div class="col-12 col-md-2 q-mt-xl"> <div class="col-12 col-md-2 q-mt-xl">
<q-toggle <q-toggle
tip="Remove homepage elements like 'runs on' etc" :tip="$t('ui_toggle_elements_tip')"
v-model="formData.lnbits_show_home_page_elements" v-model="formData.lnbits_show_home_page_elements"
:label="formData.lnbits_show_home_page_elements ? 'Enable elements on homepage' : 'Disable elements on homepage'" :label="formData.lnbits_show_home_page_elements ? $t('ui_elements_enable') : $t('ui_elements_disable')"
></q-toggle> ></q-toggle>
</div> </div>
</div> </div>
<div> <div>
<p>Site Description</p> <p><span v-text="$t('ui_site_description')"></span></p>
<q-input <q-input
v-model="formData.lnbits_site_description" v-model="formData.lnbits_site_description"
filled filled
type="textarea" type="textarea"
hint="Use plain text, Markdown, or raw HTML" :hint="$t('ui_site_description_hint')"
/> />
</div> </div>
<br /> <br />
<div class="row q-col-gutter-md"> <div class="row q-col-gutter-md">
<div class="col-12 col-md-4"> <div class="col-12 col-md-4">
<p>Default Wallet Name</p> <p><span v-text="$t('ui_default_wallet_name')"></span></p>
<q-input <q-input
filled filled
type="text" type="text"
v-model="formData.lnbits_default_wallet_name" v-model="formData.lnbits_default_wallet_name"
label="LNbits wallet" :label="$t('lnbits_wallet')"
></q-input> ></q-input>
</div> </div>
<div class="col-12 col-md-4"> <div class="col-12 col-md-4">
<p>Denomination</p> <p><span v-text="$t('denomination')"></span></p>
<q-input <q-input
filled filled
type="text" type="text"
v-model="formData.lnbits_denomination" v-model="formData.lnbits_denomination"
label="sats" label="sats"
hint="The name for the FakeWallet token" :hint="$t('denomination_hint')"
></q-input> ></q-input>
</div> </div>
<div class="col-12 col-md-4"> <div class="col-12 col-md-4">
<p>QR code logo</p> <p><span v-text="$t('ui_qr_code_logo')"></span></p>
<q-input <q-input
filled filled
type="text" type="text"
v-model="formData.lnbits_qr_logo" v-model="formData.lnbits_qr_logo"
label="https://example.com/image.svg" label="https://example.com/image.svg"
hint="URL to logo image in QR code" :hint="$t('ui_qr_code_logo_hint')"
></q-input> ></q-input>
</div> </div>
</div> </div>
<div class="row q-col-gutter-md"> <div class="row q-col-gutter-md">
<div class="col-12 col-md-4"> <div class="col-12 col-md-4">
<p>Custom Badge</p> <p><span v-text="$t('ui_custom_badge')"></span></p>
<div class="row q-col-gutter-md"> <div class="row q-col-gutter-md">
<div class="col-12 col-md-8"> <div class="col-12 col-md-8">
<q-input <q-input
@ -84,7 +84,7 @@
type="text" type="text"
tip="Custom Badge" tip="Custom Badge"
v-model.trim="formData.lnbits_custom_badge" v-model.trim="formData.lnbits_custom_badge"
label="Custom Badge 'USE WITH CAUTION - LNbits wallet is still in BETA'" :label="$t('ui_custom_badge_label')"
></q-input> ></q-input>
</div> </div>
<div class="col-12 col-md-4"> <div class="col-12 col-md-4">
@ -92,7 +92,7 @@
filled filled
v-model="formData.lnbits_custom_badge_color" v-model="formData.lnbits_custom_badge_color"
:options="colors" :options="colors"
label="Custom badge color" :label="$t('ui_custom_badge_color_label')"
></q-select> ></q-select>
</div> </div>
</div> </div>
@ -101,54 +101,54 @@
<br /> <br />
<div class="row q-col-gutter-md"> <div class="row q-col-gutter-md">
<div class="col-12 col-md-6"> <div class="col-12 col-md-6">
<p>Themes</p> <p><span v-text="$t('themes')"></span></p>
<q-select <q-select
filled filled
v-model="formData.lnbits_theme_options" v-model="formData.lnbits_theme_options"
multiple multiple
hint="Choose themes available for users" :hint="$t('themes_hint')"
:options="lnbits_theme_options" :options="lnbits_theme_options"
label="Themes" :label="$t('themes')"
></q-select> ></q-select>
<br /> <br />
</div> </div>
<div class="col-12 col-md-6"> <div class="col-12 col-md-6">
<p>Custom Logo</p> <p><span v-text="$t('custom_logo')"></span></p>
<q-input <q-input
filled filled
type="text" type="text"
v-model="formData.lnbits_custom_logo" v-model="formData.lnbits_custom_logo"
label="https://example.com/image.png" label="https://example.com/image.png"
hint="URL to logo image" :hint="$t('custom_logo_hint')"
></q-input> ></q-input>
<br /> <br />
</div> </div>
</div> </div>
<div class="row q-col-gutter-md"> <div class="row q-col-gutter-md">
<div class="col-12 col-md-6"> <div class="col-12 col-md-6">
<p>Ad Space Title</p> <p><span v-text="$t('ad_space_title')"></span></p>
<q-input <q-input
filled filled
type="text" type="text"
v-model="formData.lnbits_ad_space_title" v-model="formData.lnbits_ad_space_title"
label="Supported by" :label="$t('ad_space_title_label')"
></q-input> ></q-input>
<br /> <br />
</div> </div>
<div class="col-12 col-md-6"> <div class="col-12 col-md-6">
<p>Advertisement Slots</p> <p><span v-text="$t('ad_slots')"></span></p>
<q-input <q-input
class="q-mb-md" class="q-mb-md"
filled filled
v-model="formData.lnbits_ad_space" v-model="formData.lnbits_ad_space"
type="text" type="text"
label="url;img_light_url;img_dark_url, url..." :label="$t('ad_slots_label')"
hint="Ad url and image filepaths in CSV format, extensions can choose to honor" :hint="$t('ad_slots_hint')"
> >
</q-input> </q-input>
<q-toggle <q-toggle
v-model="formData.lnbits_ad_space_enabled" v-model="formData.lnbits_ad_space_enabled"
:label="formData.lnbits_ad_space_enabled ? 'Ads enabled' : 'Ads disabled'" :label="formData.lnbits_ad_space_enabled ? $t('ads_enabled') : $t('ads_disabled')"
/> />
<br /> <br />
</div> </div>

View file

@ -1,17 +1,19 @@
<q-tab-panel name="users"> <q-tab-panel name="users">
<q-card-section class="q-pa-none"> <q-card-section class="q-pa-none">
<h6 class="q-my-none q-mb-sm">User Management</h6> <h6 class="q-my-none q-mb-sm">
<span v-text="$t('user_management')"></span>
</h6>
<div class="row"> <div class="row">
<div class="col-12 col-md-6 q-pr-sm"> <div class="col-12 col-md-6 q-pr-sm">
<p>Admin Users</p> <p><span v-text="$t('admin_users')"></span></p>
<q-input <q-input
filled filled
v-model="formAddAdmin" v-model="formAddAdmin"
@keydown.enter="addAdminUser" @keydown.enter="addAdminUser"
type="text" type="text"
label="User ID" :label="$t('admin_users_label')"
hint="Users with admin privileges" :hint="$t('admin_users_hint')"
> >
<q-btn @click="addAdminUser" dense flat icon="add"></q-btn> <q-btn @click="addAdminUser" dense flat icon="add"></q-btn>
</q-input> </q-input>
@ -31,14 +33,14 @@
<br /> <br />
</div> </div>
<div class="col-12 col-md-6"> <div class="col-12 col-md-6">
<p>Allowed Users</p> <p><span v-text="$t('allowed_users')"></span></p>
<q-input <q-input
filled filled
v-model="formAddUser" v-model="formAddUser"
@keydown.enter="addAllowedUser" @keydown.enter="addAllowedUser"
type="text" type="text"
label="User ID" :label="$t('allowed_users_label')"
hint="Only these users can use LNbits" :hint="$t('allowed_users_hint')"
> >
<q-btn @click="addAllowedUser" dense flat icon="add"></q-btn> <q-btn @click="addAllowedUser" dense flat icon="add"></q-btn>
</q-input> </q-input>
@ -58,10 +60,11 @@
<br /> <br />
<q-item tag="label" v-ripple> <q-item tag="label" v-ripple>
<q-item-section> <q-item-section>
<q-item-label>Allow creation of new users</q-item-label> <q-item-label v-text="$t('allow_creation_users')"></q-item-label>
<q-item-label caption <q-item-label
>Allow creation of new users on the index page</q-item-label caption
> v-text="$t('allow_creation_users_desc')"
></q-item-label>
</q-item-section> </q-item-section>
<q-item-section avatar> <q-item-section avatar>
<q-toggle <q-toggle

View file

@ -173,7 +173,9 @@
<q-dialog v-model="exchangeData.showTickerConversion" position="top"> <q-dialog v-model="exchangeData.showTickerConversion" position="top">
<q-card class="q-pa-md q-pt-md lnbits__dialog-card"> <q-card class="q-pa-md q-pt-md lnbits__dialog-card">
<strong>Create Currecny Ticker Converter</strong> <div class="q-mb-md">
<strong v-text="$t('create_ticker_converter')"></strong>
</div>
<div class="row"> <div class="row">
<div class="col-12 q-mb-md"> <div class="col-12 q-mb-md">
<q-select <q-select

View file

@ -4,7 +4,7 @@
<div class="row q-col-gutter-md justify-center q-mb-lg"> <div class="row q-col-gutter-md justify-center q-mb-lg">
<div class="col-lg-3 col-md-6 col-sm-12 text-center"> <div class="col-lg-3 col-md-6 col-sm-12 text-center">
<q-card class="q-pt-sm"> <q-card class="q-pt-sm">
<strong>Components</strong> <strong v-text="$t('components')"></strong>
<div style="width: 250px" class="q-pa-sm"> <div style="width: 250px" class="q-pa-sm">
<canvas ref="componentUseChart"></canvas> <canvas ref="componentUseChart"></canvas>
</div> </div>
@ -12,7 +12,7 @@
</div> </div>
<div class="col-lg-3 col-md-6 col-sm-12 text-center"> <div class="col-lg-3 col-md-6 col-sm-12 text-center">
<q-card class="q-pt-sm"> <q-card class="q-pt-sm">
<strong>To 5 Long Running Endpoints</strong> <strong v-text="$t('long_running_endpoints')"></strong>
<div style="width: 250px; height: 250px" class="q-pa-sm"> <div style="width: 250px; height: 250px" class="q-pa-sm">
<canvas ref="longDurationChart"></canvas> <canvas ref="longDurationChart"></canvas>
</div> </div>
@ -20,7 +20,7 @@
</div> </div>
<div class="col-lg-3 col-md-6 col-sm-12 text-center"> <div class="col-lg-3 col-md-6 col-sm-12 text-center">
<q-card class="q-pt-sm"> <q-card class="q-pt-sm">
<strong>HTTP Request Methods</strong> <strong v-text="$t('http_request_methods')"></strong>
<div style="width: 250px; height: 250px" class="q-pa-sm"> <div style="width: 250px; height: 250px" class="q-pa-sm">
<canvas ref="requestMethodChart"></canvas> <canvas ref="requestMethodChart"></canvas>
</div> </div>
@ -28,7 +28,7 @@
</div> </div>
<div class="col-lg-3 col-md-6 col-sm-12 text-center"> <div class="col-lg-3 col-md-6 col-sm-12 text-center">
<q-card class="q-pt-sm"> <q-card class="q-pt-sm">
<strong>HTTP Response Codes</strong> <strong v-text="$t('http_response_codes')"></strong>
<div style="width: 250px; height: 250px" class="q-pa-sm"> <div style="width: 250px; height: 250px" class="q-pa-sm">
<canvas ref="responseCodeChart"></canvas> <canvas ref="responseCodeChart"></canvas>
</div> </div>
@ -102,7 +102,9 @@
class="cursor-pointer q-mr-xs" class="cursor-pointer q-mr-xs"
@click="showDetailsDialog(props.row)" @click="showDetailsDialog(props.row)"
> >
<q-tooltip>Request Details</q-tooltip> <q-tooltip
><span v-text="$t('request_details')"></span
></q-tooltip>
</q-btn> </q-btn>
<span v-text="formatDate(props.row.created_at)"></span> <span v-text="formatDate(props.row.created_at)"></span>
@ -146,7 +148,7 @@
<q-dialog v-model="auditDetailsDialog.show" position="top"> <q-dialog v-model="auditDetailsDialog.show" position="top">
<q-card class="q-pa-md q-pt-md lnbits__dialog-card"> <q-card class="q-pa-md q-pt-md lnbits__dialog-card">
<strong>HTTP Request Details</strong> <strong v-text="$t('http_request_details')"></strong>
<q-input <q-input
filled filled
dense dense

View file

@ -480,7 +480,9 @@
</div> </div>
</div> </div>
<div class="row q-mb-md"> <div class="row q-mb-md">
<div class="col-4">Notifications</div> <div class="col-4">
<span v-text="$t('notifications')"></span>
</div>
<div class="col-8"> <div class="col-8">
<lnbits-notifications-btn <lnbits-notifications-btn
v-if="g.user" v-if="g.user"

View file

@ -5,8 +5,8 @@
<q-card-section class="grid"> <q-card-section class="grid">
<div> <div>
<h6 class="q-my-none text-center"> <h6 class="q-my-none text-center">
<strong>Welcome to LNbits</strong> <strong v-text="$t('welcome_lnbits')"></strong>
<p>Set up the Superuser account below.</p> <p><span v-text="$t('setup_su_account')"></span></p>
</h6> </h6>
<br /> <br />
<q-form class="q-gutter-md"> <q-form class="q-gutter-md">

View file

@ -192,7 +192,7 @@
<q-card> <q-card>
<q-card-section> <q-card-section>
<h6 class="text-subtitle1 q-mt-none q-mb-sm"> <h6 class="text-subtitle1 q-mt-none q-mb-sm">
{{ SITE_TITLE }} Wallet: {{ SITE_TITLE }} <span v-text="$t('wallet')"></span>
<strong><em>{{wallet_name}}</em></strong> <strong><em>{{wallet_name}}</em></strong>
</h6> </h6>
</q-card-section> </q-card-section>
@ -463,9 +463,13 @@
color="positive" color="positive"
text-color="white" text-color="white"
></q-avatar> ></q-avatar>
NFC supported <span v-text="$t('nfc_supported')"></span>
</q-chip> </q-chip>
<span v-else class="text-caption text-grey">NFC not supported</span> <span
v-else
class="text-caption text-grey"
v-text="$t('nfc_not_supported')"
></span>
</div> </div>
<div class="row q-mt-lg"> <div class="row q-mt-lg">
<q-btn <q-btn
@ -503,10 +507,10 @@
<strong v-text="$t('memo') + ': '"></strong> <strong v-text="$t('memo') + ': '"></strong>
<span v-text="parse.invoice.description"></span> <span v-text="parse.invoice.description"></span>
<br /> <br />
<strong>Expire date: </strong> <strong v-text="$t('expire_date')"></strong>
<span v-text="parse.invoice.expireDate"></span> <span v-text="parse.invoice.expireDate"></span>
<br /> <br />
<strong>Hash: </strong> <strong v-text="$t('hash')"></strong>
<span v-text="parse.invoice.hash"></span> <span v-text="parse.invoice.hash"></span>
</p> </p>
<div v-if="canPay" class="row q-mt-lg"> <div v-if="canPay" class="row q-mt-lg">

File diff suppressed because one or more lines are too long

View file

@ -45,6 +45,7 @@ window.localisation.en = {
export_to_phone: 'Export to Phone with QR Code', export_to_phone: 'Export to Phone with QR Code',
export_to_phone_desc: export_to_phone_desc:
'This QR code contains your wallet URL with full access. You can scan it from your phone to open your wallet from there.', 'This QR code contains your wallet URL with full access. You can scan it from your phone to open your wallet from there.',
wallet: 'Wallet: ',
wallets: 'Wallets', wallets: 'Wallets',
add_wallet: 'Add a new wallet', add_wallet: 'Add a new wallet',
delete_wallet: 'Delete wallet', delete_wallet: 'Delete wallet',
@ -111,6 +112,10 @@ window.localisation.en = {
no_extensions: "You don't have any extensions installed :(", no_extensions: "You don't have any extensions installed :(",
created: 'Created', created: 'Created',
search_extensions: 'Search extensions', search_extensions: 'Search extensions',
extension_sources: 'Extension Sources',
ext_sources_hint: 'Repositories from where the extensions can be downloaded',
ext_sources_label:
'Source URL (only use the official LNbits extension source, and sources you can trust)',
warning: 'Warning', warning: 'Warning',
repository: 'Repository', repository: 'Repository',
confirm_continue: 'Are you sure you want to continue?', confirm_continue: 'Are you sure you want to continue?',
@ -276,5 +281,157 @@ window.localisation.en = {
reset_key: 'Reset Key', reset_key: 'Reset Key',
reset_password: 'Reset Password', reset_password: 'Reset Password',
border_choices: 'Border Choices', border_choices: 'Border Choices',
select_all: 'Select All' select_all: 'Select All',
nfc_supported: 'NFC Supported',
nfc_not_supported: 'NFC not Supported',
expire_date: 'Expire Date: ',
hash: 'Hash: ',
welcome_lnbits: 'Welcome to LNbits',
setup_su_account: 'Set up the Superuser account below.',
create_ticker_converter: 'Create Currency Ticker Converter',
enable_audit: 'Enable Audit',
recommended: 'Recommended',
audit_desc: 'Record HTTP requests according with the specified filters',
audit_record_req: 'Record Request Body',
audit_record_warning: 'Warning: ',
audit_record_req_warning_1:
'confidential data (like passwords) will be logged.',
audit_record_req_warning_2: 'the request body can have large size.',
audit_record_use: 'Use it with caution.',
audit_ip: 'Record IP Address',
audit_ip_desc: 'Record the IP address of the client',
audit_path_params: 'Record Path Parameters',
audit_query_params: 'Record Query Parameters',
audit_http_methods: 'Include HTTP Methods',
audit_http_methods_hint:
'List of HTTP methods to be included. Empty lists means all.',
audit_http_methods_label: 'HTTP Methods',
audit_resp_codes: 'Include HTTP Response Codes',
audit_resp_codes_hint:
'List of HTTP codes to be included (regex match). Empty lists means all. Eg: 4.*, 5.*',
audit_resp_codes_label: 'HTTP Response code (regex)',
audit_paths: 'Include Paths',
audit_paths_hint:
'List of paths to be included (regex match). Empty list means all.',
audit_paths_label: 'HTTP Path (regex)',
audit_paths_exclude: 'Exclude Paths',
audit_paths_exclude_hint:
'List of paths to be excluded (regex match). Empty list means none.',
audit_paths_exclude_label: 'HTTP Path (regex)',
exchange_providers: 'Exchange Providers',
admin_extensions: 'Admin Extensions',
admin_extensions_label: 'Admin extensions',
admin_extensions_hint: 'Extensions only user with admin privileges can use',
user_default_extensions: 'User Default Extensions',
user_default_extensions_label: 'User extensions',
user_default_extensions_hint:
'Extensions that will be enabled by default for the users.',
miscellanous: 'Miscellanous',
misc_disable_extensions: 'Disable Extensions',
misc_disable_extensions_label: 'Disable all extensions',
misc_hide_api: 'Hide API',
misc_hide_api_label: 'Hides wallet api, extensions can choose to honor',
wallets_management: 'Wallets Management',
funding_source_info: 'Funding Source Info',
funding_source: 'Funding Source: {wallet_class}',
node_balance: 'Node Balance: {balance} sats',
lnbits_balance: 'LNbits Balance: {balance} sats',
funding_reserve_percent: 'Reserve Percent: {percent} %',
node_managment: 'Node Management',
node_management_not_supported:
'Node Management not supported by active funding source',
toggle_node_ui: 'Node UI',
toggle_public_node_ui: 'Public Node UI',
toggle_transactions_node_ui: 'Transactions Tab (Disable on large CLN nodes)',
invoice_expiry: 'Invoice Expiry',
invoice_expiry_label: 'Invoice expiry (seconds)',
fee_reserve: 'Fee Reserve',
fee_reserve_msats: 'Reserve fee in msats',
fee_reserve_percent: 'Reserve fee in percent',
server_management: 'Server Management',
base_url: 'Base URL',
base_url_label: 'Static/Base url for the server',
authentication: 'Authentication',
auth_token_expiry_label: 'Token expire minutes',
auth_token_expiry_hint: 'Time in minutes until the token expires',
auth_allowed_methods_label: 'Allowed authorization methods',
auth_allowed_methods_hint: 'Select authorization methods',
auth_nostr_label: 'Nostr Request URL',
auth_nostr_hint: 'Absolute URL that the clients will use to login.',
auth_google_ci_label: 'Google Client ID',
auth_google_ci_hint:
'Make sure that the authorized redirect URIs contain https://{domain}/api/v1/auth/google/token',
auth_google_cs_label: 'Google Client Secret',
auth_gh_client_id_label: 'GitHub Client ID',
auth_gh_client_id_hint:
'Make sure that the authorization callback URL is set to https://{domain}/api/v1/auth/github/token',
auth_gh_client_secret_label: 'GitHub Client Secret',
auth_keycloak_label: 'Keycloak Discovery URL',
auth_keycloak_ci_label: 'Keycloak Client ID',
auth_keycloak_ci_hint:
'Make sure thant the authorization callback URL is set to https://{domain}/api/v1/auth/keycloak/token',
auth_keycloak_cs_label: 'Keycloak Client Secret',
currency_settings: 'Currency Settings',
allowed_currencies: 'Allowed Currencies',
allowed_currencies_hint: 'Limit the number of available fiat currencies',
default_account_currency: 'Default Account Currency',
default_account_currency_hint: 'Default currency for accounting',
service_fee: 'Service Fee',
service_fee_label: 'Service fee (%)',
service_fee_hint: 'Fee charged per tx (%)',
service_fee_max: 'Service Fee Max',
service_fee_max_label: 'Service fee max (sats)',
service_fee_max_hint: 'Max service fee to charge in (sats)',
fee_wallet: 'Fee Wallet',
fee_wallet_label: 'Fee wallet (wallet ID)',
fee_wallet_hint: 'Wallet ID to send funds to',
disable_fee: 'Disable Fee',
disable_fee_internal: 'Disable Service Fee for Internal Payments',
disable_fee_internal_desc:
'Disable Service Fee for Internal Lightning Payments',
ui_management: 'UI Management',
ui_site_title: 'Site Title',
ui_site_tagline: 'Site Tagline',
ui_elements_enable: 'Enable elements on homepage',
ui_elements_disable: 'Disable elements on homepage',
ui_toggle_elements_tip: "Remove homepage elements like 'runs on' etc",
ui_site_description: 'Site Description',
ui_site_description_hint: 'Use plain text, Markdown, or raw HTML',
ui_default_wallet_name: 'Default Wallet Name',
lnbits_wallet: 'LNbits wallet',
denomination: 'Denomination',
denomination_hint: 'The name for the FakeWallet token',
ui_qr_code_logo: 'QR Code Logo',
ui_qr_code_logo_hint: 'URL to logo image in QR code',
ui_custom_badge: 'Custom Badge',
ui_custom_badge_label:
"Custom Badge 'USE WITH CAUTION - LNbits wallet is still in BETA'",
ui_custom_badge_color_label: 'Custom Badge Color',
themes: 'Themes',
themes_hint: 'Choose themes available for users',
custom_logo: 'Custom Logo',
custom_logo_hint: 'URL to logo image',
ad_space_title: 'Ad Space Title',
ad_space_title_label: 'Supported by',
ad_slots: 'Advertisement Slots',
ad_slots_hint:
'Ad url and image filepaths in CSV format, extensions can choose to honor',
ad_slots_label: 'url;img_light_url;img_dark_url, url...',
ads_enabled: 'Ads Enabled',
ads_disabled: 'Ads Disabled',
user_management: 'User Management',
admin_users: 'Admin Users',
admin_users_hint: 'Users with admin privileges',
admin_users_label: 'User ID',
allowed_users: 'Allowed Users',
allowed_users_hint: 'Only these users can use LNbits',
allowed_users_label: 'User ID',
allow_creation_user: 'Allow creation of new users',
allow_creation_user_desc: 'Allow creation of new users on the index page',
components: 'Components',
long_running_endpoints: 'Top 5 Long Running Endpoints',
http_request_methods: 'HTTP Request Methods',
http_response_codes: 'HTTP Response Codes',
request_details: 'Request Details',
http_request_details: 'HTTP Request Details'
} }