import Dayjs from 'dayjs'; import { TranslationBuilder } from './TranslationBuilder'; import type { TFunction } from 'i18next'; import type momentTimezone from 'moment-timezone'; import type { TranslationLanguages } from 'stream-chat'; import type { TranslationTopicConstructor } from './TranslationBuilder'; import type { UnknownType } from '../types/types'; import type { CustomFormatters, PredefinedFormatters, TDateTimeParser } from './types'; import { enTranslations } from './translations'; import 'dayjs/locale/de'; import 'dayjs/locale/es'; import 'dayjs/locale/fr'; import 'dayjs/locale/hi'; import 'dayjs/locale/it'; import 'dayjs/locale/ja'; import 'dayjs/locale/ko'; import 'dayjs/locale/nl'; import 'dayjs/locale/pt'; import 'dayjs/locale/ru'; import 'dayjs/locale/tr'; import 'dayjs/locale/en'; type CalendarLocaleConfig = { lastDay: string; lastWeek: string; nextDay: string; nextWeek: string; sameDay: string; sameElse: string; }; type DateTimeParserModule = typeof Dayjs | typeof momentTimezone; export type Streami18nOptions = { DateTimeParser?: DateTimeParserModule; dayjsLocaleConfigForLanguage?: Partial & { calendar?: CalendarLocaleConfig; }; debug?: boolean; disableDateTimeTranslations?: boolean; formatters?: Partial & CustomFormatters; language?: TranslationLanguages; logger?: (message?: string) => void; translationBuilderTopics?: Record; parseMissingKeyHandler?: (key: string, defaultValue?: string) => string; timezone?: string; translationsForLanguage?: Partial; }; export declare class Streami18n { i18nInstance: import("i18next").i18n; translationBuilder: TranslationBuilder; private translationBuilderTopics; Dayjs: null; setLanguageCallback: (t: TFunction) => void; initialized: boolean; t: TFunction; tDateTimeParser: TDateTimeParser; translations: { [key: string]: { [key: string]: typeof enTranslations | UnknownType; }; }; /** * dayjs.defineLanguage('nl') also changes the global locale. We don't want to do that * when user calls registerTranslation() function. So instead we will store the locale configs * given to registerTranslation() function in `dayjsLocales` object, and register the required locale * with moment, when setLanguage is called. * */ dayjsLocales: { [key: string]: Partial; }; /** * Initialize properties used in constructor */ logger: (msg?: string) => void; currentLanguage: TranslationLanguages; DateTimeParser: DateTimeParserModule; formatters: PredefinedFormatters & CustomFormatters; isCustomDateTimeParser: boolean; i18nextConfig: { debug: boolean; fallbackLng: false; interpolation: { escapeValue: boolean; formatSeparator: string; }; keySeparator: false; lng: string; nsSeparator: false; parseMissingKeyHandler?: (key: string, defaultValue?: string) => string; postProcess?: string[]; }; /** * A valid TZ identifier string (https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) */ timezone?: string; /** * Constructor accepts following options: * - language (String) default: 'en' * Language code e.g., en, tr * * - translationsForLanguage (object) * Translations object. Please check src/i18n/en.json for example. * * - disableDateTimeTranslations (boolean) default: false * Disable translations for date-times * * - debug (boolean) default: false * Enable debug mode in internal i18n class * * - logger (function) default: () => {} * Logger function to log warnings/errors from this class * * - dayjsLocaleConfigForLanguage (object) default: 'enConfig' * [Config object](https://momentjs.com/docs/#/i18n/changing-locale/) for internal moment object, * corresponding to language (param) * * - DateTimeParser (function) Moment or Dayjs instance/function. * Make sure to load all the required locales in this Moment or Dayjs instance that you will be provide to Streami18n * * @param {*} options */ constructor(options?: Streami18nOptions); /** * Initializes the i18next instance with configuration (which enables natural language as default keys) */ init(): Promise<{ t: TFunction<"translation", undefined>; tDateTimeParser: TDateTimeParser; }>; localeExists: (language: TranslationLanguages) => boolean; validateCurrentLanguage: () => void; /** Returns an instance of i18next used within this class instance */ geti18Instance: () => import("i18next").i18n; /** Returns list of available languages. */ getAvailableLanguages: () => string[]; /** Returns all the translation dictionary for all inbuilt-languages */ getTranslations: () => { [key: string]: { [key: string]: { "{{ commaSeparatedUsers }} and {{ moreCount }} more": string; "{{ commaSeparatedUsers }}, and {{ lastUser }}": string; "{{ count }} files_one": string; "{{ count }} files_other": string; "{{ count }} people are typing_one": string; "{{ count }} people are typing_many": string; "{{ count }} people are typing_other": string; "{{ count }} photos_one": string; "{{ count }} photos_other": string; "{{ count }} reactions_one": string; "{{ count }} reactions_other": string; "{{ count }} videos_one": string; "{{ count }} videos_other": string; "{{ firstUser }} and {{ secondUser }}": string; "{{ imageCount }} more": string; "{{ memberCount }} members": string; "{{ typing }} are typing": string; "{{ typing }} is typing": string; "{{ user }} has been muted": string; "{{ user }} has been unmuted": string; "{{ user }} is typing...": string; "{{ users }} and {{ user }} are typing...": string; "{{ users }} and more are typing...": string; "{{ watcherCount }} online": string; "{{count}} new messages_one": string; "{{count}} new messages_other": string; "{{count}} unread_one": string; "{{count}} unread_other": string; "{{count}} votes_one": string; "{{count}} votes_other": string; "+{{ imageCount }}": string; "+{{count}} more options_one": string; "+{{count}} more options_other": string; "\uD83C\uDFD9 Attachment...": string; "\uD83D\uDCCA {{createdBy}} created: {{ pollName}}": string; "\uD83D\uDCCA {{votedBy}} voted: {{pollOptionText}}": string; "\uD83D\uDCCDShared location": string; "Add a comment": string; "Add a comment to your poll answer": string; "Add an option": string; "Add reaction": string; "All results loaded": string; "Allow access to camera": string; "Allow access to microphone": string; "Allow comments": string; "Allow option suggestion": string; "Allow others to add comments": string; "Also send as a direct message": string; "Also send in channel": string; "Also sent in channel": string; "An error has occurred during recording": string; "An error has occurred during the recording processing": string; Anonymous: string; "Anonymous poll": string; Archive: string; "Are you sure you want to delete this message?": string; "aria/Attachment": string; "aria/Attachment Actions": string; "aria/Audio position {{ elapsed }} of {{ duration }}": string; "aria/Audio position {{ progress }} percent": string; "aria/Block User": string; "aria/Bookmark Message": string; "aria/Cancel recording": string; "aria/Cancel Reply": string; "aria/Cancel upload": string; "aria/Channel Actions": string; "aria/Channel list": string; "aria/Channel search results": string; "aria/Chat view tabs": string; "aria/Clear search": string; "aria/Close callout dialog": string; "aria/Close thread": string; "aria/Collapse sidebar": string; "aria/Command Suggestions": string; "aria/Complete recording": string; "aria/Copy Message Text": string; "aria/Decrease value": string; "aria/Delete Message": string; "aria/Dismiss notification": string; "aria/Download attachment": string; "aria/Edit Message": string; "aria/Emoji picker": string; "aria/Emoji Suggestions": string; "aria/Exit search": string; "aria/Expand sidebar": string; "aria/File input": string; "aria/File upload": string; "aria/Flag Message": string; "aria/Image failed to load": string; "aria/Image input": string; "aria/Increase value": string; "aria/Jump to latest message": string; "aria/Jump to quoted message": string; "aria/Load More Channels": string; "aria/Mark Message Unread": string; "aria/Mark messages as read": string; "aria/Menu": string; "aria/Message Actions": string; "aria/Message from {{ user }},": string; "aria/Message Options": string; "aria/Message,": string; "aria/Mute User": string; "aria/Notifications": string; "aria/Open Attachment Selector": string; "aria/Open Channel Actions Menu": string; "aria/Open Menu": string; "aria/Open Message Actions Menu": string; "aria/Open Reaction Selector": string; "aria/Open Thread": string; "aria/Pause": string; "aria/Pause recording": string; "aria/Percent complete": string; "aria/Pin Message": string; "aria/Play": string; "aria/Quote Message": string; "aria/Reaction list": string; "aria/Remind Me Message": string; "aria/Remind Me Options": string; "aria/Remove attachment": string; "aria/Remove location attachment": string; "aria/Remove option": string; "aria/Remove Reminder": string; "aria/Remove Save For Later": string; "aria/Resend Message": string; "aria/Resume recording": string; "aria/Retry upload": string; "aria/Review bounced message": string; "aria/Search results": string; "aria/Search results header filter button for: {{ source }}": string; "aria/Seek audio position": string; "aria/Select Channel: {{ channelName }}": string; "aria/Select Reaction: {{ reactionName }}": string; "aria/Select User Channel: {{ name }}": string; "aria/Send": string; "aria/Show preview": string; "aria/Start recording audio": string; "aria/Stop AI Generation": string; "aria/Suggestions": string; "aria/Thread list": string; "aria/Unblock User": string; "aria/Unmute User": string; "aria/Unpin Message": string; "aria/User Suggestions": string; "Ask a question": string; Attach: string; "Attach files": string; Attachment: string; "Attachment upload blocked due to {{reason}}": string; "Attachment upload failed due to {{reason}}": string; Back: string; "ban-command-args": string; "ban-command-description": string; "Block User": string; Cancel: string; "Cannot seek in the recording": string; "Channel archived": string; "Channel Missing": string; "Channel muted": string; "Channel pinned": string; "Channel unarchived": string; "Channel unmuted": string; "Channel unpinned": string; Channels: string; Chats: string; "Choose between 2 to 10 options": string; Close: string; "Close dialog": string; "Close emoji picker": string; "Close prompt: {{ title }}": string; "Command not available while editing": string; "Command not available while replying": string; Commands: string; "Commands matching": string; "Connection failure, reconnecting now...": string; "Copy Message": string; Create: string; "Create a question, add options, and configure poll settings": string; "Create poll": string; "Current location": string; Delete: string; "Delete for me": string; "Delete message": string; Delivered: string; "Direct message": string; "Do you want to end this poll now? Nobody will be able to vote in this poll anymore.": string; "Download All": string; "Download Attachment": string; "Download attachment {{ name }}": string; "Drag your files here": string; "Drag your files here to add to your post": string; "Due {{ timeLeft }}": string; "Due since {{ dueSince }}": string; "duration/Message reminder": string; "duration/Remind Me": string; "duration/Share Location": string; "Edit Message": string; "Edit message request failed": string; Edited: string; "Emoji matching": string; "Empty message...": string; End: string; "End poll": string; "End this poll?": string; "End vote": string; "Enforce unique vote is enabled": string; Error: string; "Error adding flag": string; "Error connecting to chat, refresh the page to try again.": string; "Error deleting message": string; "Error fetching reactions": string; "Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.": string; "Error muting a user ...": string; "Error pinning message": string; "Error removing message pin": string; "Error reproducing the recording": string; "Error starting recording": string; "Error unmuting a user ...": string; "Error uploading attachment": string; "Error uploading file": string; "Error uploading image": string; "Error: {{ errorMessage }}": string; "Exit command {{ command }}": string; "Failed to block user": string; "Failed to create the poll": string; "Failed to create the poll due to {{reason}}": string; "Failed to delete the message": string; "Failed to end the poll": string; "Failed to end the poll due to {{reason}}": string; "Failed to jump to the first unread message": string; "Failed to leave channel": string; "Failed to load channels": string; "Failed to load more channels": string; "Failed to mark channel as read": string; "Failed to play the recording": string; "Failed to retrieve location": string; "Failed to share location": string; "Failed to update channel archive status": string; "Failed to update channel mute status": string; "Failed to update channel pinned status": string; File: string; "File is required for upload attachment": string; "File is too large: {{ size }}, maximum upload size is {{ limit }}": string; "File too large": string; fileCount_one: string; fileCount_other: string; Flag: string; "Generating...": string; "giphy-command-args": string; "giphy-command-description": string; "Hide who voted": string; Image: string; imageCount_one: string; imageCount_other: string; "Instant commands": string; "language/af": string; "language/am": string; "language/ar": string; "language/az": string; "language/bg": string; "language/bn": string; "language/bs": string; "language/cs": string; "language/da": string; "language/de": string; "language/el": string; "language/en": string; "language/es": string; "language/es-MX": string; "language/et": string; "language/fa": string; "language/fa-AF": string; "language/fi": string; "language/fr": string; "language/fr-CA": string; "language/ha": string; "language/he": string; "language/hi": string; "language/hr": string; "language/ht": string; "language/hu": string; "language/id": string; "language/it": string; "language/ja": string; "language/ka": string; "language/ko": string; "language/lt": string; "language/lv": string; "language/ms": string; "language/nl": string; "language/no": string; "language/pl": string; "language/ps": string; "language/pt": string; "language/ro": string; "language/ru": string; "language/sk": string; "language/sl": string; "language/so": string; "language/sq": string; "language/sr": string; "language/sv": string; "language/sw": string; "language/ta": string; "language/th": string; "language/tl": string; "language/tr": string; "language/uk": string; "language/ur": string; "language/vi": string; "language/zh": string; "language/zh-TW": string; "Leave Channel": string; "Left channel": string; "Let others add options": string; "Limit votes per person": string; Link: string; linkCount_one: string; linkCount_other: string; live: string; "Live for {{duration}}": string; "Live location": string; "Live until {{ timestamp }}": string; "Load more": string; "Local upload attachment missing local id": string; Location: string; "Location sharing ended": string; "Location: {{ coordinates }}": string; "Mark as unread": string; "Maximum number of votes (from 2 to 10)": string; "Maximum votes per person": string; Menu: string; "Message deleted": string; "Message failed to send": string; "Message has been successfully flagged": string; "Message marked as unread": string; "Message pinned": string; "Message unpinned": string; "Message was blocked by moderation policies": string; "Messages have been marked unread.": string; "Missing permissions to upload the attachment": string; "Multiple votes": string; Mute: string; "mute-command-args": string; "mute-command-description": string; "network error": string; New: string; "New message from {{user}}": string; "New Messages!": string; "Next image": string; "No chats here yet\u2026": string; "No conversations yet": string; "No items exist": string; "No results found": string; "Nobody will be able to vote in this poll anymore.": string; "Nothing yet...": string; Offline: string; Ok: string; Online: string; "Only numbers are allowed": string; "Only visible to you": string; "Open emoji picker": string; "Open gallery at image {{ index }}": string; "Open image in gallery": string; "Open location in a map": string; "Option already exists": string; "Option is empty": string; Options: string; Original: string; "People matching": string; Photo: string; Pin: string; "Pinned by {{ name }}": string; "Pinned by You": string; "placeholder/PollComment": string; "placeholder/PollOptionSuggestion": string; "Play video": string; "Playback speed {{ rate }}x": string; Poll: string; "Poll comments": string; "Poll ended": string; "Poll options": string; "Poll results": string; "Previous image": string; Question: string; "Question {{ optionOrderNumber}}": string; "Question is required": string; "Quote Reply": string; "Reached the vote limit. Remove an existing vote first.": string; "Recording format is not supported and cannot be reproduced": string; "Remind me": string; "Remind Me": string; "Reminder set": string; "Remove reminder": string; "Remove save for later": string; "Replied to a thread": string; Reply: string; "Reply to {{ authorName }}": string; "Reply to a message to start a thread": string; "Reply to Message": string; replyCount_one: string; replyCount_other: string; Resend: string; "Retry upload": string; "Review all options available in this poll": string; "Review comments submitted with poll answers": string; "Review poll results and open an option to see detailed votes": string; "Review this message and choose whether to delete it, edit it, or send it anyway": string; "Review who voted for this option": string; "Save for later": string; "Saved for later": string; Search: string; "Search GIFs": string; "search-results-header-filter-source-button-label--channels": string; "search-results-header-filter-source-button-label--messages": string; "search-results-header-filter-source-button-label--users": string; "Searching for {{ searchSourceType }}...": string; "Searching...": string; searchResultsCount_one: string; searchResultsCount_other: string; "Select a thread to continue the conversation": string; "Select more than one option": string; "Select one": string; "Select one or more": string; "Select up to {{count}}_one": string; "Select up to {{count}}_other": string; "Select your current location and optionally enable live location sharing": string; Send: string; "Send a message": string; "Send a message to start the conversation": string; "Send Anyway": string; "Send message request failed": string; "Send poll": string; "Sending...": string; Sent: string; Share: string; "Share live location for": string; "Share Location": string; "Shared live location": string; "Shared location": string; Shuffle: string; "size limit": string; "Slow Mode ON": string; "Slow mode, wait {{ seconds }}s...": string; "Some of the files will not be accepted": string; "Start typing to search": string; "Stop sharing": string; Submit: string; "Suggest a new option to add to this poll": string; "Suggest an option": string; "Tap to remove": string; "Tap to remove: {{ reactionName }}": string; "Thinking...": string; "this content could not be displayed": string; "This field cannot be empty or contain only spaces": string; "This message did not meet our content guidelines": string; Thread: string; "Thread has not been found": string; "Thread reply": string; "Thread Reply": string; "ThreadListUnseenThreadsBanner/loading": string; "ThreadListUnseenThreadsBanner/unreadThreads_one": string; "ThreadListUnseenThreadsBanner/unreadThreads_other": string; Threads: string; "timestamp/ChannelPreviewTimestamp": string; "timestamp/DateSeparator": string; "timestamp/LiveLocation": string; "timestamp/MessageTimestamp": string; "timestamp/PollVote": string; "timestamp/PollVoteTooltip": string; "timestamp/relativeDaysAgo": string; "timestamp/relativeToday": string; "timestamp/relativeWeeksAgo": string; "timestamp/relativeYesterday": string; "timestamp/ReminderNotification": string; "timestamp/SystemMessage": string; "To start recording, allow the camera access in your browser": string; "To start recording, allow the microphone access in your browser": string; totalVoteCount_one: string; totalVoteCount_other: string; Translated: string; "Translated from {{ language }}": string; "translationBuilderTopic/notification": string; "Type a number from 2 to 10": string; Unarchive: string; "unban-command-args": string; "unban-command-description": string; "Unblock User": string; "unknown error": string; Unmute: string; "unmute-command-args": string; "unmute-command-description": string; Unpin: string; "Unread messages": string; "Unsupported attachment": string; "unsupported file type": string; Update: string; "Update the comment attached to your poll answer": string; "Update your comment": string; "Upload blocked": string; "Upload error": string; "Upload failed": string; "Upload type: \"{{ type }}\" is not allowed": string; "User blocked": string; "User unblocked": string; "User uploaded content": string; Video: string; videoCount_one: string; videoCount_other: string; View: string; "View {{count}} comments_one": string; "View {{count}} comments_other": string; "View all": string; "View original": string; "View results": string; "View translation": string; "Voice message": string; "Voice message {{ duration }}": string; "Voice message deleted": string; voiceMessageCount_one: string; voiceMessageCount_other: string; "Vote ended": string; Votes: string; "Wait until all attachments have uploaded": string; "Waiting for network\u2026": string; You: string; "You've reached the maximum number of files": string; } | UnknownType; }; }; /** * Returns current version translator function. */ getTranslators(): Promise<{ t: TFunction<"translation", undefined>; tDateTimeParser: TDateTimeParser; }>; registerTranslation(language: TranslationLanguages, translation: typeof enTranslations, customDayjsLocale?: Partial): void; addOrUpdateLocale(key: TranslationLanguages, config: Partial): void; setLanguage(language: TranslationLanguages): Promise | undefined>; registerSetLanguageCallback(callback: (t: TFunction) => void): void; } export {}; //# sourceMappingURL=Streami18n.d.ts.map