@mostfeatured/dbi 0.1.47 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/DBI.d.ts.map +1 -0
- package/dist/src/DBI.js.map +1 -0
- package/dist/src/Events.d.ts.map +1 -0
- package/dist/src/Events.js.map +1 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/methods/handleMessageCommands.d.ts.map +1 -0
- package/dist/src/methods/handleMessageCommands.js.map +1 -0
- package/dist/src/methods/hookEventListeners.d.ts.map +1 -0
- package/dist/src/methods/hookEventListeners.js.map +1 -0
- package/dist/src/methods/hookInteractionListeners.d.ts.map +1 -0
- package/dist/{methods → src/methods}/hookInteractionListeners.js +22 -12
- package/dist/src/methods/hookInteractionListeners.js.map +1 -0
- package/dist/src/methods/publishInteractions.d.ts.map +1 -0
- package/dist/src/methods/publishInteractions.js.map +1 -0
- package/dist/src/types/ApplicationRoleConnectionMetadata.d.ts.map +1 -0
- package/dist/src/types/ApplicationRoleConnectionMetadata.js.map +1 -0
- package/dist/src/types/Builders/ButtonBuilder.d.ts.map +1 -0
- package/dist/src/types/Builders/ButtonBuilder.js.map +1 -0
- package/dist/src/types/Builders/ChannelSelectMenuBuilder.d.ts.map +1 -0
- package/dist/src/types/Builders/ChannelSelectMenuBuilder.js.map +1 -0
- package/dist/src/types/Builders/MentionableSelectMenuBuilder.d.ts.map +1 -0
- package/dist/src/types/Builders/MentionableSelectMenuBuilder.js.map +1 -0
- package/dist/src/types/Builders/ModalBuilder.d.ts.map +1 -0
- package/dist/src/types/Builders/ModalBuilder.js.map +1 -0
- package/dist/src/types/Builders/RoleSelectMenuBuilder.d.ts.map +1 -0
- package/dist/src/types/Builders/RoleSelectMenuBuilder.js.map +1 -0
- package/dist/src/types/Builders/StringSelectMenuBuilder.d.ts.map +1 -0
- package/dist/src/types/Builders/StringSelectMenuBuilder.js.map +1 -0
- package/dist/src/types/Builders/UserSelectMenuBuilder.d.ts.map +1 -0
- package/dist/src/types/Builders/UserSelectMenuBuilder.js.map +1 -0
- package/dist/src/types/ChatInput/ChatInput.d.ts.map +1 -0
- package/dist/src/types/ChatInput/ChatInput.js.map +1 -0
- package/dist/{types → src/types}/ChatInput/ChatInputOptions.d.ts +2 -2
- package/dist/src/types/ChatInput/ChatInputOptions.d.ts.map +1 -0
- package/dist/src/types/ChatInput/ChatInputOptions.js.map +1 -0
- package/dist/src/types/Components/Button.d.ts.map +1 -0
- package/dist/src/types/Components/Button.js.map +1 -0
- package/dist/src/types/Components/ChannelSelectMenu.d.ts.map +1 -0
- package/dist/src/types/Components/ChannelSelectMenu.js.map +1 -0
- package/dist/src/types/Components/HTMLComponentsV2/HTMLComponentsV2Handlers.d.ts.map +1 -0
- package/dist/src/types/Components/HTMLComponentsV2/HTMLComponentsV2Handlers.js.map +1 -0
- package/dist/src/types/Components/HTMLComponentsV2/index.d.ts +91 -0
- package/dist/src/types/Components/HTMLComponentsV2/index.d.ts.map +1 -0
- package/dist/src/types/Components/HTMLComponentsV2/index.js +300 -0
- package/dist/src/types/Components/HTMLComponentsV2/index.js.map +1 -0
- package/dist/src/types/Components/HTMLComponentsV2/parser.d.ts.map +1 -0
- package/dist/{types → src/types}/Components/HTMLComponentsV2/parser.js +11 -4
- package/dist/src/types/Components/HTMLComponentsV2/parser.js.map +1 -0
- package/dist/src/types/Components/HTMLComponentsV2/svelteParser.d.ts +35 -0
- package/dist/src/types/Components/HTMLComponentsV2/svelteParser.d.ts.map +1 -0
- package/dist/src/types/Components/HTMLComponentsV2/svelteParser.js +822 -0
- package/dist/src/types/Components/HTMLComponentsV2/svelteParser.js.map +1 -0
- package/dist/src/types/Components/HTMLComponentsV2/svelteRenderer.d.ts +24 -0
- package/dist/src/types/Components/HTMLComponentsV2/svelteRenderer.d.ts.map +1 -0
- package/dist/src/types/Components/HTMLComponentsV2/svelteRenderer.js +294 -0
- package/dist/src/types/Components/HTMLComponentsV2/svelteRenderer.js.map +1 -0
- package/dist/src/types/Components/MentionableSelectMenu.d.ts.map +1 -0
- package/dist/src/types/Components/MentionableSelectMenu.js.map +1 -0
- package/dist/src/types/Components/Modal.d.ts.map +1 -0
- package/dist/src/types/Components/Modal.js.map +1 -0
- package/dist/src/types/Components/RoleSelectMenu.d.ts.map +1 -0
- package/dist/src/types/Components/RoleSelectMenu.js.map +1 -0
- package/dist/src/types/Components/StringSelectMenu.d.ts.map +1 -0
- package/dist/src/types/Components/StringSelectMenu.js.map +1 -0
- package/dist/src/types/Components/UserSelectMenu.d.ts.map +1 -0
- package/dist/src/types/Components/UserSelectMenu.js.map +1 -0
- package/dist/src/types/Event.d.ts.map +1 -0
- package/dist/src/types/Event.js.map +1 -0
- package/dist/src/types/Interaction.d.ts.map +1 -0
- package/dist/src/types/Interaction.js.map +1 -0
- package/dist/src/types/other/CustomEvent.d.ts.map +1 -0
- package/dist/src/types/other/CustomEvent.js.map +1 -0
- package/dist/src/types/other/FakeMessageInteraction.d.ts.map +1 -0
- package/dist/src/types/other/FakeMessageInteraction.js.map +1 -0
- package/dist/src/types/other/InteractionLocale.d.ts.map +1 -0
- package/dist/src/types/other/InteractionLocale.js.map +1 -0
- package/dist/src/types/other/Locale.d.ts.map +1 -0
- package/dist/src/types/other/Locale.js.map +1 -0
- package/dist/src/types/other/MessageContextMenu.d.ts.map +1 -0
- package/dist/src/types/other/MessageContextMenu.js.map +1 -0
- package/dist/src/types/other/UserContextMenu.d.ts.map +1 -0
- package/dist/src/types/other/UserContextMenu.js.map +1 -0
- package/dist/src/utils/MemoryStore.d.ts.map +1 -0
- package/dist/src/utils/MemoryStore.js.map +1 -0
- package/dist/src/utils/UtilTypes.d.ts.map +1 -0
- package/dist/src/utils/UtilTypes.js.map +1 -0
- package/dist/src/utils/customId.d.ts.map +1 -0
- package/dist/src/utils/customId.js.map +1 -0
- package/dist/src/utils/permissions.d.ts.map +1 -0
- package/dist/src/utils/permissions.js.map +1 -0
- package/dist/src/utils/recursiveImport.d.ts.map +1 -0
- package/dist/src/utils/recursiveImport.js.map +1 -0
- package/dist/src/utils/recursiveUnload.d.ts.map +1 -0
- package/dist/src/utils/recursiveUnload.js.map +1 -0
- package/dist/src/utils/unloadModule.d.ts.map +1 -0
- package/dist/src/utils/unloadModule.js.map +1 -0
- package/dist/test/index.d.ts +2 -0
- package/dist/test/index.d.ts.map +1 -0
- package/dist/test/index.js +103 -0
- package/dist/test/index.js.map +1 -0
- package/docs/ADVANCED_FEATURES.md +836 -0
- package/docs/API_REFERENCE.md +925 -0
- package/docs/CHAT_INPUT.md +807 -0
- package/docs/COMPONENTS.md +1035 -0
- package/docs/EVENTS.md +564 -0
- package/docs/GETTING_STARTED.md +394 -0
- package/docs/LOCALIZATION.md +773 -0
- package/docs/README.md +341 -0
- package/docs/SVELTE_COMPONENTS.md +955 -0
- package/generated/globals.d.ts +1 -0
- package/generated/index.d.ts +30 -0
- package/generated/svelte-dbi.d.ts +588 -0
- package/package.json +57 -47
- package/readme.md +168 -491
- package/src/methods/hookInteractionListeners.ts +23 -12
- package/src/types/Components/HTMLComponentsV2/index.ts +353 -12
- package/src/types/Components/HTMLComponentsV2/parser.ts +14 -4
- package/src/types/Components/HTMLComponentsV2/svelteParser.ts +904 -0
- package/src/types/Components/HTMLComponentsV2/svelteRenderer.ts +332 -0
- package/test/index.ts +105 -0
- package/test/product-showcase.svelte +199 -0
- package/tsconfig.json +13 -3
- package/dist/DBI.d.ts.map +0 -1
- package/dist/DBI.js.map +0 -1
- package/dist/Events.d.ts.map +0 -1
- package/dist/Events.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/methods/handleMessageCommands.d.ts.map +0 -1
- package/dist/methods/handleMessageCommands.js.map +0 -1
- package/dist/methods/hookEventListeners.d.ts.map +0 -1
- package/dist/methods/hookEventListeners.js.map +0 -1
- package/dist/methods/hookInteractionListeners.d.ts.map +0 -1
- package/dist/methods/hookInteractionListeners.js.map +0 -1
- package/dist/methods/publishInteractions.d.ts.map +0 -1
- package/dist/methods/publishInteractions.js.map +0 -1
- package/dist/types/ApplicationRoleConnectionMetadata.d.ts.map +0 -1
- package/dist/types/ApplicationRoleConnectionMetadata.js.map +0 -1
- package/dist/types/Builders/ButtonBuilder.d.ts.map +0 -1
- package/dist/types/Builders/ButtonBuilder.js.map +0 -1
- package/dist/types/Builders/ChannelSelectMenuBuilder.d.ts.map +0 -1
- package/dist/types/Builders/ChannelSelectMenuBuilder.js.map +0 -1
- package/dist/types/Builders/MentionableSelectMenuBuilder.d.ts.map +0 -1
- package/dist/types/Builders/MentionableSelectMenuBuilder.js.map +0 -1
- package/dist/types/Builders/ModalBuilder.d.ts.map +0 -1
- package/dist/types/Builders/ModalBuilder.js.map +0 -1
- package/dist/types/Builders/RoleSelectMenuBuilder.d.ts.map +0 -1
- package/dist/types/Builders/RoleSelectMenuBuilder.js.map +0 -1
- package/dist/types/Builders/StringSelectMenuBuilder.d.ts.map +0 -1
- package/dist/types/Builders/StringSelectMenuBuilder.js.map +0 -1
- package/dist/types/Builders/UserSelectMenuBuilder.d.ts.map +0 -1
- package/dist/types/Builders/UserSelectMenuBuilder.js.map +0 -1
- package/dist/types/ChatInput/ChatInput.d.ts.map +0 -1
- package/dist/types/ChatInput/ChatInput.js.map +0 -1
- package/dist/types/ChatInput/ChatInputOptions.d.ts.map +0 -1
- package/dist/types/ChatInput/ChatInputOptions.js.map +0 -1
- package/dist/types/Components/Button.d.ts.map +0 -1
- package/dist/types/Components/Button.js.map +0 -1
- package/dist/types/Components/ChannelSelectMenu.d.ts.map +0 -1
- package/dist/types/Components/ChannelSelectMenu.js.map +0 -1
- package/dist/types/Components/HTMLComponentsV2/HTMLComponentsV2Handlers.d.ts.map +0 -1
- package/dist/types/Components/HTMLComponentsV2/HTMLComponentsV2Handlers.js.map +0 -1
- package/dist/types/Components/HTMLComponentsV2/index.d.ts +0 -19
- package/dist/types/Components/HTMLComponentsV2/index.d.ts.map +0 -1
- package/dist/types/Components/HTMLComponentsV2/index.js +0 -31
- package/dist/types/Components/HTMLComponentsV2/index.js.map +0 -1
- package/dist/types/Components/HTMLComponentsV2/parser.d.ts.map +0 -1
- package/dist/types/Components/HTMLComponentsV2/parser.js.map +0 -1
- package/dist/types/Components/MentionableSelectMenu.d.ts.map +0 -1
- package/dist/types/Components/MentionableSelectMenu.js.map +0 -1
- package/dist/types/Components/Modal.d.ts.map +0 -1
- package/dist/types/Components/Modal.js.map +0 -1
- package/dist/types/Components/RoleSelectMenu.d.ts.map +0 -1
- package/dist/types/Components/RoleSelectMenu.js.map +0 -1
- package/dist/types/Components/StringSelectMenu.d.ts.map +0 -1
- package/dist/types/Components/StringSelectMenu.js.map +0 -1
- package/dist/types/Components/UserSelectMenu.d.ts.map +0 -1
- package/dist/types/Components/UserSelectMenu.js.map +0 -1
- package/dist/types/Event.d.ts.map +0 -1
- package/dist/types/Event.js.map +0 -1
- package/dist/types/Interaction.d.ts.map +0 -1
- package/dist/types/Interaction.js.map +0 -1
- package/dist/types/other/CustomEvent.d.ts.map +0 -1
- package/dist/types/other/CustomEvent.js.map +0 -1
- package/dist/types/other/FakeMessageInteraction.d.ts.map +0 -1
- package/dist/types/other/FakeMessageInteraction.js.map +0 -1
- package/dist/types/other/InteractionLocale.d.ts.map +0 -1
- package/dist/types/other/InteractionLocale.js.map +0 -1
- package/dist/types/other/Locale.d.ts.map +0 -1
- package/dist/types/other/Locale.js.map +0 -1
- package/dist/types/other/MessageContextMenu.d.ts.map +0 -1
- package/dist/types/other/MessageContextMenu.js.map +0 -1
- package/dist/types/other/UserContextMenu.d.ts.map +0 -1
- package/dist/types/other/UserContextMenu.js.map +0 -1
- package/dist/utils/MemoryStore.d.ts.map +0 -1
- package/dist/utils/MemoryStore.js.map +0 -1
- package/dist/utils/UtilTypes.d.ts.map +0 -1
- package/dist/utils/UtilTypes.js.map +0 -1
- package/dist/utils/customId.d.ts.map +0 -1
- package/dist/utils/customId.js.map +0 -1
- package/dist/utils/permissions.d.ts.map +0 -1
- package/dist/utils/permissions.js.map +0 -1
- package/dist/utils/recursiveImport.d.ts.map +0 -1
- package/dist/utils/recursiveImport.js.map +0 -1
- package/dist/utils/recursiveUnload.d.ts.map +0 -1
- package/dist/utils/recursiveUnload.js.map +0 -1
- package/dist/utils/unloadModule.d.ts.map +0 -1
- package/dist/utils/unloadModule.js.map +0 -1
- package/examples/modal/dbi.js +0 -30
- package/examples/modal/login.js +0 -15
- package/examples/modal/package.json +0 -15
- package/examples/modal/publish.js +0 -13
- package/examples/modal/src/chatInput.js +0 -38
- package/examples/modal/src/components.js +0 -33
- package/examples/modal/src/event.js +0 -20
- package/examples/modal/src/interactionlocales.js +0 -24
- package/examples/modal/src/locales.js +0 -38
- package/examples/modal/src/modal.js +0 -28
- /package/dist/{DBI.d.ts → src/DBI.d.ts} +0 -0
- /package/dist/{DBI.js → src/DBI.js} +0 -0
- /package/dist/{Events.d.ts → src/Events.d.ts} +0 -0
- /package/dist/{Events.js → src/Events.js} +0 -0
- /package/dist/{data → src/data}/eventMap.json +0 -0
- /package/dist/{index.d.ts → src/index.d.ts} +0 -0
- /package/dist/{index.js → src/index.js} +0 -0
- /package/dist/{methods → src/methods}/handleMessageCommands.d.ts +0 -0
- /package/dist/{methods → src/methods}/handleMessageCommands.js +0 -0
- /package/dist/{methods → src/methods}/hookEventListeners.d.ts +0 -0
- /package/dist/{methods → src/methods}/hookEventListeners.js +0 -0
- /package/dist/{methods → src/methods}/hookInteractionListeners.d.ts +0 -0
- /package/dist/{methods → src/methods}/publishInteractions.d.ts +0 -0
- /package/dist/{methods → src/methods}/publishInteractions.js +0 -0
- /package/dist/{types → src/types}/ApplicationRoleConnectionMetadata.d.ts +0 -0
- /package/dist/{types → src/types}/ApplicationRoleConnectionMetadata.js +0 -0
- /package/dist/{types → src/types}/Builders/ButtonBuilder.d.ts +0 -0
- /package/dist/{types → src/types}/Builders/ButtonBuilder.js +0 -0
- /package/dist/{types → src/types}/Builders/ChannelSelectMenuBuilder.d.ts +0 -0
- /package/dist/{types → src/types}/Builders/ChannelSelectMenuBuilder.js +0 -0
- /package/dist/{types → src/types}/Builders/MentionableSelectMenuBuilder.d.ts +0 -0
- /package/dist/{types → src/types}/Builders/MentionableSelectMenuBuilder.js +0 -0
- /package/dist/{types → src/types}/Builders/ModalBuilder.d.ts +0 -0
- /package/dist/{types → src/types}/Builders/ModalBuilder.js +0 -0
- /package/dist/{types → src/types}/Builders/RoleSelectMenuBuilder.d.ts +0 -0
- /package/dist/{types → src/types}/Builders/RoleSelectMenuBuilder.js +0 -0
- /package/dist/{types → src/types}/Builders/StringSelectMenuBuilder.d.ts +0 -0
- /package/dist/{types → src/types}/Builders/StringSelectMenuBuilder.js +0 -0
- /package/dist/{types → src/types}/Builders/UserSelectMenuBuilder.d.ts +0 -0
- /package/dist/{types → src/types}/Builders/UserSelectMenuBuilder.js +0 -0
- /package/dist/{types → src/types}/ChatInput/ChatInput.d.ts +0 -0
- /package/dist/{types → src/types}/ChatInput/ChatInput.js +0 -0
- /package/dist/{types → src/types}/ChatInput/ChatInputOptions.js +0 -0
- /package/dist/{types → src/types}/Components/Button.d.ts +0 -0
- /package/dist/{types → src/types}/Components/Button.js +0 -0
- /package/dist/{types → src/types}/Components/ChannelSelectMenu.d.ts +0 -0
- /package/dist/{types → src/types}/Components/ChannelSelectMenu.js +0 -0
- /package/dist/{types → src/types}/Components/HTMLComponentsV2/HTMLComponentsV2Handlers.d.ts +0 -0
- /package/dist/{types → src/types}/Components/HTMLComponentsV2/HTMLComponentsV2Handlers.js +0 -0
- /package/dist/{types → src/types}/Components/HTMLComponentsV2/parser.d.ts +0 -0
- /package/dist/{types → src/types}/Components/MentionableSelectMenu.d.ts +0 -0
- /package/dist/{types → src/types}/Components/MentionableSelectMenu.js +0 -0
- /package/dist/{types → src/types}/Components/Modal.d.ts +0 -0
- /package/dist/{types → src/types}/Components/Modal.js +0 -0
- /package/dist/{types → src/types}/Components/RoleSelectMenu.d.ts +0 -0
- /package/dist/{types → src/types}/Components/RoleSelectMenu.js +0 -0
- /package/dist/{types → src/types}/Components/StringSelectMenu.d.ts +0 -0
- /package/dist/{types → src/types}/Components/StringSelectMenu.js +0 -0
- /package/dist/{types → src/types}/Components/UserSelectMenu.d.ts +0 -0
- /package/dist/{types → src/types}/Components/UserSelectMenu.js +0 -0
- /package/dist/{types → src/types}/Event.d.ts +0 -0
- /package/dist/{types → src/types}/Event.js +0 -0
- /package/dist/{types → src/types}/Interaction.d.ts +0 -0
- /package/dist/{types → src/types}/Interaction.js +0 -0
- /package/dist/{types → src/types}/other/CustomEvent.d.ts +0 -0
- /package/dist/{types → src/types}/other/CustomEvent.js +0 -0
- /package/dist/{types → src/types}/other/FakeMessageInteraction.d.ts +0 -0
- /package/dist/{types → src/types}/other/FakeMessageInteraction.js +0 -0
- /package/dist/{types → src/types}/other/InteractionLocale.d.ts +0 -0
- /package/dist/{types → src/types}/other/InteractionLocale.js +0 -0
- /package/dist/{types → src/types}/other/Locale.d.ts +0 -0
- /package/dist/{types → src/types}/other/Locale.js +0 -0
- /package/dist/{types → src/types}/other/MessageContextMenu.d.ts +0 -0
- /package/dist/{types → src/types}/other/MessageContextMenu.js +0 -0
- /package/dist/{types → src/types}/other/UserContextMenu.d.ts +0 -0
- /package/dist/{types → src/types}/other/UserContextMenu.js +0 -0
- /package/dist/{utils → src/utils}/MemoryStore.d.ts +0 -0
- /package/dist/{utils → src/utils}/MemoryStore.js +0 -0
- /package/dist/{utils → src/utils}/UtilTypes.d.ts +0 -0
- /package/dist/{utils → src/utils}/UtilTypes.js +0 -0
- /package/dist/{utils → src/utils}/customId.d.ts +0 -0
- /package/dist/{utils → src/utils}/customId.js +0 -0
- /package/dist/{utils → src/utils}/permissions.d.ts +0 -0
- /package/dist/{utils → src/utils}/permissions.js +0 -0
- /package/dist/{utils → src/utils}/recursiveImport.d.ts +0 -0
- /package/dist/{utils → src/utils}/recursiveImport.js +0 -0
- /package/dist/{utils → src/utils}/recursiveUnload.d.ts +0 -0
- /package/dist/{utils → src/utils}/recursiveUnload.js +0 -0
- /package/dist/{utils → src/utils}/unloadModule.d.ts +0 -0
- /package/dist/{utils → src/utils}/unloadModule.js +0 -0
|
@@ -0,0 +1,773 @@
|
|
|
1
|
+
# Localization Guide
|
|
2
|
+
|
|
3
|
+
DBI provides a comprehensive localization system for creating multi-language Discord bots. This guide covers both content localization (text translations) and interaction localization (command names and descriptions).
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Table of Contents
|
|
8
|
+
|
|
9
|
+
- [Content Localization](#content-localization)
|
|
10
|
+
- [Interaction Localization](#interaction-localization)
|
|
11
|
+
- [Using Locales](#using-locales)
|
|
12
|
+
- [Dynamic Locale Selection](#dynamic-locale-selection)
|
|
13
|
+
- [Best Practices](#best-practices)
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Content Localization
|
|
18
|
+
|
|
19
|
+
Content localization translates the text your bot sends in messages, embeds, and replies.
|
|
20
|
+
|
|
21
|
+
### Basic Locale Definition
|
|
22
|
+
|
|
23
|
+
```javascript
|
|
24
|
+
dbi.register(({ Locale }) => {
|
|
25
|
+
// English locale
|
|
26
|
+
Locale({
|
|
27
|
+
name: "en",
|
|
28
|
+
data: {
|
|
29
|
+
greeting: "Hello!",
|
|
30
|
+
goodbye: "Goodbye!",
|
|
31
|
+
welcome: "Welcome to our server!",
|
|
32
|
+
help: {
|
|
33
|
+
title: "Help Menu",
|
|
34
|
+
description: "Here are the available commands:"
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
// Turkish locale
|
|
40
|
+
Locale({
|
|
41
|
+
name: "tr",
|
|
42
|
+
data: {
|
|
43
|
+
greeting: "Merhaba!",
|
|
44
|
+
goodbye: "Hoşça kal!",
|
|
45
|
+
welcome: "Sunucumuza hoş geldiniz!",
|
|
46
|
+
help: {
|
|
47
|
+
title: "Yardım Menüsü",
|
|
48
|
+
description: "İşte mevcut komutlar:"
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
// Spanish locale
|
|
54
|
+
Locale({
|
|
55
|
+
name: "es",
|
|
56
|
+
data: {
|
|
57
|
+
greeting: "¡Hola!",
|
|
58
|
+
goodbye: "¡Adiós!",
|
|
59
|
+
welcome: "¡Bienvenido a nuestro servidor!",
|
|
60
|
+
help: {
|
|
61
|
+
title: "Menú de Ayuda",
|
|
62
|
+
description: "Aquí están los comandos disponibles:"
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Using Variables in Translations
|
|
70
|
+
|
|
71
|
+
Use `{0}`, `{1}`, etc. as placeholders:
|
|
72
|
+
|
|
73
|
+
```javascript
|
|
74
|
+
dbi.register(({ Locale }) => {
|
|
75
|
+
Locale({
|
|
76
|
+
name: "en",
|
|
77
|
+
data: {
|
|
78
|
+
// Simple variable
|
|
79
|
+
welcomeUser: "Welcome, {0}!",
|
|
80
|
+
|
|
81
|
+
// Multiple variables
|
|
82
|
+
levelUp: "{0} reached level {1}!",
|
|
83
|
+
|
|
84
|
+
// Complex message
|
|
85
|
+
orderConfirm: "Order #{0} confirmed. Total: ${1}. Ships to: {2}",
|
|
86
|
+
|
|
87
|
+
// Nested with variables
|
|
88
|
+
messages: {
|
|
89
|
+
ban: "{0} has been banned by {1}. Reason: {2}",
|
|
90
|
+
kick: "{0} has been kicked by {1}."
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
Locale({
|
|
96
|
+
name: "tr",
|
|
97
|
+
data: {
|
|
98
|
+
welcomeUser: "Hoş geldin, {0}!",
|
|
99
|
+
levelUp: "{0} seviye {1}'e ulaştı!",
|
|
100
|
+
orderConfirm: "Sipariş #{0} onaylandı. Toplam: {1}₺. Teslimat: {2}",
|
|
101
|
+
messages: {
|
|
102
|
+
ban: "{0}, {1} tarafından yasaklandı. Sebep: {2}",
|
|
103
|
+
kick: "{0}, {1} tarafından atıldı."
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Nested Locale Structure
|
|
111
|
+
|
|
112
|
+
Organize translations with nested objects:
|
|
113
|
+
|
|
114
|
+
```javascript
|
|
115
|
+
dbi.register(({ Locale }) => {
|
|
116
|
+
Locale({
|
|
117
|
+
name: "en",
|
|
118
|
+
data: {
|
|
119
|
+
commands: {
|
|
120
|
+
help: {
|
|
121
|
+
title: "Help",
|
|
122
|
+
description: "List of commands",
|
|
123
|
+
noCommands: "No commands available"
|
|
124
|
+
},
|
|
125
|
+
settings: {
|
|
126
|
+
title: "Settings",
|
|
127
|
+
language: "Language",
|
|
128
|
+
notifications: "Notifications"
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
errors: {
|
|
132
|
+
notFound: "Item not found",
|
|
133
|
+
noPermission: "You don't have permission",
|
|
134
|
+
cooldown: "Please wait {0} seconds"
|
|
135
|
+
},
|
|
136
|
+
success: {
|
|
137
|
+
saved: "Settings saved!",
|
|
138
|
+
deleted: "Item deleted!"
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## Interaction Localization
|
|
148
|
+
|
|
149
|
+
Interaction localization translates command names, descriptions, options, and choices as they appear in Discord's UI.
|
|
150
|
+
|
|
151
|
+
### Basic Interaction Locale
|
|
152
|
+
|
|
153
|
+
```javascript
|
|
154
|
+
dbi.register(({ ChatInput, ChatInputOptions, InteractionLocale }) => {
|
|
155
|
+
// Define the command with your primary language
|
|
156
|
+
ChatInput({
|
|
157
|
+
name: "ayarlar",
|
|
158
|
+
description: "Bot ayarlarını değiştir",
|
|
159
|
+
options: [
|
|
160
|
+
ChatInputOptions.string({
|
|
161
|
+
name: "dil",
|
|
162
|
+
description: "Tercih ettiğiniz dil",
|
|
163
|
+
required: true,
|
|
164
|
+
choices: [
|
|
165
|
+
{ name: "Türkçe", value: "tr" },
|
|
166
|
+
{ name: "İngilizce", value: "en" }
|
|
167
|
+
]
|
|
168
|
+
})
|
|
169
|
+
],
|
|
170
|
+
onExecute({ interaction }) {
|
|
171
|
+
const lang = interaction.options.getString("dil");
|
|
172
|
+
interaction.reply(`Dil: ${lang}`);
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
// Add translations for other languages
|
|
177
|
+
InteractionLocale({
|
|
178
|
+
name: "ayarlar", // Must match the command name
|
|
179
|
+
data: {
|
|
180
|
+
// English translation
|
|
181
|
+
en: {
|
|
182
|
+
name: "settings",
|
|
183
|
+
description: "Change bot settings",
|
|
184
|
+
options: {
|
|
185
|
+
dil: {
|
|
186
|
+
name: "language",
|
|
187
|
+
description: "Your preferred language",
|
|
188
|
+
choices: {
|
|
189
|
+
"Türkçe": "Turkish",
|
|
190
|
+
"İngilizce": "English"
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
},
|
|
195
|
+
|
|
196
|
+
// Spanish translation
|
|
197
|
+
es: {
|
|
198
|
+
name: "ajustes",
|
|
199
|
+
description: "Cambiar configuración del bot",
|
|
200
|
+
options: {
|
|
201
|
+
dil: {
|
|
202
|
+
name: "idioma",
|
|
203
|
+
description: "Tu idioma preferido",
|
|
204
|
+
choices: {
|
|
205
|
+
"Türkçe": "Turco",
|
|
206
|
+
"İngilizce": "Inglés"
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Localization Structure
|
|
217
|
+
|
|
218
|
+
The `InteractionLocale` data structure follows this pattern:
|
|
219
|
+
|
|
220
|
+
```javascript
|
|
221
|
+
InteractionLocale({
|
|
222
|
+
name: "command-name", // Original command name
|
|
223
|
+
data: {
|
|
224
|
+
"locale-code": {
|
|
225
|
+
name: "translated-name", // Command name
|
|
226
|
+
description: "translated-desc", // Command description
|
|
227
|
+
options: {
|
|
228
|
+
"original-option-name": {
|
|
229
|
+
name: "translated-option",
|
|
230
|
+
description: "translated-desc",
|
|
231
|
+
choices: {
|
|
232
|
+
"Original Choice": "Translated Choice"
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### Supported Locale Codes
|
|
242
|
+
|
|
243
|
+
Discord supports these locale codes:
|
|
244
|
+
|
|
245
|
+
| Code | Language |
|
|
246
|
+
|------|----------|
|
|
247
|
+
| `en` | English |
|
|
248
|
+
| `bg` | Bulgarian |
|
|
249
|
+
| `zh` | Chinese |
|
|
250
|
+
| `hr` | Croatian |
|
|
251
|
+
| `cs` | Czech |
|
|
252
|
+
| `da` | Danish |
|
|
253
|
+
| `nl` | Dutch |
|
|
254
|
+
| `fi` | Finnish |
|
|
255
|
+
| `fr` | French |
|
|
256
|
+
| `de` | German |
|
|
257
|
+
| `el` | Greek |
|
|
258
|
+
| `hi` | Hindi |
|
|
259
|
+
| `hu` | Hungarian |
|
|
260
|
+
| `it` | Italian |
|
|
261
|
+
| `ja` | Japanese |
|
|
262
|
+
| `ko` | Korean |
|
|
263
|
+
| `no` | Norwegian |
|
|
264
|
+
| `pl` | Polish |
|
|
265
|
+
| `pt` | Portuguese |
|
|
266
|
+
| `ro` | Romanian |
|
|
267
|
+
| `ru` | Russian |
|
|
268
|
+
| `es` | Spanish |
|
|
269
|
+
| `sv` | Swedish |
|
|
270
|
+
| `th` | Thai |
|
|
271
|
+
| `tr` | Turkish |
|
|
272
|
+
| `uk` | Ukrainian |
|
|
273
|
+
| `vi` | Vietnamese |
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
## Using Locales
|
|
278
|
+
|
|
279
|
+
### In Interactions
|
|
280
|
+
|
|
281
|
+
Access locales through the `locale` object in execution context:
|
|
282
|
+
|
|
283
|
+
```javascript
|
|
284
|
+
dbi.register(({ ChatInput }) => {
|
|
285
|
+
ChatInput({
|
|
286
|
+
name: "greet",
|
|
287
|
+
description: "Greet the user",
|
|
288
|
+
|
|
289
|
+
onExecute({ interaction, locale }) {
|
|
290
|
+
// User's locale (based on Discord client language)
|
|
291
|
+
const userGreeting = locale.user.data.greeting();
|
|
292
|
+
|
|
293
|
+
// Guild's locale (based on guild's preferred locale)
|
|
294
|
+
const guildGreeting = locale.guild?.data.greeting?.();
|
|
295
|
+
|
|
296
|
+
interaction.reply(userGreeting);
|
|
297
|
+
}
|
|
298
|
+
});
|
|
299
|
+
});
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
### Function-style Access
|
|
303
|
+
|
|
304
|
+
Locale values are accessed as functions, allowing for variable substitution:
|
|
305
|
+
|
|
306
|
+
```javascript
|
|
307
|
+
dbi.register(({ Locale, ChatInput }) => {
|
|
308
|
+
Locale({
|
|
309
|
+
name: "en",
|
|
310
|
+
data: {
|
|
311
|
+
welcome: "Welcome, {0}!",
|
|
312
|
+
levelUp: "{0} reached level {1}! 🎉"
|
|
313
|
+
}
|
|
314
|
+
});
|
|
315
|
+
|
|
316
|
+
ChatInput({
|
|
317
|
+
name: "welcome",
|
|
318
|
+
description: "Welcome someone",
|
|
319
|
+
options: [/* user option */],
|
|
320
|
+
|
|
321
|
+
onExecute({ interaction, locale }) {
|
|
322
|
+
const user = interaction.options.getUser("user");
|
|
323
|
+
|
|
324
|
+
// Pass variables to the locale function
|
|
325
|
+
const message = locale.user.data.welcome(user.username);
|
|
326
|
+
|
|
327
|
+
interaction.reply(message);
|
|
328
|
+
// Output: "Welcome, John!"
|
|
329
|
+
}
|
|
330
|
+
});
|
|
331
|
+
});
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
### Path-based Access
|
|
335
|
+
|
|
336
|
+
Access nested paths as chained function calls:
|
|
337
|
+
|
|
338
|
+
```javascript
|
|
339
|
+
dbi.register(({ Locale, ChatInput }) => {
|
|
340
|
+
Locale({
|
|
341
|
+
name: "en",
|
|
342
|
+
data: {
|
|
343
|
+
commands: {
|
|
344
|
+
help: {
|
|
345
|
+
title: "Help Menu",
|
|
346
|
+
footer: "Page {0} of {1}"
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
});
|
|
351
|
+
|
|
352
|
+
ChatInput({
|
|
353
|
+
name: "help",
|
|
354
|
+
description: "Show help",
|
|
355
|
+
|
|
356
|
+
onExecute({ interaction, locale }) {
|
|
357
|
+
// Chain to access nested values
|
|
358
|
+
const title = locale.user.data.commands.help.title();
|
|
359
|
+
const footer = locale.user.data.commands.help.footer(1, 5);
|
|
360
|
+
|
|
361
|
+
interaction.reply({
|
|
362
|
+
embeds: [{
|
|
363
|
+
title: title,
|
|
364
|
+
footer: { text: footer }
|
|
365
|
+
}]
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
});
|
|
369
|
+
});
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
### Alternative Access Methods
|
|
373
|
+
|
|
374
|
+
```javascript
|
|
375
|
+
// Using the get() method for dynamic paths
|
|
376
|
+
const path = "commands.help.title";
|
|
377
|
+
const value = locale.user.get(path); // Returns raw string or null
|
|
378
|
+
|
|
379
|
+
// Using format() for dynamic paths with variables
|
|
380
|
+
const formatted = locale.user.format("commands.help.footer", 1, 5);
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
### Accessing Locale by Name
|
|
384
|
+
|
|
385
|
+
```javascript
|
|
386
|
+
dbi.register(({ ChatInput }) => {
|
|
387
|
+
ChatInput({
|
|
388
|
+
name: "translate",
|
|
389
|
+
description: "Show translation",
|
|
390
|
+
|
|
391
|
+
onExecute({ interaction, dbi }) {
|
|
392
|
+
// Get a specific locale by name
|
|
393
|
+
const enLocale = dbi.locale("en");
|
|
394
|
+
const trLocale = dbi.locale("tr");
|
|
395
|
+
|
|
396
|
+
const enGreeting = enLocale.data.greeting();
|
|
397
|
+
const trGreeting = trLocale.data.greeting();
|
|
398
|
+
|
|
399
|
+
interaction.reply(`EN: ${enGreeting}\nTR: ${trGreeting}`);
|
|
400
|
+
}
|
|
401
|
+
});
|
|
402
|
+
});
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
---
|
|
406
|
+
|
|
407
|
+
## Dynamic Locale Selection
|
|
408
|
+
|
|
409
|
+
### Based on User Settings
|
|
410
|
+
|
|
411
|
+
```javascript
|
|
412
|
+
dbi.register(({ ChatInput }) => {
|
|
413
|
+
ChatInput({
|
|
414
|
+
name: "message",
|
|
415
|
+
description: "Send a message",
|
|
416
|
+
|
|
417
|
+
async onExecute({ interaction, dbi }) {
|
|
418
|
+
// Get user's saved language preference from database
|
|
419
|
+
const userLang = await getUserLanguage(interaction.user.id);
|
|
420
|
+
|
|
421
|
+
// Get the locale
|
|
422
|
+
const locale = dbi.locale(userLang) || dbi.locale("en");
|
|
423
|
+
|
|
424
|
+
const message = locale.data.welcomeMessage();
|
|
425
|
+
interaction.reply(message);
|
|
426
|
+
}
|
|
427
|
+
});
|
|
428
|
+
});
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
### Based on Guild Settings
|
|
432
|
+
|
|
433
|
+
```javascript
|
|
434
|
+
dbi.register(({ Event }) => {
|
|
435
|
+
Event({
|
|
436
|
+
name: "guildMemberAdd",
|
|
437
|
+
id: "welcome-message",
|
|
438
|
+
|
|
439
|
+
async onExecute({ member, locale }) {
|
|
440
|
+
// Use guild's locale or default
|
|
441
|
+
const guildLocale = locale?.guild || dbi.locale("en");
|
|
442
|
+
const message = guildLocale.data.welcome(member.user.username);
|
|
443
|
+
|
|
444
|
+
const channel = member.guild.systemChannel;
|
|
445
|
+
if (channel) {
|
|
446
|
+
await channel.send(message);
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
});
|
|
450
|
+
});
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
---
|
|
454
|
+
|
|
455
|
+
## Merging Locales
|
|
456
|
+
|
|
457
|
+
Locales with the same name are automatically merged:
|
|
458
|
+
|
|
459
|
+
```javascript
|
|
460
|
+
// File 1: Base translations
|
|
461
|
+
dbi.register(({ Locale }) => {
|
|
462
|
+
Locale({
|
|
463
|
+
name: "en",
|
|
464
|
+
data: {
|
|
465
|
+
common: {
|
|
466
|
+
yes: "Yes",
|
|
467
|
+
no: "No",
|
|
468
|
+
cancel: "Cancel"
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
});
|
|
472
|
+
});
|
|
473
|
+
|
|
474
|
+
// File 2: Feature-specific translations
|
|
475
|
+
dbi.register(({ Locale }) => {
|
|
476
|
+
Locale({
|
|
477
|
+
name: "en",
|
|
478
|
+
data: {
|
|
479
|
+
shop: {
|
|
480
|
+
buy: "Buy",
|
|
481
|
+
sell: "Sell",
|
|
482
|
+
cart: "Cart"
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
});
|
|
486
|
+
});
|
|
487
|
+
|
|
488
|
+
// Result: Both 'common' and 'shop' are available in 'en' locale
|
|
489
|
+
```
|
|
490
|
+
|
|
491
|
+
---
|
|
492
|
+
|
|
493
|
+
## Handling Missing Translations
|
|
494
|
+
|
|
495
|
+
### Default Invalid Path Handler
|
|
496
|
+
|
|
497
|
+
```javascript
|
|
498
|
+
const dbi = createDBI("my-bot", {
|
|
499
|
+
defaults: {
|
|
500
|
+
locale: {
|
|
501
|
+
name: "en",
|
|
502
|
+
|
|
503
|
+
// Custom message for missing translations
|
|
504
|
+
invalidPath: ({ path, locale }) => {
|
|
505
|
+
console.warn(`Missing translation: ${path} in ${locale.name}`);
|
|
506
|
+
return `[Missing: ${path}]`;
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
});
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
### Fallback to Default Locale
|
|
514
|
+
|
|
515
|
+
DBI automatically falls back to the default locale when a path is missing:
|
|
516
|
+
|
|
517
|
+
```javascript
|
|
518
|
+
dbi.register(({ Locale }) => {
|
|
519
|
+
Locale({
|
|
520
|
+
name: "en",
|
|
521
|
+
data: {
|
|
522
|
+
greeting: "Hello!",
|
|
523
|
+
special: "Special message"
|
|
524
|
+
}
|
|
525
|
+
});
|
|
526
|
+
|
|
527
|
+
Locale({
|
|
528
|
+
name: "tr",
|
|
529
|
+
data: {
|
|
530
|
+
greeting: "Merhaba!"
|
|
531
|
+
// 'special' is missing - will fall back to English
|
|
532
|
+
}
|
|
533
|
+
});
|
|
534
|
+
});
|
|
535
|
+
|
|
536
|
+
// In a Turkish context:
|
|
537
|
+
const message = locale.user.data.special();
|
|
538
|
+
// Returns "Special message" (fallback to English)
|
|
539
|
+
```
|
|
540
|
+
|
|
541
|
+
---
|
|
542
|
+
|
|
543
|
+
## Best Practices
|
|
544
|
+
|
|
545
|
+
### 1. Organize by Feature
|
|
546
|
+
|
|
547
|
+
```
|
|
548
|
+
src/
|
|
549
|
+
├── locales/
|
|
550
|
+
│ ├── en/
|
|
551
|
+
│ │ ├── common.js
|
|
552
|
+
│ │ ├── commands.js
|
|
553
|
+
│ │ └── errors.js
|
|
554
|
+
│ └── tr/
|
|
555
|
+
│ ├── common.js
|
|
556
|
+
│ ├── commands.js
|
|
557
|
+
│ └── errors.js
|
|
558
|
+
```
|
|
559
|
+
|
|
560
|
+
### 2. Use Consistent Keys
|
|
561
|
+
|
|
562
|
+
```javascript
|
|
563
|
+
// ✅ Good - Consistent naming
|
|
564
|
+
data: {
|
|
565
|
+
commands: {
|
|
566
|
+
help: { title: "...", description: "..." },
|
|
567
|
+
settings: { title: "...", description: "..." }
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
// ❌ Bad - Inconsistent naming
|
|
572
|
+
data: {
|
|
573
|
+
helpTitle: "...",
|
|
574
|
+
help_description: "...",
|
|
575
|
+
settingsHeader: "..."
|
|
576
|
+
}
|
|
577
|
+
```
|
|
578
|
+
|
|
579
|
+
### 3. Include Context for Translators
|
|
580
|
+
|
|
581
|
+
```javascript
|
|
582
|
+
Locale({
|
|
583
|
+
name: "en",
|
|
584
|
+
data: {
|
|
585
|
+
// {0} = username, {1} = level number
|
|
586
|
+
levelUp: "{0} reached level {1}!",
|
|
587
|
+
|
|
588
|
+
// {0} = item name, {1} = price in dollars
|
|
589
|
+
itemPurchased: "Purchased {0} for ${1}!"
|
|
590
|
+
}
|
|
591
|
+
});
|
|
592
|
+
```
|
|
593
|
+
|
|
594
|
+
### 4. Test All Locales
|
|
595
|
+
|
|
596
|
+
```javascript
|
|
597
|
+
// Helper to test all locale paths
|
|
598
|
+
function testLocales(dbi) {
|
|
599
|
+
const paths = ["greeting", "goodbye", "commands.help.title"];
|
|
600
|
+
const locales = ["en", "tr", "es"];
|
|
601
|
+
|
|
602
|
+
for (const localeName of locales) {
|
|
603
|
+
const locale = dbi.locale(localeName);
|
|
604
|
+
if (!locale) {
|
|
605
|
+
console.warn(`Missing locale: ${localeName}`);
|
|
606
|
+
continue;
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
for (const path of paths) {
|
|
610
|
+
const value = locale.get(path);
|
|
611
|
+
if (!value) {
|
|
612
|
+
console.warn(`Missing: ${localeName}.${path}`);
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
```
|
|
618
|
+
|
|
619
|
+
### 5. Handle Pluralization
|
|
620
|
+
|
|
621
|
+
```javascript
|
|
622
|
+
Locale({
|
|
623
|
+
name: "en",
|
|
624
|
+
data: {
|
|
625
|
+
items: {
|
|
626
|
+
one: "1 item",
|
|
627
|
+
many: "{0} items"
|
|
628
|
+
}
|
|
629
|
+
}
|
|
630
|
+
});
|
|
631
|
+
|
|
632
|
+
// Usage
|
|
633
|
+
function formatItems(count, locale) {
|
|
634
|
+
if (count === 1) {
|
|
635
|
+
return locale.data.items.one();
|
|
636
|
+
}
|
|
637
|
+
return locale.data.items.many(count);
|
|
638
|
+
}
|
|
639
|
+
```
|
|
640
|
+
|
|
641
|
+
### 6. Use Conditional Registration
|
|
642
|
+
|
|
643
|
+
```javascript
|
|
644
|
+
dbi.register(({ Locale }) => {
|
|
645
|
+
Locale({
|
|
646
|
+
name: "de",
|
|
647
|
+
flag: "german", // Only load with 'german' flag
|
|
648
|
+
data: {
|
|
649
|
+
greeting: "Hallo!"
|
|
650
|
+
}
|
|
651
|
+
});
|
|
652
|
+
});
|
|
653
|
+
|
|
654
|
+
// Load with German locale
|
|
655
|
+
await dbi.load("german");
|
|
656
|
+
```
|
|
657
|
+
|
|
658
|
+
---
|
|
659
|
+
|
|
660
|
+
## Complete Example
|
|
661
|
+
|
|
662
|
+
### File Structure
|
|
663
|
+
|
|
664
|
+
```
|
|
665
|
+
src/
|
|
666
|
+
├── locales/
|
|
667
|
+
│ ├── index.js
|
|
668
|
+
│ ├── en.js
|
|
669
|
+
│ └── tr.js
|
|
670
|
+
├── commands/
|
|
671
|
+
│ └── shop.js
|
|
672
|
+
└── interactions/
|
|
673
|
+
└── shop.locale.js
|
|
674
|
+
```
|
|
675
|
+
|
|
676
|
+
### en.js
|
|
677
|
+
|
|
678
|
+
```javascript
|
|
679
|
+
const dbi = require("../../dbi");
|
|
680
|
+
|
|
681
|
+
dbi.register(({ Locale }) => {
|
|
682
|
+
Locale({
|
|
683
|
+
name: "en",
|
|
684
|
+
data: {
|
|
685
|
+
shop: {
|
|
686
|
+
title: "🛒 Shop",
|
|
687
|
+
welcome: "Welcome to the shop, {0}!",
|
|
688
|
+
balance: "Your balance: ${0}",
|
|
689
|
+
items: {
|
|
690
|
+
sword: { name: "Sword", description: "A sharp blade" },
|
|
691
|
+
shield: { name: "Shield", description: "Protective armor" }
|
|
692
|
+
},
|
|
693
|
+
purchase: {
|
|
694
|
+
success: "Successfully purchased {0}!",
|
|
695
|
+
noFunds: "You don't have enough funds!",
|
|
696
|
+
confirm: "Buy {0} for ${1}?"
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
});
|
|
701
|
+
});
|
|
702
|
+
```
|
|
703
|
+
|
|
704
|
+
### tr.js
|
|
705
|
+
|
|
706
|
+
```javascript
|
|
707
|
+
const dbi = require("../../dbi");
|
|
708
|
+
|
|
709
|
+
dbi.register(({ Locale }) => {
|
|
710
|
+
Locale({
|
|
711
|
+
name: "tr",
|
|
712
|
+
data: {
|
|
713
|
+
shop: {
|
|
714
|
+
title: "🛒 Mağaza",
|
|
715
|
+
welcome: "Mağazaya hoş geldin, {0}!",
|
|
716
|
+
balance: "Bakiyen: {0}₺",
|
|
717
|
+
items: {
|
|
718
|
+
sword: { name: "Kılıç", description: "Keskin bir bıçak" },
|
|
719
|
+
shield: { name: "Kalkan", description: "Koruyucu zırh" }
|
|
720
|
+
},
|
|
721
|
+
purchase: {
|
|
722
|
+
success: "{0} başarıyla satın alındı!",
|
|
723
|
+
noFunds: "Yeterli bakiyen yok!",
|
|
724
|
+
confirm: "{0}'ı {1}₺'ye satın al?"
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
}
|
|
728
|
+
});
|
|
729
|
+
});
|
|
730
|
+
```
|
|
731
|
+
|
|
732
|
+
### shop.js
|
|
733
|
+
|
|
734
|
+
```javascript
|
|
735
|
+
const dbi = require("../../dbi");
|
|
736
|
+
|
|
737
|
+
dbi.register(({ ChatInput }) => {
|
|
738
|
+
ChatInput({
|
|
739
|
+
name: "shop",
|
|
740
|
+
description: "Open the shop",
|
|
741
|
+
|
|
742
|
+
onExecute({ interaction, locale }) {
|
|
743
|
+
const t = locale.user.data.shop;
|
|
744
|
+
|
|
745
|
+
interaction.reply({
|
|
746
|
+
embeds: [{
|
|
747
|
+
title: t.title(),
|
|
748
|
+
description: t.welcome(interaction.user.username),
|
|
749
|
+
fields: [
|
|
750
|
+
{
|
|
751
|
+
name: t.items.sword.name(),
|
|
752
|
+
value: t.items.sword.description()
|
|
753
|
+
},
|
|
754
|
+
{
|
|
755
|
+
name: t.items.shield.name(),
|
|
756
|
+
value: t.items.shield.description()
|
|
757
|
+
}
|
|
758
|
+
],
|
|
759
|
+
footer: { text: t.balance(100) }
|
|
760
|
+
}]
|
|
761
|
+
});
|
|
762
|
+
}
|
|
763
|
+
});
|
|
764
|
+
});
|
|
765
|
+
```
|
|
766
|
+
|
|
767
|
+
---
|
|
768
|
+
|
|
769
|
+
## Next Steps
|
|
770
|
+
|
|
771
|
+
- [Advanced Features](./ADVANCED_FEATURES.md) - Message commands, multi-client
|
|
772
|
+
- [Svelte Components](./SVELTE_COMPONENTS.md) - Reactive UI components
|
|
773
|
+
- [API Reference](./API_REFERENCE.md) - Complete API documentation
|