Repository: benawad/dogehouse Branch: staging Commit: 584055ad407b Files: 1345 Total size: 3.1 MB Directory structure: gitextract_vaj6l7zt/ ├── .devcontainer/ │ ├── Dockerfile │ ├── devcontainer.json │ ├── docker-compose.yml │ └── scripts/ │ ├── environment.sh │ ├── node.sh │ └── user.sh ├── .dockerignore ├── .editorconfig ├── .eslintignore ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ └── feature_request.md │ ├── labeler.yml │ └── workflows/ │ ├── baklava-build_and_release.yaml │ ├── dolma-npm_deploy.yaml │ ├── global-label_pr.yml │ ├── global-lint_commit_messages.yaml │ ├── globalkey-npm_deploy.yaml │ ├── kebab-npm_publish.yaml │ ├── kibbeh-e2e_tests.yaml │ ├── kibbeh-lint_and_test.yaml │ ├── kousa-deploy_staging.yaml │ ├── kousa-tests.yaml │ └── shawarma-deploy_staging.yaml ├── .gitignore ├── .husky/ │ ├── .gitignore │ ├── commit-msg │ └── pre-commit ├── .prettierignore ├── .prettierrc.js ├── .vscode/ │ └── settings.json ├── .yarnrc.yml ├── CHANGELOG.md ├── CODEOWNERS ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── CREATE_BOT_ACCOUNT.MD ├── DESIGN_GUIDELINES.md ├── FAQ.md ├── HOW_TO_DEBUG_AUDIO.md ├── HOW_TO_GET_PERMA_BANNED_FROM_DOGEHOUSE.md ├── LICENSE ├── README.md ├── SECURITY.md ├── baklava/ │ ├── .gitignore │ ├── .yarnrc.yml │ ├── README.md │ ├── icons/ │ │ └── icon.icns │ ├── locales/ │ │ └── en/ │ │ └── translate.json │ ├── package.json │ ├── resources/ │ │ ├── overlay/ │ │ │ ├── .gitignore │ │ │ ├── .yarnrc.yml │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ ├── public/ │ │ │ │ └── index.html │ │ │ └── src/ │ │ │ ├── App.css │ │ │ ├── App.js │ │ │ ├── index.css │ │ │ ├── index.js │ │ │ └── reportWebVitals.js │ │ └── splash/ │ │ └── splash-screen.html │ ├── scripts/ │ │ ├── generateTranslationTypes.ts │ │ ├── syncTranslations.ts │ │ ├── traverseTranslations.ts │ │ └── tsconfig.json │ ├── settings/ │ │ └── entitlements.mac.plist │ ├── src/ │ │ ├── constants.ts │ │ ├── dev.ts │ │ ├── electron.ts │ │ ├── generated/ │ │ │ └── translationKeys.ts │ │ ├── types.ts │ │ └── utils/ │ │ ├── keybinds.ts │ │ ├── notifications.ts │ │ ├── overlay/ │ │ │ ├── index.ts │ │ │ └── ipc.ts │ │ ├── rpc/ │ │ │ ├── index.ts │ │ │ └── ipc.ts │ │ └── tray.ts │ └── tsconfig.json ├── commitlint.config.js ├── dinner/ │ ├── .eslintrc.json │ ├── .gitignore │ ├── package.json │ ├── src/ │ │ ├── create-accounts.ts │ │ └── play-audio.ts │ └── tsconfig.json ├── docker-compose.local.yml ├── docker-compose.prod.yml ├── docker-compose.yml ├── docs/ │ ├── Architecture/ │ │ └── README.md │ ├── Directory/ │ │ └── README.md │ ├── Elixir Api/ │ │ └── README.MD │ ├── README.MD │ ├── React Front End/ │ │ └── README.MD │ └── Voice Server/ │ └── README.MD ├── dolma/ │ ├── .editorconfig │ ├── .gitignore │ ├── LICENSE │ ├── README.md │ ├── package.json │ ├── src/ │ │ ├── index.ts │ │ ├── lib/ │ │ │ ├── decode.ts │ │ │ ├── encode.ts │ │ │ ├── filterString.ts │ │ │ ├── filterUnitoken.ts │ │ │ └── msgToken.ts │ │ ├── test/ │ │ │ ├── run.ts │ │ │ └── tests/ │ │ │ └── encoding.ts │ │ ├── tokens/ │ │ │ ├── index.ts │ │ │ └── types/ │ │ │ ├── block.ts │ │ │ ├── emoji.ts │ │ │ ├── emote.ts │ │ │ ├── link.ts │ │ │ ├── mention.ts │ │ │ └── text.ts │ │ └── util/ │ │ ├── regex.ts │ │ └── types/ │ │ └── tokenTypes.ts │ └── tsconfig.json ├── globalkey/ │ ├── .gitignore │ ├── Cargo.toml │ ├── README.md │ ├── index.d.ts │ ├── package.json │ ├── src/ │ │ ├── build.rs │ │ └── lib.rs │ └── test.js ├── kebab/ │ ├── .eslintrc.json │ ├── .gitignore │ ├── .prettierrc.js │ ├── README.md │ ├── examples/ │ │ ├── bot/ │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ ├── chat/ │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ ├── create-bot/ │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ ├── mediasoup-audio/ │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.css │ │ │ │ ├── index.html │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ └── react-chat/ │ │ ├── README.md │ │ ├── package.json │ │ ├── public/ │ │ │ ├── index.html │ │ │ ├── manifest.json │ │ │ └── robots.txt │ │ ├── src/ │ │ │ ├── App.css │ │ │ ├── App.tsx │ │ │ ├── index.css │ │ │ ├── index.tsx │ │ │ └── react-app-env.d.ts │ │ └── tsconfig.json │ ├── jest.config.js │ ├── package.json │ ├── src/ │ │ ├── README.md │ │ ├── audio/ │ │ │ ├── audioWrapper.ts │ │ │ ├── interface.ts │ │ │ └── mediasoup-client.ts │ │ ├── client/ │ │ │ ├── README.md │ │ │ ├── http/ │ │ │ │ ├── bot.ts │ │ │ │ ├── dev.ts │ │ │ │ ├── endpoint.ts │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ ├── requester/ │ │ │ │ ├── auth.ts │ │ │ │ ├── chat.ts │ │ │ │ ├── index.ts │ │ │ │ ├── misc.ts │ │ │ │ ├── room.ts │ │ │ │ └── user.ts │ │ │ ├── subscriber/ │ │ │ │ ├── index.ts │ │ │ │ └── legacy.ts │ │ │ └── type-util.ts │ │ ├── entities.ts │ │ ├── http/ │ │ │ ├── bot.ts │ │ │ ├── index.ts │ │ │ ├── raw.ts │ │ │ └── wrapper.ts │ │ ├── index.ts │ │ ├── pagination.ts │ │ ├── util/ │ │ │ ├── ast.test.ts │ │ │ ├── ast.ts │ │ │ └── index.ts │ │ └── websocket/ │ │ ├── index.ts │ │ ├── raw.ts │ │ ├── responses.ts │ │ └── wrapper.ts │ └── tsconfig.json ├── kibbeh/ │ ├── .babelrc │ ├── .eslintignore │ ├── .eslintrc.json │ ├── .gitignore │ ├── .prettierignore │ ├── .prettierrc.js │ ├── .storybook/ │ │ ├── main.js │ │ ├── manager.js │ │ ├── preview-head.html │ │ └── preview.js │ ├── .stylelintrc.json │ ├── README.md │ ├── cypress/ │ │ ├── .gitignore │ │ ├── fixtures/ │ │ │ └── example.json │ │ ├── integration/ │ │ │ ├── create-scheduled-room.ts │ │ │ ├── edit-profile.ts │ │ │ ├── room-creator.ts │ │ │ └── search.ts │ │ ├── plugins/ │ │ │ ├── index.js │ │ │ └── sample_spec.js │ │ ├── support/ │ │ │ ├── commands.ts │ │ │ ├── index.d.ts │ │ │ ├── index.js │ │ │ └── test-constants.ts │ │ └── tsconfig.json │ ├── cypress.json │ ├── deploy.sh │ ├── next-env.d.ts │ ├── next.config.js │ ├── package.json │ ├── postcss.config.js │ ├── public/ │ │ ├── locales/ │ │ │ ├── af/ │ │ │ │ └── translation.json │ │ │ ├── am/ │ │ │ │ └── translation.json │ │ │ ├── ar/ │ │ │ │ └── translation.json │ │ │ ├── az/ │ │ │ │ └── translation.json │ │ │ ├── bg/ │ │ │ │ └── translation.json │ │ │ ├── bn/ │ │ │ │ └── translation.json │ │ │ ├── bottom/ │ │ │ │ └── translation.json │ │ │ ├── cs/ │ │ │ │ └── translation.json │ │ │ ├── da/ │ │ │ │ └── translation.json │ │ │ ├── de/ │ │ │ │ └── translation.json │ │ │ ├── de-AT/ │ │ │ │ └── translation.json │ │ │ ├── el/ │ │ │ │ └── translation.json │ │ │ ├── en/ │ │ │ │ └── translation.json │ │ │ ├── en-AU/ │ │ │ │ └── translation.json │ │ │ ├── en-C/ │ │ │ │ ├── GUIDE.md │ │ │ │ └── translation.json │ │ │ ├── en-CODE/ │ │ │ │ └── translation.json │ │ │ ├── en-LOLCAT/ │ │ │ │ └── translation.json │ │ │ ├── en-OWO/ │ │ │ │ └── translation.json │ │ │ ├── en-PIGLATIN/ │ │ │ │ └── translation.json │ │ │ ├── en-PIRATE/ │ │ │ │ └── translation.json │ │ │ ├── eo/ │ │ │ │ └── translation.json │ │ │ ├── es/ │ │ │ │ └── translation.json │ │ │ ├── et/ │ │ │ │ └── translation.json │ │ │ ├── eu/ │ │ │ │ └── translation.json │ │ │ ├── fa/ │ │ │ │ └── translation.json │ │ │ ├── fi/ │ │ │ │ └── translation.json │ │ │ ├── fr/ │ │ │ │ └── translation.json │ │ │ ├── grc/ │ │ │ │ └── translation.json │ │ │ ├── gsw/ │ │ │ │ └── translation.json │ │ │ ├── he/ │ │ │ │ └── translation.json │ │ │ ├── hi/ │ │ │ │ └── translation.json │ │ │ ├── hr/ │ │ │ │ └── translation.json │ │ │ ├── hu/ │ │ │ │ └── translation.json │ │ │ ├── id/ │ │ │ │ └── translation.json │ │ │ ├── is/ │ │ │ │ └── translation.json │ │ │ ├── it/ │ │ │ │ └── translation.json │ │ │ ├── ja/ │ │ │ │ └── translation.json │ │ │ ├── kk/ │ │ │ │ └── translation.json │ │ │ ├── ko/ │ │ │ │ └── translation.json │ │ │ ├── ku/ │ │ │ │ └── translation.json │ │ │ ├── li/ │ │ │ │ └── translation.json │ │ │ ├── lld/ │ │ │ │ └── translation.json │ │ │ ├── lt/ │ │ │ │ └── translation.json │ │ │ ├── lv/ │ │ │ │ └── translation.json │ │ │ ├── nb/ │ │ │ │ └── translation.json │ │ │ ├── ne/ │ │ │ │ └── translation.json │ │ │ ├── nl/ │ │ │ │ └── translation.json │ │ │ ├── pl/ │ │ │ │ └── translation.json │ │ │ ├── pt-BR/ │ │ │ │ └── translation.json │ │ │ ├── pt-PT/ │ │ │ │ └── translation.json │ │ │ ├── ro/ │ │ │ │ └── translation.json │ │ │ ├── ru/ │ │ │ │ └── translation.json │ │ │ ├── sa/ │ │ │ │ └── translation.json │ │ │ ├── si/ │ │ │ │ └── translation.json │ │ │ ├── sk/ │ │ │ │ └── translation.json │ │ │ ├── sl/ │ │ │ │ └── translation.json │ │ │ ├── so/ │ │ │ │ └── translation.json │ │ │ ├── sq/ │ │ │ │ └── translation.json │ │ │ ├── sr/ │ │ │ │ └── translation.json │ │ │ ├── sr-LATIN/ │ │ │ │ └── translation.json │ │ │ ├── sv/ │ │ │ │ └── translation.json │ │ │ ├── ta/ │ │ │ │ └── translation.json │ │ │ ├── te/ │ │ │ │ └── translation.json │ │ │ ├── th/ │ │ │ │ └── translation.json │ │ │ ├── tl/ │ │ │ │ └── translation.json │ │ │ ├── tp/ │ │ │ │ └── translation.json │ │ │ ├── tr/ │ │ │ │ └── translation.json │ │ │ ├── uk/ │ │ │ │ └── translation.json │ │ │ ├── ur/ │ │ │ │ └── translation.json │ │ │ ├── uz/ │ │ │ │ └── translation.json │ │ │ ├── vi/ │ │ │ │ └── translation.json │ │ │ ├── zh-CN/ │ │ │ │ └── translation.json │ │ │ └── zh-TW/ │ │ │ └── translation.json │ │ ├── manifest.json │ │ ├── privacy-policy.html │ │ └── terms.html │ ├── scripts/ │ │ ├── syncTranslations.ts │ │ ├── traverseTranslations.ts │ │ └── tsconfig.json │ ├── src/ │ │ ├── form-fields/ │ │ │ ├── FieldSpacer.tsx │ │ │ └── InputField.tsx │ │ ├── global-stores/ │ │ │ ├── useAccountOverlay.ts │ │ │ ├── useAskForMicStore.ts │ │ │ ├── useAudioTracks.ts │ │ │ ├── useCurrentRoomIdStore.ts │ │ │ ├── useDeafStore.ts │ │ │ ├── useDebugAudio.ts │ │ │ ├── useDownloadAlertStore.ts │ │ │ ├── useElectronMobileStore.ts │ │ │ ├── useEmojiPickerStore.ts │ │ │ ├── useGlobalVolumeStore.ts │ │ │ ├── useHostStore.ts │ │ │ ├── useKeyMapStore.ts │ │ │ ├── useMicPermErrorStore.ts │ │ │ ├── useMuteStore.ts │ │ │ ├── useOverlayStore.ts │ │ │ ├── useProducerStore.ts │ │ │ ├── useRoomChatMentionStore.ts │ │ │ ├── useSocketStatus.ts │ │ │ └── useStatus.ts │ │ ├── globals.d.ts │ │ ├── icons/ │ │ │ ├── BotIcon.tsx │ │ │ ├── DeveloperIcon.tsx │ │ │ ├── LgLogo.tsx │ │ │ ├── Link.tsx │ │ │ ├── LogoIcon.tsx │ │ │ ├── MacCloseIcon.tsx │ │ │ ├── MacMaximizeIcon.tsx │ │ │ ├── MacMinimizeIcon.tsx │ │ │ ├── OutlineGlobe.tsx │ │ │ ├── Share.tsx │ │ │ ├── Smiley.tsx │ │ │ ├── SolidBug.tsx │ │ │ ├── SolidCalendar.tsx │ │ │ ├── SolidCaretRight.tsx │ │ │ ├── SolidChatBubble.tsx │ │ │ ├── SolidCompass.tsx │ │ │ ├── SolidContributor.tsx │ │ │ ├── SolidDeafened.tsx │ │ │ ├── SolidDeafenedOff.tsx │ │ │ ├── SolidDiscord.tsx │ │ │ ├── SolidDogenitro.tsx │ │ │ ├── SolidDownload.tsx │ │ │ ├── SolidFriends.tsx │ │ │ ├── SolidFriendsAdd.tsx │ │ │ ├── SolidFullscreen.tsx │ │ │ ├── SolidGitHub.tsx │ │ │ ├── SolidGoogle.tsx │ │ │ ├── SolidHelp.tsx │ │ │ ├── SolidHome.tsx │ │ │ ├── SolidInstagram.tsx │ │ │ ├── SolidKeyboard.tsx │ │ │ ├── SolidLink.tsx │ │ │ ├── SolidLogOut.tsx │ │ │ ├── SolidMegaphone.tsx │ │ │ ├── SolidMessages.tsx │ │ │ ├── SolidMicrophone.tsx │ │ │ ├── SolidMicrophoneOff.tsx │ │ │ ├── SolidMoon.tsx │ │ │ ├── SolidNew.tsx │ │ │ ├── SolidNotification.tsx │ │ │ ├── SolidPersonAdd.tsx │ │ │ ├── SolidPlus.tsx │ │ │ ├── SolidRocket.tsx │ │ │ ├── SolidSearch.tsx │ │ │ ├── SolidSettings.tsx │ │ │ ├── SolidSimpleMegaphone.tsx │ │ │ ├── SolidStaff.tsx │ │ │ ├── SolidTime.tsx │ │ │ ├── SolidTrash.tsx │ │ │ ├── SolidTwitter.tsx │ │ │ ├── SolidUser.tsx │ │ │ ├── SolidVolume.tsx │ │ │ ├── SolidVolumeOff.tsx │ │ │ ├── SolidWarning.tsx │ │ │ ├── WinCloseIcon.tsx │ │ │ ├── WinMaximizeIcon.tsx │ │ │ ├── WinMinimizeIcon.tsx │ │ │ ├── badges/ │ │ │ │ ├── ContributorBadge.tsx │ │ │ │ ├── StaffBadge.tsx │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── jest.config.js │ │ ├── lib/ │ │ │ ├── constants.ts │ │ │ ├── createChatMessage.ts │ │ │ ├── defaultQueryFn.ts │ │ │ ├── i18n.ts │ │ │ ├── isCurrentRoomId.ts │ │ │ ├── isServer.ts │ │ │ ├── isWebRTCEnabled.ts │ │ │ ├── kFormatter.ts │ │ │ ├── queryClient.ts │ │ │ ├── roomToCurrentRoom.ts │ │ │ ├── showErrorToast.ts │ │ │ ├── tests/ │ │ │ │ ├── constants.test.ts │ │ │ │ └── kFormatter.test.ts │ │ │ └── validateStruct.ts │ │ ├── modules/ │ │ │ ├── admin/ │ │ │ │ ├── AdminPage.tsx │ │ │ │ └── AdminPageForm.tsx │ │ │ ├── auth/ │ │ │ │ ├── WaitForWsAndAuth.tsx │ │ │ │ ├── useSaveTokensFromQueryParams.ts │ │ │ │ ├── useTokenStore.ts │ │ │ │ └── useVerifyLoggedIn.ts │ │ │ ├── dashboard/ │ │ │ │ ├── CreateRoomModal.tsx │ │ │ │ ├── DashboardPage.tsx │ │ │ │ ├── FeedController.tsx │ │ │ │ ├── FollowingOnlineController.tsx │ │ │ │ ├── MinimizedRoomCardController.tsx │ │ │ │ └── ProfileBlockController.tsx │ │ │ ├── debugging/ │ │ │ │ ├── AudioDebugAvatar.tsx │ │ │ │ └── AudioDebugPanel.tsx │ │ │ ├── developer/ │ │ │ │ ├── Bot.tsx │ │ │ │ ├── BotCard.tsx │ │ │ │ ├── BotIcon.tsx │ │ │ │ ├── BotInfo.tsx │ │ │ │ ├── BotsEditPage.tsx │ │ │ │ ├── BotsPage.tsx │ │ │ │ ├── CreateBotModal.tsx │ │ │ │ ├── DeveloperNavButton.tsx │ │ │ │ ├── DeveloperPanel.tsx │ │ │ │ ├── EditBot.tsx │ │ │ │ └── YourBots.tsx │ │ │ ├── display/ │ │ │ │ ├── HeaderController.tsx │ │ │ │ └── TextParser.tsx │ │ │ ├── errors/ │ │ │ │ ├── ErrorToastController.tsx │ │ │ │ └── useErrorToastStore.tsx │ │ │ ├── keyboard-shortcuts/ │ │ │ │ ├── ChatKeybind.tsx │ │ │ │ ├── DeafKeybind.tsx │ │ │ │ ├── InviteKeybind.tsx │ │ │ │ ├── KeybindListener.tsx │ │ │ │ ├── MuteKeybind.tsx │ │ │ │ ├── OverlayKeybind.tsx │ │ │ │ ├── PTTKeybind.tsx │ │ │ │ ├── RequestToSpeakKeybind.tsx │ │ │ │ └── index.ts │ │ │ ├── landing-page/ │ │ │ │ └── LoginPage.tsx │ │ │ ├── language/ │ │ │ │ └── LanguagePage.tsx │ │ │ ├── layouts/ │ │ │ │ ├── DefaultDesktopLayout.tsx │ │ │ │ ├── ElectronHeader.tsx │ │ │ │ ├── FloatingRoomInfo.tsx │ │ │ │ ├── GridPanels.tsx │ │ │ │ ├── MainLayout.tsx │ │ │ │ └── TabletSidebar.tsx │ │ │ ├── room/ │ │ │ │ ├── AudioDebugConsumerSection.tsx │ │ │ │ ├── BlockedFromRoomUsers.tsx │ │ │ │ ├── InviteRoomPage.tsx │ │ │ │ ├── RoomChatController.tsx │ │ │ │ ├── RoomOpenGraphPreview.tsx │ │ │ │ ├── RoomPage.tsx │ │ │ │ ├── RoomPanelController.tsx │ │ │ │ ├── RoomPanelIconBarController.tsx │ │ │ │ ├── RoomSettingModal.tsx │ │ │ │ ├── RoomUsersPanel.tsx │ │ │ │ ├── UserPreviewModal.tsx │ │ │ │ ├── UserPreviewModalProvider.tsx │ │ │ │ ├── ViewScheduledRoomPage.tsx │ │ │ │ ├── VolumeSliderController.tsx │ │ │ │ ├── chat/ │ │ │ │ │ ├── Emote.tsx │ │ │ │ │ ├── EmoteData.ts │ │ │ │ │ ├── RoomChat.tsx │ │ │ │ │ ├── RoomChatInput.tsx │ │ │ │ │ ├── RoomChatList.tsx │ │ │ │ │ ├── RoomChatMentions.tsx │ │ │ │ │ ├── navigateThroughQueriedEmojis.ts │ │ │ │ │ ├── navigateThroughQueriedUsers.ts │ │ │ │ │ ├── useRoomChatMentionStore.ts │ │ │ │ │ └── useRoomChatStore.ts │ │ │ │ ├── mobile/ │ │ │ │ │ └── RoomOverlay.tsx │ │ │ │ ├── useGetRoomByQueryParam.ts │ │ │ │ ├── useResize.ts │ │ │ │ └── useSplitUsersIntoSections.tsx │ │ │ ├── scheduled-rooms/ │ │ │ │ ├── AddToCalendar.tsx │ │ │ │ ├── CopyScheduleRoomLinkButton.tsx │ │ │ │ ├── CreateScheduledRoomModal.tsx │ │ │ │ ├── EditScheduleRoomModalController.tsx │ │ │ │ ├── ScheduledRoomCard.tsx │ │ │ │ ├── ScheduledRoomsList.tsx │ │ │ │ ├── ScheduledRoomsPage.tsx │ │ │ │ ├── copyToClipboard.ts │ │ │ │ └── makeUrls.ts │ │ │ ├── search/ │ │ │ │ ├── SearchBarController.tsx │ │ │ │ └── SearchPage.tsx │ │ │ ├── settings/ │ │ │ │ ├── OverlaySettingsPage.tsx │ │ │ │ ├── PrivacySettingForm.tsx │ │ │ │ ├── PrivacySettingsPage.tsx │ │ │ │ ├── SoundEffectSettingsPage.tsx │ │ │ │ └── VoiceSettingsPage.tsx │ │ │ ├── sound-effects/ │ │ │ │ ├── SoundEffectPlayer.tsx │ │ │ │ └── useSoundEffectStore.ts │ │ │ ├── user/ │ │ │ │ ├── EditProfileModal.tsx │ │ │ │ ├── FollowingController.tsx │ │ │ │ ├── FollowingOnlinePage.tsx │ │ │ │ ├── FollowingPage.tsx │ │ │ │ ├── UserPage.tsx │ │ │ │ ├── UserProfileController.tsx │ │ │ │ └── VerticalUserInfoWithFollowButton.tsx │ │ │ ├── webrtc/ │ │ │ │ ├── WebRtcApp.tsx │ │ │ │ ├── components/ │ │ │ │ │ ├── ActiveSpeakerListener.tsx │ │ │ │ │ ├── AudioRender.tsx │ │ │ │ │ └── MicPicker.tsx │ │ │ │ ├── stores/ │ │ │ │ │ ├── useAskForMicStore.ts │ │ │ │ │ ├── useAudioTracks.ts │ │ │ │ │ ├── useConsumerStore.ts │ │ │ │ │ ├── useMicIdStore.ts │ │ │ │ │ ├── useMicPermErrorStore.ts │ │ │ │ │ ├── useProducerStore.ts │ │ │ │ │ ├── useSocketStatus.ts │ │ │ │ │ ├── useStatus.ts │ │ │ │ │ └── useVoiceStore.ts │ │ │ │ ├── types.ts │ │ │ │ └── utils/ │ │ │ │ ├── consumeAudio.ts │ │ │ │ ├── createTransport.ts │ │ │ │ ├── joinRoom.ts │ │ │ │ ├── mergeRoomPermission.ts │ │ │ │ ├── receiveVoice.ts │ │ │ │ └── sendVoice.ts │ │ │ └── ws/ │ │ │ └── WebSocketProvider.tsx │ │ ├── pages/ │ │ │ ├── 404.tsx │ │ │ ├── _app.tsx │ │ │ ├── admin.tsx │ │ │ ├── connection-taken.tsx │ │ │ ├── dash.tsx │ │ │ ├── developer/ │ │ │ │ └── bots/ │ │ │ │ ├── edit/ │ │ │ │ │ └── [username]/ │ │ │ │ │ └── index.tsx │ │ │ │ └── index.tsx │ │ │ ├── download.tsx │ │ │ ├── index.tsx │ │ │ ├── language.tsx │ │ │ ├── logout.tsx │ │ │ ├── overlay-settings.tsx │ │ │ ├── privacy-settings.tsx │ │ │ ├── room/ │ │ │ │ └── [id]/ │ │ │ │ ├── index.tsx │ │ │ │ └── invite.tsx │ │ │ ├── scheduled-room/ │ │ │ │ └── [id].tsx │ │ │ ├── scheduled-rooms.tsx │ │ │ ├── search.tsx │ │ │ ├── sound-effect-settings.tsx │ │ │ ├── u/ │ │ │ │ └── [username]/ │ │ │ │ ├── followers.tsx │ │ │ │ ├── following-online.tsx │ │ │ │ ├── following.tsx │ │ │ │ └── index.tsx │ │ │ └── voice-settings.tsx │ │ ├── shared-components/ │ │ │ ├── ApiPreloadLink.tsx │ │ │ ├── ConfirmModal.tsx │ │ │ └── InvitedToJoinRoomModal.tsx │ │ ├── shared-hooks/ │ │ │ ├── useBoundingClientRect.ts │ │ │ ├── useConn.ts │ │ │ ├── useCurrentRoomFromCache.ts │ │ │ ├── useCurrentRoomId.ts │ │ │ ├── useCurrentRoomInfo.ts │ │ │ ├── useDevices.ts │ │ │ ├── useIntersectionObserver.ts │ │ │ ├── useLeaveRoom.ts │ │ │ ├── useMainWsHandler.tsx │ │ │ ├── useOnClickOutside.tsx │ │ │ ├── usePageVisibility.ts │ │ │ ├── useScreenType.ts │ │ │ ├── useScreenWakeLockStore.ts │ │ │ ├── useSetDeaf.ts │ │ │ ├── useSetMute.ts │ │ │ ├── useTypeSafeMutation.ts │ │ │ ├── useTypeSafePrefetch.ts │ │ │ ├── useTypeSafeQuery.ts │ │ │ ├── useTypeSafeTranslation.ts │ │ │ ├── useTypeSafeUpdateQuery.ts │ │ │ ├── useViewportSize.ts │ │ │ └── useWindowSize.ts │ │ ├── stories/ │ │ │ ├── AccountOverlay.story.tsx │ │ │ ├── BaseDropdownSm.story.tsx │ │ │ ├── BaseOverlay.story.tsx │ │ │ ├── BaseSettingsItem.story.tsx │ │ │ ├── BoxedIcon.story.tsx │ │ │ ├── BubbleText.story.tsx │ │ │ ├── Button.story.tsx │ │ │ ├── ChangeAvatarCard.story.tsx │ │ │ ├── ChangeBannerCard.story.tsx │ │ │ ├── ErrorButtonItem.story.tsx │ │ │ ├── ErrorToast.story.tsx │ │ │ ├── FriendsOnline.story.tsx │ │ │ ├── KeybindCard.story.tsx │ │ │ ├── LeftHeader.story.tsx │ │ │ ├── MessageElement.story.tsx │ │ │ ├── MessagesDropdown.story.tsx │ │ │ ├── MiddleHeader.story.tsx │ │ │ ├── MinimizedRoomCard.story.tsx │ │ │ ├── MobileHeader/ │ │ │ │ ├── PageHeader.story.tsx │ │ │ │ ├── ProfileHeader.story.tsx │ │ │ │ └── SearchHeader.story.tsx │ │ │ ├── MobileNav.story.tsx │ │ │ ├── NativeCheckbox.story.tsx │ │ │ ├── NativeRadio.story.tsx │ │ │ ├── NotificationElement/ │ │ │ │ ├── FollowNotification.story.tsx │ │ │ │ ├── GenericNotification.story.tsx │ │ │ │ ├── LiveNotification.story.tsx │ │ │ │ └── NewRoomNotification.story.tsx │ │ │ ├── NotificationsDropdown.story.tsx │ │ │ ├── ProfileAbout.story.tsx │ │ │ ├── ProfileBlock.story.tsx │ │ │ ├── ProfileHeader.story.tsx │ │ │ ├── ProfileHeaderWrapper.story.tsx │ │ │ ├── ProfileTabs.story.tsx │ │ │ ├── RightHeader.story.tsx │ │ │ ├── RoomAvatar.story.tsx │ │ │ ├── RoomCard.story.tsx │ │ │ ├── RoomCardHeading.story.tsx │ │ │ ├── RoomCardParticipants.story.tsx │ │ │ ├── RoomHeader.story.tsx │ │ │ ├── RoomPanelIconBar.story.tsx │ │ │ ├── RoomSectionHeader.story.tsx │ │ │ ├── Search/ │ │ │ │ ├── GlobalSearch.story.tsx │ │ │ │ ├── SearchBar.story.tsx │ │ │ │ ├── SearchHistory.story.tsx │ │ │ │ ├── SearchOverlay.story.tsx │ │ │ │ └── SearchResult/ │ │ │ │ ├── RoomSearchResult.story.tsx │ │ │ │ └── UserSearchResult.story.tsx │ │ │ ├── SettingsDropdown.story.tsx │ │ │ ├── SettingsIcon.story.tsx │ │ │ ├── SettingsItemButton.story.tsx │ │ │ ├── SettingsWrapper.story.tsx │ │ │ ├── Tag.story.tsx │ │ │ ├── UpcomingRoomCardLg.story.tsx │ │ │ ├── UpcomingRoomsCard.story.tsx │ │ │ ├── UserAvatar/ │ │ │ │ ├── MultipleUsers.story.tsx │ │ │ │ └── SingleUser.story.tsx │ │ │ ├── UserBadge.story.tsx │ │ │ ├── UserBadgeLg.story.tsx │ │ │ ├── UserSummaryCard.story.tsx │ │ │ ├── UserWideButton.story.tsx │ │ │ ├── VerticalUserInfo.story.tsx │ │ │ ├── VolumeIndicator.story.tsx │ │ │ ├── data/ │ │ │ │ └── BaseUser.tsx │ │ │ ├── mobile/ │ │ │ │ ├── FeaturedRoomCardAvatars.story.tsx │ │ │ │ └── FeaturedRoomCardHosts.story.tsx │ │ │ └── utils/ │ │ │ ├── GbFlagIcon.tsx │ │ │ ├── toBoolean.ts │ │ │ ├── toEnum.ts │ │ │ └── toStr.ts │ │ ├── styles/ │ │ │ ├── banner-button.css │ │ │ ├── date-time-picker.css │ │ │ ├── electron-header.css │ │ │ └── globals.css │ │ ├── types/ │ │ │ ├── PageComponent.ts │ │ │ ├── index.d.ts │ │ │ ├── overrides-mui.d.ts │ │ │ ├── user.d.ts │ │ │ ├── util-types.ts │ │ │ └── wakeLock.d.ts │ │ └── ui/ │ │ ├── Banner.tsx │ │ ├── BannerButton.tsx │ │ ├── BaseDropdownSm.tsx │ │ ├── BaseOverlay.tsx │ │ ├── BaseSettingsItem.tsx │ │ ├── BoxedIcon.tsx │ │ ├── BubbleText.tsx │ │ ├── Button.tsx │ │ ├── ButtonLink.tsx │ │ ├── CenterLoader.tsx │ │ ├── ChangeAvatarCard.tsx │ │ ├── ChangeBannerCard.tsx │ │ ├── DropdownController.tsx │ │ ├── DurationTicker.tsx │ │ ├── EmojiPicker.tsx │ │ ├── ErrorButtonItem.tsx │ │ ├── ErrorMessageButton.tsx │ │ ├── ErrorToast.tsx │ │ ├── FeedHeader.tsx │ │ ├── FollowersOnline.tsx │ │ ├── GridPanel.tsx │ │ ├── InfoText.tsx │ │ ├── Input.tsx │ │ ├── InputErrorMsg.tsx │ │ ├── KeybindCard.tsx │ │ ├── LanguageSearch.tsx │ │ ├── LanguageSelector.tsx │ │ ├── MacButton.tsx │ │ ├── MainGrid.tsx │ │ ├── MessageElement.tsx │ │ ├── MessagesDropdown.tsx │ │ ├── MinimizedRoomCard.tsx │ │ ├── Modal.tsx │ │ ├── NativeCheckbox.tsx │ │ ├── NativeRadio.tsx │ │ ├── NativeSelect.tsx │ │ ├── NotificationElement/ │ │ │ ├── FollowNotification.tsx │ │ │ ├── GenericNotification.tsx │ │ │ ├── LiveNotification.tsx │ │ │ ├── NewRoomNotification.tsx │ │ │ └── index.tsx │ │ ├── NotificationsDropdown.tsx │ │ ├── ProfileAbout.tsx │ │ ├── ProfileAdmin.tsx │ │ ├── ProfileBlock.tsx │ │ ├── ProfileHeader.tsx │ │ ├── ProfileHeaderWrapper.tsx │ │ ├── ProfileScheduled.tsx │ │ ├── ProfileTabs.tsx │ │ ├── RoomAvatar.tsx │ │ ├── RoomCard.tsx │ │ ├── RoomCardHeading.tsx │ │ ├── RoomCardParticipants.tsx │ │ ├── RoomHeader.tsx │ │ ├── RoomPanelIconBar.tsx │ │ ├── RoomSectionHeader.tsx │ │ ├── Search/ │ │ │ ├── GlobalSearch.tsx │ │ │ ├── SearchBar.tsx │ │ │ ├── SearchHistory.tsx │ │ │ ├── SearchOverlay.tsx │ │ │ └── SearchResult/ │ │ │ ├── RoomSearchResult.tsx │ │ │ ├── UserSearchResult.tsx │ │ │ └── index.ts │ │ ├── SettingsDropdown.tsx │ │ ├── SettingsIcon.tsx │ │ ├── SettingsItemButton.tsx │ │ ├── SettingsWrapper.tsx │ │ ├── Spinner.tsx │ │ ├── Tag.tsx │ │ ├── Toast.tsx │ │ ├── Twemoji.tsx │ │ ├── UpcomingRoomCardLg.tsx │ │ ├── UpcomingRoomsCard.tsx │ │ ├── UserAvatar/ │ │ │ ├── MultipleUsers.tsx │ │ │ ├── SingleUser.tsx │ │ │ ├── index.ts │ │ │ └── tests/ │ │ │ ├── MultipleUser.spec.tsx │ │ │ ├── SingleUser.spec.tsx │ │ │ └── __snapshots__/ │ │ │ ├── MultipleUser.spec.tsx.snap │ │ │ └── SingleUser.spec.tsx.snap │ │ ├── UserBadge.tsx │ │ ├── UserBadgeLg.tsx │ │ ├── UserProfile.tsx │ │ ├── UserSummaryCard.tsx │ │ ├── UserWideButton.tsx │ │ ├── VerticalUserInfo.tsx │ │ ├── VolumeIndicator.tsx │ │ ├── VolumeSlider.tsx │ │ ├── WinButton.tsx │ │ ├── header/ │ │ │ ├── LeftHeader.tsx │ │ │ ├── MiddleHeader.tsx │ │ │ └── RightHeader.tsx │ │ ├── mobile/ │ │ │ ├── AccountOverlay.tsx │ │ │ ├── FeaturedRoomCardAvatars.tsx │ │ │ ├── FeaturedRoomCardHosts.tsx │ │ │ ├── MobileHeader/ │ │ │ │ ├── PageHeader.tsx │ │ │ │ ├── ProfileHeader.tsx │ │ │ │ ├── SearchHeader.tsx │ │ │ │ └── index.tsx │ │ │ └── MobileNav.tsx │ │ └── tests/ │ │ ├── BaseOverlay.spec.tsx │ │ ├── BoxedIcon.spec.tsx │ │ ├── BubbleText.spec.tsx │ │ ├── Button.spec.tsx │ │ ├── ErrorMessageButton.spec.tsx │ │ ├── ErrorToast.spec.tsx │ │ ├── Input.spec.tsx │ │ ├── InputErrorMsg.spec.tsx │ │ ├── MainGrid.spec.tsx │ │ ├── MessageElement.spec.tsx │ │ ├── MessagesDropdown.spec.tsx │ │ ├── MinimizedRoomCard.spec.tsx │ │ └── __snapshots__/ │ │ ├── BaseOverlay.spec.tsx.snap │ │ ├── BoxedIcon.spec.tsx.snap │ │ ├── BubbleText.spec.tsx.snap │ │ ├── Button.spec.tsx.snap │ │ ├── ErrorMessageButton.spec.tsx.snap │ │ ├── ErrorToast.spec.tsx.snap │ │ ├── Input.spec.tsx.snap │ │ ├── InputErrorMsg.spec.tsx.snap │ │ ├── MainGrid.spec.tsx.snap │ │ ├── MessageElement.spec.tsx.snap │ │ └── MinimizedRoomCard.spec.tsx.snap │ ├── tailwind.config.js │ ├── test-utils.ts │ └── tsconfig.json ├── kousa/ │ ├── .envrc │ ├── .formatter.exs │ ├── .gitignore │ ├── ADDING_TO_MESSAGING_API.md │ ├── ARCHITECTURE.md │ ├── Dockerfile │ ├── README.md │ ├── ROADMAP.md │ ├── config/ │ │ ├── config.exs │ │ ├── dev.exs │ │ ├── prod.exs │ │ ├── releases.exs │ │ └── test.exs │ ├── deploy.sh │ ├── lib/ │ │ ├── beef/ │ │ │ ├── _repo.ex │ │ │ ├── access/ │ │ │ │ ├── rooms.ex │ │ │ │ ├── user_blocks.ex │ │ │ │ └── users.ex │ │ │ ├── follows.ex │ │ │ ├── mutations/ │ │ │ │ ├── rooms.ex │ │ │ │ ├── user_blocks.ex │ │ │ │ └── users.ex │ │ │ ├── queries/ │ │ │ │ ├── rooms.ex │ │ │ │ ├── user_blocks.ex │ │ │ │ └── users.ex │ │ │ ├── room_blocks.ex │ │ │ ├── room_permissions.ex │ │ │ ├── rooms.ex │ │ │ ├── scheduled_rooms.ex │ │ │ ├── schemas/ │ │ │ │ ├── attending_scheduled_room.ex │ │ │ │ ├── follow.ex │ │ │ │ ├── room.ex │ │ │ │ ├── room_block.ex │ │ │ │ ├── room_permission.ex │ │ │ │ ├── scheduled_room.ex │ │ │ │ ├── scheduled_room_cohost.ex │ │ │ │ ├── user.ex │ │ │ │ └── user_block.ex │ │ │ ├── user_blocks.ex │ │ │ └── users.ex │ │ ├── broth/ │ │ │ ├── legacy_handler.ex │ │ │ ├── message/ │ │ │ │ ├── _types/ │ │ │ │ │ ├── chat_token.ex │ │ │ │ │ ├── chat_token_type.ex │ │ │ │ │ ├── operator.ex │ │ │ │ │ ├── relationship.ex │ │ │ │ │ ├── room_auth.ex │ │ │ │ │ └── room_role.ex │ │ │ │ ├── auth/ │ │ │ │ │ └── request.ex │ │ │ │ ├── call.ex │ │ │ │ ├── cast.ex │ │ │ │ ├── chat/ │ │ │ │ │ ├── ban.ex │ │ │ │ │ ├── delete.ex │ │ │ │ │ ├── send.ex │ │ │ │ │ └── unban.ex │ │ │ │ ├── manifest.ex │ │ │ │ ├── misc/ │ │ │ │ │ └── search.ex │ │ │ │ ├── push.ex │ │ │ │ ├── room/ │ │ │ │ │ ├── ban.ex │ │ │ │ │ ├── create.ex │ │ │ │ │ ├── create_scheduled.ex │ │ │ │ │ ├── deafen.ex │ │ │ │ │ ├── delete_scheduled.ex │ │ │ │ │ ├── get_banned_users.ex │ │ │ │ │ ├── get_info.ex │ │ │ │ │ ├── get_invite_list.ex │ │ │ │ │ ├── get_scheduled.ex │ │ │ │ │ ├── get_top.ex │ │ │ │ │ ├── invite.ex │ │ │ │ │ ├── join.ex │ │ │ │ │ ├── leave.ex │ │ │ │ │ ├── mute.ex │ │ │ │ │ ├── set_active_speaker.ex │ │ │ │ │ ├── set_auth.ex │ │ │ │ │ ├── set_role.ex │ │ │ │ │ ├── unban.ex │ │ │ │ │ ├── update.ex │ │ │ │ │ └── update_scheduled.ex │ │ │ │ └── user/ │ │ │ │ ├── admin_update.ex │ │ │ │ ├── ban.ex │ │ │ │ ├── block.ex │ │ │ │ ├── create_bot.ex │ │ │ │ ├── follow.ex │ │ │ │ ├── get_bots.ex │ │ │ │ ├── get_followers.ex │ │ │ │ ├── get_following.ex │ │ │ │ ├── get_info.ex │ │ │ │ ├── get_relationship.ex │ │ │ │ ├── revoke_api_key.ex │ │ │ │ ├── unblock.ex │ │ │ │ ├── unfollow.ex │ │ │ │ └── update.ex │ │ │ ├── message.ex │ │ │ ├── plugs/ │ │ │ │ ├── check_auth.ex │ │ │ │ ├── cors.ex │ │ │ │ └── redirect.ex │ │ │ ├── routes/ │ │ │ │ ├── bot_auth.ex │ │ │ │ ├── dev_only.ex │ │ │ │ ├── discord_auth.ex │ │ │ │ ├── github_auth.ex │ │ │ │ ├── room.ex │ │ │ │ ├── scheduled_room.ex │ │ │ │ ├── stats.ex │ │ │ │ ├── twitter_auth.ex │ │ │ │ └── user.ex │ │ │ ├── socket_handler.ex │ │ │ ├── translator/ │ │ │ │ └── v0_1_0.ex │ │ │ └── translator.ex │ │ ├── broth.ex │ │ ├── kousa/ │ │ │ ├── access_token.ex │ │ │ ├── auth.ex │ │ │ ├── chat.ex │ │ │ ├── discord.ex │ │ │ ├── follow_logic.ex │ │ │ ├── github.ex │ │ │ ├── metrics/ │ │ │ │ └── prometheus.ex │ │ │ ├── refresh_token.ex │ │ │ ├── release.ex │ │ │ ├── room.ex │ │ │ ├── room_block.ex │ │ │ ├── scheduled_room.ex │ │ │ ├── user.ex │ │ │ ├── user_block.ex │ │ │ └── utils/ │ │ │ ├── errors.ex │ │ │ ├── pagination.ex │ │ │ ├── random.ex │ │ │ ├── reg_utils.ex │ │ │ ├── token_utils.ex │ │ │ ├── urls.ex │ │ │ ├── uuid.ex │ │ │ ├── version.ex │ │ │ └── voice_server_utils.ex │ │ ├── kousa.ex │ │ └── onion/ │ │ ├── bot_auth_rate_limit.ex │ │ ├── chat.ex │ │ ├── pub_sub.ex │ │ ├── room_session.ex │ │ ├── stats_cache.ex │ │ ├── supervisors/ │ │ │ ├── room_chat.ex │ │ │ ├── room_session.ex │ │ │ ├── user_session.ex │ │ │ ├── voice_online_rabbit.ex │ │ │ └── voice_rabbit.ex │ │ ├── telemetry.ex │ │ ├── user_session.ex │ │ ├── voice_online_rabbit.ex │ │ └── voice_rabbit.ex │ ├── mix.exs │ ├── priv/ │ │ └── repo/ │ │ └── migrations/ │ │ ├── 20210124203315_most_tables.exs │ │ ├── 20210125155346_more_fields.exs │ │ ├── 20210202143344_has_logged_in.exs │ │ ├── 20210202162325_default_timestamps.exs │ │ ├── 20210210005241_email.exs │ │ ├── 20210210012609_access_token.exs │ │ ├── 20210212141759_bans.exs │ │ ├── 20210214140430_twitter_id.exs │ │ ├── 20210214172930_github_id_nullable.exs │ │ ├── 20210219173153_case_insensitive_unique_username_index.exs │ │ ├── 20210221041850_room_permissions.exs │ │ ├── 20210221233129_voice_server_id.exs │ │ ├── 20210301151808_use_utc_datetime_usec.exs │ │ ├── 20210301162635_last_online_utc_datetime_usec.exs │ │ ├── 20210301200955_scheduled_room.exs │ │ ├── 20210303204515_room_description.exs │ │ ├── 20210304004945_set_timezone_for_now.exs │ │ ├── 20210305031538_scheduled_room_started.exs │ │ ├── 20210321141614_discord_login.exs │ │ ├── 20210424191849_banner_url.exs │ │ ├── 20210425000426_user_bot_api_key.exs │ │ ├── 20210427180800_user_ip.exs │ │ ├── 20210427192138_room_ban_ip.exs │ │ ├── 20210501201857_emails_are_no_longer_unique.exs │ │ ├── 20210504210047_whisper_privacy_setting.exs │ │ ├── 20210504225546_chat_mode.exs │ │ ├── 20210506000509_chat_throttle.exs │ │ └── 20210509055314_admin_update.exs │ └── test/ │ ├── _support/ │ │ ├── deprecations.ex │ │ ├── ecto_sandbox.ex │ │ ├── factory.ex │ │ ├── http_request.ex │ │ ├── message.ex │ │ └── ws_client.ex │ ├── ad_hoc_user_test.exs │ ├── beef/ │ │ ├── follow_test.exs │ │ ├── room_test.exs │ │ ├── rooms_test.exs │ │ ├── scheduled_room_test.exs │ │ ├── user_block_test.exs │ │ ├── user_blocks_test.exs │ │ ├── user_test.exs │ │ └── users_test.exs │ ├── broth/ │ │ ├── _calls/ │ │ │ ├── _THIS DIRECTORY TO BE DEPRECATED │ │ │ ├── create_room_from_scheduled_room_test.exs │ │ │ ├── create_room_test.exs │ │ │ ├── delete_scheduled_room_test.exs │ │ │ ├── edit_profile_test.exs │ │ │ ├── edit_room_test.exs │ │ │ ├── edit_scheduled_room_test.exs │ │ │ ├── fetch_follow_list_test.exs │ │ │ ├── follow_info_test.exs │ │ │ ├── get_blocked_from_room_users_test.exs │ │ │ ├── get_my_following_test.exs │ │ │ ├── get_my_scheduled_rooms_about_to_start_test.exs │ │ │ ├── get_scheduled_rooms_test.exs │ │ │ ├── get_top_public_rooms_test.exs │ │ │ ├── get_user_profile_test.exs │ │ │ ├── join_room_and_get_info_test.exs │ │ │ ├── schedule_room_test.exs │ │ │ ├── search_test.exs │ │ │ └── unban_from_room_test.exs │ │ ├── _casts/ │ │ │ ├── _THIS DIRECTORY TO BE DEPRECATED │ │ │ ├── add_speaker_test.exs │ │ │ ├── ask_to_speak_test.exs │ │ │ ├── auth_test.exs │ │ │ ├── ban_from_room_chat_test.exs │ │ │ ├── ban_test.exs │ │ │ ├── block_from_room_test.exs │ │ │ ├── change_mod_status_test.exs │ │ │ ├── change_room_creator_test.exs │ │ │ ├── delete_room_chat_message_test.exs │ │ │ ├── follow_test.exs │ │ │ ├── invite_to_room_test.exs │ │ │ ├── leave_room_test.exs │ │ │ ├── make_room_public_test.exs │ │ │ ├── mute_test.exs │ │ │ ├── send_room_chat_msg_test.exs │ │ │ ├── set_auto_speaker.exs │ │ │ ├── set_listener_test.exs │ │ │ ├── speaking_change_test.exs │ │ │ └── unban_from_room_chat_test.exs │ │ ├── _message/ │ │ │ ├── auth/ │ │ │ │ └── request_test.exs │ │ │ ├── chat/ │ │ │ │ ├── ban_test.exs │ │ │ │ ├── delete_msg_test.exs │ │ │ │ ├── send_test.exs │ │ │ │ └── unban_test.exs │ │ │ ├── misc/ │ │ │ │ └── search_test.exs │ │ │ ├── room/ │ │ │ │ ├── ban_test.exs │ │ │ │ ├── create_scheduled_test.exs │ │ │ │ ├── create_test.exs │ │ │ │ ├── deafen_test.exs │ │ │ │ ├── delete_scheduled_test.exs │ │ │ │ ├── get_banned_users_test.exs │ │ │ │ ├── get_info_test.exs │ │ │ │ ├── get_invite_list_test.exs │ │ │ │ ├── get_scheduled_test.exs │ │ │ │ ├── get_top_test.exs │ │ │ │ ├── invite_test.exs │ │ │ │ ├── join_test.exs │ │ │ │ ├── leave_test.exs │ │ │ │ ├── mute_test.exs │ │ │ │ ├── set_active_speaker_test.exs │ │ │ │ ├── set_auth_test.exs │ │ │ │ ├── set_role_test.exs │ │ │ │ ├── unban_test.exs │ │ │ │ ├── update_scheduled_test.exs │ │ │ │ └── update_test.exs │ │ │ └── user/ │ │ │ ├── admin_update_test.exs │ │ │ ├── ban_test.exs │ │ │ ├── block_test.exs │ │ │ ├── create_bot_test.exs │ │ │ ├── follow_test.exs │ │ │ ├── get_bots_test.exs │ │ │ ├── get_followers_test.exs │ │ │ ├── get_following_test.exs │ │ │ ├── get_info_test.exs │ │ │ ├── get_relationship_test.exs │ │ │ ├── revoke_api_key_test.exs │ │ │ ├── unblock_test.exs │ │ │ ├── unfollow_test.exs │ │ │ └── update_test.exs │ │ ├── _routes/ │ │ │ └── bot_auth_test.exs │ │ ├── _types/ │ │ │ └── chat_token.exs │ │ ├── auth/ │ │ │ └── request_test.exs │ │ ├── chat/ │ │ │ ├── ban_test.exs │ │ │ ├── delete_test.exs │ │ │ ├── send_test.exs │ │ │ └── unban_test.exs │ │ ├── message_test.exs │ │ ├── misc/ │ │ │ └── search_test.exs │ │ ├── room/ │ │ │ ├── ban_test.exs │ │ │ ├── create_scheduled_test.exs │ │ │ ├── create_test.exs │ │ │ ├── deafen_test.exs │ │ │ ├── delete_scheduled_test.exs │ │ │ ├── get_banned_users_test.exs │ │ │ ├── get_info_test.exs │ │ │ ├── get_invite_list_test.exs │ │ │ ├── get_scheduled_test.exs │ │ │ ├── get_top_test.exs │ │ │ ├── invite_test.exs │ │ │ ├── join_test.exs │ │ │ ├── leave_test.exs │ │ │ ├── mute_test.exs │ │ │ ├── set_active_speaker_test.exs │ │ │ ├── set_auth_test.exs │ │ │ ├── set_role_test.exs │ │ │ ├── unban_test.exs │ │ │ ├── update_scheduled_test.exs │ │ │ └── update_test.exs │ │ └── user/ │ │ ├── admin_update_test.exs │ │ ├── ban_test.exs │ │ ├── block_test.exs │ │ ├── create_bot_test.exs │ │ ├── follow_test.exs │ │ ├── get_bots_test.exs │ │ ├── get_followers_test.exs │ │ ├── get_following_test.exs │ │ ├── get_info_test.exs │ │ ├── get_relationship_test.exs │ │ ├── revoke_api_key_test.exs │ │ ├── unblock_test.exs │ │ ├── unfollow_test.exs │ │ └── update_test.exs │ ├── kousa/ │ │ └── user.ex │ └── test_helper.exs ├── package.json ├── pilaf/ │ ├── .buckconfig │ ├── .eslintrc.js │ ├── .flowconfig │ ├── .gitattributes │ ├── .gitignore │ ├── .prettierrc.js │ ├── .storybook/ │ │ ├── main.js │ │ └── manager.js │ ├── .watchmanconfig │ ├── .yarnrc.yml │ ├── App.tsx │ ├── LICENSE │ ├── README.md │ ├── __tests__/ │ │ └── App-test.js │ ├── android/ │ │ ├── app/ │ │ │ ├── BUCK │ │ │ ├── build.gradle │ │ │ ├── build_defs.bzl │ │ │ ├── debug.keystore │ │ │ ├── proguard-rules.pro │ │ │ └── src/ │ │ │ ├── debug/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ └── java/ │ │ │ │ └── com/ │ │ │ │ └── rice/ │ │ │ │ └── ReactNativeFlipper.java │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── rice/ │ │ │ │ ├── MainActivity.java │ │ │ │ ├── MainApplication.java │ │ │ │ └── SplashActivity.java │ │ │ └── res/ │ │ │ ├── drawable/ │ │ │ │ └── background_splash.xml │ │ │ ├── layout/ │ │ │ │ └── launch_screen.xml │ │ │ └── values/ │ │ │ ├── colors.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ ├── build.gradle │ │ ├── gradle/ │ │ │ └── wrapper/ │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ │ ├── gradle.properties │ │ ├── gradlew │ │ ├── gradlew.bat │ │ └── settings.gradle │ ├── app.json │ ├── babel.config.js │ ├── index.js │ ├── ios/ │ │ ├── Podfile │ │ ├── rice/ │ │ │ ├── AppDelegate.h │ │ │ ├── AppDelegate.m │ │ │ ├── Images.xcassets/ │ │ │ │ ├── AppIcon.appiconset/ │ │ │ │ │ └── Contents.json │ │ │ │ ├── Contents.json │ │ │ │ └── SplashIcon.imageset/ │ │ │ │ └── Contents.json │ │ │ ├── Info.plist │ │ │ ├── LaunchScreen.storyboard │ │ │ ├── main.m │ │ │ └── rice.entitlements │ │ ├── rice-tvOS/ │ │ │ └── Info.plist │ │ ├── rice-tvOSTests/ │ │ │ └── Info.plist │ │ ├── rice.xcodeproj/ │ │ │ ├── project.pbxproj │ │ │ └── xcshareddata/ │ │ │ └── xcschemes/ │ │ │ ├── rice-tvOS.xcscheme │ │ │ └── rice.xcscheme │ │ ├── rice.xcworkspace/ │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata/ │ │ │ └── IDEWorkspaceChecks.plist │ │ └── riceTests/ │ │ ├── Info.plist │ │ └── riceTests.m │ ├── metro.config.js │ ├── package.json │ ├── react-native.config.js │ ├── src/ │ │ ├── assets/ │ │ │ └── images/ │ │ │ ├── logo.svg~Add font + constant for dogehouse theme colors │ │ │ └── logo.svg~refs/ │ │ │ └── remotes/ │ │ │ └── ben/ │ │ │ └── staging │ │ ├── components/ │ │ │ ├── BaseOverlay.tsx │ │ │ ├── BubbleText.tsx │ │ │ ├── ErrorToast.tsx │ │ │ ├── FeaturedRoomCard.tsx │ │ │ ├── MessageElement.tsx │ │ │ ├── RoomCard.tsx │ │ │ ├── RoomCardHeading.tsx │ │ │ ├── ScrollViewLoadMore.tsx │ │ │ ├── Spinner.tsx │ │ │ ├── Tag.tsx │ │ │ ├── UpcomingRoomCard.tsx │ │ │ ├── UserBadge.tsx │ │ │ ├── UserPreview.tsx │ │ │ ├── accountModal/ │ │ │ │ ├── AccountModalContent.tsx │ │ │ │ └── AccountModalRow.tsx │ │ │ ├── avatars/ │ │ │ │ ├── MultipleUserAvatar.tsx │ │ │ │ ├── RoomAvatar.tsx │ │ │ │ └── SingleUserAvatar.tsx │ │ │ ├── bottomBar/ │ │ │ │ └── CreateRoomButton.tsx │ │ │ ├── buttons/ │ │ │ │ ├── Button.tsx │ │ │ │ ├── IconButton.tsx │ │ │ │ ├── SignInButton.tsx │ │ │ │ └── SigninWithGithub.tsx │ │ │ ├── header/ │ │ │ │ ├── Header.tsx │ │ │ │ ├── HeaderBase.tsx │ │ │ │ ├── ProfileButton.tsx │ │ │ │ ├── RoomHeader.tsx │ │ │ │ ├── SearchHeader.tsx │ │ │ │ └── TitledHeader.tsx │ │ │ ├── minimizedRoomCard/ │ │ │ │ ├── BoxedIcon.tsx │ │ │ │ └── MinimizedRoomCard.tsx │ │ │ ├── notifications/ │ │ │ │ ├── FollowNotification.tsx │ │ │ │ ├── GenericNotification.tsx │ │ │ │ ├── LiveNotification.tsx │ │ │ │ └── NewRoomNotification.tsx │ │ │ ├── report/ │ │ │ │ └── Report.tsx │ │ │ └── search/ │ │ │ ├── RoomSearchResult.tsx │ │ │ ├── SearchHistoryResult.tsx │ │ │ ├── SearchHistoryResultList.tsx │ │ │ ├── SearchResultList.tsx │ │ │ └── UserSearchResult.tsx │ │ ├── constants/ │ │ │ ├── dogeStyle.ts │ │ │ ├── env.ts │ │ │ └── regex.ts │ │ ├── global-stores/ │ │ │ ├── useCurrentRoomIdStore.ts │ │ │ ├── useMicPermErrorStore.ts │ │ │ ├── useMuteStore.ts │ │ │ ├── useProducerStore.ts │ │ │ └── useRoomChatMentionStore.ts │ │ ├── lib/ │ │ │ ├── createChatMessage.ts │ │ │ ├── inCallManagerCenter.ts │ │ │ ├── notificationCenter.ts │ │ │ └── queryClient.ts │ │ ├── modules/ │ │ │ ├── auth/ │ │ │ │ ├── WaitForWsAndAuth.tsx │ │ │ │ ├── useSaveTokensFromQueryParams.ts │ │ │ │ ├── useTokenStore.ts │ │ │ │ └── useVerifyLoggedIn.ts │ │ │ ├── explore/ │ │ │ │ └── ExploreController.tsx │ │ │ ├── feed/ │ │ │ │ └── FeedController.tsx │ │ │ ├── following/ │ │ │ │ ├── FollowersOnline.tsx │ │ │ │ └── FollowingOnlineController.tsx │ │ │ ├── help/ │ │ │ │ └── HelpController.tsx │ │ │ ├── landing/ │ │ │ │ └── LandingController.tsx │ │ │ ├── languages/ │ │ │ │ └── LanguagesController.tsx │ │ │ ├── main/ │ │ │ │ └── MainController.tsx │ │ │ ├── messages/ │ │ │ │ └── MessagesController.tsx │ │ │ ├── notifications/ │ │ │ │ └── NotificationsController.tsx │ │ │ ├── profile/ │ │ │ │ └── ProfileController.tsx │ │ │ ├── reportBug/ │ │ │ │ └── ReportBugController.tsx │ │ │ ├── room/ │ │ │ │ ├── InviteRoomController.tsx │ │ │ │ ├── MinimizedRoomCardController.tsx │ │ │ │ ├── RoomController.tsx │ │ │ │ ├── RoomDescriptionController.tsx │ │ │ │ ├── RoomPanelController.tsx │ │ │ │ ├── RoomUsersPanel.tsx │ │ │ │ ├── UserPreviewModalProvider.tsx │ │ │ │ ├── chat/ │ │ │ │ │ ├── EmoteData.ts │ │ │ │ │ ├── EmotePicker.tsx │ │ │ │ │ ├── RoomChat.tsx │ │ │ │ │ ├── RoomChatControls.tsx │ │ │ │ │ ├── RoomChatInput.tsx │ │ │ │ │ ├── RoomChatList.tsx │ │ │ │ │ ├── RoomChatMentions.tsx │ │ │ │ │ ├── RoomMessage.tsx │ │ │ │ │ ├── useRoomChatMentionStore.ts │ │ │ │ │ └── useRoomChatStore.ts │ │ │ │ ├── useOnRoomPage.tsx │ │ │ │ └── useSplitUsersIntoSections.tsx │ │ │ ├── schedule/ │ │ │ │ └── ScheduleController.tsx │ │ │ ├── search/ │ │ │ │ └── SearchController.tsx │ │ │ ├── settings/ │ │ │ │ └── SettingsController.tsx │ │ │ ├── sound-effect/ │ │ │ │ └── useSoundEffectStore.ts │ │ │ ├── wallet/ │ │ │ │ └── WalletController.tsx │ │ │ ├── webrtc/ │ │ │ │ ├── WebRtcApp.tsx │ │ │ │ ├── components/ │ │ │ │ │ └── MicPicker.tsx │ │ │ │ ├── stores/ │ │ │ │ │ ├── useAskForMicStore.ts │ │ │ │ │ ├── useAudioTracks.ts │ │ │ │ │ ├── useConsumerStore.ts │ │ │ │ │ ├── useMicIdStore.ts │ │ │ │ │ ├── useMicPermErrorStore.ts │ │ │ │ │ ├── useProducerStore.ts │ │ │ │ │ ├── useSocketStatus.ts │ │ │ │ │ ├── useStatus.ts │ │ │ │ │ └── useVoiceStore.ts │ │ │ │ ├── types.ts │ │ │ │ └── utils/ │ │ │ │ ├── consumeAudio.ts │ │ │ │ ├── createTransport.ts │ │ │ │ ├── joinRoom.ts │ │ │ │ ├── mergeRoomPermission.ts │ │ │ │ ├── receiveVoice.ts │ │ │ │ └── sendVoice.ts │ │ │ └── ws/ │ │ │ └── WebSocketProvider.tsx │ │ ├── navigation/ │ │ │ ├── AuthenticationSwitch.tsx │ │ │ ├── LandingPage.tsx │ │ │ ├── MainNavigator.tsx │ │ │ ├── RootNavigation.ts │ │ │ └── mainNavigator/ │ │ │ ├── BottomNavigator.tsx │ │ │ ├── HelpPage.tsx │ │ │ ├── InviteRoomPage.tsx │ │ │ ├── LanguagesPage.tsx │ │ │ ├── MainPage.tsx │ │ │ ├── MessagesPage.tsx │ │ │ ├── NotificationsPage.tsx │ │ │ ├── ProfilePage.tsx │ │ │ ├── ReportBugPage.tsx │ │ │ ├── RoomDescriptionPage.tsx │ │ │ ├── RoomNavigator.tsx │ │ │ ├── RoomPage.tsx │ │ │ ├── SearchPage.tsx │ │ │ ├── SettingsPage.tsx │ │ │ ├── WalletPage.tsx │ │ │ └── bottomNavigator/ │ │ │ ├── ExplorePage.tsx │ │ │ ├── FeedPage.tsx │ │ │ ├── FollowingPage.tsx │ │ │ └── SchedulePage.tsx │ │ ├── pages/ │ │ │ └── CreateRoomPage.tsx │ │ ├── shared-components/ │ │ │ └── ApiPreloadLink.tsx │ │ ├── shared-hooks/ │ │ │ ├── useConn.ts │ │ │ ├── useCurrentRoomInfo.ts │ │ │ ├── useMainWsHandler.tsx │ │ │ ├── useSetMute.ts │ │ │ ├── useTypeSafeMutation.ts │ │ │ ├── useTypeSafePrefetch.ts │ │ │ ├── useTypeSafeQuery.ts │ │ │ └── useTypeSafeUpdateQuery.ts │ │ ├── stories/ │ │ │ └── index.ts │ │ └── types/ │ │ └── util-types.ts │ ├── storybook/ │ │ ├── addons.ts │ │ ├── index.ts │ │ ├── rn-addons.ts │ │ └── stories/ │ │ ├── Button.stories.tsx │ │ ├── CenterView/ │ │ │ └── index.tsx │ │ ├── FeaturedRoomCard.stories.tsx │ │ ├── FollowNotification.stories.tsx │ │ ├── GenericNotification.stories.tsx │ │ ├── LiveNotification.stories.tsx │ │ ├── Message.stories.tsx │ │ ├── MultipleUserAvatar.stories.tsx │ │ ├── NewRoomNotification.stories.tsx │ │ ├── SingleUserAvatar.stories.tsx │ │ └── index.ts │ ├── template.config.js │ └── tokens.ts ├── run.ps1 ├── run.sh ├── scripts/ │ └── trigger-electron-deploy.sh ├── shawarma/ │ ├── .dockerignore │ ├── .eslintrc.json │ ├── Dockerfile │ ├── README.md │ ├── deploy.sh │ ├── package.json │ ├── src/ │ │ ├── MyPeer.ts │ │ ├── MyRoomState.ts │ │ ├── config.ts │ │ ├── constants.ts │ │ ├── index.ts │ │ ├── main.ts │ │ ├── types/ │ │ │ ├── env.d.ts │ │ │ └── index.ts │ │ └── utils/ │ │ ├── closePeer.ts │ │ ├── createConsumer.ts │ │ ├── createTransport.ts │ │ ├── deleteRoom.ts │ │ ├── startMediasoup.ts │ │ └── startRabbit.ts │ └── tsconfig.json └── 🐕.🏠 ================================================ FILE CONTENTS ================================================ ================================================ FILE: .devcontainer/Dockerfile ================================================ # Update to pick an Elixir version: 1.9, 1.10, 1.10.4 ARG VARIANT=latest FROM elixir:${VARIANT} ENV USERNAME=doge ENV USER_UID=1000 ENV USER_GID=$USER_UID COPY scripts/*.sh /tmp/scripts/ # Create non-root doge user RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ && bash /tmp/scripts/user.sh "$USERNAME" "$USER_UID" "$USER_GID" \ # Clean up && apt-get autoremove -y && apt-get clean -y && rm -rf /var/lib/apt/lists/* /root/.gnupg # Install Node.js ENV NVM_DIR=/home/$USERNAME/.nvm ENV NODE_VERSION="lts/*" RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ # Install common packages, non-root user, update yarn and install nvm && bash /tmp/scripts/node.sh "$NVM_DIR" "$NODE_VERSION" "$USERNAME" \ # Clean up && apt-get autoremove -y && apt-get clean -y && rm -rf /var/lib/apt/lists/* /root/.gnupg # Cleanup scripts RUN rm -rf /tmp/scripts CMD ["sleep", "infinity"] ================================================ FILE: .devcontainer/devcontainer.json ================================================ { "name": "Dogehouse", "dockerComposeFile": "docker-compose.yml", "service": "workspace", "workspaceFolder": "/workspace", "extensions": [ "dbaeumer.vscode-eslint", "esbenp.prettier-vscode", "jakebecker.elixir-ls", "bradlc.vscode-tailwindcss" ], "forwardPorts": [ 80, 3000, 4001, 8080, 5432, 5672, 15672 // rabbit.mq management interface ], "postCreateCommand": ["bash", ".devcontainer/scripts/environment.sh"], "remoteUser": "doge" } ================================================ FILE: .devcontainer/docker-compose.yml ================================================ version: "3" services: workspace: build: context: . dockerfile: Dockerfile volumes: - ..:/workspace:cached db: image: postgres:latest restart: unless-stopped volumes: - postgres-data:/var/lib/postgresql/data environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: kousa_repo2 # Initial schema name network_mode: service:workspace rabbitmq: image: rabbitmq:management restart: unless-stopped volumes: - rabbitmq-data:/var/lib/rabbitmq/data environment: RABBITMQ_DEFAULT_USER: guest RABBITMQ_DEFAULT_PASS: guest network_mode: service:workspace volumes: postgres-data: rabbitmq-data: ================================================ FILE: .devcontainer/scripts/environment.sh ================================================ # kousa cat >> "/home/$USERNAME/.bashrc" << EOL # Kousa environment variables export DATABASE_URL=postgres://postgres:postgres@localhost/kousa_repo2 export BEN_GITHUB_ID=7872329 export RABBITMQ_URL=amqp://guest:guest@localhost:5672 export ACCESS_TOKEN_SECRET= export REFRESH_TOKEN_SECRET= export GITHUB_CLIENT_ID= export TWITTER_API_KEY= export TWITTER_SECRET_KEY= export TWITTER_BEARER_TOKEN= export GITHUB_CLIENT_SECRET= export DISCORD_CLIENT_ID= export DISCORD_CLIENT_SECRET= export GOOGLE_CLIENT_ID= export GOOGLE_CLIENT_SECRET= export SENTRY_DNS= export API_URL=http://localhost:4001 export WEB_URL=http://localhost:3000 export PORT=4001 EOL # shawarma echo "WEBRTC_LISTEN_IP=127.0.0.1" > shawarma/.env # kibbeh cp kibbeh/.env.example kibbeh/.env ================================================ FILE: .devcontainer/scripts/node.sh ================================================ #!/usr/bin/env bash USERNAME=${3:-"doge"} export NVM_DIR=${1:-"/home/$USERNAME/.nvm"} export NODE_VERSION=${2:-"lts/*"} set -e # install all dependencies apt-get update \ && apt-get install -y curl ca-certificates tar gnupg2 \ && apt-get -y autoclean # install yarn curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | (OUT=$(apt-key add - 2>&1) || echo $OUT) echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list apt-get update apt-get -y install --no-install-recommends yarn # install nvm su ${USERNAME} -c "mkdir $NVM_DIR" su ${USERNAME} -c "curl --silent -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.36.0/install.sh | bash" # install node and npm su ${USERNAME} -c "source $NVM_DIR/nvm.sh \ && nvm install $NODE_VERSION \ && nvm alias default $NODE_VERSION \ && nvm use default" ================================================ FILE: .devcontainer/scripts/user.sh ================================================ #!/usr/bin/env bash USERNAME=${1:-"doge"} USER_UID=${2:-1000} USER_GID=${3:-$USER_UID} PACKAGE_LIST="apt-utils \ git \ htop \ curl \ wget \ unzip \ zip \ vim \ less \ sudo \ man-db" # install packages apt-get -y install --no-install-recommends ${PACKAGE_LIST} # add non-root user groupadd --gid $USER_GID $USERNAME useradd -s /bin/bash --uid $USER_UID --gid $USERNAME -m $USERNAME echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME chmod 0440 /etc/sudoers.d/$USERNAME chown ${USERNAME}:${USERNAME} "/home/${USERNAME}/.bashrc" ================================================ FILE: .dockerignore ================================================ docker/ .docker/ ================================================ FILE: .editorconfig ================================================ # top-most EditorConfig file root = true # Unix-style newlines with a newline ending every file [*] charset = utf-8 end_of_line = lf insert_final_newline = true indent_style = space indent_size = 2 trim_trailing_whitespace = true ================================================ FILE: .eslintignore ================================================ node_modules/ ================================================ FILE: .github/ISSUE_TEMPLATE/bug_report.md ================================================ --- name: Bug report about: Create a report to help us improve title: '' labels: bug assignees: '' --- **Describe the bug** A clear and concise description of what the bug is. **To Reproduce** Steps to reproduce the behavior: 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' 4. See error **Expected behavior** A clear and concise description of what you expected to happen. **Screenshots** If applicable, add screenshots to help explain your problem. **What device are you on?** **Additional context** Add any other context about the problem here. ================================================ FILE: .github/ISSUE_TEMPLATE/feature_request.md ================================================ --- name: Feature request about: Suggest an idea for this project title: '' labels: enhancement assignees: '' --- **Is your feature request related to a problem? Please describe.** A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] **Describe the solution you'd like** A clear and concise description of what you want to happen. **Describe alternatives you've considered** A clear and concise description of any alternative solutions or features you've considered. **Additional context** Add any other context or screenshots about the feature request here. ================================================ FILE: .github/labeler.yml ================================================ kibbeh: - kibbeh/**/* baklava: - baklava/**/* kebab: - kebab/**/* kousa: - kousa/**/* pilaf: - pilaf/**/* shawarma: - shawarma/**/* dolma: - dolma/**/* emote: - kibbeh/public/emotes/**/* translation: - kibbeh/public/locales/**/* ================================================ FILE: .github/workflows/baklava-build_and_release.yaml ================================================ name: baklava:build_and_release on: push: paths: - "baklava/**" branches: - staging jobs: release: runs-on: ${{ matrix.os }} strategy: matrix: os: [macos-latest, ubuntu-latest, windows-latest] steps: - name: Check out Git repository uses: actions/checkout@v1 - name: Install Node.js, NPM and Yarn uses: actions/setup-node@v1 with: node-version: 14 - name: Yarn cache uses: actions/cache@v2 id: yarn-cache with: path: | baklava/.yarn/cache baklava/resources/overlay/.yarn/cache key: ${{ runner.os }}-yarn-${{ hashFiles('baklava/**/yarn.lock') }} restore-keys: | ${{ runner.os }}-yarn- - name: Install deps working-directory: baklava run: yarn - name: Save env vars working-directory: baklava/src run: echo "export const DISCORD_CLIENT_ID = '${{ secrets.DISCORD_CLIENT_ID }}'" >> constants.ts - name: Compile Typescript working-directory: baklava run: yarn compile - name: Install Overlay Deps working-directory: baklava/resources/overlay run: yarn - name: Build overlay working-directory: baklava/resources/overlay run: yarn build - name: Install rust uses: hecrj/setup-rust-action@v1 with: rust-version: stable - name: Install nj-cli run: cargo install nj-cli - name: Build globalkey working-directory: baklava run: yarn build:globalkey - name: Prepare for app notarization if: startsWith(matrix.os, 'macos') # Import Apple API key for app notarization on macOS # this get skipped for some reason run: | mkdir -p ~/private_keys/ echo '${{ secrets.api_key }}' > ~/private_keys/AuthKey_${{ secrets.api_key_id }}.p8 - name: Install Snapcraft uses: samuelmeuli/action-snapcraft@v1 if: startsWith(matrix.os, 'ubuntu') with: # Log in to Snap Store snapcraft_token: ${{ secrets.snapcraft_token }} - name: Install RPM if: startsWith(matrix.os, 'ubuntu') run: | sudo apt install rpm - name: Build/release Electron app uses: samuelmeuli/action-electron-builder@v1 with: mac_certs: ${{ secrets.mac_certs }} mac_certs_password: ${{ secrets.mac_certs_password }} # this is executed before the default `electron-builder` script build_script_name: delete:artifacts package_root: baklava github_token: ${{ secrets.github_token }} release: true env: # macOS notarization API key API_KEY_ID: ${{ secrets.api_key_id }} API_KEY_ISSUER_ID: ${{ secrets.api_key_issuer_id }} ================================================ FILE: .github/workflows/dolma-npm_deploy.yaml ================================================ name: dolma:npm_publish on: push: paths: - "dolma/**" branches: - staging jobs: npm-publish: name: npm-publish runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v2 - name: Install Node.js, NPM and Yarn uses: actions/setup-node@v1 with: node-version: 14 - name: Yarn cache uses: actions/cache@v2 id: yarn-cache with: path: | .yarn/cache key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }} restore-keys: | ${{ runner.os }}-yarn- - name: Install deps working-directory: ./dolma run: yarn - name: Build working-directory: ./dolma run: yarn build - name: Publish if version has been updated uses: pascalgn/npm-publish-action@1.3.7 with: # All of theses inputs are optional tag_name: "v%s" tag_message: "v%s" create_tag: "false" commit_pattern: "^feat\\(dolma\\)\\: release (\\S+)" workspace: "dolma" publish_command: "yarn" publish_args: "--non-interactive --verbose" env: # More info about the environment variables in the README GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Leave this as is, it's automatically generated NPM_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }} # You need to set this in your repo settings ================================================ FILE: .github/workflows/global-label_pr.yml ================================================ name: global:label_pr on: - pull_request_target jobs: triage: runs-on: ubuntu-latest steps: - uses: actions/labeler@main with: repo-token: "${{ secrets.GITHUB_TOKEN }}" ================================================ FILE: .github/workflows/global-lint_commit_messages.yaml ================================================ name: global:lint_commit_messages on: [push, pull_request] jobs: commitlint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 with: fetch-depth: 0 - uses: wagoid/commitlint-github-action@v3 ================================================ FILE: .github/workflows/globalkey-npm_deploy.yaml ================================================ name: globalkey:npm_publish on: push: paths: - "globalkey/**" branches: - staging jobs: npm-publish: name: npm-publish runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v2 - name: Install Node.js, NPM and Yarn uses: actions/setup-node@v1 with: node-version: 14 - name: Install deps working-directory: ./globalkey run: yarn - name: Build working-directory: ./globalkey run: yarn build - name: Publish if version has been updated uses: pascalgn/npm-publish-action@1.3.7 with: # All of theses inputs are optional tag_name: "v%s" tag_message: "v%s" create_tag: "false" commit_pattern: "^feat\\(globalkey\\)\\: release (\\S+)" workspace: "globalkey" publish_command: "yarn" publish_args: "--non-interactive --verbose" env: # More info about the environment variables in the README GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Leave this as is, it's automatically generated NPM_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }} # You need to set this in your repo settings ================================================ FILE: .github/workflows/kebab-npm_publish.yaml ================================================ name: kebab:npm_publish on: push: paths: - "kebab/**" branches: - staging jobs: npm-publish: name: npm-publish runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v2 - name: Install Node.js, NPM and Yarn uses: actions/setup-node@v1 with: node-version: 14 - name: Yarn cache uses: actions/cache@v2 id: yarn-cache with: path: | .yarn/cache key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }} restore-keys: | ${{ runner.os }}-yarn- - name: Install deps working-directory: kebab run: yarn - name: Build working-directory: kebab run: yarn build - name: Publish if version has been updated uses: pascalgn/npm-publish-action@1.3.7 with: # All of theses inputs are optional tag_name: "v%s" tag_message: "v%s" create_tag: "false" commit_pattern: "^feat\\(kebab\\)\\: release (\\S+)" workspace: "kebab" publish_command: "yarn" publish_args: "--non-interactive" env: # More info about the environment variables in the README GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Leave this as is, it's automatically generated NPM_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }} # You need to set this in your repo settings ================================================ FILE: .github/workflows/kibbeh-e2e_tests.yaml ================================================ name: kibbeh:e2e_tests on: push: branches: - staging paths: - '.github/workflows/kibbeh-e2e_tests.yaml' - 'kousa/lib/**' - 'kibbeh/src/**' pull_request: branches: - staging paths: - 'kousa/lib/**' - 'kibbeh/src/**' jobs: end-to-end-tests: name: end-to-end-tests runs-on: ubuntu-latest defaults: run: working-directory: ./kousa services: db: image: postgres:11 ports: ['5432:5432'] env: POSTGRES_PASSWORD: postgres POSTGRES_DB: kousa_repo2 options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 steps: - uses: actions/checkout@v2 - uses: erlef/setup-elixir@v1 with: otp-version: '22.2' elixir-version: '1.11' - name: fetch deps run: mix deps.get env: MIX_ENV: test - run: source .envrc && mix ecto.migrate - run: source .envrc && iex -S mix - name: Use Node.js uses: actions/setup-node@v1 - run: yarn install - run: cd ../kebab && yarn build - run: cd ../kibbeh && yarn test:e2e:ci ================================================ FILE: .github/workflows/kibbeh-lint_and_test.yaml ================================================ name: kibbeh:lint_and_test on: push: branches: - staging paths: - "kibbeh/**" pull_request: branches: - staging paths: - "kibbeh/**" jobs: test: name: lint-and-test-kibbeh runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Use Node.js uses: actions/setup-node@v1 - name: Yarn cache uses: actions/cache@v2 id: yarn-cache with: path: | .yarn/cache key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }} restore-keys: | ${{ runner.os }}-yarn- - run: yarn install - run: cd kebab && yarn build - run: cd dolma && yarn build - run: cd kibbeh && yarn compile - run: cd kibbeh && yarn lint - run: cd kibbeh && yarn test:ci id: test ================================================ FILE: .github/workflows/kousa-deploy_staging.yaml ================================================ name: kousa:deploy_staging on: push: paths: - 'kousa/lib/**' branches: - staging jobs: build: name: Build runs-on: ubuntu-latest steps: - name: executing remote ssh commands using password uses: appleboy/ssh-action@master with: host: ${{ secrets.SSH_HOST }} username: ${{ secrets.SSH_USERNAME }} password: ${{ secrets.SSH_PASSWORD }} script: cd dogehouse/kousa && git pull origin staging && docker build -t benawad/kousa:0.0.1 . && docker tag benawad/kousa:0.0.1 dokku/doge-staging:latest && dokku tags:deploy doge-staging latest ================================================ FILE: .github/workflows/kousa-tests.yaml ================================================ name: kousa:tests on: push: branches: - staging paths: - 'kousa/lib/**' pull_request: branches: - staging paths: - 'kousa/lib/**' jobs: test: name: test-elixir runs-on: ubuntu-latest defaults: run: working-directory: ./kousa services: db: image: postgres:11 ports: ['5432:5432'] env: POSTGRES_PASSWORD: postgres options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 steps: - uses: actions/checkout@v2 - uses: erlef/setup-elixir@v1 with: otp-version: '22.2' elixir-version: '1.11' - name: fetch deps run: mix deps.get env: MIX_ENV: test - run: mix test id: test ================================================ FILE: .github/workflows/shawarma-deploy_staging.yaml ================================================ name: shawarma:deploy_staging on: push: paths: - 'shawarma/src/**' branches: - staging jobs: build: name: Build runs-on: ubuntu-latest steps: - name: executing remote ssh commands using password uses: appleboy/ssh-action@master with: host: ${{ secrets.SSH_HOST }} username: ${{ secrets.SSH_USERNAME }} password: ${{ secrets.SSH_PASSWORD }} script: cd dogehouse/kousa && git pull origin staging && source ~/.nvm/nvm.sh && nvm use 14 && cd ../shawarma && yarn install && npm run build && pm2 restart dist/index.js ================================================ FILE: .gitignore ================================================ .DS_Store node_modules # Local Netlify folder .netlify .idea/ */.idea/ .docker .env .next storybook-static _ .env.local kebab/lib yarn-error.log dist .yarn !.yarn/releases !.yarn/plugins !.yarn/sdks !.yarn/versions .pnp.* ================================================ FILE: .husky/.gitignore ================================================ _ ================================================ FILE: .husky/commit-msg ================================================ #!/bin/sh . "$(dirname "$0")/_/husky.sh" # @todo uncomment when new-design hits # thats when we will start enforcing commit style # npx --no-install commitlint --edit ================================================ FILE: .husky/pre-commit ================================================ #!/bin/sh # . "$(dirname "$0")/_/husky.sh" # cd kibbeh # npm run format # npm run lint ================================================ FILE: .prettierignore ================================================ node_modules/ ================================================ FILE: .prettierrc.js ================================================ module.exports = { trailingComma: "es5", tabWidth: 2, semi: true, singleQuote: false, arrowParens: "always", useTabs: false, }; ================================================ FILE: .vscode/settings.json ================================================ { "elixirLS.projectDir": "kousa", "elixir.projectPath": "kousa", "git.ignoreLimitWarning": true, } ================================================ FILE: .yarnrc.yml ================================================ nodeLinker: node-modules plugins: - path: .yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs spec: "@yarnpkg/plugin-workspace-tools" - path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs spec: "@yarnpkg/plugin-interactive-tools" yarnPath: .yarn/releases/yarn-berry.cjs ================================================ FILE: CHANGELOG.md ================================================ # Changelog ## 4/16/2021 - Switched to a new UI ## 2/20/2021 - Added changelog ================================================ FILE: CODEOWNERS ================================================ /kebab/ @overlisted /baklava/ @amitojsingh366 /dolma/ @HoloPanio /globalkey/ @willdoescode ================================================ FILE: CODE_OF_CONDUCT.md ================================================ # Contributor Covenant Code of Conduct ## Our Pledge In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to make participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. ## Our Standards Examples of behavior that contributes to creating a positive environment include: * Using welcoming and inclusive language * Being respectful of differing viewpoints and experiences * Gracefully accepting constructive criticism * Focusing on what is best for the community * Showing empathy towards other community members Examples of unacceptable behavior by participants include: * The use of sexualized language or imagery and unwelcome sexual attention or advances * Trolling, insulting/derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or electronic address, without explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. ## Scope This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at benawadapps@gmail.com or on Discord . All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html [homepage]: https://www.contributor-covenant.org For answers to common questions about this code of conduct, see https://www.contributor-covenant.org/faq ================================================ FILE: CONTRIBUTING.md ================================================ # Contributing to DogeHouse > Please read the [PRIORITY LIST](https://github.com/benawad/dogehouse/issues/1969) before contributing. We love your input! We want to make contributing to this project as easy and transparent as possible, whether it's: - Reporting an issue - Discussing the current state of the code - Submitting a fix - Proposing new features - Becoming a maintainer ## Code of Conduct The code of conduct is described in [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md). ## Our Development Process All changes happen through pull requests. Pull requests are the best way to propose changes. We actively welcome your pull requests and invite you to submit pull requests directly [here](https://github.com/benawad/dogehouse/pulls), and after review, these can be merged into the project. ## Using the Project's Standard Commit Messages This project is using the [conventional commits](https://www.conventionalcommits.org/en/v1.0.0-beta.2/) standard. Please follow these steps to ensure your commit messages are standardized: 1. Make sure your shell path is in the root of the project (not inside any of the packages). 2. Run `yarn`. 3. Stage the files you are committing with `git add [files]`. 4. Run `yarn commit`. This will start an interactive prompt that generates your commit message: 1. Select the type of change. 2. Type the scope. This is either `global` for project-wide changes or one of the packages (kibbeh, shawarma etc.). 3. Write a short, imperative tense description of the change. 4. If the above was not sufficient, you may now write a longer description of your change (otherwise press enter to leave blank). 5. y or n for whether there are any breaking changes (e.g. changing the props of a component, changing the JSON structure of an API response). 6. y or n for whether this change affects an open issue, if positive you will be prompted to enter the issue number. 5. Your commit message has now been created, you may push to your fork and open a pull request (read below for further instructions). ## Pull Requests 1. Fork the repo and create your branch (usually named `patch-%the number of PRs you've already made%`) from `staging`. 2. If you've added code that should be tested, add some test examples. 3. Ensure to describe your pull request. ## Adding Emojis Emojis need to be 28x28px. To add an emoji, add the png/gif image to public/emojis and add the emoji to the `kofta/src/app/modules/room-chat/EmoteData.ts`. To avoid conflicts please add the emojis to the top of the file. > **NOTE:** We are not accepting new emojis atm ## Quickstart Local Frontend Development Do this if you only want to do React stuff and don't want to touch Elixir: ### UI *(react + next.js)*: Navigate to `/kibbeh` - Run `yarn` - Run `yarn staging` (this tells React to connect to a hosted version of the backend for development purposes). - Read `kibbeh/README.md` for more information and fixes for known development issues. > **NOTE:** Please follow the [design guidelines](https://github.com/benawad/dogehouse/blob/staging/DESIGN_GUIDELINES.md) and [figma mockups](https://www.figma.com/file/CS01VVLR7ArQl0afYFkNj3/Web-App) and if what you're trying to do isn't in there, consult [@ajmnz](https://github.com/ajmnz)/[@benawad](https://github.com/benawad) beforehand. ## Translating 1. Fork the [repository](https://github.com/benawad/dogehouse "benawad/dogehouse") (click on `fork` in the top right corner of the screen) ![image](https://i.ibb.co/RB4FVS0/Screenshot-2021-05-07-152827.jpg) 2. In the forked repository, navigate to `kibbeh/public/locales` and then choose your language and open the `translation.json` file 3. Click on `edit` in the top right corner of the window ![image](https://i.ibb.co/vZjt4jD/Screenshot-2021-05-07-153427.jpg) 4. Make the changes in the translation(make sure you are using the correct json syntax) 5. click `commit changes` in the bottom of the page and add `fix(kibbeh): update {my language} Translation` as the commit message(`fix` if you are fixing tranlsations and `feat` if you are adding a language)(leave the description empty!) ![image](https://user-images.githubusercontent.com/68110106/117442435-6e1b1080-af3f-11eb-990f-9a1a270fef29.png) 6. Go to the [main page of the repository](https://github.com/benawad/dogehouse) and under `Contribute`, click on `Open Pull Request` ## Supporting translation in new components 1. Add your translation key into the English `translation.json` located in `kibbeh/public/locales/en/translation.json`. Make sure it is put in an appropriate section that makes sense. 2. Run `yarn i18`. This will sync all fields in all languages, if field doesn't exist it will copy it over from `en`. 3. Use your translation key in your code. This is done by using `useTypeSafeTranslation` like this: `const { t } = useTypeSafeTranslation();`. You can now call `t` and get your desired translation key. ## Devcontainer Full Local Development For VSCode users, we're able to use devcontainers which allows you to create development environments that already have all the tools and services configured and ready to go. ### Usage _Prerequisite: [Install Docker](https://docs.docker.com/install) on your local environment._ To get started, read and follow the instructions in [Developing inside a Container](https://code.visualstudio.com/docs/remote/containers). The [.devcontainer/](./.devcontainer) directory contains pre-configured `devcontainer.json`, `docker-compose.yml` and `Dockerfile` files, which you can use to set up remote development within a docker container. - Install the [Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) extension. - Open VSCode and bring up the [Command Palette](https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette). - Type `Remote-Containers: Open Folder in Container`, this will build the container with Elixir and Node installed, this will also start Postgres and RabbitMQ instances. > If you need to modify environment variables for kousa, you need to modify them inside `/home/doge/.bashrc` and restart your terminal. ### Run #### `kousa` ```shell $ mix deps.get $ mix ecto.migrate $ iex -S mix ``` #### `shawarma` ```shell $ yarn $ yarn build $ yarn start ``` #### `kibbeh` ```shell $ yarn $ yarn dev ``` ## Manual Full Local Development How to run locally: ### Backend #### RabbitMQ Install RabbitMQ: - **macOS**: Run `brew install rabbitmq`. - **Windows**: Run `choco install rabbitmq`. - **Linux**: Follow their installation guide [here](https://www.rabbitmq.com/download.html). Start RabbitMQ - **macOS**: Run `brew services start rabbitmq`. - **Windows**: Setup guide [here](https://www.rabbitmq.com/install-windows.html). - **Linux**: Setup guide [here](https://www.rabbitmq.com/install-debian.html). #### PostgreSQL Install PostgreSQL: - **macOS**: Run `brew install postgresql`. - **Windows**: Follow [this](https://www.postgresqltutorial.com/install-postgresql/) guide. - **Linux**: Follow [this](https://www.postgresqltutorial.com/install-postgresql-linux/) guide. Start PostgreSQL: - **macOS**: Run `brew services start postgresql`. - **Windows**: Start PostgreSQL through the control panel or run `net start postgresql-{version}`. - **Linux**: Run `/etc/rc.d/init.d/postgresql start`. Create a DB named `kousa_repo2`: ```shell $ psql postgres $ CREATE DATABASE kousa_repo2; ``` #### Elixir Elixir installation guide [here](https://elixir-lang.org/install.html). #### `kousa` Navigate to `/kousa` and set the following environment variables: ``` export DATABASE_URL=postgres://user:password@localhost/kousa_repo2 export BEN_GITHUB_ID=7872329 export RABBITMQ_URL=amqp://user:password@yourinternalip:5672 export ACCESS_TOKEN_SECRET= export REFRESH_TOKEN_SECRET= export GITHUB_CLIENT_ID= export TWITTER_API_KEY= export TWITTER_SECRET_KEY= export TWITTER_BEARER_TOKEN= export GITHUB_CLIENT_SECRET= export SENTRY_DNS= export API_URL=http://localhost:4001 export WEB_URL=http://localhost:3000 export PORT=4001 export DISCORD_CLIENT_ID= export DISCORD_CLIENT_SECRET= ``` > You can save these variables in a `.txt` and run `source path/to/file.txt` Run the following commands: ```shell $ mix deps.get $ mix ecto.migrate ``` Start the server ```shell $ iex -S mix ``` #### `shawarma` Navigate to `/shawarma` and run `yarn`. > Mediasoup requires `node >=0.8 <=14` and has [specific requirements](https://mediasoup.org/documentation/v3/mediasoup/installation/#windows) on Windows. Create an `.env` file and set the following environment variable: ``` WEBRTC_LISTEN_IP=127.0.0.1 ``` Then run `yarn build` and `yarn start`. ## Issues > NOTE: If your bug is a **security vulnerability**, please instead see the [security policy](https://github.com/benawad/dogehouse/security/policy) We use GitHub issues to track public bugs. Please ensure your description is clear and has sufficient instructions to be able to reproduce the issue. Report a bug by opening a new issue; it's that easy! ## Frequently Asked Questions (FAQs) - Q: [The Question?] - A: [The Answer!] ## Feature Request Great Feature Requests tend to have: - A quick idea summary. - What & why you wanted to add the specific feature. - Additional context like images, links to resources to implement the feature etc, etc. ## License By contributing to DogeHouse, you agree that your contributions will be licensed under the [LICENSE file](LICENSE). ================================================ FILE: CREATE_BOT_ACCOUNT.MD ================================================ 0. Sign in to your account 1. Head to [developer settings](https://dogehouse.tv/developer/bots) 2. Click `Create bot` 3. Enter the name of your bot 4. Click create bot 5. Go to the bot and click `Copy` to copy your API key 6. You now have a bot account! Use the API key to authenticate your bot ================================================ FILE: DESIGN_GUIDELINES.md ================================================ # Design Guidelines This document aims to specify and define the rules and patterns to follow when implementing and developing new features and components for DogeHouse. >This is a summary. For a more extensive version, components and UI Design, visit the publically available **[Figma file](https://www.figma.com/file/CS01VVLR7ArQl0afYFkNj3/Web-App?node-id=201%3A1979)**. ## Table of contents - [Design Guidelines](#design-guidelines) - [Table of contents](#table-of-contents) - [Color scheme](#color-scheme) - [Gray shades](#gray-shades) - [Typography](#typography) - [Web Embed](#web-embed) - [Desktop](#desktop) - [Spacing](#spacing) - [Doubts and questions](#doubts-and-questions) ## Color scheme - **Accent**: `#FD4D4D` - **Pure White**: `#FFFFFF` #### Gray shades - **Gray 100**: `#DEE3EA` - **Gray 200**: `#B2BDCD` - **Gray 300**: `#5D7290` - **~~Gray 400~~**: `#4F617A` - **~~Gray 500~~**: `#404F64` - **~~Gray 600~~**: `#323D4D` - **Gray 700**: `#242C37` - **Gray 800**: `#151A21` - **Gray 900**: `#0B0E11` ## Typography The font chosen for this project is `Inter`. Inter is a free font available on Google Fonts. Clean and bold headings, readable paragraph text and an overall versatile font. We'll be using two of its styles: - Inter Bold (`700`) - Inter Medium (`500`) #### Web Embed HTML's `link` method ```html ``` CSS/SCSS `@import` ```css @import url('https://fonts.googleapis.com/css2?family=Inter:wght@500;700&display=swap'); ``` CSS Rules ```scss font-family: 'Inter', sans-serif; // Regular font-weight: 500; // Bold font-weight: 700; ``` ![DogeHouse typography](https://i.imgur.com/A1pz7UD.png) Tag | Font Size | Line Height | Weight --- | --------- | ----------- | ------ **H1** | 56px | 90 | 700 **H2** | 40px | 64 | 700 **H3** | 28px | 45 | 700 **H4** | 20px | 32 | 700 **P** | 14px | 22 | 500 - 700 **P (small)** | 12px | 22 | 500 - 700 ## Spacing This is an approximation. On some circumstances other values will be used to ensure readability, consistency and visual balance, so make sure to also check the UI Design and the spacing used there. ![DogeHouse spacing](https://i.imgur.com/gRIJAXA.png) ## Doubts and questions If you have any doubts or concerns when developing components or other UI elements, you can open an issue and tag @ajmnz or leave a message in `#design` or `#kibbeh` in [our Discord](https://discord.gg/82HzQCJCDg). ================================================ FILE: FAQ.md ================================================ # FAQ ## Why did you choose Elixir? It's fun to program in. The error messages are awful and there's no static typing, but other than that it's great. ## How will DogeHouse make money? - DogeNitro - DogeSubscriptions - DogeAds ## Will open source contributors get paid? After DogeHouse adds monetization and it makes enough to pay server costs, there will be bounties. ## How will you market this? Once the core product is solid, I will be doing events with the community and other influencers. ## Are you working on this full-time? yes ## Discord Stages? https://www.youtube.com/watch?v=FmAL5qvJkaI ## Are you ever doing video? Not for a long time, maybe never. ================================================ FILE: HOW_TO_DEBUG_AUDIO.md ================================================ 0. Turn on audio debugging mode by clicking on your avatar in the top right and click `Debug Audio`: ![image](https://user-images.githubusercontent.com/7872329/116554048-5d73f600-a8c0-11eb-9f0c-bfae58530f75.png) 1. In a room make sure your transport is connected and your browser is supported (a warning will show up if it isn't) ![image](https://user-images.githubusercontent.com/7872329/116554680-1803f880-a8c1-11eb-9535-aa89d2f424ca.png) 2. Avatars will be tinted red if the audio consumer doesn't exist or orange if it's closed (this means something is wrong if other people can hear them, skip to step 6) 3. Green will come from the bottom of the avatar if everything is working based on how loud they are speaking ![image](https://user-images.githubusercontent.com/7872329/116556759-6e723680-a8c3-11eb-913c-7506d875ac30.png) 4. If you see green but can't hear them, make sure your speakers work then click on the profile image of a speaker you can't hear and screen shot the debug info ![image](https://user-images.githubusercontent.com/7872329/116554578-f86cd000-a8c0-11eb-883c-3a66a94eb61e.png) 5. Then click `Force Play Audio` once 6. If all of these things don't work, right-click the page, click inspect, click console tab, and copy/paste all the text into a GitHub issue ================================================ FILE: HOW_TO_GET_PERMA_BANNED_FROM_DOGEHOUSE.md ================================================ # Things that will get you perma banned 0. Spam creating a ton of scheduled rooms 1. NSFW profile/banner image 2. Ban evading rooms - if you get banned from a room, don't create another DogeHouse account and join the same room ================================================ FILE: LICENSE ================================================ MIT License Copyright (C) 2021 Ben Awad and the DogeHouse contributors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================

Taking voice conversations to the moon 🚀

discord - users online dogehouse - users online

Contribute · Community · Documentation

--- ## Important DogeHouse Notice [I'm done with DogeHouse](https://www.youtube.com/watch?v=I8PkQgPiSq8) ## Structure | Codebase | Description | | :-------------------- | :-----------------------: | | [kousa](kousa) | Elixir API | | [shawarma](shawarma) | Voice Server | | [dinner](dinner) | Puppeteer shenanigans | | [baklava](baklava) | Electron Wrapper | | [pilaf](pilaf) | React Native App | | [kibbeh](kibbeh) | Next.js frontend | | [kebab](kebab) | API Client | | [dolma](dolma) | Chat Token Transcoder | | [globalkey](globalkey)| [Baklava](baklava)'s Global Keystroke Listener | ## Branches - staging -> pr this branch for everything - prod -> don't touch, this is what's running in prod ## Contributions DogeHouse is open to contributions, but I recommend creating an issue or replying in a comment to let me know what you are working on first that way we don't overwrite each other. Please read [CONTRIBUTING.md](https://github.com/benawad/dogehouse/blob/staging/CONTRIBUTING.md) for details on this project. ## DogeHouse Desktop A desktop app built with [Electron](https://www.electronjs.org/) is available for Windows, Mac, and Linux. There are different ways to get the Electron desktop app: * Get the official builds from [here, in GitHub Releases][gh-releases] for any platform. * Get it from AUR (unofficial package) for Arch/Manjaro or other Arch-based distro with `yay -S dogehouse`, using another AUR helper, or installing manually from the AUR. * Get the desktop client for Debian-based distros (including Ubuntu) from the official APT repo with these simple steps: * Add the repo with `echo "deb http://ppa.dogehouse.tv/ ./" | sudo tee -a /etc/apt/sources.list > /dev/null` * Add Ben Awad's GPG key with `$(command -v curl>>/dev/null && echo "curl -o-" || echo "wget -q0-") http://ppa.dogehouse.tv/KEY.gpg | sudo apt-key add -`. * Finally, update your local repository list and install DogeHouse with `sudo apt update && sudo apt install dogehouse`. * Get the snap for your systemd-powered Linux distro from either the [Snap Store](https://snapcraft.io/dogehouse) or in an terminal with `sudo snap install dogehouse`. * After installing the snap, you need to allow microphone access with `sudo snap connect dogehouse:audio-record` to be able to speak in rooms. [gh-releases]: https://github.com/benawad/dogehouse/releases/latest **_Notes:_** - If a warning message pops up on Windows, go to 'more info' and select 'Run Anyway' - Currently, the snap package's available channels are only `edge` as contributions for Baklava are merged almost on daily basis. Tested versions that are stable will be promoted into `stable` in the future. ## DogeReviewers Contributors helping to review/merge pull requests: - [@HarrisonMayotte](https://github.com/HarrisonMayotte) - [@TheOtterlord](https://github.com/TheOtterlord) - [@amitojsingh366](https://github.com/amitojsingh366) - [@dk-raw](https://github.com/dk-raw) - [@ermalsh](https://github.com/ermalsh) - [@goldyydev](https://github.com/goldyydev) - [@jamesql](https://github.com/jamesql) - [@nadirabbas](https://github.com/nadirabbas) - [@ofsho](https://github.com/ofsho) - [@overlisted](https://github.com/overlisted) ## Code of Conduct Please read [CODE_OF_CONDUCT.md](https://github.com/benawad/dogehouse/blob/staging/CODE_OF_CONDUCT.md) for details on our code of conduct. ## How to run locally Check here on how to run locally ## Why did you make this? https://www.youtube.com/watch?v=hy-EhJ_tTQo ## Attribution For emojis, we use [Twemoji](https://twemoji.twitter.com/) ================================================ FILE: SECURITY.md ================================================ # Security Policy ## Reporting a Vulnerability DM me on https://twitter.com/benawad or https://discord.gg/wCbKBZF9cV ================================================ FILE: baklava/.gitignore ================================================ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. # dependencies /node_modules /.pnp .pnp.js # testing /coverage # production /builds /dist #Builds DogeHouse* # misc .DS_Store .env .env.local .env.development.local .env.test.local .env.production.local npm-debug.log* yarn-debug.log* yarn-error.log* .eslintcache .netlify # yarn v2 .yarn/* !.yarn/releases !.yarn/plugins !.yarn/sdks !.yarn/versions ================================================ FILE: baklava/.yarnrc.yml ================================================ nodeLinker: node-modules plugins: - path: ../.yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs spec: "@yarnpkg/plugin-workspace-tools" - path: ../.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs spec: "@yarnpkg/plugin-interactive-tools" yarnPath: ../.yarn/releases/yarn-berry.cjs ================================================ FILE: baklava/README.md ================================================ # Dogehouse for Desktop (Baklava) This is the desktop application for Dogehouse. It uses ElectronJS as a wrapper for [dogehouse.tv](https://dogehouse.tv) and adds other native capabilities. ## Features - Notifications - System tray - Global keybinds - Splash screen - Localization - Discord RPC ## How to run > NOTE: Windows users may have to install Visual Studio 2019 and the workload `Desktop Development with C++`. - Run `yarn install` - Ensure [Rust](https://www.rust-lang.org/learn/get-started) is installed - Install `nj-cli` by running `cargo install nj-cli` - Run `yarn build:globalkey` - Run `yarn start` - _(Optional)_ Run `yarn build:%YOUR_PLATFORM_CODE%` and install the app from the build _(located in `/builds`)_ If you encounter any errors while building please create a new issue for it or ask for help on the [Discord](https://discord.gg/wCbKBZF9cV0). ## Using hot reload The electron wrapper has the capability for hot reloads during development. You can run the app in hot reload mode using `yarn dev`. While in hot reload mode, any time you save changes to a `ts` file, the electron app will recompile and relaunch itself. To exit hot reload mode, use `Ctrl+C` in the console. This will however, leave the current app window open, so be sure to close that also, as it will no longer have access to hot reload. ## Translations Translations are stored in `baklava/locales` and loaded using the `i18next` library. You can add new languages by creating a folder with the correct [language code](https://www.electronjs.org/docs/api/locales) and adding the `translate.json` file. All keys are present in `baklava/src/generated/translationKeys.ts`, so it's a good idea to use it for reference. You can sync the files and generate missing keys using `yarn i18`. ================================================ FILE: baklava/locales/en/translate.json ================================================ { "common": { "title": "Dogehouse" }, "splash": { "check": "Checking for updates...", "download": "Downloading Updates...", "relaunch": "Relaunching...", "launch": "Launching...", "skipCheck": "Skipping update checks...", "notfound": "No updates found..." } } ================================================ FILE: baklava/package.json ================================================ { "name": "dogehouse", "version": "1.0.69", "description": "Taking voice conversations to the moon 🚀", "main": "./dist/electron.js", "scripts": { "compile": "tsc", "watch": "tsc -w", "dev": "yarn compile && node ./dist/dev.js", "start": "yarn compile && electron ./dist/electron.js", "gen:i18:keys": "ts-node --project scripts/tsconfig.json scripts/generateTranslationTypes.ts", "sync:i18": "ts-node --project scripts/tsconfig.json scripts/syncTranslations.ts", "i18": "npm run gen:i18:keys && npm run sync:i18", "build:all": "yarn compile && electron-builder -mwl", "build:mac": "yarn compile && electron-builder --mac", "build:win": "yarn compile && electron-builder --win", "build:linux": "yarn compile && electron-builder --linux", "build:overlay": "cd resources/overlay && yarn build && cd ../../", "build:globalkey": "yarn remove globalkey && yarn add globalkey && cd node_modules/globalkey && npx electron-build-env nj-cli build --release", "delete:artifacts": "yarn delete:globalkey_artifacts && yarn delete:overlay_yarn_cache", "delete:globalkey_artifacts": "cd node_modules/globalkey && del-cli target src && cd ../../", "delete:overlay_yarn_cache": "cd resources/overlay && del-cli .yarn && cd ../../" }, "keywords": [ "DogeHouse", "Electron", "voice-chat", "Doge" ], "author": "Ben Awad ", "homepage": "https://github.com/benawad/dogehouse/", "repository": { "type": "git", "url": "https://github.com/benawad/dogehouse" }, "bugs": { "url": "https://github.com/benawad/dogehouse/issues" }, "license": "MIT", "build": { "appId": "com.electron.dogehouse", "productName": "DogeHouse", "afterSign": "electron-builder-notarize", "mac": { "hardenedRuntime": true, "icon": "icons/icon.png", "category": "public.app-category.social-networking", "entitlements": "settings/entitlements.mac.plist", "extendInfo": { "NSMicrophoneUsageDescription": "Mic access for speech input in voice." }, "target": [ "dmg", "zip" ] }, "win": { "icon": "icons/icon.png", "target": "nsis", "publish": [ "github" ] }, "linux": { "icon": "icons/icon.png", "target": [ "deb", "AppImage", "snap", "tar.gz", "rpm" ], "category": "AudioVideo" }, "snap": { "confinement": "strict", "plugs": [ "default", "audio-playback", "audio-record", { "browser-support": { "interface": "browser-support", "allow-sandbox": false } } ] }, "extraMetadata": { "main": "dist/electron.js" }, "directories": { "output": "./builds" }, "extends": null }, "devDependencies": { "@types/discord-rpc": "^3.0.5", "@types/i18next-node-fs-backend": "^2.1.0", "@types/lodash": "^4.14.168", "@types/node": "^14.14.31", "@types/prettier": "^2.2.3", "builder-util": "^22.10.5", "del-cli": "^3.0.1", "electron": "^12.0.2", "electron-build-env": "^0.2.0", "electron-builder": "^22.10.5", "electron-builder-notarize": "^1.2.0", "lodash": "^4.17.21", "prettier": "^2.2.1", "pretty-quick": "^3.1.0", "ts-node": "^9.1.1", "typescript": "^4.2.2" }, "dependencies": { "discord-rpc": "^3.2.0", "dotenv": "^8.2.0", "electron-log": "^4.3.2", "electron-overlay-window": "^1.0.4", "electron-updater": "^4.3.8", "globalkey": "^1.0.7", "i18next": "^20.0.0", "i18next-node-fs-backend": "^2.1.3" }, "files": [ "./icons/**/*", "./resources/**/*" ] } ================================================ FILE: baklava/resources/overlay/.gitignore ================================================ /node_modules /build # yarn v2 .yarn/* !.yarn/releases !.yarn/plugins !.yarn/sdks !.yarn/versions ================================================ FILE: baklava/resources/overlay/.yarnrc.yml ================================================ nodeLinker: node-modules plugins: - path: ../../../.yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs spec: "@yarnpkg/plugin-workspace-tools" - path: ../../../.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs spec: "@yarnpkg/plugin-interactive-tools" yarnPath: ../../../.yarn/releases/yarn-berry.cjs ================================================ FILE: baklava/resources/overlay/README.md ================================================ # Getting Started with Create React App This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). ## Available Scripts In the project directory, you can run: ### `yarn start` Runs the app in the development mode.\ Open [http://localhost:3000](http://localhost:3000) to view it in the browser. The page will reload if you make edits.\ You will also see any lint errors in the console. ### `yarn test` Launches the test runner in the interactive watch mode.\ See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. ### `yarn build` Builds the app for production to the `build` folder.\ It correctly bundles React in production mode and optimizes the build for the best performance. The build is minified and the filenames include the hashes.\ Your app is ready to be deployed! See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. ### `yarn eject` **Note: this is a one-way operation. Once you `eject`, you can’t go back!** If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. ## Learn More You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). To learn React, check out the [React documentation](https://reactjs.org/). ### Code Splitting This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting) ### Analyzing the Bundle Size This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size) ### Making a Progressive Web App This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app) ### Advanced Configuration This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration) ### Deployment This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment) ### `yarn build` fails to minify This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify) ================================================ FILE: baklava/resources/overlay/package.json ================================================ { "name": "dogehouse-baklava-overlay", "version": "0.1.0", "private": true, "dependencies": { "@testing-library/jest-dom": "^5.11.4", "@testing-library/react": "^11.1.0", "@testing-library/user-event": "^12.1.10", "react": "^17.0.1", "react-dom": "^17.0.1", "react-icons": "^4.2.0", "react-scripts": "4.0.3", "web-vitals": "^1.0.1" }, "scripts": { "start": "set PORT=5000 && react-scripts start", "build": "react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject" }, "eslintConfig": { "extends": [ "react-app", "react-app/jest" ] }, "browserslist": { "production": [ ">0.2%", "not dead", "not op_mini all" ], "development": [ "last 1 chrome version", "last 1 firefox version", "last 1 safari version" ] }, "homepage": "./" } ================================================ FILE: baklava/resources/overlay/public/index.html ================================================ Dogehouse Overlay
================================================ FILE: baklava/resources/overlay/src/App.css ================================================ .App { text-align: center; background: rgba(0, 0, 0, 0); /* background: #ffffff; */ } img{ border-radius: 50%; width: 40px; height: 40px; } .active-speaker{ border: solid #60A5FA 3px; border-radius: 50%; width: 40px; float: left; height: 40px; } .img-div{ display:inline; } .name-div{ display:inline; white-space:nowrap; } .active-speaker-cont { background: rgba(255, 255, 255, 0.2); white-space:nowrap; border-radius: 10%; width: max-content; margin: 5px; padding: 2px; } .speaker-muted{ position: relative; bottom: 0; right: 0; } .left{ float:left; } ================================================ FILE: baklava/resources/overlay/src/App.js ================================================ import './App.css'; import { useEffect, useState } from 'react'; // import { FiMicOff } from "react-icons/fi"; const ipcRenderer = window.require("electron").ipcRenderer; function App() { const [speakers, setSpeakers] = useState([]); useEffect(() => { ipcRenderer.send("@overlay/start_ipc", true); ipcRenderer.on("@overlay/overlayData", (event, data) => { if (data.currentRoom) { let s = []; data.currentRoom.users.forEach((u) => { if (u.roomPermissions) { if ( u.roomPermissions.isSpeaker || data.currentRoom.room.creatorId === u.id ) { u.isSpeaking = false; u.isMuted = false; if (data.currentRoom.activeSpeakerMap[u.id]) { u.isSpeaking = true; } if (data.currentRoom.muteMap[u.id]) { u.isMuted = true; } s.push(u); } } else { if (data.currentRoom.room.creatorId === u.id) { u.isSpeaking = false; u.isMuted = false; if (data.currentRoom.activeSpeakerMap[u.id]) { u.isSpeaking = true; } if (data.currentRoom.muteMap[u.id]) { u.isMuted = true; } s.push(u); } } console.log(u); }); setSpeakers(s); } }); }, []); return (
{speakers && speakers.map((speaker) => ( ))}
); } function SpeakerIcon(props) { return (
speaker bubble {/* {props.speaker.isMuted ?
: null} */}
{/* {props.speaker.isSpeaking ?

{props.speaker.displayName}

: null} */}
); } export default App; ================================================ FILE: baklava/resources/overlay/src/index.css ================================================ body { margin: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } code { font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', monospace; } ================================================ FILE: baklava/resources/overlay/src/index.js ================================================ import React from 'react'; import ReactDOM from 'react-dom'; import './index.css'; import App from './App'; import reportWebVitals from './reportWebVitals'; ReactDOM.render( , document.getElementById('root') ); // If you want to start measuring performance in your app, pass a function // to log results (for example: reportWebVitals(console.log)) // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals reportWebVitals(); ================================================ FILE: baklava/resources/overlay/src/reportWebVitals.js ================================================ const reportWebVitals = onPerfEntry => { if (onPerfEntry && onPerfEntry instanceof Function) { import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { getCLS(onPerfEntry); getFID(onPerfEntry); getFCP(onPerfEntry); getLCP(onPerfEntry); getTTFB(onPerfEntry); }); } }; export default reportWebVitals; ================================================ FILE: baklava/resources/splash/splash-screen.html ================================================ DogeHouse
DogeHouse Logo

================================================ FILE: baklava/scripts/generateTranslationTypes.ts ================================================ import fs from "fs"; import { join } from "path"; import prettier from "prettier"; import { traverseTranslations } from "./traverseTranslations"; const s = ` // this is autogenerated by running \`npm run gen:i18:keys\` export type TranslationKeys = ${traverseTranslations() .map((k) => ` "${k}"`) .join("|\n")} `; fs.writeFileSync( join(__dirname, "../src/generated/translationKeys.ts"), prettier.format(s, { parser: "babel", useTabs: true }) ); ================================================ FILE: baklava/scripts/syncTranslations.ts ================================================ // @ts-ignore import config from "../../.prettierrc.js"; import english from "../locales/en/translate.json"; import * as fs from "fs"; import { join } from "path"; import prettier from "prettier"; import { traverseTranslations } from "./traverseTranslations"; import { get, set } from "lodash"; const paths = traverseTranslations(); fs.readdirSync(join(__dirname, "../locales")).forEach((locale) => { if (locale === "en") { return; } const filename = join( __dirname, "../public/locales", locale, "translation.json" ); let data: any; try { data = JSON.parse(fs.readFileSync(filename, { encoding: "utf-8" })); } catch (err) { throw new Error(`${locale}: ${err.message}`); } paths.forEach((p) => { if (get(data, p, null) === null) { set(data, p, get(english, p)); } }); fs.writeFileSync( filename, prettier.format(JSON.stringify(data), { parser: "json", useTabs: true, ...config, }) ); }); ================================================ FILE: baklava/scripts/traverseTranslations.ts ================================================ import translations from "../locales/en/translate.json"; const keys: string[] = []; type TranslationRecord = { [P in string]: string | TranslationRecord; }; const _traverseTranslations = (obj: TranslationRecord, path: string[]) => { Object.keys(obj).forEach((key) => { if (key.startsWith("_")) { return; } const objOrString = obj[key]; if (typeof objOrString === "string") { keys.push([...path, key].join(".")); } else { _traverseTranslations(objOrString, [...path, key]); } }); }; export const traverseTranslations = () => { _traverseTranslations(translations, []); return keys; }; ================================================ FILE: baklava/scripts/tsconfig.json ================================================ { "compilerOptions": { "target": "es6", "module": "commonjs", "lib": ["dom", "es6", "es2017", "esnext.asynciterable"], "sourceMap": true, "outDir": "./dist", "moduleResolution": "node", "removeComments": true, "noImplicitAny": true, "strictNullChecks": true, "strictFunctionTypes": true, "noImplicitThis": true, "noUnusedLocals": true, "noUnusedParameters": true, "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, "allowSyntheticDefaultImports": true, "esModuleInterop": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, "resolveJsonModule": true, "baseUrl": "." }, "exclude": ["node_modules"], "include": ["./*.ts"] } ================================================ FILE: baklava/settings/entitlements.mac.plist ================================================ com.apple.security.cs.allow-jit com.apple.security.cs.allow-unsigned-executable-memory com.apple.security.cs.allow-dyld-environment-variables com.apple.security.device.audio-input com.apple.security.cs.disable-library-validation ================================================ FILE: baklava/src/constants.ts ================================================ import { app, shell } from "electron"; import { autoUpdater } from "electron-updater"; export const isMac = process.platform === "darwin"; export const isWin = process.platform === "win32"; export const isLinux = process.platform !== "darwin" && process.platform !== "win32"; export const REQUEST_TO_SPEAK_KEY = "@keybind/invite"; export const INVITE_KEY = "@keybind/invite"; export const MUTE_KEY = "@keybind/mute"; export const DEAF_KEY = "@keybind/deafen"; export const CHAT_KEY = "@keybind/chat"; export const PTT_KEY = "@keybind/ptt"; export const OVERLAY_KEY = "@keybind/overlay"; export const RPC_TRAY_OPTION_ID = "@tray/rpc"; const REPO_URL = "https://github.com/benawad/dogehouse/"; const DISCUSSION_URL = "https://github.com/benawad/dogehouse/discussions"; const ISSUES_URL = "https://github.com/benawad/dogehouse/issues"; export const ALLOWED_HOSTS = [ "dogehouse.tv", "next.dogehouse.tv", "api.dogehouse.tv", "github.com", "localhost", "staging.dogehouse.tv", "doge-staging.stripcode.dev", "api.twitter.com", "twitter.com", ]; export const MENU_TEMPLATE: any = [ ...(isMac ? [ { label: app.name, submenu: [ { role: "about" }, { type: "separator" }, { role: "services" }, { type: "separator" }, { role: "hide" }, { role: "hideothers" }, { role: "unhide" }, { type: "separator" }, { role: "quit" }, ], }, ] : []), { label: "File", submenu: [isMac ? { role: "close" } : { role: "quit" }], }, { label: "Edit", submenu: [ { role: "undo" }, { role: "redo" }, { type: "separator" }, { role: "cut" }, { role: "copy" }, { role: "paste" }, ...(isMac ? [ { role: "pasteAndMatchStyle" }, { role: "delete" }, { role: "selectAll" }, { type: "separator" }, { label: "Speech", submenu: [{ role: "startSpeaking" }, { role: "stopSpeaking" }], }, ] : [{ role: "delete" }, { type: "separator" }, { role: "selectAll" }]), ], }, { label: "View", submenu: [ { role: "reload" }, { role: "forceReload" }, { role: "toggleDevTools" }, { type: "separator" }, { role: "resetZoom" }, { role: "zoomIn" }, { role: "zoomOut" }, { type: "separator" }, { role: "togglefullscreen" }, ], }, { label: "Window", submenu: [ { role: "minimize" }, { role: "zoom" }, ...(isMac ? [ { type: "separator" }, { role: "front" }, { type: "separator" }, { role: "window" }, ] : [{ role: "close" }]), ], }, { role: "help", submenu: [ { label: "Learn More", click: async () => { await shell.openExternal(REPO_URL); }, }, { label: "Community Discussions", click: async () => { await shell.openExternal(DISCUSSION_URL); }, }, { label: "Search Issues", click: async () => { await shell.openExternal(ISSUES_URL); }, }, { label: "Check For Updates", click: async () => { autoUpdater.checkForUpdatesAndNotify(); }, }, ], }, ]; ================================================ FILE: baklava/src/dev.ts ================================================ import { exec, ChildProcess } from 'child_process'; let compiler: ChildProcess; let app: ChildProcess; let env = process.env; env.hotReload = 'true'; /** * Get a formatted timestamp for logging * @returns {string} A formatted timestamp (HH:MM:SS) */ function timestamp() { return new Date().toISOString().split('T')[1].split(".")[0]; } /** * Start the hot reloader. * Creates a connection with the typescript compiler and listens for changes. * Once changes are compiled, the electron app is relaunched. */ function start() { console.log(`${timestamp()} - Starting hot reload`); compiler = exec('npm run watch'); compiler.stdout?.on('data', data => { if (data.includes('Watching')) { if (app) console.log(`${timestamp()} - Detected changes`); app = exec('npm run start', { env }); console.log(`${timestamp()} - Launching app`); } }); } start(); ================================================ FILE: baklava/src/electron.ts ================================================ import { BrowserWindow, app, systemPreferences, ipcMain, globalShortcut, shell, Tray, Menu, } from "electron"; import i18n from "i18next"; import Backend from "i18next-node-fs-backend"; import { autoUpdater } from "electron-updater"; import { exitApp, RegisterKeybinds } from "./utils/keybinds"; import { HandleVoiceTray } from "./utils/tray"; import { ALLOWED_HOSTS, isLinux, isMac, isWin, MENU_TEMPLATE, } from "./constants"; import path from "path"; import { StartNotificationHandler } from "./utils/notifications"; import { bWindowsType } from "./types"; import electronLogger from "electron-log"; import { startRPC } from "./utils/rpc"; let mainWindow: BrowserWindow; let tray: Tray; let menu: Menu; let splash: BrowserWindow; export let bWindows: bWindowsType; export const __prod__ = app.isPackaged; const instanceLock = app.requestSingleInstanceLock(); let shouldShowWindow = false; let windowShowInterval: NodeJS.Timeout; let skipUpdateTimeout: NodeJS.Timeout; i18n.use(Backend); electronLogger.transports.file.level = "debug"; autoUpdater.logger = electronLogger; // just in case we have to revert to a build autoUpdater.allowDowngrade = true; if (isWin) app.setAppUserModelId("DogeHouse"); async function localize() { await i18n.init({ lng: app.getLocale(), debug: false, backend: { // path where resources get loaded from loadPath: path.join(__dirname, "../locales/{{lng}}/translate.json"), }, interpolation: { escapeValue: false, }, saveMissing: true, fallbackLng: "en", }); } function createMainWindow() { mainWindow = new BrowserWindow({ width: 1500, height: 800, minWidth: 400, minHeight: 600, autoHideMenuBar: true, webPreferences: { nodeIntegration: true, contextIsolation: false, }, frame: isLinux, show: false, }); // applying custom menu menu = Menu.buildFromTemplate(MENU_TEMPLATE); Menu.setApplicationMenu(menu); // applying custom tray tray = new Tray(path.join(__dirname, `../icons/tray.png`)); if (!__prod__) { mainWindow.webContents.openDevTools(); } mainWindow.loadURL( __prod__ ? `https://dogehouse.tv/` : "http://localhost:3000" ); bWindows = { main: mainWindow, overlay: undefined, }; mainWindow.once("ready-to-show", () => { shouldShowWindow = true; }); // crashes on mac only in dev // systemPreferences.askForMediaAccess("microphone"); ipcMain.on("request-mic", async (event, _serviceName) => { const isAllowed: boolean = await systemPreferences.askForMediaAccess( "microphone" ); event.returnValue = isAllowed; }); if (isMac) { mainWindow.webContents.send("@alerts/permissions", true); } // start rpc startRPC(); // registers global keybinds RegisterKeybinds(bWindows); // starting the custom voice menu handler HandleVoiceTray(mainWindow, tray); // starting the noti handler StartNotificationHandler(); // graceful exiting mainWindow.on("closed", () => { globalShortcut.unregisterAll(); if (bWindows.overlay) { bWindows.overlay.destroy(); } mainWindow.destroy(); }); // handling external links const handleLinks = (event: any, url: string) => { let urlObj = new URL(url); let urlHost = urlObj.hostname; if (!ALLOWED_HOSTS.includes(urlHost)) { event.preventDefault(); shell.openExternal(url); } else { if ( (urlHost == ALLOWED_HOSTS[3] && urlObj.pathname !== "/login" && urlObj.pathname !== "/session" && urlObj.pathname !== "/sessions/two-factor" && urlObj.pathname !== "/sessions/two-factor/webauthn") || ( urlHost == ALLOWED_HOSTS[8] && urlObj.pathname !== "/account/login_verification" ) ) { event.preventDefault(); shell.openExternal(url); } } }; mainWindow.webContents.on("new-window", handleLinks); mainWindow.webContents.on("will-navigate", handleLinks); ipcMain.on("@dogehouse/loaded", (event, doge) => { if (isMac) mainWindow.maximize(); }); ipcMain.on("@app/quit", (event, args) => { mainWindow.close(); }); ipcMain.on("@app/maximize", (event, args) => { if (isMac) { if (mainWindow.isFullScreenable()) { mainWindow.setFullScreen(!mainWindow.isFullScreen()); } } else { if (mainWindow.maximizable) { if (mainWindow.isMaximized()) { mainWindow.unmaximize(); } else { mainWindow.maximize(); } } } }); ipcMain.on("@app/minimize", (event, args) => { if (mainWindow.minimizable) { mainWindow.minimize(); } }); ipcMain.on("@app/hostPlatform", (event, args) => { event.sender.send("@app/hostPlatform", { isLinux, isMac, isWin, }); }); } function createSplashWindow() { splash = new BrowserWindow({ width: 300, height: 410, transparent: true, frame: false, resizable: false, webPreferences: { nodeIntegration: true, contextIsolation: false, }, }); splash.loadFile( path.join(__dirname, "../resources/splash/splash-screen.html") ); splash.webContents.on("did-finish-load", () => { splash.webContents.send("@locale/text", { title: i18n.t("common.title"), check: i18n.t("splash.check"), download: i18n.t("splash.download"), relaunch: i18n.t("splash.relaunch"), launch: i18n.t("splash.launch"), skipCheck: i18n.t("splash.skipCheck"), notfound: i18n.t("splash.notfound"), }); }); } if (!instanceLock) { if (process.env.hotReload) { app.relaunch(); } exitApp(); } else { app.on("ready", () => { localize().then(async () => { createSplashWindow(); if (!__prod__) skipUpdateCheck(splash); if (__prod__ && !isLinux) await autoUpdater.checkForUpdates(); if (isLinux && __prod__) { skipUpdateCheck(splash); } }); }); app.on("second-instance", (event, argv, workingDirectory) => { if (mainWindow) { if (process.env.hotReload) return mainWindow.close(); if (mainWindow.isMinimized()) mainWindow.restore(); mainWindow.focus(); } }); } autoUpdater.on("update-available", (info) => { splash.webContents.send("download", info); // skip the update if it takes more than 1 minute skipUpdateTimeout = setTimeout(() => { skipUpdateCheck(splash); }, 60000); }); autoUpdater.on("download-progress", (progress) => { let prog = Math.floor(progress.percent); splash.webContents.send("percentage", prog); splash.setProgressBar(prog / 100); // stop timeout that skips the update if (skipUpdateTimeout) { clearTimeout(skipUpdateTimeout); } }); autoUpdater.on("update-downloaded", () => { splash.webContents.send("relaunch"); // stop timeout that skips the update if (skipUpdateTimeout) { clearTimeout(skipUpdateTimeout); } setTimeout(() => { autoUpdater.quitAndInstall(); }, 1000); }); autoUpdater.on("update-not-available", () => { skipUpdateCheck(splash); }); app.on("window-all-closed", async () => { exitApp(); }); app.on("activate", () => { if (mainWindow === null) { localize().then(() => { createMainWindow(); }); } }); function skipUpdateCheck(splash: BrowserWindow) { createMainWindow(); splash.webContents.send("notfound"); if (isLinux || !__prod__) { splash.webContents.send("skipCheck"); } // stop timeout that skips the update if (skipUpdateTimeout) { clearTimeout(skipUpdateTimeout); } windowShowInterval = setInterval(() => { if (shouldShowWindow) { splash.webContents.send("launch"); clearInterval(windowShowInterval); setTimeout(() => { splash.destroy(); mainWindow.show(); }, 800); } }, 1000); } ================================================ FILE: baklava/src/generated/translationKeys.ts ================================================ // this is autogenerated by running `npm run gen:i18:keys` export type TranslationKeys = | "common.title" | "splash.check" | "splash.download" | "splash.relaunch" | "splash.launch"; ================================================ FILE: baklava/src/types.ts ================================================ import { BrowserWindow } from "electron" export type bWindowsType = { main: BrowserWindow, overlay: BrowserWindow | undefined } ================================================ FILE: baklava/src/utils/keybinds.ts ================================================ import { ipcMain, globalShortcut, app, } from "electron"; import { CHAT_KEY, INVITE_KEY, MUTE_KEY, PTT_KEY, REQUEST_TO_SPEAK_KEY, OVERLAY_KEY, isMac, DEAF_KEY, } from "../constants"; import { overlayWindow } from "electron-overlay-window"; import { createOverlay } from "./overlay"; import { startOverlayIPCHandler } from "./overlay/ipc"; import { bWindowsType } from "../types"; import globalkey from 'globalkey'; import { stopRPC } from "./rpc"; export let CURRENT_REQUEST_TO_SPEAK_KEY = "Control+8"; export let CURRENT_INVITE_KEY = "Control+7"; export let CURRENT_MUTE_KEY = "Control+m"; export let CURRENT_DEAF_KEY = "Control+1"; export let CURRENT_CHAT_KEY = "Control+9"; export let CURRENT_OVERLAY_KEY = "Control+2"; export let CURRENT_PTT_KEY = ["0", "Control"]; export let CURRENT_PTT_KEY_STRING = "0,control" export let CURRENT_APP_TITLE = ""; let PREV_PTT_STATUS = false; export let worker: Worker; export async function RegisterKeybinds(bWindows: bWindowsType) { ipcMain.on(REQUEST_TO_SPEAK_KEY, (event, keyCode) => { if (globalShortcut.isRegistered(CURRENT_REQUEST_TO_SPEAK_KEY)) { globalShortcut.unregister(CURRENT_REQUEST_TO_SPEAK_KEY); } CURRENT_REQUEST_TO_SPEAK_KEY = keyCode; globalShortcut.register(keyCode, () => { bWindows.main.webContents.send(REQUEST_TO_SPEAK_KEY, keyCode); }) }); ipcMain.on(INVITE_KEY, (event, keyCode) => { if (globalShortcut.isRegistered(CURRENT_INVITE_KEY)) { globalShortcut.unregister(CURRENT_INVITE_KEY); } CURRENT_INVITE_KEY = keyCode; globalShortcut.register(keyCode, () => { bWindows.main.webContents.send(INVITE_KEY, keyCode); }) }); ipcMain.on(MUTE_KEY, (event, keyCode) => { if (globalShortcut.isRegistered(CURRENT_MUTE_KEY)) { globalShortcut.unregister(CURRENT_MUTE_KEY); } CURRENT_MUTE_KEY = keyCode globalShortcut.register(keyCode, () => { bWindows.main.webContents.send(MUTE_KEY, keyCode); }) }); ipcMain.on(DEAF_KEY, (event, keyCode) => { if (globalShortcut.isRegistered(CURRENT_DEAF_KEY)) { globalShortcut.unregister(CURRENT_DEAF_KEY); } CURRENT_DEAF_KEY = keyCode globalShortcut.register(keyCode, () => { bWindows.main.webContents.send(DEAF_KEY, keyCode); }) }); ipcMain.on(CHAT_KEY, (event, keyCode) => { if (globalShortcut.isRegistered(CURRENT_CHAT_KEY)) { globalShortcut.unregister(CURRENT_CHAT_KEY); } CURRENT_CHAT_KEY = keyCode; globalShortcut.register(keyCode, () => { bWindows.main.webContents.send(CHAT_KEY, keyCode); }) }); ipcMain.on(PTT_KEY, (event, keyCode: string) => { if (keyCode.includes("+")) { let keys = keyCode.split("+"); CURRENT_PTT_KEY = keys; } else { CURRENT_PTT_KEY = [keyCode]; } CURRENT_PTT_KEY = CURRENT_PTT_KEY.sort(); CURRENT_PTT_KEY_STRING = CURRENT_PTT_KEY.join().toLowerCase(); }); ipcMain.on(OVERLAY_KEY, (event, keyCode) => { if (globalShortcut.isRegistered(CURRENT_OVERLAY_KEY)) { globalShortcut.unregister(CURRENT_OVERLAY_KEY); } CURRENT_OVERLAY_KEY = keyCode; globalShortcut.register(keyCode, () => { if (!isMac) { if (bWindows.overlay) { if (!bWindows.overlay.isVisible()) { bWindows.overlay.show(); bWindows.main.webContents.send("@overlay/start_ipc", true); } else { bWindows.overlay.hide(); bWindows.main.webContents.send("@overlay/start_ipc", true); } } else { bWindows.overlay = createOverlay(CURRENT_APP_TITLE, overlayWindow); startOverlayIPCHandler(bWindows.main, bWindows.overlay); } } }) }); ipcMain.on("@overlay/app_title", (event, appTitle: string) => { CURRENT_APP_TITLE = appTitle; }) globalkey.start( down => { down.forEach((key: any) => { let i = down.indexOf(key); down[i] = down[i].replace("L", ""); down[i] = down[i].replace("R", ""); down[i] = down[i].replace("Key", ""); }); down = down.sort() const keyString = down.join().toLowerCase(); let PTT = keyString !== CURRENT_PTT_KEY_STRING; if (PREV_PTT_STATUS !== PTT) { bWindows.main.webContents.send("@voice/ptt_status_change", PTT); PREV_PTT_STATUS = PTT; } }, up => { } ); } export function exitApp() { globalkey.stop(); stopRPC(); app.quit(); } ================================================ FILE: baklava/src/utils/notifications.ts ================================================ import { ipcMain, Notification } from "electron"; export async function StartNotificationHandler() { if (Notification.isSupported()) { ipcMain.on("@notification/mention", (event, msg) => { let body = ""; msg.tokens.forEach((token) => { if (token.t == "mention") { body += "@" + token.v + " " } else { body += token.v + " " } }); let notification = { title: msg.displayName, body, } new Notification(notification).show() }) ipcMain.on("@notification/invitation", (event, invite) => { let notification = { title: "Room Invitation", body: `${invite.username} has invited you to ${invite.roomName}`, } new Notification(notification).show() }) ipcMain.on("@notification/indirect_invitation", (event, invite) => { let notification = { title: "DogeHouse", body: `${invite.username} has just created ${invite.roomName}\nJoin them now!`, } new Notification(notification).show() }) ipcMain.on("@notification/mod", (event, isMod: boolean) => { let notification = { title: "DogeHouse", body: `You are ${isMod ? "now" : "no longer"} a mod`, } new Notification(notification).show() }) } } ================================================ FILE: baklava/src/utils/overlay/index.ts ================================================ import { BrowserWindow } from 'electron'; import * as path from "path"; import { __prod__ } from '../../electron'; export function createOverlay(target: string, OW: any) { const overLay = new BrowserWindow({ width: 400, height: 300, webPreferences: { nodeIntegration: true, }, ...OW.WINDOW_OPTS, }); overLay.loadFile(path.join(__dirname, "../../resources/overlay/build/index.html")); //overLay.loadURL("http://localhost:5000"); OW.attachTo(overLay, target); return overLay; } ================================================ FILE: baklava/src/utils/overlay/ipc.ts ================================================ import { ipcMain, BrowserWindow, } from "electron"; export async function startOverlayIPCHandler(mainWindow: BrowserWindow, overlayWindow: BrowserWindow) { ipcMain.on("@overlay/start_ipc", (event, data) => { if (overlayWindow) { mainWindow.webContents.send("@overlay/start_ipc", true); } }); ipcMain.on("@room/data", (event, data) => { if (overlayWindow) { overlayWindow.webContents.send("@overlay/overlayData", data); } }); } ================================================ FILE: baklava/src/utils/rpc/index.ts ================================================ import { Client, Presence } from "discord-rpc"; import logger from "electron-log"; import { startRPCIPCHandler, stopRPCIPCHandler } from "./ipc"; import dotenv from "dotenv"; // @ts-ignore import { DISCORD_CLIENT_ID } from "../../constants"; dotenv.config(); const clientId = DISCORD_CLIENT_ID || process.env.DISCORD_CLIENT_ID; let client: Client; export let RPC_RUNNING = false; const defaultData: Presence = { largeImageKey: "logo", largeImageText: "DogeHouse", instance: true, }; export async function startRPC() { client = new Client({ transport: "ipc" }); client.login({ clientId }).catch((e) => { logger.error(e); }); client.on("ready", () => { RPC_RUNNING = true; startRPCIPCHandler(); setPresence({ details: "Logging In..." }); }); } export async function setPresence(data: Presence) { if (RPC_RUNNING) { client.setActivity(Object.assign(data, defaultData)); } } // added this for when there will be a electron settings page export async function stopRPC() { stopRPCIPCHandler(); client.destroy(); RPC_RUNNING = false; } ================================================ FILE: baklava/src/utils/rpc/ipc.ts ================================================ import { Presence } from "discord-rpc"; import { ipcMain } from "electron"; import { setPresence } from "./index"; let inRoom = false; let PREV_PAGE_DATA: { page: string; opened: boolean; modal: boolean; data: any; }; const START_TIME = Date.now(); const ROOM_DATA_UPDATE_FUNC = (event, data) => { if (inRoom) { let voiceState = "Muted"; let isMuted = true; let isDeafened = false; let isSpeaker = false; if (data.currentRoom) { // kofta dosent send currentRoom.room if (!data.currentRoom.room) { data.currentRoom.room = data.currentRoom; } let isPrivate = data.currentRoom.room.isPrivate; let meInRoom = data.currentRoom.users.find((u) => u.id == data.me.id); if (meInRoom) { if (meInRoom.roomPermissions) { isSpeaker = meInRoom.roomPermissions.isSpeaker; } else if (data.currentRoom.room.creatorId === data.me.id) { isSpeaker = true; } } if (isSpeaker) { isMuted = data.muted; voiceState = isMuted ? "Muted" : "Unmuted"; } if (data.deafened) { isDeafened = data.deafened; voiceState = isDeafened ? "Deafened" : voiceState; } let pdata: Presence = { state: isPrivate ? "In a private room" : `In ${data.currentRoom.room.name}`, }; if (!isPrivate) { pdata.details = isSpeaker ? `Speaking (${data.currentRoom.users.length} of ထ)` : `Listening (${data.currentRoom.users.length} of ထ)`; pdata.partyId = data.currentRoom.room.id; pdata.startTimestamp = new Date(data.currentRoom.room.inserted_at).getTime(); pdata.smallImageKey = !isDeafened ? isSpeaker && !isMuted ? "mic_on" : "mic_off" : "speaker_off"; pdata.smallImageText = isSpeaker ? `Speaker - ${voiceState}` : isDeafened ? `Listener - ${voiceState}` : `Listener`; pdata.buttons = [ { label: "Join Room", url: `https://dogehouse.tv/room/${data.currentRoom.room.id}`, }, ]; } setPresence(pdata); } } }; const ROOM_JOINED_FUNC = (event, newinRoom) => { inRoom = newinRoom; }; const PAGE_UPDATE_FUNC = ( event, pageData: { page: string; opened: boolean; modal: boolean; data: any } ) => { if (!inRoom) { if (pageData.opened) { if (!pageData.modal) PREV_PAGE_DATA = pageData; let presence: Presence = { partyId: "dogehouse69funnyhaha", startTimestamp: START_TIME, }; switch (pageData.page) { case "home": presence.details = "Browsing Rooms"; presence.state = `${pageData.data} public rooms`; break; case "voice-settings": presence.details = "User Settings"; presence.state = "Editing Voice Settings"; break; case "overlay-settings": presence.details = "User Settings"; presence.state = "Editing Overlay Settings"; break; case "sound-effect-settings": presence.details = "User Settings"; presence.state = "Editing Sound Effect Settings"; break; case "profile": presence.details = "User Profile"; presence.state = `Viewing @${pageData.data}`; break; case "edit-profile": presence.details = "User Settings"; presence.state = "Editing Profile"; break; default: presence.details = "Taking DogeHouse to the moon"; break; } setPresence(presence); } else { if (PREV_PAGE_DATA) { PAGE_UPDATE_FUNC(event, PREV_PAGE_DATA); } else { setPresence({ details: "Taking DogeHouse to the moon" }); } } } }; export async function startRPCIPCHandler() { ipcMain.on("@rpc/page", PAGE_UPDATE_FUNC); ipcMain.on("@room/joined", ROOM_JOINED_FUNC); ipcMain.on("@room/data", ROOM_DATA_UPDATE_FUNC); } export async function stopRPCIPCHandler() { ipcMain.removeListener("@rpc/page", PAGE_UPDATE_FUNC); ipcMain.removeListener("@room/joined", ROOM_JOINED_FUNC); ipcMain.removeListener("@room/data", ROOM_DATA_UPDATE_FUNC); } ================================================ FILE: baklava/src/utils/tray.ts ================================================ import { ipcMain, BrowserWindow, Menu, Tray, app } from "electron"; import { autoUpdater } from "electron-updater"; import { MUTE_KEY } from "../constants"; import { RPC_RUNNING, startRPC, stopRPC } from "./rpc"; let voiceActive = false; export async function HandleVoiceTray(mainWindow: BrowserWindow, tray: Tray) { let TRAY_MENU: any = [ { label: "Quit Dogehouse", click: () => { mainWindow.close(); }, }, { label: 'Toggle Mute', click: () => { mainWindow.webContents.send(MUTE_KEY, "Toggled mute from Menu"); } }, { label: "Check For Updates", click: () => { autoUpdater.checkForUpdatesAndNotify(); }, }, { label: "Toggle Discord RPC", click: () => { if (RPC_RUNNING) { stopRPC(); } else { startRPC() } TRAY_MENU[3].checked = RPC_RUNNING; let contextMenu = Menu.buildFromTemplate([TRAY_MENU[3], TRAY_MENU[2], seperator, TRAY_MENU[0]]); if (voiceActive) { contextMenu = Menu.buildFromTemplate([TRAY_MENU[1], TRAY_MENU[3], TRAY_MENU[2], seperator, TRAY_MENU[0]]); } else { contextMenu = Menu.buildFromTemplate([TRAY_MENU[3], TRAY_MENU[2], seperator, TRAY_MENU[0]]); } tray.setContextMenu(contextMenu); tray.setContextMenu(contextMenu) }, checked: RPC_RUNNING }, ]; let seperator = { type: 'separator' }; // create system tray tray.setToolTip("Taking voice conversations to the moon 🚀"); tray.on("click", () => { mainWindow.focus(); }); let contextMenu = Menu.buildFromTemplate([TRAY_MENU[3], TRAY_MENU[2], seperator, TRAY_MENU[0]]); tray.setContextMenu(contextMenu); ipcMain.on("@room/joined", (event, isActive: boolean) => { voiceActive = isActive if (voiceActive) { contextMenu = Menu.buildFromTemplate([TRAY_MENU[1], TRAY_MENU[3], TRAY_MENU[2], seperator, TRAY_MENU[0]]); } else { contextMenu = Menu.buildFromTemplate([TRAY_MENU[3], TRAY_MENU[2], seperator, TRAY_MENU[0]]); } tray.setContextMenu(contextMenu); }); } ================================================ FILE: baklava/tsconfig.json ================================================ { "compilerOptions": { "outDir": "./dist", "target": "es5", "lib": [ "dom", "dom.iterable", "esnext" ], "allowJs": true, "skipLibCheck": true, "baseUrl": ".", "rootDir": "src", "esModuleInterop": true, "allowSyntheticDefaultImports": true, "strict": true, "forceConsistentCasingInFileNames": true, "module": "commonjs", "moduleResolution": "node", "resolveJsonModule": true, "isolatedModules": true, "jsx": "preserve", "noImplicitAny": false }, "include": [ "src/**/*.ts", "src/utils/overlay/*" ] } ================================================ FILE: commitlint.config.js ================================================ module.exports = { extends: ["@commitlint/config-conventional"], rules: { "scope-enum": [ 2, "always", [ "global", "baklava", "dinner", "kibbeh", "kousa", "pilaf", "shawarma", "kebab", "dolma", "globalkey" ], ], }, }; ================================================ FILE: dinner/.eslintrc.json ================================================ { "env": { "browser": true, "es2021": true, "node": true }, "extends": ["eslint:recommended"], "parser": "@typescript-eslint/parser", "parserOptions": { "ecmaFeatures": { "jsx": true }, "ecmaVersion": 12, "sourceType": "module" }, "plugins": ["@typescript-eslint/eslint-plugin"], "rules": { "no-unused-vars": "off", "no-empty": "off" } } ================================================ FILE: dinner/.gitignore ================================================ node_modules ================================================ FILE: dinner/package.json ================================================ { "name": "dinner", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "start": "ts-node src/create-accounts.ts", "audio": "ts-node src/play-audio.ts", "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "@dogehouse/kebab": "workspace:kebab", "mediasoup-client": "^3.6.30", "mediasoup-client-aiortc": "^3.6.3" }, "devDependencies": { "@types/node": "^14.14.22", "ts-node": "^9.1.1", "typescript": "^4.1.3" } } ================================================ FILE: dinner/src/create-accounts.ts ================================================ import { http, raw, wrap } from "@dogehouse/kebab"; import { Connection } from "@dogehouse/kebab/lib/raw"; const main = async () => { const bot = http.wrap(http.create({ baseUrl: "http://localhost:4001" })); const tokens: Array<{ accessToken: string; refreshToken: string }> = []; for (let i = 0; i < 900; i++) { console.log(i); tokens.push(await bot.testUser("user" + i)); } const conns: Connection[] = []; for (let i = 0; i < tokens.length; i++) { const { accessToken, refreshToken } = tokens[i]; conns.push( await raw.connect(accessToken, refreshToken, { url: "ws://localhost:4001/socket", }) ); } for (const conn of conns) { await wrap(conn).query.joinRoomAndGetInfo(""); } }; main(); ================================================ FILE: dinner/src/play-audio.ts ================================================ import { audioWrap, http, raw, wrap, Wrapper } from "@dogehouse/kebab"; import { connect as mediasoupConnect } from "@dogehouse/kebab/lib/audio/mediasoup-client"; import { Device } from "mediasoup-client"; import { createWorker, Worker } from "mediasoup-client-aiortc"; import path from "path"; async function makeMicTrack( worker: Worker, filepath = `../test-sounds/2sec.mp3` ) { const stream = await worker.getUserMedia({ audio: { source: "file", file: path.join(__dirname, filepath), }, }); const audio = stream.getAudioTracks()[0]; return audio as MediaStreamTrack; } let worker: Worker; let device: Device; export async function startAudio(wrapper: Wrapper) { worker = await createWorker({ logLevel: "warn", }); device = new Device({ handlerFactory: worker.createHandlerFactory() }); wrapAudio(wrapper); } export async function wrapAudio(wrapper: Wrapper) { const audioWrapper = audioWrap(wrapper.connection); console.log("sub"); const unsubYjap = audioWrapper.subscribe.youJoinedAsPeer( async ({ routerRtpCapabilities, recvTransportOptions }) => { unsubYjap(); console.log("Yjap"); await mediasoupConnect( wrapper.connection, routerRtpCapabilities, "output", recvTransportOptions, () => {} )(device); wrapper.connection.send("ask_to_speak", {}); const unsubYbs = audioWrapper.subscribe.youBecameSpeaker( async ({ sendTransportOptions }) => { unsubYbs(); console.log("Ybs"); // OrouterRtpCapabilities = routerRtpCapabilities; // OsendTransportOptions = sendTransportOptions; let track = await makeMicTrack(worker, "../test-sounds/me.mp3"); await mediasoupConnect( wrapper.connection, routerRtpCapabilities, "input", sendTransportOptions, track )(device); } ); } ); } const test = async () => { const bot = http.wrap(http.create({ baseUrl: "http://localhost:4001" })); const { accessToken, refreshToken } = await bot.testUser("user1"); const conn = await raw.connect(accessToken, refreshToken, { url: "http://localhost:4001/socket", logger: (direction, opcode) => { if (opcode !== "ping") { console.log(direction, opcode); } }, }); const wrapper = wrap(conn); await startAudio(wrapper); await wrapper.query.joinRoomAndGetInfo( "d34c120e-3b76-49d7-b4a9-50be27f9e9af" ); }; test(); ================================================ FILE: dinner/tsconfig.json ================================================ { "compilerOptions": { "target": "es6", "module": "commonjs", "lib": [ "dom", "es6", "es2017", "esnext.asynciterable" ], "sourceMap": true, "outDir": "./dist", "moduleResolution": "node", "removeComments": true, "noImplicitAny": true, "strictNullChecks": true, "strictFunctionTypes": true, "noImplicitThis": true, "noUnusedLocals": true, "noUnusedParameters": true, "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, "allowSyntheticDefaultImports": true, "esModuleInterop": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, "resolveJsonModule": true, "baseUrl": "." }, "exclude": [ "node_modules" ], "include": [ "./src/**/*.tsx", "./src/**/*.ts" ] } ================================================ FILE: docker-compose.local.yml ================================================ version: "3" # service_name: # build: # context: . # dockerfile: path/to/Dockerfile # services: # voice server shawarma: build: ./shawarma environment: - WEBRTC_LISTEN_IP=127.0.0.1 - RABBITMQ_URL=amqp://guest:guest@rabbitmq:5672 kofta: build: ./kofta # # uncomment if you want your changes to kofta code to hot reload. you'll need to npm install. # volumes: # - './kofta:/usr/src/frontend' labels: tv.dogehouse.description: "Frontend Service" environment: - REACT_APP_API_BASE_URL=http://localhost:4001 ports: - 3000:3000 # backend kousa: build: ./kousa environment: - DATABASE_URL=postgresql://postgres:postgres@postgres/postgres - BEN_GITHUB_ID=benawad - RABBITMQ_URL=amqp://guest:guest@rabbitmq:5672 - GITHUB_CLIENT_ID=5d5xxxxxxab70 - GITHUB_CLIENT_SECRET=48xxxxxxxxxxxxd1cd5 - TWITTER_SECRET_KEY=testtwittersecret - TWITER_BEARER_TOKEN=testtwitterbearer - TWITTER_API_KEY=testtwitterkey - ACCESS_TOKEN_SECRET=8f51exxxxxx7211dd - SENTRY_DSN=SIJHFIUSDHIF - SECRET_KEY_BASE=TESTING - REFRESH_TOKEN_SECRET=dbb85xxxxxx9ebde - WEB_URL=http://localhost:3000 - API_URL=http://localhost:4001 - PORT=4001 ports: - 4001:4001 postgres: environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres - POSTGRE_DB=postgres rabbitmq: environment: RABBITMQ_ERLANG_COOKIE: erlang_dev_only_cookie RABBITMQ_DEFAULT_USER: guest RABBITMQ_DEFAULT_PASS: guest adminer: ================================================ FILE: docker-compose.prod.yml ================================================ version: "3" # service_name: # build: # context: . # dockerfile: path/to/Dockerfile # # kofta is not here cause it's manually deployed. services: shawarma: image: dogehouse/shawarma env_file: - shawarma.env kousa: image: dogehouse/kousa env_file: - kousa.env postgres: env_file: - pg.env rabbitmq: env_file: - rabbit.env adminer: ================================================ FILE: docker-compose.yml ================================================ version: "3" # service_name: # build: # context: . # dockerfile: path/to/Dockerfile # restart: unless-stopped # labels: # tv.dogehouse.description: "Service Description" # depends_on: # - deps # # We will be making use of docker-compose overloads, so be sure to check the other compose files before reporting a missing field # On local the containers will be built locally and tagged, able to be published. # On prod the compose file will pull from the docker registry services: rabbitmq: image: rabbitmq:3-management-alpine restart: unless-stopped labels: tv.dogehouse.description: "RabbitMQ broker" volumes: - ./.docker/rabbitmq/data/:/var/lib/rabbitmq/ - ./.docker/rabbitmq/logs/:/var/log/rabbitmq/ ports: - 5672:5672 - 15672:15672 healthcheck: test: ['CMD', 'rabbitmq-diagnostics', '-q', 'ping'] interval: 60s timeout: 5s shawarma: restart: unless-stopped labels: tv.dogehouse.description: "Voice Server Service" depends_on: - kousa kousa: restart: unless-stopped labels: tv.dogehouse.description: "Backend Service" depends_on: - postgres - rabbitmq postgres: image: postgres:13-alpine restart: unless-stopped labels: tv.dogehouse.description: "Postgres Database" volumes: - ./.docker/postgres:/var/lib/postgresql/data ports: - 5432:5432 adminer: image: adminer restart: unless-stopped ports: - 8080:8080 labels: tv.dogehouse.description: "Adminer Database" depends_on: - postgres ================================================ FILE: docs/Architecture/README.md ================================================ # Architecture Of DogeHouse! # How does DogeHouse dish out communications? Voice communications are routed directly to the node [voice server](https://github.com/benawad/dogehouse/tree/staging/shawarma) through the usage of [WebRTC](https://webrtc.org/) once the elixir API gathers credentials for connection to the node voice server through [RabbitMQ](https://www.rabbitmq.com/)! # How is data fetched? All of data is fetched from the Client([React Front-end](https://github.com/benawad/dogehouse/tree/staging/kofta)) to the server([Elixir Api](https://github.com/benawad/dogehouse/tree/staging/kousa)) directly through a websocket connection! # How is data stored? All data is stored using Postgresql that is directly managed using the [Elixir Api](https://github.com/benawad/dogehouse/tree/staging/kousa)! ================================================ FILE: docs/Directory/README.md ================================================ # DogeHouse Code Directory 1.Kofta(React Front End) - Components - [AlertModal](https://github.com/benawad/dogehouse/blob/staging/kofta/src/vscode-webview/components/AlertModal.tsx) - [Backbar](https://github.com/benawad/dogehouse/blob/staging/kofta/src/vscode-webview/components/Backbar.tsx) - [Blocked Users List](https://github.com/benawad/dogehouse/blob/staging/kofta/src/vscode-webview/components/BlockedFromRoomUsers.tsx) - [Bottom Room Controls](https://github.com/benawad/dogehouse/blob/staging/kofta/src/vscode-webview/components/BottomVoiceControl.tsx) - [Check Box](https://github.com/benawad/dogehouse/blob/staging/kofta/src/vscode-webview/components/Checkbox.tsx) - [Circle Button](https://github.com/benawad/dogehouse/blob/staging/kofta/src/vscode-webview/components/CircleButton.tsx) - [Button](https://github.com/benawad/dogehouse/blob/staging/kofta/src/vscode-webview/components/Button.tsx) - [Center Layout](https://github.com/benawad/dogehouse/blob/staging/kofta/src/vscode-webview/components/CenterLayout.tsx) - [Confirm Modal](https://github.com/benawad/dogehouse/blob/staging/kofta/src/vscode-webview/components/ConfirmModal.tsx) - [Create Room Modal](https://github.com/benawad/dogehouse/blob/staging/kofta/src/vscode-webview/components/CreateRoomModal.tsx) - [Create Profile Modal](https://github.com/benawad/dogehouse/blob/staging/kofta/src/vscode-webview/components/EditProfileModal.tsx) - [Footer](https://github.com/benawad/dogehouse/blob/staging/kofta/src/vscode-webview/components/Footer.tsx) - [Input](https://github.com/benawad/dogehouse/blob/staging/kofta/src/vscode-webview/components/Input.tsx) - [Input error message](https://github.com/benawad/dogehouse/blob/staging/kofta/src/vscode-webview/components/InputErrorMsg.tsx) - [Invite Button](https://github.com/benawad/dogehouse/blob/staging/kofta/src/vscode-webview/components/InviteButton.tsx) - [Invited To Join Room Modal](https://github.com/benawad/dogehouse/blob/staging/kofta/src/vscode-webview/components/InvitedToJoinRoomModal.tsx) - [Keybind Listener](https://github.com/benawad/dogehouse/blob/staging/kofta/src/vscode-webview/components/KeybindListener.tsx) - [List Item](https://github.com/benawad/dogehouse/blob/staging/kofta/src/vscode-webview/components/ListItem.tsx) - [Loading](https://github.com/benawad/dogehouse/blob/staging/kofta/src/vscode-webview/components/Loading.tsx) - [Mic Permission Banner](https://github.com/benawad/dogehouse/blob/staging/kofta/src/vscode-webview/components/MicPermissionBanner.tsx) - [Modal](https://github.com/benawad/dogehouse/blob/staging/kofta/src/vscode-webview/components/Modal.tsx) - [Mute Title Updater](https://github.com/benawad/dogehouse/blob/staging/kofta/src/vscode-webview/components/MuteTitleUpdater.tsx) - [Profile Button](https://github.com/benawad/dogehouse/blob/staging/kofta/src/vscode-webview/components/ProfileButton.tsx) - [Profile Modal](https://github.com/benawad/dogehouse/blob/staging/kofta/src/vscode-webview/components/ProfileModal.tsx) - ================================================ FILE: docs/Elixir Api/README.MD ================================================ # Authentication Tokens: - Refresh token -> lasts 30 days - Access token -> 1 hour Websocket connection: - On initial connection if the client doesn't send an `auth` event with their refresh & access token within 8 seconds the connection will be closed by the server - If access token is valid, the user id is extracted from the payload and the user is authenticated - If the access token is invalid, the server will try to refresh both tokens Refreshing tokens: - A refresh token is invalid if - it is malformed - it has expired - the token version in the payload is different then what's in the db for that user - If the refresh token is invalid, they are not authenticated and will need to log in again - If the refresh token is valid they are considered authenticated and a new refresh & access token is created/sent back to the client with the `new_tokens` event Invalidating tokens: - You can invalidate all refresh tokens for a user by incrementing the token version in the db ================================================ FILE: docs/README.MD ================================================ ## Home

Taking voice conversations to the moon 🚀

## Welcome Welcome to the DogeHouse Documentation, the next voice conversation social platform. DogeHouse makes it easy to connect with friends and people over voice and chat message. ### Overview - Dark Theme - Open Sign-Ups (Twitter, GitHub, and Discord) - Cross-Platform Support - Open Source - Text Chat - Powered by Doge ### Basic Features - Create account (Twitter, GitHub, and Discord for now) - Create rooms and invite friends (Public/Private) - When you create a room, you are automatically a mod and have a doge with glasses. - You can also make people in room mod by clicking on their profile. - You can edit room name, edit room description and change room visibility by clicking on the room name. - Schedule Room to take place at a future date - Add scheduled rooms to calender - Apple's Calendar - Google Calendar - Outlook - Outlook Web App - Yahoo! Calendar - Join room, leave room, chat in room (chat now has emojis😋), mute/unmute, deafen room, and invite - Mention someone in the chat with an @ (e.g. `@username`) - Whisper to someone in the room by using `#@username` - Write codeblocks using \`backticks\` - Delete message. You can only delete messages if: - You wrote it - You are a mod - Adjust volume of a speaker by clicking on their profile - 60+ Translations - Desktop App has Global Keybinds & Desktop Notifications - Custom Emojis - 🐕 ### Why DogeHouse? For more please watch here: https://www.youtube.com/watch?v=hy-EhJ_tTQo ================================================ FILE: docs/React Front End/README.MD ================================================ ================================================ FILE: docs/Voice Server/README.MD ================================================ ================================================ FILE: dolma/.editorconfig ================================================ # top-most EditorConfig file root = true # Unix-style newlines with a newline ending every file [*] charset = utf-8 end_of_line = lf insert_final_newline = true indent_style = space indent_size = 2 trim_trailing_whitespace = true ================================================ FILE: dolma/.gitignore ================================================ # Logs logs *.log npm-debug.log* yarn-debug.log* yarn-error.log* lerna-debug.log* # Diagnostic reports (https://nodejs.org/api/report.html) report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json # Runtime data pids *.pid *.seed *.pid.lock # Directory for instrumented libs generated by jscoverage/JSCover lib-cov # Coverage directory used by tools like istanbul coverage *.lcov # nyc test coverage .nyc_output # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) .grunt # Bower dependency directory (https://bower.io/) bower_components # node-waf configuration .lock-wscript # Compiled binary addons (https://nodejs.org/api/addons.html) build/Release # Dependency directories node_modules/ jspm_packages/ # TypeScript v1 declaration files typings/ # TypeScript cache *.tsbuildinfo # Optional npm cache directory .npm # Optional eslint cache .eslintcache # Microbundle cache .rpt2_cache/ .rts2_cache_cjs/ .rts2_cache_es/ .rts2_cache_umd/ # Optional REPL history .node_repl_history # Output of 'npm pack' *.tgz # Yarn Integrity file .yarn-integrity # dotenv environment variables file .env .env.test # parcel-bundler cache (https://parceljs.org/) .cache # Next.js build output .next # Nuxt.js build / generate output .nuxt dist # Gatsby files .cache/ # Comment in the public line in if your project uses Gatsby and *not* Next.js # https://nextjs.org/blog/next-9-1#public-directory-support # public # vuepress build output .vuepress/dist # Serverless directories .serverless/ # FuseBox cache .fusebox/ # DynamoDB Local files .dynamodb/ # TernJS port file .tern-port .package-lock.json wip.ts .package-lock.json /lib ================================================ FILE: dolma/LICENSE ================================================ MIT License Copyright (c) 2021 HoloPanio Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: dolma/README.md ================================================

Dolma Token Transcoder

This is a token transcoder that is used to encode and decode DogeHouse chat message token arrays. This package is written for bot/bot library developers to be able to easily transcode dogehouse chat message tokens. ## How to install To install this, simply go to your project and run the following command: ```cmd yarn add dolma ``` ## How to use This will show you how to encode and decode tokens ### Encoding Tokens In this example, you will see multiple ways to encode your tokens. The first one is in plain text. You can pass any string into the encoder and it will convert it into an array of Message Tokens. ```ts import { dolma } from "dolma"; const str = "I'm @HoloPanio, and I'd like to goto `Paris, France` one day :catJAM: Also, https://dogehouse.tv is epic!"; const tokens = dolma.encode(str); console.log(tokens); /** Returns: [ { t: 'text', v: "I'm" }, { t: 'mention', v: 'HoloPanio' }, { t: 'text', v: ',' }, { t: 'text', v: 'and' }, { t: 'text', v: "I'd" }, { t: 'text', v: 'like' }, { t: 'text', v: 'to' }, { t: 'text', v: 'goto' }, { t: 'block', v: 'Paris, France' }, { t: 'text', v: 'one' }, { t: 'text', v: 'day' }, { t: 'emote', v: 'catJAM' }, { t: 'text', v: 'Also,' }, { t: 'link', v: 'https://dogehouse.tv' }, { t: 'text', v: 'is' }, { t: 'text', v: 'epic!' } ] */ ``` In this example, you will see that you can have a mixed array with strings, and unitokens! A unitoken is a token object where you define your object key as the token type, and the value as the value of the token, doing so would look like such: `{link: "https://google.com"}`, and this can be done for all token types. ```ts import { dolma } from 'dolma'; const arr = ["I'm", {mention: "HoloPanio"},", and I'd like to goto", {block: "Paris, France"},"one day", {emote: "catJAM"}, "Also",{link: 'https://dogehouse.tv'}, "is epic!"]; const tokens = dolma.encode(arr); console.log(tokens); /** Returns: [ { t: 'text', v: "I'm" }, { t: 'mention', v: 'HoloPanio' }, { t: 'text', v: ',' }, { t: 'text', v: 'and' }, { t: 'text', v: "I'd" }, { t: 'text', v: 'like' }, { t: 'text', v: 'to' }, { t: 'text', v: 'goto' }, { t: 'block', v: 'Paris, France' }, { t: 'text', v: 'one' }, { t: 'text', v: 'day' }, { t: 'emote', v: 'catJAM' }, { t: 'text', v: 'Also,' }, { t: 'link', v: 'https://dogehouse.tv' }, { t: 'text', v: 'is' }, { t: 'text', v: 'epic!' } ] */ ``` You can also pass in message tokens like `{t: 'link', v: 'https://dogehouse.tv'}`, and it will work because the encoder checks for all possible methods that can be used. ### Decoding Tokens When you get a payload from DogeHouse, you can use the decode method which will take the tokens, and turn it into a raw text string when you can use anywhere you please. The decode method will always encode the data sent to it to ensure that the data is parsed correctly, so that means you can also pass in un-encoded data, such as the array in the previous example, and will print out a plain text string. In this example, we will take the array from above, and return it to a plain text string using the decode method. ```ts import { dolma } from "dolma"; const tokens = [ { t: 'text', v: "I'm" }, { t: 'mention', v: 'HoloPanio' }, { t: 'text', v: ',' }, { t: 'text', v: 'and' }, { t: 'text', v: "I'd" }, { t: 'text', v: 'like' }, { t: 'text', v: 'to' }, { t: 'text', v: 'goto' }, { t: 'block', v: 'Paris, France' }, { t: 'text', v: 'one' }, { t: 'text', v: 'day' }, { t: 'emote', v: 'catJAM' }, { t: 'text', v: 'Also,' }, { t: 'link', v: 'https://dogehouse.tv' }, { t: 'text', v: 'is' }, { t: 'text', v: 'epic!' } ]; const message = dolma.decode(tokens); console.log(message); /** Returns: I'm @HoloPanio , and I'd like to goto `Paris, France` one day :catJAM: Also, https://google.com is epic! */ ``` ================================================ FILE: dolma/package.json ================================================ { "name": "@dogehouse/dolma", "author": "Jackson Roberts ", "description": "A chat token transcoder for DogeHouse and associated projects.", "version": "1.2.1", "license": "MIT", "main": "lib/index.js", "scripts": { "test": "tsc && node lib/test/run.js && tsc -b . --clean", "clean": "tsc -b . --clean", "build": "tsc" }, "repository": { "type": "git", "url": "git+https://github.com/HoloPanio/dolma.git" }, "keywords": [ "@dogehouse/dolma", "dogehouse", "doghouse-tokens" ], "bugs": { "url": "https://github.com/HoloPanio/dolma/issues" }, "homepage": "https://github.com/HoloPanio/dolma#readme", "dependencies": { "@types/node": "^15.0.2", "emoji-regex": "^9.2.2" }, "devDependencies": { "typescript": "^4.2.4" } } ================================================ FILE: dolma/src/index.ts ================================================ import { decodeTokens } from "./lib/decode"; import { encodeTokens } from "./lib/encode"; import { Unitoken } from "./tokens"; import { MessageToken } from "./util/types/tokenTypes"; interface RootMethodResponse { encoded: MessageToken[], decoded: string } export * from './util/types/tokenTypes'; // export default function dolma(values?: Array | string): RootMethodResponse { // return { // encoded: encodeTokens(values ?? ""), // decoded: decodeTokens(values ?? "") // } // } // dolma['encode'] = encodeTokens; // dolma['decode'] = decodeTokens; export default class dolma { public readonly emotes: {name: string}[]; constructor(emotes: {name: string}[]) { this.emotes = emotes; } public decode = decodeTokens; public encode = encodeTokens; } ================================================ FILE: dolma/src/lib/decode.ts ================================================ import dolma from "../index"; import { Unitoken } from "../tokens"; import { MessageToken } from "../util/types/tokenTypes"; import { encodeTokens } from "./encode"; export function decodeTokens(this: {emotes: {name: string}[]}, all: Array | string): string { const tokens = new dolma(this.emotes).encode(all); let vals: string[] = []; tokens.tokens.map(tkn => { if (tkn.t == 'text') return vals.push(tkn.v); if (tkn.t == 'block') return vals.push(`\`${tkn.v}\``); if (tkn.t == 'emote') return vals.push(`:${tkn.v}:`); if (tkn.t == 'mention') return vals.push(`@${tkn.v}`); if (tkn.t == 'link') return vals.push(tkn.v); }); let ret: string[] = []; const len = vals.length vals.forEach((val, index) => { const strayValues = [",", "."] if (strayValues.includes(val)) { ret[ret.length-1] += val; } else { ret.push(val); } }); return ret.join(' '); } ================================================ FILE: dolma/src/lib/encode.ts ================================================ import { Unitoken } from "../tokens"; import { MessageToken } from "../util/types/tokenTypes"; import { decodeTokens } from "./decode"; import { filterString } from "./filterString"; import { filterUnitoken } from "./filterUnitoken"; export function encodeTokens(this: {emotes: {name: string}[]},message: Array | string) { const tokens: MessageToken[] = []; if (!message) return {tokens: tokens, whisperedTo: []}; if (typeof message == 'string') { console.log(this.emotes); return filterString(this.emotes, message) } // if (typeof message == 'object') { // message.forEach((item: any, index) => { // const unitoken = filterUnitoken(item); // const isToken = Object.keys(item).includes('t') && Object.keys(item).includes('v'); // if (typeof item == 'string') return filterString(item).map(tk => tokens.push(tk)); // if (unitoken !== null) return tokens.push(unitoken); // if (isToken) return tokens.push(item); // return; // }) // } return {tokens: tokens, whisperedTo: []}; } ================================================ FILE: dolma/src/lib/filterString.ts ================================================ import { validationRegex } from "../util/regex"; import { MessageToken, MessageTokenType } from "../util/types/tokenTypes"; import { msgToken } from "./msgToken"; export function filterString(emotes: { name: string }[], message: string) { const tokens: MessageToken[] = []; const vals = message .split(validationRegex.global) .filter((e) => e != undefined && e != "") .map((e) => e); const whispers = message.split(/^\#\@([A-z0-9_]{4,})/gi)[1]; vals.map((e) => { let tkn = msgToken.getType(e); tokenSwitch: switch (tkn) { case "emote": for(const emote of emotes) { if(e.trim().toLowerCase() === `:${emote.name}:`) { e = emote.name; break tokenSwitch; } } tkn = "text"; break; case "block": e = e.slice(1, -1); break; case "mention": e = e.substr(1); break; } const value = msgToken.getValue(tkn, e); return tokens.push(msgToken.newToken(tkn, value)); }); return { tokens, whisperedTo: whispers ? [whispers] : [] }; } ================================================ FILE: dolma/src/lib/filterUnitoken.ts ================================================ import { MessageToken, MessageTokenType } from "../util/types/tokenTypes"; import { msgToken } from "./msgToken"; const newToken = msgToken.newToken; export function filterUnitoken(token: any): MessageToken | null { const keys = Object.keys(token); const tkn = msgToken.getUnitoken(token); if (keys.length > 1) return null; if (tkn == null) return null; return newToken(tkn, token[tkn]); } ================================================ FILE: dolma/src/lib/msgToken.ts ================================================ import { validationRegex } from "../util/regex"; import { MessageToken, MessageTokenType } from "../util/types/tokenTypes"; import * as rawTokens from '../tokens'; //@ts-ignore const tokenTypes: MessageTokenType[] = Object.keys(rawTokens.default); export function msgToken() { } msgToken.tokens = rawTokens.default; msgToken.types = tokenTypes; msgToken.getUnitoken = (token: rawTokens.Unitoken): MessageTokenType | null => { const utKeys = Object.keys(token); let tkn: MessageTokenType = 'text'; tokenTypes.map(tt => { if (tt == utKeys[0]) tkn = tt }); return tkn; } msgToken.get = (tokenType: MessageTokenType) => { const tkn = rawTokens.default[tokenType]; return tkn; } msgToken.getType = (raw: string): MessageTokenType => { let type: MessageTokenType = 'text'; tokenTypes.forEach(tt => { if (msgToken.validate(tt, raw)) { type = tt; } }); return type; } msgToken.getValue = (tkn: MessageTokenType, raw: string): string => { const regex = msgToken.get(tkn).regex; if (!regex) return raw; else return raw; } msgToken.newToken = (tk: MessageTokenType, value: string) => { const genToken = (t: MessageTokenType, v: string) => { return { t, v } } let val = msgToken.get(tk).format(value); return genToken(tk, val); } msgToken.validate = (token: MessageTokenType, str: string): string | false => { const tkn = msgToken.get(token); if (!tkn.regex) return str; if (str.match(tkn.regex)) return str.replace(tkn.regex, '$1'); else return false; } ================================================ FILE: dolma/src/test/run.ts ================================================ import * as encodingTests from './tests/encoding'; import dolma from '../'; interface CompletedTest { started: Date, finished: Date, type: string, passed?: boolean } const neutralPrefix = "\u001b[36m[ DOLMA ]\u001b[0m"; const successPrefix = "\u001b[32m[ SUCCESS ]\u001b[0m"; const failurePrefix = "\u001b[31m[ FAILURE ]\u001b[0m" const testName = (name: string) => { return `\u001b[37;1m(${name})\u001b[0m` } let failedTests: CompletedTest[] = []; let successfulTests: CompletedTest[] = []; let tests = { encoding: encodingTests.default } function testFinished(test: any, started: Date, successful?: boolean) { const finished = new Date(); if (successful) { successfulTests.push({ started, finished, type: test.type, passed: true }); const time = ((finished.getTime() - started.getTime()) / 1000) % 60; console.log(successPrefix, testName(test.name), "Test passed in", `${time}s!`); } else { failedTests.push({ started, finished, type: test.type, passed: false }); const time = ((finished.getTime() - started.getTime()) / 1000) % 60; console.log(failurePrefix, testName(test.name), "Test failed in", `${time}s!`); } } async function main() { console.log(neutralPrefix, "Running tests on dolma...\n"); tests.encoding.map(async test => { const started = new Date(); const encodedValue = new dolma([]).encode(test.input); if (JSON.stringify(encodedValue) == JSON.stringify(test.expectedOutput)) testFinished(test, started, true); else testFinished(test, started, false); }); console.log(`\n${neutralPrefix} Testing completed! \u001b[37;1m(${successfulTests.length} passed) (${failedTests.length} failed)`) } main(); ================================================ FILE: dolma/src/test/tests/encoding.ts ================================================ export default [ { name: "Single string type test 1 (text)", type: "encode", input: "Ben Awad", expectedOutput: [{ t: 'text', v: 'Ben Awad' }] }, { name: "Single string type test 2 (link)", type: "encode", input: "https://dogehouse.tv", expectedOutput: [{ t: 'link', v: 'https://dogehouse.tv' }] }, { name: "Single string type test 3 (mention)", type: "encode", input: "@benawad", expectedOutput: [{ t: 'mention', v: 'benawad' }] }, { name: "Single string type test 4 (block)", type: "encode", input: "`Angular.JS is horrible`", expectedOutput: [{ t: 'block', v: 'Angular.JS is horrible' }] }, { name: "Single string type test 5 (emote)", type: "encode", input: ":CryptoDOGE:", expectedOutput: [{ t: 'emote', v: 'CryptoDOGE' }] }, { name: "Plain text encoding test 1", type: "encode", input: "This is a test to make sure that plain text tokens still work, also, https://dogehouse.tv is pretty great!", expectedOutput: [ { t: 'text', v: 'This is a test to make sure that plain text tokens still work, also,' }, { t: 'link', v: 'https://dogehouse.tv' }, { t: 'text', v: 'is pretty great!' } ] }, { name: "Plain text encoding test 2", type: "encode", input: "I think Ben Awad being on simptok is super funny, but I think he would do better being a simp on dogehouse :reddogehouse:, but https://github.com/ is epic!", expectedOutput: [ { t: 'text', v: 'I think Ben Awad being on simptok is super funny, but I think he would do better being a simp on dogehouse' }, { t: 'emote', v: 'reddogehouse' }, { t: 'text', v: ', but' }, { t: 'link', v: 'https://github.com/' }, { t: 'text', v: 'is epic!' } ] }, { name: "Mixed unitoken and strings encoding test 1", type: "encode", input: ["Dogecoin to the moon!!!", { emote: "CryptoDOGE" }], expectedOutput: [ { t: 'text', v: 'Dogecoin to the moon!!!' }, { t: 'emote', v: 'CryptoDOGE' } ] } ]; ================================================ FILE: dolma/src/tokens/index.ts ================================================ import * as text from './types/text'; import * as block from './types/block'; import * as mention from './types/mention'; import * as emote from './types/emote'; import * as link from './types/link'; import * as emoji from './types/emoji'; export interface Unitoken { text?: string block?: string mention?: string, emote?: string, link?: string, } export default { text: text.default, block: block.default, mention: mention.default, emote: emote.default, emoji: emoji.default, link: link.default }; ================================================ FILE: dolma/src/tokens/types/block.ts ================================================ import { Token } from "../../util/types/tokenTypes"; export default { name: "block", regex: /\`(.*?)\`/gi, format: (val) => val, validate: (raw, val) => true } as Token; ================================================ FILE: dolma/src/tokens/types/emoji.ts ================================================ import { Token } from "../../util/types/tokenTypes"; import emojiRegex from "emoji-regex" export default { name: "emoji", regex: emojiRegex(), format: (val) => val, validate: (raw, val) => true } as Token; ================================================ FILE: dolma/src/tokens/types/emote.ts ================================================ import { Token } from "../../util/types/tokenTypes"; export default { name: "emote", regex: /\:([a-z0-9]+)\:/gi, format: (val) => val, validate: (raw, val) => true } as Token; ================================================ FILE: dolma/src/tokens/types/link.ts ================================================ import { Token } from "../../util/types/tokenTypes"; export default { name: "link", regex: /(https?\:\/\/[^ ]+)/gi, format: (val) => val, validate: (raw, val) => true } as Token; ================================================ FILE: dolma/src/tokens/types/mention.ts ================================================ import { Token } from "../../util/types/tokenTypes"; export default { name: "mention", regex: /\@([a-zA-Z0-9_]{4,})/gi, format: (val) => val, validate: (raw, val) => true } as Token; ================================================ FILE: dolma/src/tokens/types/text.ts ================================================ import { Token } from "../../util/types/tokenTypes"; export default { name: "text", format: (val) => val, validate: (raw, val) => true } as Token; ================================================ FILE: dolma/src/util/regex.ts ================================================ export const validationRegex = { link: /(https?\:\/\/[^ ]+)/gi, mention: /\@([a-zA-Z0-9_]{4,})/gi, emote: /\:([a-z0-9]+)\:/gi, block: /\`(.*?)\`/gi, global: /(\`.*?\`)|(\@[a-zA-Z0-9_]{4,})|(\:[a-z0-9]+\:)|(https?\:\/\/[^ ]+)/gi, unicodeEmoji: /(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff])/gm } ================================================ FILE: dolma/src/util/types/tokenTypes.ts ================================================ import * as rawTokens from '../../tokens'; export type MessageTokenType = keyof typeof rawTokens.default; export interface MessageToken { t: MessageTokenType | string; v: string; } export interface Token { name: string, regex: RegExp, format: (value: string) => string; validate: (raw: string, value?: string) => boolean; } ================================================ FILE: dolma/tsconfig.json ================================================ { "compilerOptions": { "outDir": "./lib", "target": "es5", "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, "baseUrl": ".", "rootDir": "src", "esModuleInterop": true, "allowSyntheticDefaultImports": true, "strict": true, "forceConsistentCasingInFileNames": true, "module": "commonjs", "moduleResolution": "node", "resolveJsonModule": true, "isolatedModules": true, "declaration": true, "noImplicitAny": false }, "include": ["src/**/*.ts"] } ================================================ FILE: globalkey/.gitignore ================================================ /target Cargo.lock /.idea /dist ================================================ FILE: globalkey/Cargo.toml ================================================ [package] name = "globalkey" description = "A rust node library for global key listeners in electron apps" version = "0.1.0" edition = "2018" license = "MIT" build = "src/build.rs" authors = ["Will Lane "] [lib] crate-type = ["cdylib"] [dependencies] device_query = "0.2.8" lazy_static = "1.4.0" node-bindgen = "4.3.0" stoppable_thread = "0.2.1" [build-dependencies] node-bindgen = { version = "4.3.0", features = ["build"] } ================================================ FILE: globalkey/README.md ================================================ [![npm](https://img.shields.io/npm/v/globalkey)](https://www.npmjs.com/package/globalkey) ![downloads](https://img.shields.io/npm/dm/globalkey) # GlobalKey ## Building ```shell cargo install nj-cli nj-cli build --release ``` ## Calling from node ```shell npm i globalkey # or yarn add globalkey ``` ```node const globalkey = require('globalkey'); globalkey .start(x => console.log(`Keydown ${x}`), y => console.log(`Keyup ${y}`)); setTimeout(() => globalkey.stop(), 5000) ``` ================================================ FILE: globalkey/index.d.ts ================================================ declare module "globalkey" { export function start(keydown_callback: (keys: string[]) => void, keyup_callback: (keys: string[]) => void): void; export function stop(): void; } ================================================ FILE: globalkey/package.json ================================================ { "name": "@dogehouse/globalkey", "version": "1.0.7", "main": "dist/index.node", "types": "index.d.ts", "repository": "https://github.com/willdoescode/globalkey.git", "author": "Will Lane ", "license": "MIT" } ================================================ FILE: globalkey/src/build.rs ================================================ fn main() { node_bindgen::build::configure(); } ================================================ FILE: globalkey/src/lib.rs ================================================ use device_query::{DeviceQuery, DeviceState}; use node_bindgen::derive::node_bindgen; use std::sync::Mutex; #[macro_use] extern crate lazy_static; lazy_static! { static ref STOP: Mutex>> = Mutex::new(None); } #[node_bindgen(mt)] fn start) + Send + 'static, X: Fn(Vec) + Send + 'static>( keydown_callback: F, keyup_callback: X, ) { *STOP.lock().unwrap() = Some(stoppable_thread::spawn(move |stop| { let state = DeviceState::new(); let mut previous_keys = Vec::new(); while !stop.get() { std::thread::sleep(std::time::Duration::new(0, 1000)); let keys = state.get_keys(); let state = keys != previous_keys; if !keys.is_empty() && state { keydown_callback(keys.clone().iter().map(|key| key.to_string()).collect()); } if !previous_keys.is_empty() && state { keyup_callback( previous_keys .clone() .iter() .filter(|x| !keys.contains(x)) .map(|x| x.to_string()) .collect(), ); } previous_keys = keys; } })); } #[node_bindgen] fn stop() { STOP.lock().unwrap().take().unwrap().stop().join(); } ================================================ FILE: globalkey/test.js ================================================ const globalkey = require('./dist'); globalkey .start(x => console.log(`Keydown ${x}`), y => console.log(`Keyup ${y}`)); setTimeout(() => globalkey.stop(), 5000) ================================================ FILE: kebab/.eslintrc.json ================================================ { "env": { "browser": true, "es2021": true, "node": true }, "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended"], "parser": "@typescript-eslint/parser", "parserOptions": { "ecmaFeatures": { "jsx": true }, "ecmaVersion": 12, "sourceType": "module" }, "plugins": ["@typescript-eslint/eslint-plugin"], "rules": { "@typescript-eslint/no-empty-interface": "off", "@typescript-eslint/explicit-module-boundary-types": "off", "@typescript-eslint/member-delimiter-style": "off", "no-empty": "off", "no-empty-pattern": "off", "react/prop-types": "off", "accessor-pairs": "error", "array-bracket-newline": "error", "array-bracket-spacing": "error", "array-callback-return": "error", "array-element-newline": ["error", "consistent"], "arrow-body-style": "off", "arrow-parens": "off", "arrow-spacing": "error", "block-scoped-var": "error", "block-spacing": "error", "brace-style": "error", "camelcase": "off", "comma-dangle": "off", "comma-spacing": "error", "comma-style": "error", "complexity": "error", "computed-property-spacing": "error", "consistent-this": "error", "default-case-last": "error", "default-param-last": "error", "dot-location": ["error", "property"], "dot-notation": "error", "eol-last": "error", "eqeqeq": "error", "func-call-spacing": "error", "func-name-matching": "error", "func-names": "error", "func-style": [ "error", "declaration", { "allowArrowFunctions": true } ], "function-call-argument-newline": ["error", "consistent"], "function-paren-newline": "off", "generator-star-spacing": "error", "global-require": "error", "grouped-accessor-pairs": "error", "guard-for-in": "error", "handle-callback-err": "error", "id-blacklist": "error", "id-denylist": "error", "id-match": "error", "indent": [ "error", 2, { "offsetTernaryExpressions": true, "SwitchCase": 1 } ], "init-declarations": "error", "jsx-quotes": "error", "key-spacing": ["error"], "keyword-spacing": "off", "line-comment-position": "error", "linebreak-style": "error", "lines-around-comment": "error", "lines-around-directive": "error", "lines-between-class-members": "error", "max-classes-per-file": "error", "max-depth": "error", "max-len": "off", "max-lines": "off", "max-lines-per-function": "off", "max-nested-callbacks": "error", "max-statements": "off", "max-statements-per-line": "error", "multiline-comment-style": "off", "multiline-ternary": "off", "new-cap": "error", "new-parens": "error", "newline-after-var": "error", "newline-before-return": "error", "newline-per-chained-call": "error", "no-alert": "error", "no-array-constructor": "error", "no-await-in-loop": "error", "no-bitwise": "error", "no-buffer-constructor": "error", "no-caller": "error", "no-catch-shadow": "error", "no-console": "error", "no-constructor-return": "error", "no-continue": "error", "no-div-regex": "error", "no-duplicate-imports": "error", "no-eq-null": "error", "no-eval": "error", "no-extend-native": "error", "no-extra-bind": "error", "no-extra-label": "error", "no-extra-parens": "off", "no-floating-decimal": "error", "no-implicit-coercion": "error", "no-implicit-globals": "error", "no-implied-eval": "error", "no-inline-comments": "error", "no-invalid-this": "error", "no-iterator": "error", "no-label-var": "error", "no-labels": "error", "no-lone-blocks": "error", "no-lonely-if": "error", "no-loop-func": "error", "no-loss-of-precision": "error", "@typescript-eslint/no-magic-numbers": "off", "no-mixed-operators": "off", "no-mixed-requires": "error", "no-multi-assign": "error", "no-multi-spaces": "error", "no-multi-str": "error", "no-multiple-empty-lines": "error", "no-native-reassign": "error", "no-negated-condition": "error", "no-negated-in-lhs": "error", "no-nested-ternary": "error", "no-new": "error", "no-new-func": "error", "no-new-object": "error", "no-new-require": "error", "no-new-wrappers": "error", "no-nonoctal-decimal-escape": "error", "no-octal-escape": "error", "no-param-reassign": "error", "no-path-concat": "error", "no-plusplus": "error", "no-process-env": "off", "no-process-exit": "error", "no-promise-executor-return": "error", "no-proto": "error", "no-restricted-exports": "error", "no-restricted-globals": "error", "no-restricted-imports": "error", "no-restricted-modules": "error", "no-restricted-properties": "error", "no-restricted-syntax": "error", "no-script-url": "error", "no-self-compare": "error", "no-sequences": "error", "@typescript-eslint/no-shadow": "error", "no-spaced-func": "error", "no-sync": "error", "no-tabs": "error", "no-template-curly-in-string": "error", "no-throw-literal": "error", "no-trailing-spaces": "error", "no-undef-init": "error", "no-undefined": "off", "no-underscore-dangle": "error", "no-unmodified-loop-condition": "error", "no-unneeded-ternary": "error", "no-unreachable-loop": "error", "no-unsafe-optional-chaining": "error", "no-unused-expressions": "error", "@typescript-eslint/no-use-before-define": "error", "no-useless-backreference": "error", "no-useless-call": "error", "no-useless-computed-key": "error", "no-useless-concat": "error", "no-useless-constructor": "error", "no-useless-rename": "error", "no-useless-return": "error", "no-var": "error", "no-void": "error", "no-warning-comments": "error", "no-whitespace-before-property": "error", "nonblock-statement-body-position": "error", "object-curly-newline": "error", "object-curly-spacing": ["error", "always"], "object-property-newline": [ "error", { "allowAllPropertiesOnSameLine": true } ], "object-shorthand": "error", "one-var": ["error", "never"], "operator-assignment": "error", "operator-linebreak": "error", "padded-blocks": ["error", "never"], "padding-line-between-statements": "error", "prefer-arrow-callback": "error", "prefer-const": "error", "prefer-destructuring": "error", "prefer-exponentiation-operator": "error", "prefer-named-capture-group": "off", "prefer-numeric-literals": "error", "prefer-object-spread": "error", "prefer-promise-reject-errors": "error", "prefer-reflect": "error", "prefer-regex-literals": "error", "prefer-rest-params": "error", "prefer-spread": "error", "prefer-template": "off", "quote-props": "off", "quotes": "off", "radix": "error", "require-atomic-updates": "error", "require-await": "error", "require-unicode-regexp": "off", "rest-spread-spacing": "error", "@typescript-eslint/semi": [ "error", "always", { "omitLastInOneLineBlock": true } ], "semi-spacing": "error", "semi-style": "error", "no-extra-semi": "error", "space-before-blocks": "error", "space-before-function-paren": [ "error", { "anonymous": "never", "named": "never", "asyncArrow": "always" } ], "space-in-parens": ["error", "never"], "space-infix-ops": "error", "space-unary-ops": [ "error", { "words": true, "nonwords": false } ], "spaced-comment": "error", "strict": "error", "switch-colon-spacing": "error", "symbol-description": "error", "template-curly-spacing": "error", "template-tag-spacing": "error", "unicode-bom": "error", "valid-jsdoc": "error", "vars-on-top": "error", "wrap-iife": "error", "wrap-regex": "error", "yield-star-spacing": "error", "yoda": "error", "@typescript-eslint/ban-types": "warn", "react/react-in-jsx-scope": "off", "@typescript-eslint/no-empty-function": "off", "@typescript-eslint/ban-ts-comment": "warn" } } ================================================ FILE: kebab/.gitignore ================================================ .idea examples/*/.env examples/*/node_modules examples/*/build examples/*/.parcel-cache examples/*/dist node_modules lib ================================================ FILE: kebab/.prettierrc.js ================================================ module.exports = { trailingComma: "es5", tabWidth: 2, semi: true, singleQuote: false, arrowParens: "always", useTabs: false, }; ================================================ FILE: kebab/README.md ================================================ # Kebab The official DogeHouse API client. ## Usage - **In web =>** see `examples/mediasoup-audio/` and `examples/react-chat/` - **In Node =>** see `examples/chat/` and `examples/bot/` (note that you need to have DOM in tsc's libs) ### A simple bot ```typescript import { raw, createClient, httpRequest, httpEndpoint, tokensToString, stringToToken } from "@dogehouse/kebab"; const commandRegex = /^\/([^ ]+) ?(.*)$/; const main = async () => { try { const credentials = await httpRequest(httpEndpoint.bot.auth, { apiKey: process.env.DOGEHOUSE_API_KEY! }); const client = createClient(await raw.connect( credentials.accessToken, credentials.refreshToken, { onConnectionTaken: () => { console.error("\nAnother client has taken the connection"); process.exit(); } } )); const sendMessage = (text: string) => client.request( "chat:send_msg", { tokens: stringToToken(text), whisperedTo: [] } ); const { rooms } = await client.request("room:get_top", { cursor: 0, limit: 1 }); const theRoom = rooms[0]; client.subscribe("new_chat_msg", async ({ userId, msg }) => { const text = tokensToString(msg.tokens); console.log(`${msg.displayName} > ${text}`); if (userId === client.user.id) return; const [, command, parameters] = commandRegex.exec(text) ?? ["", ""]; switch (command) { case "help": await sendMessage("Commands: /help, /goto (owner only), /to_base64 , /from_base64 "); break; case "goto": if (msg.username !== process.env.OWNER_USERRNAME || parameters.length == 0) break; await client.request("room:leave", {}); await client.request("room:join", { roomId: parameters }); break; case "to_base64": if (parameters.length == 0) break; await sendMessage(Buffer.from(parameters, "utf-8").toString("base64")); break; case "from_base64": if (parameters.length == 0) break; await sendMessage(Buffer.from(parameters, "base64").toString("utf-8")); break; } }); console.info(`=> starting in room "${theRoom.name}" (${theRoom.numPeopleInside} people)`); await client.request("room:join", { roomId: theRoom.id }); } catch (e) { if (e.code === 4001) console.error("invalid token!"); console.error(e) } }; main(); ``` ================================================ FILE: kebab/examples/bot/README.md ================================================ # An example bot 1. Put your bot's api key in `.env` as `DOGEHOUSE_API_KEY` 2. Build the API package: `$ yarn` and `$ yarn build` in kebab's root directory 3. Build the example: `$ yarn` and `$ yarn build` 4. `$ yarn start` ================================================ FILE: kebab/examples/bot/package.json ================================================ { "name": "example-bot", "private": true, "scripts": { "build": "tsc", "start": "node build/index.js" }, "dependencies": { "@dogehouse/kebab": "file:../..", "@types/node": "^14.14.35" }, "devDependencies": { "dotenv": "^8.2.0", "typescript": "^4.2.3" } } ================================================ FILE: kebab/examples/bot/src/index.ts ================================================ require("dotenv").config(); import { raw, createClient, httpRequest, httpEndpoint, tokensToString, stringToToken } from "@dogehouse/kebab"; const commandRegex = /^\/([^ ]+) ?(.*)$/; const main = async () => { try { const credentials = await httpRequest(httpEndpoint.bot.auth, { apiKey: process.env.DOGEHOUSE_API_KEY! }); const client = createClient(await raw.connect( credentials.accessToken, credentials.refreshToken, { onConnectionTaken: () => { console.error("\nAnother client has taken the connection"); process.exit(); } } )); const sendMessage = (text: string) => client.request( "chat:send_msg", { tokens: stringToToken(text), whisperedTo: [] } ); const { rooms } = await client.request("room:get_top", { cursor: 0, limit: 1 }); const theRoom = rooms[0]; client.subscribe("new_chat_msg", async ({ userId, msg }) => { const text = tokensToString(msg.tokens); console.log(`${msg.displayName} > ${text}`); if (userId === client.user.id) return; const [, command, parameters] = commandRegex.exec(text) ?? ["", ""]; switch (command) { case "help": await sendMessage("Commands: /help, /goto (owner only), /to_base64 , /from_base64 "); break; case "goto": if (msg.username !== process.env.OWNER_USERRNAME || parameters.length == 0) break; await client.request("room:leave", {}); await client.request("room:join", { roomId: parameters }); break; case "to_base64": if (parameters.length == 0) break; await sendMessage(Buffer.from(parameters, "utf-8").toString("base64")); break; case "from_base64": if (parameters.length == 0) break; await sendMessage(Buffer.from(parameters, "base64").toString("utf-8")); break; } }); console.info(`=> starting in room "${theRoom.name}" (${theRoom.numPeopleInside} people)`); await client.request("room:join", { roomId: theRoom.id }); } catch (e) { if (e.code === 4001) console.error("invalid token!"); console.error(e) } }; main(); ================================================ FILE: kebab/examples/bot/tsconfig.json ================================================ { "compilerOptions": { "target": "es5", "module": "commonjs", "outDir": "./build", "strict": true, "lib": ["DOM", "ES6"], "esModuleInterop": true, "skipLibCheck": true }, "include": ["src"], "exclude": ["node_modules"] } ================================================ FILE: kebab/examples/chat/README.md ================================================ # CLI chat (an example app) 1. Put your access- and refresh-token in `.env` (`DOGEHOUSE_TOKEN`, `DOGEHOUSE_REFRESH_TOKEN`) 2. Build the API package: `$ yarn` and `$ yarn build` in kebab's root directory 3. Build the example: `$ yarn` and `$ yarn build` 4. `$ yarn start` ================================================ FILE: kebab/examples/chat/package.json ================================================ { "name": "example-chat", "private": true, "scripts": { "build": "tsc", "start": "node build/index.js" }, "dependencies": { "@dogehouse/kebab": "file:../..", "@types/node": "^14.14.35" }, "devDependencies": { "dotenv": "^8.2.0", "typescript": "^4.2.3" } } ================================================ FILE: kebab/examples/chat/src/index.ts ================================================ require("dotenv").config(); import readline from "readline"; import { raw, wrap, tokensToString, stringToToken } from "@dogehouse/kebab"; const logger: raw.Logger = (direction, opcode, data, fetchId, raw) => { const directionPadded = direction.toUpperCase().padEnd(3, " "); const fetchIdInfo = fetchId ? ` (fetch id ${fetchId})` : ""; console.info(`${directionPadded} "${opcode}"${fetchIdInfo}: ${raw}`); }; const main = async () => { try { const connection = await raw.connect( process.env.DOGEHOUSE_TOKEN!, process.env.DOGEHOUSE_REFRESH_TOKEN!, { onConnectionTaken: () => { console.error("\nAnother client has taken the connection"); process.exit(); } } ); const wrapper = wrap(connection); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, prompt: `${connection.user.displayName} > ` }) const { rooms } = await wrapper.query.getTopPublicRooms(); const theRoom = rooms[0]; console.log(`=> joining room "${theRoom.name}" (${theRoom.numPeopleInside} people)`); const extraInfo = await wrapper.query.joinRoomAndGetInfo(theRoom.id); const unsubscribe = wrapper.subscribe.newChatMsg(async ({ userId, msg }) => { const text = tokensToString(msg.tokens); if(userId !== connection.user.id) { process.stdout.cursorTo(0); console.log(`${msg.displayName} > ${text}`); } rl.prompt(); }); rl.prompt(); rl.on("line", async input => { if(input === "/leave") { unsubscribe(); await wrapper.mutation.leaveRoom(); console.log("=> left the room"); } else { await wrapper.mutation.sendRoomChatMsg(stringToToken(input)); } }) } catch(e) { if(e.code === 4001) console.error("invalid token!"); console.error(e) } }; main(); ================================================ FILE: kebab/examples/chat/tsconfig.json ================================================ { "compilerOptions": { "target": "es5", "module": "commonjs", "outDir": "./build", "strict": true, "lib": ["DOM", "ES6"], "esModuleInterop": true, "skipLibCheck": true }, "include": ["src"], "exclude": ["node_modules"] } ================================================ FILE: kebab/examples/create-bot/README.md ================================================ # An script to create a bot account 1. Put your access and refresh-token in `.env` (`DOGEHOUSE_TOKEN`, `DOGEHOUSE_REFRESH_TOKEN`) 2. Choose your bot's username and place it in `.env` as `DOGEHOUSE_BOT_NAME` 3. Build the API package: `$ yarn` and `$ yarn build` in kebab's root directory 4. Build the example: `$ yarn` and `$ yarn build` 5. `$ yarn start` 6. Save the api key printed to the screen in a safe place to later use with your bot. ================================================ FILE: kebab/examples/create-bot/package.json ================================================ { "name": "create-bot", "private": true, "scripts": { "build": "tsc", "start": "node build/index.js" }, "dependencies": { "@dogehouse/kebab": "file:../..", "@types/node": "^14.14.35" }, "devDependencies": { "dotenv": "^8.2.0", "typescript": "^4.2.3" } } ================================================ FILE: kebab/examples/create-bot/src/index.ts ================================================ require("dotenv").config(); import { raw, wrap } from "@dogehouse/kebab"; const main = async () => { try { const wrapper = wrap(await raw.connect( process.env.DOGEHOUSE_TOKEN!, process.env.DOGEHOUSE_REFRESH_TOKEN!, { onConnectionTaken: () => { console.error("\nAnother client has taken the connection"); process.exit(); } } )); wrapper.mutation.userCreateBot(process.env.DOGEHOUSE_BOT_NAME!).then(res => { console.log(res) }).catch(err => { console.error(err) }) } catch (e) { if (e.code === 4001) console.error("invalid token!"); console.error(e) } }; main(); ================================================ FILE: kebab/examples/create-bot/tsconfig.json ================================================ { "compilerOptions": { "target": "es5", "module": "commonjs", "outDir": "./build", "strict": true, "lib": ["DOM", "ES6"], "esModuleInterop": true, "skipLibCheck": true }, "include": ["src"], "exclude": ["node_modules"] } ================================================ FILE: kebab/examples/mediasoup-audio/README.md ================================================ # Audio-only client (an example app) 1. Put your access- and refresh-token in `.env` (`DOGEHOUSE_TOKEN`, `DOGEHOUSE_REFRESH_TOKEN`) 2. Build the API package: `$ yarn` and `$ yarn build` in kebab's root directory 3. Setup the example: `$ yarn` 4. `$ yarn start` ================================================ FILE: kebab/examples/mediasoup-audio/package.json ================================================ { "name": "mediasoup-audio", "version": "0.1.0", "private": true, "dependencies": { "@dogehouse/kebab": "../..", "mediasoup-client": "^3.6.29" }, "browserslist": [ "> 0.2%", "not dead" ], "scripts": { "start": "parcel serve ./src/index.html -p 3000", "build": "parcel build ./src/index.html" }, "devDependencies": { "parcel": "^2.0.0-beta.2", "typescript": "^4.2.3" } } ================================================ FILE: kebab/examples/mediasoup-audio/src/index.css ================================================ body { margin: 0; } .current-role { display: flex; gap: 10px; } .cant-use-mic { color: red; } ================================================ FILE: kebab/examples/mediasoup-audio/src/index.html ================================================ Kebab example

Loading...

Loading...

================================================ FILE: kebab/examples/mediasoup-audio/src/index.ts ================================================ import { wrap, audioWrap, raw } from "@dogehouse/kebab"; import { connect as mediasoupConnect } from "@dogehouse/kebab/lib/audio/mediasoup-client"; import { Device } from "mediasoup-client"; const main = async () => { const wrapper = wrap(await raw.connect(process.env.DOGEHOUSE_TOKEN!, process.env.DOGEHOUSE_REFRESH_TOKEN!, {})); const audioWrapper = audioWrap(wrapper.connection); const { rooms } = await wrapper.query.getTopPublicRooms() const theRoom = rooms[0]; const device = new Device(); const currentRole = document.querySelector(".current-role")!; const makeMicTrack = async () => { try { const mic = await navigator.mediaDevices.getUserMedia({ audio: true }); return mic.getAudioTracks()[0]; } catch { const cantUseMic = document.createElement("span"); cantUseMic.className = "cant-use-mic"; cantUseMic.textContent = "- can't use mic"; currentRole.appendChild(cantUseMic); } }; const playOutput = (track: MediaStreamTrack) => { const audio = new Audio(); audio.srcObject = new MediaStream([track]); audio.play(); }; const unsubYjap = audioWrapper.subscribe.youJoinedAsPeer(async ({ routerRtpCapabilities, recvTransportOptions }) => { unsubYjap(); await mediasoupConnect( wrapper.connection, routerRtpCapabilities, "output", recvTransportOptions, playOutput )(device); currentRole.textContent = "Listener"; const button = document.createElement("button"); button.textContent = "Request to speak"; button.addEventListener("click", () => wrapper.connection.send("ask_to_speak", {})); currentRole.appendChild(button); const unsubYbs = audioWrapper.subscribe.youBecameSpeaker(async ({ sendTransportOptions }) => { unsubYbs(); await mediasoupConnect( wrapper.connection, routerRtpCapabilities, "input", sendTransportOptions, await makeMicTrack() )(device); currentRole.removeChild(button); }); }); const unsubYjas = audioWrapper.subscribe.youJoinedAsSpeaker(async ({ routerRtpCapabilities, recvTransportOptions, sendTransportOptions }) => { unsubYjas(); await mediasoupConnect( wrapper.connection, routerRtpCapabilities, "output", recvTransportOptions, playOutput )(device); await mediasoupConnect( wrapper.connection, routerRtpCapabilities, "input", sendTransportOptions, await makeMicTrack() )(device); }); const extraInfo = await wrapper.query.joinRoomAndGetInfo(theRoom.id); document.querySelector(".current-room")!.textContent = theRoom.name; } main(); ================================================ FILE: kebab/examples/mediasoup-audio/tsconfig.json ================================================ { "compilerOptions": { "sourceMap": true, "target": "es6", "moduleResolution": "node", "experimentalDecorators": true, "noEmitOnError": false, "resolveJsonModule": true, "importHelpers": true, "lib": [ "ESNext", "DOM" ], "module": "commonjs", "esModuleInterop": true, "preserveSymlinks": true, "typeRoots": [ "./node_modules/@types" ], "downlevelIteration": true, "skipLibCheck": true } } ================================================ FILE: kebab/examples/react-chat/README.md ================================================ # Text-only chat (an example app) 1. Build the API package: `$ yarn` and `$ yarn build` in kebab's root directory 2. Setup the example: `$ yarn` 3. `$ yarn start` (put `SKIP_PREFLIGHT_CHECK=true` in your .env if it crashes) ================================================ FILE: kebab/examples/react-chat/package.json ================================================ { "name": "react-chat", "version": "0.1.0", "private": true, "homepage": ".", "dependencies": { "@dogehouse/kebab": "file:../..", "@testing-library/jest-dom": "^5.11.4", "@testing-library/react": "^11.1.0", "@testing-library/user-event": "^12.1.10", "@types/jest": "^26.0.15", "@types/node": "^12.0.0", "@types/react": "^17.0.0", "@types/react-dom": "^17.0.0", "react": "^17.0.1", "react-dom": "^17.0.1", "react-scripts": "4.0.3", "typescript": "^4.1.2", "web-vitals": "^1.0.1" }, "scripts": { "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject" }, "eslintConfig": { "extends": [ "react-app", "react-app/jest" ] }, "browserslist": { "production": [ ">0.2%", "not dead", "not op_mini all" ], "development": [ "last 1 chrome version", "last 1 firefox version", "last 1 safari version" ] } } ================================================ FILE: kebab/examples/react-chat/public/index.html ================================================ React App
================================================ FILE: kebab/examples/react-chat/public/manifest.json ================================================ { "short_name": "React App", "name": "Create React App Sample", "icons": [ { "src": "favicon.ico", "sizes": "64x64 32x32 24x24 16x16", "type": "image/x-icon" }, { "src": "logo192.png", "type": "image/png", "sizes": "192x192" }, { "src": "logo512.png", "type": "image/png", "sizes": "512x512" } ], "start_url": ".", "display": "standalone", "theme_color": "#000000", "background_color": "#ffffff" } ================================================ FILE: kebab/examples/react-chat/public/robots.txt ================================================ # https://www.robotstxt.org/robotstxt.html User-agent: * Disallow: ================================================ FILE: kebab/examples/react-chat/src/App.css ================================================ .chat-messages { display: flex; flex-direction: column; gap: 10px; overflow-y: visible; flex-grow: 1; } .chat-prompt { display: flex; gap: 10px; } .room-chat { display: flex; align-items: center; flex-direction: column; gap: 10px; height: 99%; } .login-form { display: flex; flex-direction: column; align-items: center; gap: 10px; padding: 10px; } ================================================ FILE: kebab/examples/react-chat/src/App.tsx ================================================ import React, { createContext, useContext, useEffect, useState } from "react"; import { Message, raw, Room, stringToToken, tokensToString, wrap, Wrapper } from "@dogehouse/kebab"; import "./App.css"; const APIWrapperContext = createContext({} as Wrapper); const MessageView = (props: { message: Message }) => ( {props.message.displayName}: {tokensToString(props.message.tokens)} ); const ChatMessages = () => { const wrapper = useContext(APIWrapperContext); const [messages, setMessages] = useState([]); useEffect(() => wrapper.subscribe.newChatMsg(({msg}) => setMessages(messages.concat(msg)))); return (
{messages.map(it => )}
); }; const ChatPrompt = () => { const wrapper = useContext(APIWrapperContext); const [message, setMessage] = useState(""); const sendMessage = async () => { if(message.length > 0) { await wrapper.mutation.sendRoomChatMsg(stringToToken(message)); setMessage(""); } }; return (
setMessage(e.target.value)}/>
); }; const RoomChat = (props: { room: Room }) => { const wrapper = useContext(APIWrapperContext); const [joined, setJoined] = useState(false); if(!joined) { wrapper.query.joinRoomAndGetInfo(props.room.id).then(() => setJoined(true)); return loading 3/3; } return (

{props.room.name}

); }; const LoggedInPage = (props: { token: string, refreshToken: string }) => { const [connection, setConnection] = useState(null); const [publicRooms, setPublicRooms] = useState([]); useEffect(() => { raw.connect(props.token, props.refreshToken, {}).then(setConnection); }, [props.token, props.refreshToken]); if(!connection) { return loading 1/3; } const wrapper = wrap(connection); if(publicRooms.length === 0) { wrapper.query.getTopPublicRooms().then(({ rooms }) => setPublicRooms(rooms)); return loading 2/3; } return ( ); }; const LogInPage = (props: { logIn: (token: string, refreshToken: string) => void }) => { const [token, setToken] = useState(""); const [refreshToken, setRefreshToken] = useState(""); const submit = () => props.logIn(token, refreshToken); return (
{ e.preventDefault(); submit(); }} > setToken(target.value)} /> setRefreshToken(target.value)} />
); }; export const App = () => { const [creds, setCreds] = useState({ token: "", refreshToken: "" }); const loggedIn = creds.token.length > 0 && creds.refreshToken.length > 0 // lmao return loggedIn ? : setCreds({ token: newToken, refreshToken: newRefreshToken }) } />; }; ================================================ FILE: kebab/examples/react-chat/src/index.css ================================================ body { margin: 0; font-family: -apple-system, BlinkMacSystemFont, "Ubuntu", sans-serif; } html, body, #root { height: 100%; } code { font-family: source-code-pro, Menlo, monospace; } ================================================ FILE: kebab/examples/react-chat/src/index.tsx ================================================ import React from "react"; import { render } from "react-dom"; import "./index.css"; import { App } from "./App"; render( , document.getElementById("root") ); ================================================ FILE: kebab/examples/react-chat/src/react-app-env.d.ts ================================================ /// ================================================ FILE: kebab/examples/react-chat/tsconfig.json ================================================ { "compilerOptions": { "target": "es5", "lib": [ "dom", "dom.iterable", "esnext" ], "allowJs": true, "skipLibCheck": true, "esModuleInterop": true, "allowSyntheticDefaultImports": true, "strict": true, "forceConsistentCasingInFileNames": true, "noFallthroughCasesInSwitch": true, "module": "esnext", "moduleResolution": "node", "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, "jsx": "react-jsx" }, "include": [ "src" ] } ================================================ FILE: kebab/jest.config.js ================================================ module.exports = { preset: 'ts-jest', testEnvironment: 'node', }; ================================================ FILE: kebab/package.json ================================================ { "name": "@dogehouse/kebab", "author": "Ilya Maximov (https://overlisted.net)", "bugs": "https://github.com/benawad/dogehouse/issues", "version": "1.0.0", "license": "MIT", "keywords": [ "dogehouse" ], "description": "The official DogeHouse API client.", "main": "lib/index.js", "types": "lib/index.d.ts", "scripts": { "build": "tsc", "watch": "tsc -w", "lint": "eslint src/", "test": "jest" }, "publishConfig": { "access": "public" }, "dependencies": { "@types/uuid": "^8.3.0", "@types/ws": "^7.4.2", "isomorphic-unfetch": "^3.1.0", "isomorphic-ws": "^4.0.1", "mediasoup-client": "^3.6.30", "reconnecting-websocket": "^4.4.0", "uuid": "^8.3.2", "ws": "^7.4.5" }, "devDependencies": { "@types/jest": "^26.0.23", "@typescript-eslint/eslint-plugin": "^4.22.0", "@typescript-eslint/parser": "^4.22.0", "eslint": "^7.25.0", "jest": "^26.6.3", "ts-jest": "^26.5.5", "typescript": "^4.2.4" } } ================================================ FILE: kebab/src/README.md ================================================ http, websocket/wrapper.ts and websocket/responses.ts are deprecated and are only kept because of kibbeh ================================================ FILE: kebab/src/audio/audioWrapper.ts ================================================ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-nocheck because internet is unpredictable import { raw } from ".."; import { RoomPeer, UUID } from "../entities"; import { TransportOptions, DtlsParameters, ConsumerOptions, RtpCapabilities, RtpParameters, } from "mediasoup-client/lib/types"; /** * Allows you to handle custom logic on websocket voice events */ type Handler = (data: Data) => void; /** * Creates a wrapper object that allows you to make websocket voice related calls using functions * @param {raw.Connection} connection - reference to the websocket connection * @returns {connection} Wrapper object */ export const wrap = (connection: raw.Connection) => ({ connection, /** * Allows you to subscribe to various pre-defined websocket voice events */ subscribe: { closeConsumer: (handler: Handler<{ producerId: UUID }>) => connection.addListener("close_consumer", handler), newPeerSpeaker: ( handler: Handler<{ peerId: UUID; consumerParameters: ConsumerOptions }> ) => connection.addListener("new-peer-speaker", handler), youJoinedAsPeer: ( handler: Handler<{ routerRtpCapabilities: RtpCapabilities; recvTransportOptions: TransportOptions; }> ) => connection.addListener("you-joined-as-peer", handler), youJoinedAsSpeaker: ( handler: Handler<{ routerRtpCapabilities: RtpCapabilities; recvTransportOptions: TransportOptions; sendTransportOptions: TransportOptions; }> ) => connection.addListener("you-joined-as-speaker", handler), youBecameSpeaker: ( handler: Handler<{ sendTransportOptions: TransportOptions }> ) => connection.addListener("you-are-now-a-speaker", handler), }, /** * Allows you to call functions that return information about the ws voice state */ query: { getConsumersParameters: ( rtpCapabilities: RtpCapabilities ): Promise<{ consumerParametersArr: RoomPeer[] }> => connection.fetch( "@get-recv-tracks", { rtpCapabilities }, "@get-recv-tracks-done" ), }, /** * Allows you to call functions that mutate the ws voice state */ mutation: { connectTransport: ( transportId: UUID, direction: "send" | "recv", dtlsParameters: DtlsParameters ): Promise<{ error: string } | { roomId: UUID }> => connection.fetch( "@connect-transport", { transportId, direction, dtlsParameters }, `@connect-transport-${direction}-done` ), sendTrack: ( transportId: UUID, kind: "audio", rtpParameters: RtpParameters, rtpCapabilities: RtpCapabilities, paused: false, appData: { mediaTag: "cam-audio" }, direction: "send" ): Promise<{ id: UUID } | { error: string }> => connection.fetch( "@send-track", { transportId, kind, rtpParameters, rtpCapabilities, paused, appData, direction, }, `@send-track-${direction}-done` ), }, }); ================================================ FILE: kebab/src/audio/interface.ts ================================================ import { raw, UUID } from ".."; import { RtpCapabilities, TransportOptions } from "mediasoup-client/lib/types"; export type ConsumerPlayer = (track: MediaStreamTrack, user: UUID) => void; export type ConnectFunction = ( connection: raw.Connection, routerRtpCapabilities: RtpCapabilities, direction: Direction extends "input" ? "input" : "output", transportOptions: TransportOptions, track: Direction extends "input" ? MediaStreamTrack : ConsumerPlayer ) => Return; ================================================ FILE: kebab/src/audio/mediasoup-client.ts ================================================ import { Device, Transport } from "mediasoup-client/lib/types"; import { ConnectFunction, ConsumerPlayer } from "./interface"; import { RoomPeer } from ".."; import { wrap } from "./audioWrapper"; export const makeConsumer = (transport: Transport) => async (data: RoomPeer) => ({ user: data.peerId, consumer: await transport.consume({ ...data.consumerParameters, appData: { peerId: data.peerId, producerId: data.consumerParameters.producerId, mediaTag: "cam-audio" } }) }); export const connect: ConnectFunction<(device: Device) => Promise> = ( connection, routerRtpCapabilities, direction, transportOptions, track ) => async (device) => { if(!device.loaded) await device.load({ routerRtpCapabilities }); const wrapper = wrap(connection); const simplerDirection = direction === "output" ? "recv" : "send"; const transport = direction === "output" ? device.createRecvTransport(transportOptions) : device.createSendTransport(transportOptions); transport.on("connect", async ({ dtlsParameters }, resolve, reject) => { const result = await wrapper.mutation.connectTransport(transport.id, simplerDirection, dtlsParameters); if("error" in result) { console.error(result.error); // eslint-disable-line no-console reject(); } else { resolve(); } }); if(direction === "input") { transport.on("produce", async ({ kind, rtpParameters, appData }, resolve, reject) => { const result = await wrapper.mutation.sendTrack( transportOptions.id, kind, rtpParameters, device.rtpCapabilities, false, appData, simplerDirection as "send" ); if("error" in result) { console.error(result.error); // eslint-disable-line no-console reject(); } else { resolve(result); } }); await transport.produce({ track: track as MediaStreamTrack, appData: { mediaTag: "cam-audio" } }); } else { const { consumerParametersArr } = await wrapper.query.getConsumersParameters(device.rtpCapabilities); const consumers = await Promise.all(consumerParametersArr.map(makeConsumer(transport))); const unsubNps = wrapper.subscribe.newPeerSpeaker(async (peer) => { consumers.push(await makeConsumer(transport)(peer)); }); const unsubCc = wrapper.subscribe.closeConsumer(({ producerId }) => { const found = consumers.filter(it => it.consumer.producerId === producerId); if(found[0]) consumers.splice(consumers.indexOf(found[0]), 1); }); const unsubYlr = connection.addListener("you_left_room", () => { unsubYlr(); unsubNps(); unsubCc(); }); const giveTrack = track as ConsumerPlayer; consumers.forEach(({ user, consumer }) => giveTrack(consumer.track, user)); } }; ================================================ FILE: kebab/src/client/README.md ================================================ # Rewritten client i felt like the current system isn't declarative enough so i rewrote it just using typescript ## How to add new stuff ask me on discord ================================================ FILE: kebab/src/client/http/bot.ts ================================================ import { Endpoint } from "./endpoint"; export const auth: Endpoint< { apiKey: string }, { username: string, accessToken: string, refreshToken: string } > = ({ apiKey }) => [ "/bot/auth", { method: "POST", headers: { "Content-Type": "application/json" }, body: `{ "apiKey": "${apiKey}" }` } ]; ================================================ FILE: kebab/src/client/http/dev.ts ================================================ import { Endpoint } from "./endpoint"; export const testInfo: Endpoint< { username: string }, { accessToken: string, refreshToken: string } > = ({ username }) => [`/dev/test-info?username=${username}`, {}]; ================================================ FILE: kebab/src/client/http/endpoint.ts ================================================ export type Endpoint = (options: O) => [string, RequestInit]; // eslint-disable-line @typescript-eslint/no-unused-vars export * as dev from "./dev"; export * as bot from "./bot"; ================================================ FILE: kebab/src/client/http/index.ts ================================================ import { Endpoint } from "./endpoint"; import fetch from "isomorphic-fetch"; export const apiUrl = "https://api.dogehouse.tv"; export type HTTPRequester = (endpoint: Endpoint, options: O) => Promise; export const httpRequest: HTTPRequester = async (endpoint, options) => { const [address, fetchOptions] = endpoint(options); const response = await fetch(apiUrl + address, fetchOptions); return await response.json() as any; // eslint-disable-line @typescript-eslint/no-explicit-any }; export * as httpEndpoint from "./endpoint"; ================================================ FILE: kebab/src/client/index.ts ================================================ import { request, Requester } from "./requester"; import { subscribe, Subscriber } from "./subscriber"; import { raw } from "../index"; export type Client = raw.Connection & { request: Requester, subscribe: Subscriber }; export const createClient = (connection: raw.Connection): Client => ({ ...connection, request: (name, data) => request(connection, name, data), subscribe: (name, handler, options = {}) => subscribe(connection, name, handler, options), }); export * from "./http"; export * from "./requester"; export * from "./subscriber"; ================================================ FILE: kebab/src/client/requester/auth.ts ================================================ import { EmptyObject } from "../type-util"; export default interface Requests { "request:but:you:dont:want:to:use:this": EmptyObject, } ================================================ FILE: kebab/src/client/requester/chat.ts ================================================ import { MessageToken, UUID } from "../.."; export default interface Requests { ban: { request: { userId: UUID } }, unban: { request: { userId: UUID } }, send_msg: { request: { tokens: MessageToken[], whisperedTo: UUID[], isWhisper?: boolean } }, delete: { request: { messageId: UUID } }, } ================================================ FILE: kebab/src/client/requester/index.ts ================================================ import { raw } from "../.."; import UserRequests from "./user"; import RoomRequests from "./room"; import ChatRequests from "./chat"; import MiscRequests from "./misc"; import AuthRequests from "./auth"; import { DefaultValues, EmptyObject, GroupMap, NormalObjectKey } from "../type-util"; type DefaultRequest = { request: EmptyObject, reply: EmptyObject, error: string }; type RequestMap = DefaultValues< GroupMap & GroupMap & GroupMap & GroupMap & GroupMap, DefaultRequest >; export type Requester = >( name: R, data: RequestMap[R]["request"] ) => Promise; export type SimpleRequester = >( connection: raw.Connection, name: R, data: RequestMap[R]["request"] ) => Promise; export const request: SimpleRequester = async (connection, name, data) => { const response = await connection.sendCall(name, data) as any; // eslint-disable-line @typescript-eslint/no-explicit-any if(response.error) throw response.error; return response; }; ================================================ FILE: kebab/src/client/requester/misc.ts ================================================ import { Room, User } from "../.."; export default interface Requests { search: { request: { query: string }, reply: { items: Array, rooms: Room[], users: User[] } }, } ================================================ FILE: kebab/src/client/requester/room.ts ================================================ import { Room, RoomAuth, RoomRole, User, UUID, PaginatedReply, PaginatedRequest } from "../.."; export default interface Requests { invite: { request: { userId: UUID } }, update: { request: { name: string, description: string, isPrivate: boolean, autoSpeaker?: boolean }, reply: Room }, get_invite_list: { request: PaginatedRequest, reply: { invites: User[] } & PaginatedReply }, leave: void, ban: { request: { userId: UUID, shouldBadIp?: boolean } }, set_role: { request: { userId: UUID, role: RoomRole } }, set_auth: { request: { userId: UUID, level: RoomAuth } }, join: { request: { roomId: UUID }, reply: { name: string, description: string, isPrivate: boolean } }, get_banned_users: { request: PaginatedRequest, reply: { users: User[] } & PaginatedReply }, update_scheduled: { request: { name: string, scheduledFor: string, description: string }, reply: unknown }, delete_scheduled: { request: { roomId: UUID } }, create: { request: { name: string, description: string, isPrivate?: boolean, userIdToInvite?: UUID[], autoSpeaker?: boolean, scheduledRoomId?: UUID }, reply: Room }, create_scheduled: { request: { name: string, scheduledFor: string, description?: string }, reply: { id: UUID, name: string, scheduledFor: string, description: string } }, unban: { request: { userId: UUID } }, get_info: { request: { roomId?: UUID }, reply: { name: string, description: string, isPrivate: boolean } }, get_top: { request: PaginatedRequest, reply: { rooms: Room[] } & PaginatedReply }, set_active_speaker: { request: void, reply: void }, mute: { request: { muted: boolean } }, deafen: { request: { deafened: boolean } }, get_scheduled: { request: { range?: "all" | "upcoming", userId: UUID, cursor: number }, reply: { rooms: Room[], nextCursor: number } }, } ================================================ FILE: kebab/src/client/requester/user.ts ================================================ import { Relationship, User, UUID, PaginatedReply, PaginatedRequest } from "../.."; export default interface Requests { create_bot: { request: { username: string }, reply: { apiKey: string, isUsernameTaken: boolean } }, ban: { request: { userId: UUID, reason: string }, reply: { apiKey: string, isUsernameTaken: boolean } }, block: { request: { userId: UUID }, reply: { blocked: UUID[] } }, unblock: { request: { userId: UUID } }, follow: { request: { userId: string } } get_following: { request: { username: string } & PaginatedRequest, reply: { following: User } & PaginatedReply } get_followers: { request: { username: string } & PaginatedRequest, reply: { followers: User } & PaginatedReply } update: { request: User, reply: User } get_info: { request: { userIdOrUsername: string }, reply: { username: string, displayName: string, avatarUrl: string, bannerUrl: string, bio: string, currentRoomId: UUID, numFollowing: number, numFollowers: number, online: boolean, lastOnline: string, youAreFollowing?: boolean, followsYou?: boolean, iBlockedThem?: boolean } } get_relationship: { request: { userId: UUID }, reply: { relationship: Relationship[] } }, unfollow: { request: { userId: UUID } }, } ================================================ FILE: kebab/src/client/subscriber/index.ts ================================================ import { raw } from "../.."; import LegacyRequests from "./legacy"; import { NormalObjectKey } from "../type-util"; type EventMap = LegacyRequests; export type EventHandler = (data: D) => void; export type Unsubscriber = () => void; export type Subscriber = >( name: E, handler: EventHandler, options?: { once?: boolean } ) => Unsubscriber; export type SimpleSubscriber = >( connection: raw.Connection, name: E, handler: EventHandler, options?: { once?: boolean } ) => Unsubscriber; export const subscribe: SimpleSubscriber = (connection, name, handler, { once = false } = {}) => { const unsubscribe = connection.addListener( name, once ? data => { unsubscribe(); handler(data as any); // eslint-disable-line @typescript-eslint/no-explicit-any } : handler as any // eslint-disable-line @typescript-eslint/no-explicit-any ); return unsubscribe; }; ================================================ FILE: kebab/src/client/subscriber/legacy.ts ================================================ import { BooleanMap, Message, RoomDetails, User, UUID } from "../../entities"; export default interface Events { new_chat_msg: { userId: UUID, msg: Message }, new_room_details: RoomDetails, new_user_join_room: { user: User }, user_left_room: { userId: UUID }, invitation_to_room: { type: "invite"; username: string; displayName: string; avatarUrl: string; bannerUrl: string; roomName: string; roomId: UUID; }, hand_raised: { userId: UUID }, speaker_added: { userId: UUID; muteMap: BooleanMap; deafMap: BooleanMap; }, speaker_removed: { userId: UUID; muteMap: BooleanMap; deafMap: BooleanMap; } } ================================================ FILE: kebab/src/client/type-util.ts ================================================ export type NormalObjectKey = Exclude; export type DefaultValues = { [K in keyof T]: D & T[K]; }; export type GroupMap = { [RequestName in keyof Group as `${GroupName}${Separator}${NormalObjectKey}`]: Group[RequestName]; }; export type EmptyObject = Record; ================================================ FILE: kebab/src/entities.ts ================================================ import { ConsumerOptions } from "mediasoup-client/lib/types"; export type UUID = string; export type RoomPeer = { peerId: UUID; consumerParameters: ConsumerOptions; }; export type UserPreview = { id: UUID; displayName: string; numFollowers: number; avatarUrl: string | null; }; export type ChatMode = "default" | "disabled" | "follower_only"; export type RoomDetails = { name: string; chatThrottle: number; isPrivate: boolean; description: string; }; export type Room = RoomDetails & { id: string; numPeopleInside: number; voiceServerId: string; creatorId: string; peoplePreviewList: Array; autoSpeaker: boolean; inserted_at: string; chatMode: ChatMode; }; export interface ScheduledRoom { roomId: UUID | null; description: string; scheduledFor: string; numAttending: number; name: string; id: UUID; creatorId: UUID; creator: User; } export type User = { youAreFollowing?: boolean; username: string; online: boolean; numFollowing: number; numFollowers: number; lastOnline: string; id: UUID; followsYou?: boolean; botOwnerId?: string | null; contributions: number; staff: boolean; displayName: string; currentRoomId?: UUID | null; currentRoom: Room; bio: string | null; avatarUrl: string; bannerUrl: string | null; whisperPrivacySetting: "on" | "off"; }; export type MessageToken = { t: T; v: V; }; export type TextToken = MessageToken<"text", string>; export type MentionToken = MessageToken<"mention", string>; export type LinkToken = MessageToken<"link", string>; export type EmoteToken = MessageToken<"emote", string>; export type CodeBlockToken = MessageToken<"block", string>; export type EmojiToken = MessageToken<"emoji", string>; export type Message = { id: UUID; userId: UUID; avatarUrl: UUID; color: string; displayName: string; tokens: MessageToken[]; username: string; deleted?: boolean; deleterId?: UUID; sentAt: string; isWhisper?: boolean; }; export type BaseUser = { username: string; online: boolean; lastOnline: string; id: string; bio: string; displayName: string; avatarUrl: string; bannerUrl: string; numFollowing: number; numFollowers: number; currentRoom?: Room; botOwnerId?: string; contributions: number; staff: boolean; }; export type RoomPermissions = { askedToSpeak: boolean; isSpeaker: boolean; isMod: boolean; }; export type UserWithFollowInfo = BaseUser & { followsYou?: boolean; youAreFollowing?: boolean; iBlockedThem?: boolean; }; export type RoomUser = { roomPermissions?: RoomPermissions | null; } & UserWithFollowInfo; export type CurrentRoom = Room & { users: RoomUser[]; muteMap: BooleanMap; deafMap: BooleanMap; activeSpeakerMap: BooleanMap; autoSpeaker: boolean; }; export type BooleanMap = Record; export enum Relationship { self = 0, following = 1, follower = 2, mutual = 3, none = 7 } export enum RoomRole { speaker = 8, raised_hand = 16, listener = 32 } export enum RoomAuth { owner = 8, mod = 16, user = 32 } ================================================ FILE: kebab/src/http/bot.ts ================================================ import { request } from "./raw"; export type AuthResponse = { username: string; accessToken: string; refreshToken: string; }; /** * Login to the api using you bot's apiKey * @param {string} apiKey You bot's apiKey * @returns {AuthResponse} Bot's username, accessToken and refreshToken */ export const auth = async (apiKey: string) => (await request("POST", "/bot/auth", { apiKey })) as AuthResponse; ================================================ FILE: kebab/src/http/index.ts ================================================ export * from "./raw"; export * from "./wrapper"; export * as bot from "./bot"; ================================================ FILE: kebab/src/http/raw.ts ================================================ import fetch from "isomorphic-unfetch"; const BASE_URL = "https://api.dogehouse.tv"; interface Options { baseUrl?: string; } type Request = ( method: string, endpoint: string, body?: unknown, opts?: Options ) => Promise; export type Http = { request: Request; }; export const create = (baseOpts: Options): Http => { return { request: async ( method: string, endpoint: string, body?: unknown, opts: Options = {} ) => { const { baseUrl = BASE_URL } = { ...baseOpts, ...opts }; return await fetch(`${baseUrl}${endpoint}`, { method, headers: { "Content-Type": "application/json" }, body: body ? JSON.stringify(body) : undefined, }).then((res) => res.json()); }, }; }; // for backward compat, you can kill this if you don't want it anymore export const request: Request = (...params) => create({}).request(...params); ================================================ FILE: kebab/src/http/wrapper.ts ================================================ import { Http } from "./raw"; export type AuthResponse = { username: string; accessToken: string; refreshToken: string; }; export const wrap = (http: Http) => { return { auth: (apiKey: string) => http.request("POST", "/bot/auth", { apiKey }) as Promise, testUser: (username: string) => http.request("GET", `/dev/test-info?username=${username}`) as Promise<{ accessToken: string; refreshToken: string; }>, }; }; ================================================ FILE: kebab/src/index.ts ================================================ export * from "./websocket"; export { wrap as audioWrap } from "./audio/audioWrapper"; export * as http from "./http"; export * from "./entities"; export * from "./util"; export * from "./pagination"; export * from "./client"; ================================================ FILE: kebab/src/pagination.ts ================================================ export type PaginatedRequest = { cursor: C, limit: number }; export type PaginatedReply = { nextCursor: C, initial: boolean }; ================================================ FILE: kebab/src/util/ast.test.ts ================================================ import { tokensToString, stringToToken } from "./ast"; test("to tokens", () => { expect(stringToToken("abcd")).toEqual([{ t: "text", v: "abcd" }]); }); test("to string", () => { expect(tokensToString([{ t: "text", v: "abcd" }])).toEqual("abcd"); expect(tokensToString([{ t: "nonexistent-type", v: "abcd" }])).toEqual(""); }); ================================================ FILE: kebab/src/util/ast.ts ================================================ import { MessageToken, TextToken } from ".."; /** * * @param {string} string The string you want to convert to TextTokens * @returns {TextToken} TextToken[] */ export const stringToToken = (string: string): [TextToken] => [{ t: "text", v: string }]; /** * @param {MessageToken[]} tokens MessageTokens to be converted to string * @returns {string} string */ export const tokensToString = (tokens: MessageToken[]): string => tokens .map(it => { switch (it.t) { case "text": return it.v; case "mention": return `@${it.v}`; case "link": return it.v; case "emote": return `:${it.v}:`; case "block": return `\`${it.v}\``; case "emoji": return it.v; default: return ""; } }) .join(" "); ================================================ FILE: kebab/src/util/index.ts ================================================ export * from "./ast"; ================================================ FILE: kebab/src/websocket/index.ts ================================================ export * as raw from "./raw"; export * from "./wrapper"; export * from "./responses"; ================================================ FILE: kebab/src/websocket/raw.ts ================================================ import WebSocket from "isomorphic-ws"; import ReconnectingWebSocket from "reconnecting-websocket"; import { v4 as generateUuid } from "uuid"; import { User, UUID } from ".."; const heartbeatInterval = 8000; const apiUrl = "wss://api.dogehouse.tv/socket"; // const apiUrl = "ws://localhost:4001/socket"; const connectionTimeout = 15000; export type Token = string; /** * @deprecated */ export type FetchID = UUID; export type Ref = UUID; export type Opcode = string; export type Logger = ( direction: "in" | "out", opcode: Opcode, data?: unknown, fetchId?: Ref, raw?: string ) => void; export type ListenerHandler = ( data: Data, fetchId?: Ref ) => void; export type Listener = { opcode: Opcode; handler: ListenerHandler; }; /** * A reference to the websocket connection, can be created using `connect()` */ export type Connection = { close: () => void; /** * @deprecated */ once: ( opcode: Opcode, handler: ListenerHandler ) => void; addListener: ( opcode: Opcode, handler: ListenerHandler ) => () => void; user: User; initialCurrentRoomId?: string; /** * @deprecated */ send: (opcode: Opcode, data: unknown, fetchId?: FetchID) => void; sendCast: (opcode: Opcode, data: unknown, ref?: Ref) => void; /** * @deprecated */ fetch: ( opcode: Opcode, data: unknown, doneOpcode?: Opcode ) => Promise; sendCall: ( opcode: Opcode, data: unknown, doneOpcode?: Opcode ) => Promise; }; // probably want to remove token/refreshToken // better to use getAuthOptions // when ws tries to reconnect it should use current tokens not the ones it initializes with /** * Creates a Connection object * @param {Token} token Your dogehouse token * @param {Token} refreshToken Your dogehouse refresh token * @returns {Promise} Connection object */ export const connect = ( token: Token, refreshToken: Token, { logger = () => {}, onConnectionTaken = () => {}, onClearTokens = () => {}, url = apiUrl, fetchTimeout, getAuthOptions, waitToReconnect, }: { logger?: Logger; onConnectionTaken?: () => void; onClearTokens?: () => void; url?: string; fetchTimeout?: number; waitToReconnect?: boolean; getAuthOptions?: () => Partial<{ reconnectToVoice: boolean; currentRoomId: string | null; muted: boolean; deafened: boolean; token: Token; refreshToken: Token; }>; } ): Promise => new Promise((resolve, reject) => { const socket = new ReconnectingWebSocket(url, [], { connectionTimeout, WebSocket, }); const api2Send = (opcode: Opcode, data: unknown, ref?: Ref) => { // tmp fix // this is to avoid ws events queuing up while socket is closed // then it reconnects and fires before auth goes off // and you get logged out if (socket.readyState !== socket.OPEN) return; const raw = `{"v":"0.2.0", "op":"${opcode}","p":${JSON.stringify(data)}${ ref ? `,"ref":"${ref}"` : "" }}`; socket.send(raw); logger("out", opcode, data, ref, raw); }; const apiSend = (opcode: Opcode, data: unknown, fetchId?: FetchID) => { // tmp fix // this is to avoid ws events queuing up while socket is closed // then it reconnects and fires before auth goes off // and you get logged out if (socket.readyState !== socket.OPEN) { return; } const raw = `{"op":"${opcode}","d":${JSON.stringify(data)}${ fetchId ? `,"fetchId":"${fetchId}"` : "" }}`; socket.send(raw); logger("out", opcode, data, fetchId, raw); }; const listeners: Listener[] = []; // close & message listener needs to be outside of open // this prevents multiple listeners from being created on reconnect socket.addEventListener("close", (error) => { // I want this here // eslint-disable-next-line no-console console.log(error); if (error.code === 4001) { socket.close(); onClearTokens(); } else if (error.code === 4003) { socket.close(); onConnectionTaken(); } else if (error.code === 4004) { socket.close(); onClearTokens(); } if (!waitToReconnect) reject(error); }); socket.addEventListener("message", (e) => { if (e.data === `"pong"` || e.data === `pong`) { logger("in", "pong"); return; } const message = JSON.parse(e.data); logger("in", message.op, message.d, message.fetchId, e.data); if (message.op === "auth-good") { const connection: Connection = { close: () => socket.close(), once: (opcode, handler) => { const listener = { opcode, handler } as Listener; listener.handler = (...params) => { handler(...(params as Parameters)); listeners.splice(listeners.indexOf(listener), 1); }; listeners.push(listener); }, addListener: (opcode, handler) => { const listener = { opcode, handler } as Listener; listeners.push(listener); return () => listeners.splice(listeners.indexOf(listener), 1); }, user: message.d.user, send: apiSend, sendCast: api2Send, sendCall: ( opcode: Opcode, parameters: unknown, doneOpcode?: Opcode ) => new Promise((resolveCall, rejectFetch) => { // tmp fix // this is to avoid ws events queuing up while socket is closed // then it reconnects and fires before auth goes off // and you get logged out if (socket.readyState !== socket.OPEN) { rejectFetch(new Error("websocket not connected")); return; } const ref: FetchID | false = !doneOpcode && generateUuid(); let timeoutId: NodeJS.Timeout | null = null; const unsubscribe = connection.addListener( doneOpcode ?? opcode + ":reply", (data, arrivedId) => { if (!doneOpcode && arrivedId !== ref) return; if (timeoutId) clearTimeout(timeoutId); unsubscribe(); resolveCall(data); } ); if (fetchTimeout) { timeoutId = setTimeout(() => { unsubscribe(); rejectFetch(new Error("timed out")); }, fetchTimeout); } api2Send(opcode, parameters, ref || undefined); }), fetch: (opcode: Opcode, parameters: unknown, doneOpcode?: Opcode) => new Promise((resolveFetch, rejectFetch) => { // tmp fix // this is to avoid ws events queuing up while socket is closed // then it reconnects and fires before auth goes off // and you get logged out if (socket.readyState !== socket.OPEN) { rejectFetch(new Error("websocket not connected")); return; } const fetchId: FetchID | false = !doneOpcode && generateUuid(); let timeoutId: NodeJS.Timeout | null = null; const unsubscribe = connection.addListener( doneOpcode ?? "fetch_done", (data, arrivedId) => { if (!doneOpcode && arrivedId !== fetchId) return; if (timeoutId) clearTimeout(timeoutId); unsubscribe(); resolveFetch(data); } ); if (fetchTimeout) { timeoutId = setTimeout(() => { unsubscribe(); rejectFetch(new Error("timed out")); }, fetchTimeout); } apiSend(opcode, parameters, fetchId || undefined); }), }; resolve(connection); } else { listeners .filter(({ opcode }) => opcode === message.op) .forEach((it) => it.handler(message.d || message.p, message.fetchId || message.ref) ); } }); socket.addEventListener("open", () => { const id = setInterval(() => { if (socket.readyState === socket.CLOSED) { clearInterval(id); } else { socket.send("ping"); logger("out", "ping"); } }, heartbeatInterval); apiSend("auth", { accessToken: token, refreshToken, reconnectToVoice: false, currentRoomId: null, muted: false, deafened: false, ...getAuthOptions?.(), }); }); }); ================================================ FILE: kebab/src/websocket/responses.ts ================================================ import { Room, RoomUser, ScheduledRoom, User, UUID } from "../entities"; export type GetTopPublicRoomsResponse = { rooms: Room[]; nextCursor: number | null; }; export type GetScheduledRoomsResponse = { nextCursor: string | null; rooms: ScheduledRoom[]; }; export type JoinRoomAndGetInfoResponse = { room: Room; users: RoomUser[]; muteMap: Record; deafMap: Record; roomId: string; activeSpeakerMap: Record; }; export type GetRoomUsersResponse = { users: User[]; roomId: UUID; raiseHandMap: Record; muteMap: Record; deafMap: Record; autoSpeaker: boolean; activeSpeakerMap: Record; }; export type NewRoomDetailsResponse = { roomId: UUID; name: string; chatThrottle: number; isPrivate: boolean; description: string; }; export type InvitationToRoomResponse = { type: "invite"; username: string; displayName: string; avatarUrl: string; bannerUrl: string; roomName: string; roomId: UUID; }; export type CreateBotResponse = { apiKey: string | null; isUsernameTaken: boolean | null; error: string | null; }; ================================================ FILE: kebab/src/websocket/wrapper.ts ================================================ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-nocheck because internet is unpredictable import { Message, MessageToken, BooleanMap, Room, ScheduledRoom, User, UserWithFollowInfo, UUID, } from ".."; import { ChatMode } from "../entities"; import { Connection } from "./raw"; import { GetScheduledRoomsResponse, GetTopPublicRoomsResponse, JoinRoomAndGetInfoResponse, GetRoomUsersResponse, NewRoomDetailsResponse, InvitationToRoomResponse, CreateBotResponse, } from "./responses"; /** * Allows you to handle custom logic on websocket events */ type Handler = (data: Data) => void; /** * A wrapper object created using `wrap()` that can be used to make websocket calls using functions */ export type Wrapper = ReturnType; /** * Creates a wrapper object that allows you to make websocket calls using functions * @param {Connection} connection reference to the websocket connection * @returns {connection} Wrapper object */ export const wrap = (connection: Connection) => ({ connection, /** * Allows you to subscribe to various pre-defined websocket events */ subscribe: { newChatMsg: (handler: Handler<{ userId: UUID; msg: Message }>) => connection.addListener("new_chat_msg", handler), newRoomDetails: (handler: Handler) => connection.addListener("new_room_details", handler), userJoinRoom: (handler: Handler<{ user: User }>) => connection.addListener("new_user_join_room", handler), userLeaveRoom: (handler: Handler<{ userId: UUID; roomId: UUID }>) => connection.addListener("user_left_room", handler), invitationToRoom: (handler: Handler) => connection.addListener("invitation_to_room", handler), handRaised: (handler: Handler<{ userId: UUID }>) => connection.addListener("hand_raised", handler), speakerAdded: ( handler: Handler<{ userId: UUID; muteMap: BooleanMap; deafMap: BooleanMap; }> ) => connection.addListener("speaker_added", handler), speakerRemoved: ( handler: Handler<{ userId: UUID; muteMap: BooleanMap; deafMap: BooleanMap; }> ) => connection.addListener("speaker_removed", handler), }, /** * Allows you to call functions that return information about the ws state */ query: { search: ( query: string ): Promise<{ items: Array; rooms: Room[]; users: User[]; }> => connection.fetch("search", { query }), getMyScheduledRoomsAboutToStart: ( roomId: string ): Promise<{ scheduledRooms: ScheduledRoom[] }> => connection.fetch("get_my_scheduled_rooms_about_to_start", { roomId }), joinRoomAndGetInfo: ( roomId: string ): Promise => connection.fetch("join_room_and_get_info", { roomId }), getInviteList: ( cursor = 0 ): Promise<{ users: User[]; nextCursor: number | null; }> => connection.fetch("get_invite_list", { cursor }), getFollowList: ( username: string, isFollowing: boolean, cursor = 0 ): Promise<{ users: UserWithFollowInfo[]; nextCursor: number | null; }> => connection.fetch("get_follow_list", { username, isFollowing, cursor }), getBlockedFromRoomUsers: ( cursor = 0 ): Promise<{ users: User[]; nextCursor: number | null; }> => connection.fetch("get_blocked_from_room_users", { offset: cursor }), getMyFollowing: ( cursor = 0 ): Promise<{ users: UserWithFollowInfo[]; nextCursor: number | null; }> => connection.fetch("get_my_following", { cursor }), getTopPublicRooms: (cursor = 0): Promise => connection.fetch("get_top_public_rooms", { cursor }), getUserProfile: ( idOrUsername: string ): Promise => connection.fetch("get_user_profile", { userId: idOrUsername }), getScheduledRooms: ( cursor = "", range: "all" | "upcoming" = "all", userId: string | undefined, ): Promise => connection.sendCall("room:get_scheduled", { cursor, range, userId, }), getRoomUsers: (): Promise => connection.fetch( "get_current_room_users", {}, "get_current_room_users_done" ), }, /** * Allows you to call functions that mutate the ws state */ mutation: { userUpdate: (data: Partial): Promise => connection.sendCall("user:update", data), userBlock: (userId: string): Promise => connection.sendCall("user:block", { userId }), userUnblock: (userId: string): Promise => connection.sendCall("user:unblock", { userId }), roomUpdate: (data: { name?: string; privacy?: string; chatThrottle?: number; description?: string; autoSpeaker?: boolean; chatMode?: ChatMode; }): Promise => connection.sendCall("room:update", data), roomBan: (userId: string, shouldBanIp?: boolean): Promise => connection.sendCast("room:ban", { userId, shouldBanIp }), setDeaf: (isDeafened: boolean): Promise> => connection.sendCall("room:deafen", { deafened: isDeafened }), userCreateBot: (username: string): Promise => connection.sendCall(`user:create_bot`, { username }), userAdminUpdate: ( id: UUID, user: { staff?: boolean; contributions?: number; } ) => connection.sendCall(`user:admin_update`, { id, user, }), ban: (username: string, reason: string) => connection.send(`ban`, { username, reason }), deleteScheduledRoom: (id: string): Promise => connection.fetch(`delete_scheduled_room`, { id }), createRoomFromScheduledRoom: (data: { id: string; name: string; description: string; }): Promise<{ room: Room }> => connection.fetch(`create_room_from_scheduled_room`, data), createScheduledRoom: (data: { name: string; description: string; scheduledFor: string; }): Promise<{ error: string } | ScheduledRoom> => connection.fetch(`schedule_room`, data), editScheduledRoom: ( id: string, data: { name: string; description: string; scheduledFor: string; } ): Promise<{ error: string } | ScheduledRoom> => connection.fetch(`edit_scheduled_room`, { id, data }), askToSpeak: () => connection.send(`ask_to_speak`, {}), inviteToRoom: (userId: string) => connection.send(`invite_to_room`, { userId }), speakingChange: (value: boolean) => connection.send(`speaking_change`, { value }), unbanFromRoom: (userId: string): Promise => connection.fetch("unban_from_room", { userId }), follow: (userId: string, value: boolean): Promise => connection.fetch("follow", { userId, value }), sendRoomChatMsg: ( ast: MessageToken[], whisperedTo: string[] = [] ): Promise => connection.send("send_room_chat_msg", { tokens: ast, whisperedTo }), changeModStatus: (userId: string, value: boolean): Promise => connection.send("change_mod_status", { userId, value }), changeRoomCreator: (userId: string): Promise => connection.send("change_room_creator", { userId }), addSpeaker: (userId: string): Promise => connection.send("add_speaker", { userId }), deleteRoomChatMessage: (userId: string, messageId: string): Promise => connection.send("delete_room_chat_message", { userId, messageId }), unbanFromRoomChat: (userId: string): Promise => connection.send("unban_from_room_chat", { userId }), banFromRoomChat: (userId: string): Promise => connection.send("ban_from_room_chat", { userId }), setListener: (userId: string): Promise => connection.send("set_listener", { userId }), setMute: (isMuted: boolean): Promise> => connection.fetch("mute", { value: isMuted }), leaveRoom: (): Promise<{ roomId: UUID }> => connection.fetch("leave_room", {}, "you_left_room"), createRoom: (data: { name: string; privacy: string; description: string; }): Promise<{ error: string } | { room: Room }> => connection.fetch("create_room", data), editProfile: (data: { displayName: string; username: string; bio: string; avatarUrl: string; bannerUrl?: string; }): Promise<{ isUsernameTaken: boolean }> => connection.fetch("edit_profile", { data }), editRoom: (data: { name: string; privacy: string; description: string; }): Promise<{ error: string } | { room: Room }> => connection.fetch("edit_room", data), }, }); ================================================ FILE: kebab/tsconfig.json ================================================ { "compilerOptions": { "target": "es5", "module": "commonjs", "declaration": true, "skipLibCheck": true, "outDir": "./lib", "strict": true, "lib": ["dom", "ES6"], "esModuleInterop": true }, "include": ["src"], "exclude": ["node_modules", "src/**/*.test.ts"] } ================================================ FILE: kibbeh/.babelrc ================================================ { "presets": ["next/babel"] } ================================================ FILE: kibbeh/.eslintignore ================================================ node_modules/ *.spec.tsx *.spec.tsx.snap src/generated/ ================================================ FILE: kibbeh/.eslintrc.json ================================================ { "env": { "browser": true, "es2021": true, "node": true }, "extends": [ "eslint:recommended", "plugin:react/recommended", "plugin:react-hooks/recommended", "plugin:@typescript-eslint/recommended", "plugin:cypress/recommended" ], "parser": "@typescript-eslint/parser", "parserOptions": { "ecmaFeatures": { "jsx": true }, "ecmaVersion": 12, "sourceType": "module" }, "plugins": ["react", "@typescript-eslint/eslint-plugin", "react-hooks"], "settings": { "react": { "pragma": "React", "version": "detect" }, "import/resolver": "parcel2", "html/xml-extensions": [".html"], "html/indent": "+2" }, "rules": { "@typescript-eslint/no-unused-vars": "off", "@typescript-eslint/no-explicit-any": "off", "@typescript-eslint/no-var-requires": "off", "@typescript-eslint/no-non-null-assertion": "off", "@typescript-eslint/no-empty-interface": "off", "@typescript-eslint/explicit-module-boundary-types": "off", "@typescript-eslint/member-delimiter-style": "off", "no-empty": "off", "no-empty-pattern": "off", "react/prop-types": "off", "accessor-pairs": "error", "array-bracket-newline": "off", "array-bracket-spacing": "error", "array-callback-return": "off", "array-element-newline": ["error", "consistent"], "arrow-body-style": "off", "arrow-parens": "off", "arrow-spacing": "error", "block-scoped-var": "error", "block-spacing": "error", "brace-style": "error", "camelcase": "off", "comma-dangle": "off", "comma-spacing": "error", "comma-style": "error", "complexity": "off", "computed-property-spacing": "error", "consistent-this": "error", "default-case-last": "error", "default-param-last": "error", "dot-location": ["error", "property"], "dot-notation": "error", "eol-last": "error", "eqeqeq": "error", "func-call-spacing": "off", "func-name-matching": "error", "func-names": "error", "func-style": [ "error", "declaration", { "allowArrowFunctions": true } ], "function-call-argument-newline": ["error", "consistent"], "function-paren-newline": "off", "generator-star-spacing": "error", "global-require": "error", "grouped-accessor-pairs": "error", "guard-for-in": "error", "handle-callback-err": "error", "id-blacklist": "error", "id-denylist": "error", "id-match": "error", "indent": [ "off", 2, { "offsetTernaryExpressions": true } ], "init-declarations": "error", "jsx-quotes": "error", "key-spacing": ["error"], "keyword-spacing": "off", "line-comment-position": "off", "linebreak-style": "error", "lines-around-comment": "off", "lines-around-directive": "error", "lines-between-class-members": "error", "max-classes-per-file": "error", "max-depth": "error", "max-len": "off", "max-lines": "off", "max-lines-per-function": "off", "max-nested-callbacks": "error", "max-statements": "off", "max-statements-per-line": "off", "multiline-comment-style": "off", "multiline-ternary": "off", "new-cap": "error", "new-parens": "error", "newline-after-var": "off", "newline-before-return": "off", "newline-per-chained-call": "off", "no-alert": "error", "no-array-constructor": "error", "no-await-in-loop": "off", "no-bitwise": "off", "no-buffer-constructor": "error", "no-caller": "error", "no-catch-shadow": "error", "no-console": "off", "no-constructor-return": "error", "no-continue": "error", "no-div-regex": "error", "no-duplicate-imports": "error", "@typescript-eslint/no-empty-function": "off", "no-eq-null": "error", "no-eval": "error", "no-extend-native": "error", "no-extra-bind": "error", "no-extra-label": "error", "no-extra-parens": "off", "no-floating-decimal": "error", "no-implicit-coercion": "off", "no-implicit-globals": "error", "no-implied-eval": "error", "no-inline-comments": "off", "no-invalid-this": "error", "no-iterator": "error", "no-label-var": "error", "no-labels": "error", "no-lone-blocks": "error", "no-lonely-if": "error", "no-loop-func": "error", "no-loss-of-precision": "error", "@typescript-eslint/no-magic-numbers": "off", "no-mixed-operators": "off", "no-mixed-requires": "error", "no-multi-assign": "error", "no-multi-spaces": "error", "no-multi-str": "error", "no-multiple-empty-lines": "error", "no-native-reassign": "error", "no-negated-condition": "off", "no-negated-in-lhs": "error", "no-nested-ternary": "error", "no-new": "error", "no-new-func": "error", "no-new-object": "error", "no-new-require": "error", "no-new-wrappers": "error", "no-nonoctal-decimal-escape": "error", "no-octal-escape": "error", "no-param-reassign": "error", "no-path-concat": "error", "no-plusplus": "off", "no-process-env": "off", "no-process-exit": "error", "no-promise-executor-return": "error", "no-proto": "error", "no-restricted-exports": "error", "no-restricted-globals": "error", "no-restricted-imports": "error", "no-restricted-modules": "error", "no-restricted-properties": "error", "no-restricted-syntax": "error", "no-script-url": "error", "no-self-compare": "error", "no-sequences": "error", "@typescript-eslint/no-shadow": "error", "no-spaced-func": "off", "no-sync": "error", "no-tabs": "error", "no-template-curly-in-string": "error", "no-throw-literal": "error", "no-trailing-spaces": "error", "no-undef-init": "off", "no-undefined": "off", "no-underscore-dangle": "off", "no-unmodified-loop-condition": "error", "no-unneeded-ternary": "error", "no-unreachable-loop": "error", "no-unsafe-optional-chaining": "error", "no-unused-expressions": "error", "@typescript-eslint/no-use-before-define": "error", "no-useless-backreference": "error", "no-useless-call": "error", "no-useless-computed-key": "error", "no-useless-concat": "error", "no-useless-constructor": "error", "no-useless-rename": "error", "no-useless-return": "error", "no-var": "error", "no-void": "error", "no-warning-comments": "error", "no-whitespace-before-property": "error", "nonblock-statement-body-position": "error", "object-curly-newline": "error", "object-curly-spacing": ["error", "always"], "object-property-newline": [ "error", { "allowAllPropertiesOnSameLine": true } ], "object-shorthand": "error", "one-var": ["error", "never"], "operator-assignment": "error", "operator-linebreak": "error", "padded-blocks": ["error", "never"], "padding-line-between-statements": "off", "prefer-arrow-callback": "error", "prefer-const": "error", "prefer-destructuring": "off", "prefer-exponentiation-operator": "error", "prefer-named-capture-group": "off", "prefer-numeric-literals": "error", "prefer-object-spread": "error", "prefer-promise-reject-errors": "error", "prefer-reflect": "error", "prefer-regex-literals": "error", "prefer-rest-params": "error", "prefer-spread": "error", "prefer-template": "off", "quote-props": "off", "quotes": "off", "radix": "off", "require-atomic-updates": "error", "require-await": "error", "require-unicode-regexp": "off", "rest-spread-spacing": "error", "@typescript-eslint/semi": [ "error", "always", { "omitLastInOneLineBlock": true } ], "semi-spacing": "error", "semi-style": "error", "no-extra-semi": "error", "space-before-blocks": "error", "space-before-function-paren": [ "error", { "anonymous": "never", "named": "never", "asyncArrow": "always" } ], "space-in-parens": ["error", "never"], "space-infix-ops": "error", "space-unary-ops": [ "error", { "words": true, "nonwords": false } ], "spaced-comment": "error", "strict": "error", "switch-colon-spacing": "error", "symbol-description": "error", "template-curly-spacing": "error", "template-tag-spacing": "error", "unicode-bom": "error", "valid-jsdoc": "error", "vars-on-top": "error", "wrap-iife": "error", "wrap-regex": "off", "yield-star-spacing": "error", "yoda": "error", "@typescript-eslint/ban-types": ["warn"], "react/react-in-jsx-scope": "off" } } ================================================ FILE: kibbeh/.gitignore ================================================ _ .env.local .idea sw.js.map ================================================ FILE: kibbeh/.prettierignore ================================================ *.spec.tsx *.spec.tsx.snap src/generated/ ================================================ FILE: kibbeh/.prettierrc.js ================================================ module.exports = { trailingComma: "es5", tabWidth: 2, semi: true, singleQuote: false, arrowParens: "always", }; ================================================ FILE: kibbeh/.storybook/main.js ================================================ const path = require("path"); const toPath = (_path) => path.join(process.cwd(), _path); module.exports = { stories: ["../src/stories/**/*.story.@(ts|tsx|js|jsx|mdx)"], addons: ["@storybook/addon-links", "@storybook/addon-essentials", "@storybook/addon-postcss"], webpackFinal: async (config, { configType }) => { // `configType` has a value of 'DEVELOPMENT' or 'PRODUCTION' // You can change the configuration based on that. // 'PRODUCTION' is used when building the static version of storybook. // Added to support PostCSS v8.X /** * CSS handling, specifically overriding postcss loader */ // Find the only Storybook webpack rule that tests for css const cssRule = config.module.rules.find((rule) => "test.css".match(rule.test) ); // Which loader in this rule mentions the custom Storybook postcss-loader? const loaderIndex = cssRule.use.findIndex((loader) => { // Loaders can be strings or objects const loaderString = typeof loader === "string" ? loader : loader.loader; // Find the first mention of "postcss-loader", it may be in a string like: // "@storybook/core/node_modules/postcss-loader" return loaderString.includes("postcss-loader"); }); // Simple loader string form, removes the obsolete "options" key cssRule.use[loaderIndex] = "postcss-loader"; // SVG // Needed for SVG importing using svgr const indexOfRuleToRemove = config.module.rules.findIndex( (rule) => rule.test && rule.test.toString().includes("svg") ); config.module.rules.splice(indexOfRuleToRemove, 1, { test: /\.(ico|jpg|jpeg|png|gif|eot|otf|webp|ttf|woff|woff2|cur|ani|pdf)(\?.*)?$/, loader: require.resolve("file-loader"), options: { name: "static/media/[name].[hash:8].[ext]", esModule: false, }, }); config.module.rules.push({ test: /\.svg$/, use: [ { loader: "@svgr/webpack", options: { svgo: false, }, }, ], }); return { ...config, resolve: { ...config.resolve, alias: { ...config.resolve.alias, // "@emotion/core": toPath("node_modules/@emotion/react"), // "@emotion/styled": toPath("node_modules/@emotion/styled"), // "emotion-theming": toPath("node_modules/@emotion/react") }, }, }; }, }; ================================================ FILE: kibbeh/.storybook/manager.js ================================================ import { addons } from "@storybook/addons"; import { create } from "@storybook/theming"; addons.setConfig({ theme: create({ base: "dark", brandTitle: "DogeBook", }), }); ================================================ FILE: kibbeh/.storybook/preview-head.html ================================================
================================================ FILE: kibbeh/.storybook/preview.js ================================================ import "../src/styles/globals.css"; import { addDecorator } from "@storybook/react"; import { init_i18n } from "../src/lib/i18n"; import { QueryClientProvider, QueryClient } from "react-query"; let hasInit = false; const client = new QueryClient(); addDecorator((storyFn) => { if (!hasInit) { init_i18n(); hasInit = true; } return {storyFn()}; }); export const parameters = { backgrounds: { default: "bg-on-figma", values: [ { name: "bg-on-figma", value: "#0b0e11", }, { name: "black", value: "#000", }, ], }, }; ================================================ FILE: kibbeh/.stylelintrc.json ================================================ { "extends": "stylelint-config-standard", "rules": { "selector-descendant-combinator-no-non-space": null, "indentation": null } } ================================================ FILE: kibbeh/README.md ================================================

Taking voice conversations to the moon 🚀


# What is this folder? This folder is called kibbeh ([/ˈkɪbi/](https://en.wikipedia.org/wiki/Kibbeh)), it is currently used for our Next.js frontend. It's live on 👉 [dogehouse.tv](https://dogehouse.tv) # How can I contribute? **We're using [Yarn](https://yarnpkg.com/) for this project, do not use npm for the following commands** Compile @dogehouse/kebab by executing the following commands: ```bash cd ../kebab yarn yarn build ``` After you successfully compiled Kebab, go back to this directory and install all modules (@dogehouse/kebab is a yarn workspace, you do not need to manually copy it to node_modules) You should now be all set to go, go ahead and run the dev server ```bash cd ../kibbeh yarn yarn staging ``` > If for some reason the above commands dont work and leave you with a `@dogehouse/kebab` module not found error, just copy the entire `dogehouse/kebab` directory over to `dogehouse/node_modules/@dogehouse/kebab` > **NOTE:** OAuth login is kinda broken as of right now *(if running using `yarn staging`)* so to get around it follow the steps below: > - Enter your credentials in OAuth > - You should now reach a page saying `not found`. Copy the url of the page > - Edit the previously copied URL and change the protocol from `https` to `http` and the hostname from `doge-staging.stripcode.dev` to `localhost:3000`. For example: `https://doge-staging.stripcode.dev/?accessToken=YOUR_TOKEN_HERE` would be changed to `http://localhost:3000/?accessToken=YOUR_TOKEN_HERE` > - You should now be logged in. > Also to prevent repeating the steps mentioned above, instead of logging in just directly go to `http://localhost:3000/dash` and it should read your tokens from localstorage and log you in ================================================ FILE: kibbeh/cypress/.gitignore ================================================ videos screenshots ================================================ FILE: kibbeh/cypress/fixtures/example.json ================================================ { "name": "Using fixtures to represent data", "email": "hello@cypress.io", "body": "Fixtures are a great way to mock data for responses to routes" } ================================================ FILE: kibbeh/cypress/integration/create-scheduled-room.ts ================================================ import { defaultRoomName, defaultTestUsername, } from "../support/test-constants"; describe("create scheduled room then", () => { before(() => { cy.loginTestUser(); cy.dataTestId("create-scheduled-room").click(); cy.byName("name").type(defaultRoomName); cy.clickSubmit(); }); it("verify scheduled room has been created", () => { cy.dataTestId("view-scheduled-rooms").click(); cy.dataTestId(`scheduledroom:name:${defaultRoomName}`); }); // it("verify scheduled room shows up on user profile", () => { // for somereason this "dropdown-trigger" is being found more than once and cypress dosent wanna click it // cy.dataTestId("dropdown-trigger").click(); // cy.dataTestId("profile-link").click(); // cy.dataTestId(`user:${defaultTestUsername}:tab:scheduled`).click(); // cy.dataTestId(`scheduledroom:name:${defaultRoomName}`); // }); }); ================================================ FILE: kibbeh/cypress/integration/edit-profile.ts ================================================ import {defaultAvatarUrl, defaultBannerUrl, defaultBio} from "../support/test-constants"; describe("edit profile", () => { before(() => { cy.loginTestUser(); }); it("from feed", () => { cy.dataTestId("edit-profile-widget").click(); cy.byName("avatarUrl").clear().type(defaultAvatarUrl); cy.byName("bannerUrl").clear().type(defaultBannerUrl); cy.byName("bio").clear().type(defaultBio); cy.clickSubmit(); cy.dataTestId("current-user:bio").invoke("text").should("eq", defaultBio); }); }); ================================================ FILE: kibbeh/cypress/integration/room-creator.ts ================================================ import { defaultRoomName, defaultTestUsername, } from "../support/test-constants"; describe("create room then", () => { before(() => { cy.loginTestUser(); cy.dataTestId("feed-action-button").click(); cy.byName("name").type(defaultRoomName); cy.clickSubmit(); }); it("verify room name and creator name", () => { cy.dataTestId("room-title").invoke("text").should("eq", defaultRoomName); cy.dataTestId(`room:user:node:${defaultTestUsername}`); }); it("mute", () => { cy.dataTestId("mute").click(); cy.dataTestId(`muted:${defaultTestUsername}`); cy.dataTestId("mute").click(); cy.dataTestId(`muted:${defaultTestUsername}`).should("not.exist"); }); it("deafen", () => { cy.dataTestId("deafen").click(); cy.dataTestId(`deafened:${defaultTestUsername}`); cy.dataTestId("deafen").click(); cy.dataTestId(`deafened:${defaultTestUsername}`).should("not.exist"); }); it("deafen/mute sequence", () => { cy.testDeafenSequence(); cy.dataTestId(`deafened:${defaultTestUsername}`).should("not.exist"); }); it("invite friends", () => { cy.dataTestId("invite-friends").click(); cy.dataTestId("container"); cy.go("back"); }); it("settings", () => { cy.dataTestId("room-settings").click(); cy.closeModal(); }); it("profile modal", () => { cy.dataTestId(`room:user:node:${defaultTestUsername}`).click(); cy.dataTestId("profile-info-username") .invoke("text") .should("eq", "@" + defaultTestUsername); cy.closeModal(); }); it("minimized room widget deafen/mute sequence desktop", () => { cy.viewport(2560, 1440); cy.dataTestId(`logo-link`).click(); cy.testDeafenSequence(); }); it("floating room widget deafen/mute sequence", () => { cy.viewport("iphone-x"); cy.dataTestId("floating-room-container").should("exist"); cy.testDeafenSequence(); cy.dataTestId(`room-card:${defaultRoomName}`).click(); }); it("leave room", () => { cy.dataTestId("leave-room").click(); }); }); ================================================ FILE: kibbeh/cypress/integration/search.ts ================================================ import { defaultTestUsername } from "../support/test-constants"; describe("searchbar", () => { before(() => { cy.loginTestUser(); }); it("search", () => { cy.dataTestId("searchbar").type("@" + defaultTestUsername); cy.dataTestId(`search:user:${defaultTestUsername}`).click(); cy.dataTestId("profile-info-username") .invoke("text") .should("eq", "@" + defaultTestUsername); }); }); ================================================ FILE: kibbeh/cypress/plugins/index.js ================================================ /// // *********************************************************** // This example plugins/index.js can be used to load plugins // // You can change the location of this file or turn off loading // the plugins file with the 'pluginsFile' configuration option. // // You can read more here: // https://on.cypress.io/plugins-guide // *********************************************************** // This function is called when a project is opened or re-opened (e.g. due to // the project's config changing) /** * @type {Cypress.PluginConfig} */ // eslint-disable-next-line no-unused-vars module.exports = (on, config) => { // `on` is used to hook into various events Cypress emits // `config` is the resolved Cypress config } ================================================ FILE: kibbeh/cypress/plugins/sample_spec.js ================================================ ================================================ FILE: kibbeh/cypress/support/commands.ts ================================================ // *********************************************** // This example commands.js shows you how to // create various custom commands and overwrite // existing commands. // // For more comprehensive examples of custom // commands please read more here: // https://on.cypress.io/custom-commands // *********************************************** // // // -- This is a parent command -- // Cypress.Commands.add('login', (email, password) => { ... }) // // // -- This is a child command -- // Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... }) // // // -- This is a dual command -- // Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... }) // // // -- This will overwrite an existing command -- // Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... }) import { defaultTestUsername } from "./test-constants"; Cypress.Commands.add("dataTestId", (value, wait = false) => { const selector = `[data-testid="${value}"]`; if (wait) { return cy.waitFor(selector); } else { return cy.get(selector); } }); Cypress.Commands.add("closeModal", () => { return cy.get(`[data-testid="close-modal"]`).click(); }); Cypress.Commands.add("byName", (value) => { return cy.get(`[name=${value}]`); }); Cypress.Commands.add("clickSubmit", () => { return cy.get(`button[type="submit"]`).click(); }); Cypress.Commands.add("testDeafenSequence", () => { // deafen -> mute will undeafen cy.dataTestId("deafen").click(); cy.dataTestId(`mic-off`); cy.dataTestId(`headphone-off`); cy.dataTestId("mute").click(); cy.dataTestId(`mic-on`); cy.dataTestId(`headphone-on`); // mute -> deafen -> mute will undeafen cy.dataTestId("mute").click(); cy.dataTestId(`mic-off`); cy.dataTestId("deafen").click(); cy.dataTestId(`mic-off`); cy.dataTestId(`headphone-off`); cy.dataTestId("mute").click(); cy.dataTestId(`mic-on`); cy.dataTestId(`headphone-on`); }); Cypress.Commands.add("loginTestUser", (value = defaultTestUsername) => { cy.viewport(2560, 1440); cy.visit("/", { onBeforeLoad(win) { cy.stub(win, "prompt").returns(value); }, }); return cy.dataTestId("create-test-user").click(); }); ================================================ FILE: kibbeh/cypress/support/index.d.ts ================================================ // load type definitions that come with Cypress module // eslint-disable-next-line spaced-comment /// declare namespace Cypress { interface Chainable { dataTestId(value: string, wait?: boolean): Chainable; byName(value: string): Chainable; clickSubmit(): Chainable; closeModal(): Chainable; loginTestUser(value?: string): Chainable; testDeafenSequence(): void; } } ================================================ FILE: kibbeh/cypress/support/index.js ================================================ // *********************************************************** // This example support/index.js is processed and // loaded automatically before your test files. // // This is a great place to put global configuration and // behavior that modifies Cypress. // // You can change the location of this file or turn off // automatically serving support files with the // 'supportFile' configuration option. // // You can read more here: // https://on.cypress.io/configuration // *********************************************************** // Import commands.js using ES2015 syntax: import "./commands"; // Alternatively you can use CommonJS syntax: // require('./commands') ================================================ FILE: kibbeh/cypress/support/test-constants.ts ================================================ export const defaultTestUsername = "cypress_user"; export const defaultRoomName = "DogeHouse Acquisition Discussion"; export const defaultAvatarUrl = "https://pbs.twimg.com/profile_images/1152793238761345024/VRBvxeCM_400x400.jpg"; export const defaultBannerUrl = "https://pbs.twimg.com/profile_banners/840626569743912960/1601562221/600x200"; export const defaultBio = "I am a good description, I promise."; ================================================ FILE: kibbeh/cypress/tsconfig.json ================================================ { "compilerOptions": { "sourceMap": true, "target": "es6", "jsx": "preserve", "moduleResolution": "node", "experimentalDecorators": true, "noEmitOnError": false, "resolveJsonModule": true, "importHelpers": true, "strict": true, "lib": ["ESNext", "DOM"], "types": ["cypress"], "module": "commonjs", "esModuleInterop": true, "preserveSymlinks": true, "typeRoots": ["./node_modules/@types"], "downlevelIteration": true, "allowJs": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true // "baseUrl": "src" }, "include": ["./**/*.ts"], "exclude": ["node_modules"] } ================================================ FILE: kibbeh/cypress.json ================================================ { "baseUrl": "http://localhost:3000", "defaultCommandTimeout": 20000, "env": { "apiBaseUrl": "http://localhost:4001" }, "video": false, "screenshotOnRunFailure": false } ================================================ FILE: kibbeh/deploy.sh ================================================ #!/bin/bash set -e git pull origin staging git checkout prod git merge staging git push origin prod git checkout staging ================================================ FILE: kibbeh/next-env.d.ts ================================================ /// /// ================================================ FILE: kibbeh/next.config.js ================================================ const withTM = require("next-transpile-modules")(["@dogehouse/kebab"]); module.exports = withTM({ future: { webpack5: true, }, reactStrictMode: true, typescript: { // !! WARN !! // Dangerously allow production builds to successfully complete even if // your project has type errors. // @todo remove this once storybook is fixed // !! WARN !! // ignoreBuildErrors: true, }, }); ================================================ FILE: kibbeh/package.json ================================================ { "name": "@dogehouse/kibbeh", "version": "0.1.0", "private": true, "scripts": { "staging": "cross-env NEXT_PUBLIC_IS_STAGING=true NEXT_PUBLIC_API_BASE_URL=https://doge-staging.stripcode.dev next dev", "dev": "next dev", "build": "next build", "start": "next start", "compile": "tsc", "sync:i18": "ts-node --project scripts/tsconfig.json scripts/syncTranslations.ts", "i18": "yarn sync:i18", "lint": "eslint src", "format": "prettier --write src", "storybook": "start-storybook -p 6006 -s ./public", "build-storybook": "build-storybook -s ./public", "convert-icons": "svgr ../.redesign-assets/mobile/icons --replace-attr-values '#fff'='currentColor' --replace-attr-values 'none'='currentColor' --typescript --out-dir src/icons", "cy:install": "cypress install", "cy:run": "cypress run --headless --browser chrome", "cy:open": "cypress open --browser chrome", "test": "jest", "test:ci": "jest --ci", "test:watch": "jest --watch", "test:e2e:ci": "start-server-and-test dev http://localhost:3000 cy:run" }, "dependencies": { "@date-io/date-fns": "^1.3.13", "@dogehouse/kebab": "workspace:kebab", "@material-ui/core": "^4.11.4", "@material-ui/pickers": "^3.3.10", "@svgr/webpack": "^5.5.0", "@tailwindcss/line-clamp": "^0.2.0", "date-fns": "^2.21.1", "downshift": "^6.1.3", "emoji-regex": "^9.2.2", "formik": "^2.2.6", "grapheme-splitter": "^1.0.4", "hark": "^1.2.3", "i18next": "^20.2.2", "i18next-browser-languagedetector": "^6.1.0", "i18next-http-backend": "^1.2.2", "is-electron": "^2.2.0", "isomorphic-fetch": "^3.0.0", "lodash": "^4.17.21", "mediasoup-client": "^3.6.30", "next": "10.2.0", "normalize-url": "4", "nprogress": "^0.2.0", "rc-slider": "^9.7.2", "react": "17.0.2", "react-dom": "^17.0.2", "react-draggable": "^4.4.3", "react-feather": "^2.0.9", "react-hotkeys": "^2.0.0", "react-i18next": "^11.8.15", "react-modal": "^3.13.1", "react-popper": "^2.2.5", "react-query": "^3.15.0", "react-responsive": "^8.2.0", "react-spring": "^9.1.2", "react-use-gesture": "^9.1.3", "react-virtual": "^2.7.1", "superstruct": "^0.15.1", "tslib": "^2.2.0", "twemoji-parser": "^13.0.0", "use-debounce": "^6.0.1", "uuid": "^8.3.2", "wakelock-lazy-polyfill": "^1.0.0", "zustand": "^3.4.2" }, "devDependencies": { "@babel/runtime": "^7.13.17", "@storybook/addon-essentials": "^6.2.9", "@storybook/addon-links": "^6.2.9", "@storybook/addon-postcss": "^2.0.0", "@storybook/react": "^6.2.9", "@storybook/theming": "^6.2.9", "@svgr/cli": "^5.5.0", "@tailwindcss/line-clamp": "^0.2.0", "@testing-library/jest-dom": "^5.12.0", "@testing-library/react": "^11.2.6", "@types/emoji-mart": "^3.0.4", "@types/hark": "^1.2.1", "@types/isomorphic-fetch": "^0.0.35", "@types/jest": "^26.0.23", "@types/lodash": "^4.14.168", "@types/node": "^14.14.43", "@types/nprogress": "^0.2.0", "@types/react": "^17.0.4", "@types/react-dom": "^17.0.3", "@types/react-i18next": "^8.1.0", "@types/react-modal": "^3.12.0", "@types/react-responsive": "^8.0.2", "@types/superstruct": "^0.8.2", "@types/twemoji": "^12.1.1", "@types/twemoji-parser": "^12.1.0", "@typescript-eslint/eslint-plugin": "^4.22.0", "@typescript-eslint/parser": "^4.22.0", "autoprefixer": "^10.2.5", "babel-jest": "^26.6.3", "babel-loader": "^8.2.2", "cross-env": "^7.0.3", "css-loader": "^5.2.4", "cypress": "^7.2.0", "eslint": "^7.25.0", "eslint-plugin-cypress": "^2.11.2", "eslint-plugin-react": "^7.23.2", "eslint-plugin-react-hooks": "^4.2.0", "jest": "^26.6.3", "mutationobserver-shim": "^0.3.7", "next-transpile-modules": "^7.0.0", "postcss": "^8.2.13", "postcss-import": "^14.0.1", "postcss-loader": "v4.2.0", "prettier": "^2.2.1", "start-server-and-test": "^1.12.1", "style-loader": "^2.0.0", "stylelint": "^13.13.0", "stylelint-config-standard": "^22.0.0", "tailwind-scrollbar": "^1.3.0", "tailwindcss": "^2.1.2", "ts-node": "9.1.1", "typescript": "4.2.4" } } ================================================ FILE: kibbeh/postcss.config.js ================================================ module.exports = { plugins: { tailwindcss: {}, autoprefixer: {}, }, }; ================================================ FILE: kibbeh/public/locales/af/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "Laai Meer", "loading": "Laai Tans...", "noUsersFound": "geen gebruikers gevind nie", "ok": "ok", "yes": "ja", "no": "nee", "cancel": "kanselleer", "save": "stoor", "edit": "wysig", "delete": "verwyder", "joinRoom": "sluit aan", "copyLink": "kopieër skakel", "copied": "gekopieër", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Please give DogeHouse Accessibility permessions", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Gedemp | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Oorsprong Storie", "link_2": "Discord", "link_3": "Meld 'n fout aan" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "verbod", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Lys van gebruikers wie nie in private kamers is nie, en vir wie jy volg", "currentRoom": "tans in:", "startPrivateRoom": "Begin 'n private kamer saam met hulle", "title": "People" }, "followList": { "followHim": "follow", "followingHim": "following", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Skep Kamer", "refresh": "Refresh", "editRoom": "Edit Room", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "kamer verwyder, gaan terug", "shareRoomLink": "deel skakel na kamer", "inviteFollowers": "Jy kan jou volgers nooi wie aanlyn is", "whenFollowersOnline": "Wanneer jou volgers aanlyn is, sal hulle hier verskyn" }, "login": { "headerText": "Ons neem stemgesprekke na die maan 🚀", "featureText_1": "Donker tema", "featureText_2": "Oop aansluitings", "featureText_3": "Multi-platform ondersteuning", "featureText_4": "Oop Bron", "featureText_5": "teks-klets", "featureText_6": "Aangedryf deur Doge", "loginGithub": "Teken aan met GitHub", "loginTwitter": "Teken aan met Twitter", "createTestUser": "Maak toets gebruiker", "loginDiscord": "Login with Discord" }, "myProfile": { "logout": "teken uit", "probablyLoading": "waarskynlik besig om te laai...", "voiceSettings": "gaan na stem instellings", "soundSettings": "gaan na klank instellings", "deleteAccount": "verwyder rekening", "overlaySettings": "go to overlay settings", "couldNotFindUser": "Sorry, we could not find that user", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "Oeps! Hierdie bladsy het verlore geraak in gesprek.", "goHomeMessage": "Moenie kommer nie. Jy kan", "goHomeLinkText": "gaan huistoe" }, "room": { "speakers": "Sprekers", "requestingToSpeak": "Versoek om te praat", "listeners": "Luisteraars", "allowAll": "Allow all", "allowAllConfirm": "Are you sure? This will allow all {{count}} requesting users to speak" }, "searchUser": { "search": "soek..." }, "soundEffectSettings": { "header": "Klanke", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "wysig profiel", "followsYou": "volg jou", "followers": "volgelinge", "following": "volg", "followHim": "follow", "followingHim": "following", "copyProfileUrl": "copy profile url", "urlCopied": "URL copied to clipboard", "unfollow": "Unfollow", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Stem instellings", "mic": "mikrofoon:", "permissionError": "Geen mikrofone gevind nie. Jy het óf geen ingeprop nie, of jy het nie vir hierdie webtuiste toestemming gegee nie.", "refresh": "herlaai mikrofoon lys", "volume": "volume:", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "Invalid app title", "label": "Enter App Title" }, "header": "Overlay Settings", "errorMsg": "Please enter valid app title", "label": "Enter app title" }, "download": { "starting": "Starting download...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "Click on the button below to start download", "download_now": "Download Now", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Verbande gebruikers", "unban": "Ontban", "noBans": "Niemand is al verban nie" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Verlaat huidige kamer", "confirmLeaveRoom": "Is jy seker jy wil waai?", "leave": "Verlaat", "inviteUsersToRoomBtn": "Nooi gebruikers na kamer", "invite": "Nooi", "toggleMuteMicBtn": "Wissel demp mikrofoon", "mute": "Demp", "unmute": "Ontdemp", "makeRoomPublicBtn": "Maak kamer publiek!", "settings": "Instellings", "speaker": "Sprekers", "listener": "Luisteraar", "chat": "Chat", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "Jou toestel word tans nie ondersteun nie. Jy kan 'n", "linkText": "kwessie op GitHub", "addSupport": "meld en ons sal probeer om ondersteuning vir jou testel by te voeg." }, "inviteButton": { "invited": "Genooi", "inviteToRoom": "Nooi na kamer" }, "micPermissionBanner": { "permissionDenied": "Toestemming ontken om jou mikrofoon te gebruik (jy mag dalk in jou blaaier instellings die bladsy te moet herlaai)", "dismiss": "ontslaan", "tryAgain": "probeer weer" }, "keyboardShortcuts": { "setKeybind": "stel sleutelbind", "listening": "luister", "toggleMuteKeybind": "wissel demp sleutelbind", "togglePushToTalkKeybind": "wissel push-to-talk sleutelbind", "toggleOverlayKeybind": "toggle overlay keybind", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "geen klank verbruiker vir een of ander rede" }, "addToCalendar": { "add": "Voeg in kalender" }, "wsKilled": { "description": "WebSocket was vernietig deur die bediener. Dit gebeur gewoonlik as jy die webtuiste oopmaak in 'n ander oortjie.", "reconnect": "verbind weer" }, "modals": { "createRoomModal": { "public": "publiek", "private": "privaat", "roomName": "kamer naam", "roomDescription": "kamer beskrying", "descriptionError": "maximum lengte 500", "nameError": "moet tussen 2 en 60 karakters lank wees", "subtitle": "Fill the following fields to start a new room" }, "invitedToJoinRoomModal": { "newRoomCreated": "Nuwe kamer geskep", "roomInviteFrom": "Kamer uitnodiging van", "justStarted": "Hul het tans begin", "likeToJoin": ", wil jy graag inskakel?", "inviteReceived": "jy is genooi na" }, "editProfileModal": { "usernameTaken": "gebruikersnaam geneem", "avatarUrlError": "Ongeldige foto", "avatarUrlLabel": "Github/Twitter/Discord avatar skakel", "displayNameError": "lengte 2 tot 50 karakters", "displayNameLabel": "Vertoonnaam", "usernameError": "Lengte 4 tot 15 karakters en slegte alfanumeries/onderstreep", "usernameLabel": "gebruikersnaam", "bioError": "maximum lengte van 160 karakters", "bioLabel": "Bio", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "Is jy seker jy wil hierdie gebruiker verban van hierdie kamer (en enige nuwe kamers van jou)?", "blockUser": "verban gebruiker", "makeMod": "maak mod", "unmod": "unmod", "addAsSpeaker": "voeg by as spreker", "moveToListener": "skuif na luisteraar", "banFromChat": "verban van gesprek", "banFromRoom": "verban van kamer", "goBackToListener": "gaan terug na luisteraar", "deleteMessage": "verwyder hierdie boodskap", "makeRoomCreator": "make room admin", "unBanFromChat": "Unban from Chat", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "benodig toestemming om te praat", "makePublic": "maak kamer publiek", "makePrivate": "maak kamer privaat", "renamePublic": "Set public room name", "renamePrivate": "Set private room name", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "People", "online": "ONLINE", "noOnline": "You have 0 friends online right now", "showMore": "Show more" }, "upcomingRoomsCard": { "upcomingRooms": "Upcoming rooms", "exploreMoreRooms": "Explore More Rooms" }, "search": { "placeholder": "Search for rooms, users or categories", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profile", "language": "Language", "reportABug": "Report A Bug", "useOldVersion": "Use Old Version", "logOut": { "button": "Log out", "modalSubtitle": "Are you sure you want to logout?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Geskeduleerde kamers", "noneFound": "geen gevind nie", "allRooms": "alle geskeduleerde kamers", "myRooms": "my geskeduleerde kamers", "scheduleRoomHeader": "Geskeduleerde kamer", "startRoom": "begin kamer", "modal": { "needsFuture": "moet in die toekoms wees", "roomName": "kamer naam", "minLength": "min lengte 2", "roomDescription": "Description" }, "tommorow": "TOMMOROW", "today": "TODAY", "deleteModal": { "areYouSure": "Are you sure you want to delete this scheduled room?" } }, "roomChat": { "title": "Gesels", "emotesSoon": "[emotes binnekort beskikbaar]", "bannedAlert": "Jy is verban van hierdie gesprek", "waitAlert": "Jy moet 'n sekonde wag voor jy nog 'n boodskap stuur", "search": "Soek", "searchResults": "Soekresultate", "recent": "Gereeld gebruik", "sendMessage": "Stuur 'n boodskap", "whisper": "Fluister", "welcomeMessage": "Welkom by die gesprek!", "roomDescription": "Kamerbeskrywing", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Fueling rocket", "takingOff": "Taking off", "inSpace": "In space", "approachingMoon": "Approaching moon", "lunarDoge": "Lunar doge", "approachingSun": "Approaching sun", "solarDoge": "Solar doge", "approachingGalaxy": "Approaching galaxy", "galacticDoge": "Galactic Doge", "spottedLife": "Planet with life spotted" }, "feed": { "yourFeed": "Your Feed" } } } ================================================ FILE: kibbeh/public/locales/am/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "ተጨማሪ ይጫኑ", "loading": "በመጫን ላይ ...", "noUsersFound": "ምንም ተጠቃሚዎች አልተገኙም", "ok": "እሺ", "yes": "እሺ", "no": "አይ", "cancel": "መተው", "save": "ሰጥ", "edit": "ለወጥ", "delete": "ሰርዝ", "joinRoom": "ክፍል መቀላቀል", "copyLink": "ሊንክ ውሰድ", "copied": "ተቀድቷል!", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Please give DogeHouse Accessibility permessions", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "ድምፀ-ከል | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "ምንጭ ታሪክ", "link_2": "Discord", "link_3": "ችግር ሪፖርት" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "አግድ", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "የግል ክፍል ውስጥ ናቸው እና የሚከተሉ ተጠቃሚዎች ዝርዝር፡፡", "currentRoom": "በአሁኑ ጊዜ ውስጥ:", "startPrivateRoom": "ከእነሱ ጋር አንድ የግል ክፍል መጀመር", "title": "People" }, "followList": { "followHim": "follow", "followingHim": "following", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "ክፍል ፍጠር", "refresh": "Refresh", "editRoom": "Edit Room", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "ክፍሉ ጠፋ, ተመለስ", "shareRoomLink": "የክፍሉን ሊንክ አጋራ", "inviteFollowers": "መስመር ላይ ናቸው የእርስዎ ተከታዮች መጋበዝ ይችላሉ:", "whenFollowersOnline": "የእርስዎ ተከታዮች መስመር ላይ ሲሆኑ, እነሱም እዚህ ይታያሉ፡፡" }, "login": { "headerText": "ወደ ጨረቃ ድምፅ ውይይቶች መውሰድ 🚀", "featureText_1": "ጨለማ ገጽታ", "featureText_2": "ለሁሉም ክፍት ኣገባብ", "featureText_3": "ብዝሃተ-ስርዓት ድጋፍ", "featureText_4": "ክፍት ምንጭ", "featureText_5": "የፅሁፍ ውይይት", "featureText_6": "በ Doge የተጎላበተ", "loginGithub": "በ GitHub ግባ", "loginTwitter": "በ Twitter ግባ", "createTestUser": "የሙከራ ተጠቃሚ ይፍጠሩ", "loginDiscord": "Login with Discord" }, "myProfile": { "logout": "ውጣ", "probablyLoading": "ምናልባት በመጫን ላይ ...", "voiceSettings": "የአወራር ድምጽ ቅንብሮች", "soundSettings": "የድምጽ ቅንብሮች", "deleteAccount": "መለያህን ደልት", "overlaySettings": "go to overlay settings", "couldNotFindUser": "Sorry, we could not find that user", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "ውይ ውይ! ይህ ገጽ ውይይት ውስጥ ጠፋ፡፡", "goHomeMessage": "መጨነቅ አይደለም፡፡ ትችላለህ", "goHomeLinkText": "ወደቤት ሂድ" }, "room": { "speakers": "ተናጋሪዎች", "requestingToSpeak": "ለመናገር ፈቃድ ጠይቅ", "listeners": "አድማጮች", "allowAll": "Allow all", "allowAllConfirm": "Are you sure? This will allow all {{count}} requesting users to speak" }, "searchUser": { "search": "ፈልግ ..." }, "soundEffectSettings": { "header": "ድምፆች", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "መገለጫ ቀይር", "followsYou": "እርስዎን ይከተላል", "followers": "ተከታዮች", "following": "የሚከተሉት", "followHim": "follow", "followingHim": "following", "copyProfileUrl": "copy profile url", "urlCopied": "URL copied to clipboard", "unfollow": "Unfollow", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "የድምፅ ቅንብሮች", "mic": "ማይክሮፎን:", "permissionError": "ምንም የስቴሪዮ አገኘ, ወይ አንዳቸውም ሲሰካ ወይም በዚህ ድር ጣቢያ ፍቃድ የተሰጠው አልቻሉም፡፡", "refesh": "አድስ ማይክሮፎኑን ዝርዝር", "volume": "ድምጽ:", "refresh": "refresh mic list", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "Invalid app title", "label": "Enter App Title" }, "header": "Overlay Settings", "errorMsg": "Please enter valid app title", "label": "Enter app title" }, "download": { "starting": "Starting download...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "Click on the button below to start download", "download_now": "Download Now", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "የታገዱ ተጠቃሚዎች", "unban": "የታገደውን መልስ", "noBans": "ማንም ገና የታገደ የለም" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "የአሁኑ ክፍል ይውጡ", "confirmLeaveRoom": "አንተ ለመውጣት እንደሚፈልጉ እርግጠኛ ነዎት?", "leave": "ውጣ", "inviteUsersToRoomBtn": "ክፍል ተጠቃሚዎችን ይጋብዙ", "invite": "ጋብዝ", "toggleMuteMicBtn": "ቀያይር ድምጸ ማይክሮፎን", "mute": "ድምጸ አጥፋ", "unmute": "ድምጸ ምልስ", "makeRoomPublicBtn": "ክፍሉን ልሁሉም ክፍት አድርግ!", "settings": "ቅንብሮች", "speaker": "ተናጋሪ", "listener": "አድማጭ", "chat": "Chat", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "የእርስዎ መሣሪያ በአሁኑ ጊዜ አይደገፍም፡፡ ቸግሩን", "linkText": "በ GitHub ላይ ተናገሩ", "addSupport": "እኔም ለመሣሪያዎ ድጋፍ ለማከል አሞክራልሁ፡፡" }, "inviteButton": { "invited": "ተጋብዘዋል", "inviteToRoom": "ወደ ክፍል ጋብዝ" }, "micPermissionBanner": { "permissionDenied": "ፈቃድ መተግበሪያው ማይክሮፎኑን ለመድረስ እየሞከረ ካደ (እርስዎ የአሳሽ ቅንብሮች ወደ ሂድ እና ገጹን ዳግም መጫን ሊኖርብዎ ይችላል)", "dismiss": "አሰናብት", "tryAgain": "እንደገና ሞክር" }, "keyboardShortcuts": { "setKeybind": "ቁልፍ አዘጋጅ", "listening": "በማዳመጥ ላይ", "toggleMuteKeybind": "ድምጸ ማጥፍያ/ማብርያ ቁልፍ", "togglePushToTalkKeybind": "ተጭኖ ማውሪያ ማጥፍያ/ማብርያ ቁልፍ", "toggleOverlayKeybind": "toggle overlay keybind", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "በሆነ ምክንያት ምንም ድምጽ ተጠቃሚ የለም" }, "addToCalendar": { "add": "ወደ ቀን መቁጠሪያ ጨምር" }, "wsKilled": { "description": "WebSocket በአገልጋዩ ተቋረጠ. ሌላ ትር ውስጥ ያለውን ድረ ገጽ በመክፈት የተከሰተ ይሆናል፡፡", "reconnect": "መልሰህ ተገናኝ" }, "modals": { "createRoomModal": { "public": "ለሁሉም ክፍት", "private": "የግል", "roomName": "የክፍል ስም", "roomDescription": "ክፍል መግለጫ", "descriptionError": "ከፍተኛ ርዝመት 500", "nameError": "ከ 2 እስክ 60 ፊደላአት ረዝመት ምሆን አለበት", "subtitle": "Fill the following fields to start a new room" }, "invitedToJoinRoomModal": { "newRoomCreated": "አዲስ ክፍል ተፈጥሯል", "roomInviteFrom": "ወደ ክፍል ተጋብዘሃል በ ", "justStarted": "ገና አሁን ነው የጀምሩት", "likeToJoin": ", እርሶ ለመቀላቀል ይፈልጋሉ?", "inviteReceived": "እርስዎ ተጋብዘዋል" }, "editProfileModal": { "usernameTaken": "የተጠቃሚ ስም ወስዶታል", "avatarUrlError": "ልክ ያልሆነ ምስል", "avatarUrlLabel": "Github / Twitter አምሳያ ሊንክ", "displayNameError": "ርዝምት ክ 2 እስከ 50 ፊደላት", "displayNameLabel": "መጠሪያው ስም", "usernameError": "ርዝምት ክ 4 እስከ 15 ፊደላት", "usernameLabel": "የተጠቃሚ ስም", "bioError": "ከ 160 ፊደል በላይ አይቻልም", "bioLabel": "ስል እርሶ አጭር ገላጭ ጽሁፍ", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "እርስዎ መቼም ከሚፈጥሩት ማንኛውም ክፍል ከመቀላቀል ይህን ተጠቃሚ ማገድ ይፈልጋሉ፤ እርግጠኛ ኖት?", "blockUser": "ተጠቃሚን አግድ", "makeMod": "አወያይ ያድርጉ ", "unmod": "አወያይ አስወግድ", "addAsSpeaker": "እንደ ተናጋሪ ጨምር", "moveToListener": "ወደ አድማጭ ቀይር", "banFromChat": "ከ ውይይት አግድ", "banFromRoom": "ከ ክፍል ያግዱ", "goBackToListener": "አዳማጭ ይመለሱ", "deleteMessage": "ይህን መልዕክት ሰርዝ", "makeRoomCreator": "make room admin", "unBanFromChat": "Unban from Chat", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "መናገር ፈቃድ ይጠይቃል", "makePublic": "ክፍሉን ለሁሉም ክፍት ያድርጉ", "makePrivate": "ክፍሉን የግል ያድርጉ", "renamePublic": "Set public room name", "renamePrivate": "Set private room name", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "People", "online": "ONLINE", "noOnline": "You have 0 friends online right now", "showMore": "Show more" }, "upcomingRoomsCard": { "upcomingRooms": "Upcoming rooms", "exploreMoreRooms": "Explore More Rooms" }, "search": { "placeholder": "Search for rooms, users or categories", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profile", "language": "Language", "reportABug": "Report A Bug", "useOldVersion": "Use Old Version", "logOut": { "button": "Log out", "modalSubtitle": "Are you sure you want to logout?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "የተያዘለት ክፍሎች", "noneFound": "ምንም አልተገኘም", "allRooms": "ሁሉንም መርሐግብር ክፍሎች", "myRooms": "የእኔ መርሐግብር ክፍሎች", "scheduleRoomHeader": "ፕሮግራም ክፍል", "startRoom": "ክፍሉን ጀምር", "modal": { "needsFuture": "ፍላጎቶች ወደፊት መሆን አለባቸው", "roomName": "የክፍል ስም", "minLength": "ደቂቃ ርዝመት 2", "roomDescription": "ክፍል መግለጫ" }, "tommorow": "TOMMOROW", "today": "TODAY", "deleteModal": { "areYouSure": "Are you sure you want to delete this scheduled room?" } }, "roomChat": { "title": "ውይይት", "emotesSoon": "[በቅርቡ emotes]", "bannedAlert": "ከ ውይይቱ ታግደሃል", "waitAlert": "ሌላ መልዕክት ከመላክ በፊት ትንሽ ጠብቅ", "search": "ፈልግ", "searchResults": "የፍለጋ ውጤቶች", "recent": "በተደጋጋሚ ጥቅም ላይ የዋለ", "sendMessage": "መልዕክት ይላኩ", "whisper": "ተንሸካሾክ", "welcomeMessage": "ለውይይት እንኳን ደህና መጡ!", "roomDescription": "ክፍል መግለጫ", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Fueling rocket", "takingOff": "Taking off", "inSpace": "In space", "approachingMoon": "Approaching moon", "lunarDoge": "Lunar doge", "approachingSun": "Approaching sun", "solarDoge": "Solar doge", "approachingGalaxy": "Approaching galaxy", "galacticDoge": "Galactic Doge", "spottedLife": "Planet with life spotted" }, "feed": { "yourFeed": "Your Feed" } } } ================================================ FILE: kibbeh/public/locales/ar/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "حمل المزيد", "loading": "جاري التحميل...", "noUsersFound": "لم يتم العثور على مستخدمين", "ok": "حسنا", "yes": "نعم", "no": "لا", "cancel": "إلغاء", "save": "حفظ", "edit": "تعديل", "delete": "حذف", "joinRoom": "انضم إلى الغرفة", "copyLink": "انسخ الرابط", "copied": "تم النسخ", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Please give DogeHouse Accessibility permessions", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "مايكروفون مكتوم | DogeHouse", "deafenedTitle": "مكتوم | DogeHouse", "dashboard": "لوحة الاعدادات", "connectionTaken": "اتصال مأخوذ" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "القصة الاصلية", "link_2": "ديسكورد", "link_3": "ابلغ عن خلل" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "حظر", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "قائمة المستخدمين غير المتواجدين في غرفة خاصة وأنت تتابعهم.", "currentRoom": "حاليا في:", "startPrivateRoom": "ابدأ غرفة خاصة معهم", "title": "People" }, "followList": { "followHim": "تابع", "followingHim": "متابع", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "ابدأ غرفة", "refresh": "تحديث", "editRoom": "عدل الغرفة", "desktopAlert": "!على الدسكتوب اليوم DogeHouse حمل تطبيق" }, "inviteList": { "roomGone": "انتهت الغرفة، عد إلى الوراء", "shareRoomLink": "شارك رابط الغرفة", "inviteFollowers": "يمكنك أن تدعو متابعيك المتصلين:", "whenFollowersOnline": "سيظهر متابعوك هنا عندما يكونوا متصلين." }, "login": { "headerText": "اصطحاب المحادثات الصوتية إلى القمر 🚀", "featureText_1": "المظهر الداكن", "featureText_2": "تسجيل مفتوح للجميع", "featureText_3": "دعم منصات متعددة", "featureText_4": "مفتوح المصدر", "featureText_5": "محادثات نصية", "featureText_6": "Doge تم التطوير بواسطة", "loginGithub": "GitHub التسجيل باستخدام", "loginTwitter": "التسجيل باستخدام حساب تويتر", "createTestUser": "إنشاء حساب تجريبي", "loginDiscord": "Discord سجل الدخول ب" }, "myProfile": { "logout": "تسجيل خروج", "probablyLoading": "ربما جاري التحميل...", "voiceSettings": "اذهب إلى إعدادات المحادثة الصوتية ", "soundSettings": "اذهب إلى إعدادات الصوت", "deleteAccount": "حذف الحساب", "overlaySettings": "go to overlay settings", "couldNotFindUser": "عفوا، لم نعثر على هذا المستخدم", "privacySettings": "إعدادات الخصوصية" }, "notFound": { "whoopsError": "عذرا! ضاعت هذه الصفحة بين المحادثات.", "goHomeMessage": "لا داعي للقلق، يمكنك الذهاب", "goHomeLinkText": "الذهاب إلى الصفحة الرئيسة" }, "room": { "speakers": "المتحدثون", "requestingToSpeak": "جاري طلب التحدث", "listeners": "المستمعون", "allowAll": "السماح للكل", "allowAllConfirm": "هل انت متأكد ؟ هذا سيسمح لـ {{count}} مستخدم بالتحدث" }, "searchUser": { "search": "ابحث..." }, "soundEffectSettings": { "header": "الأصوات", "title": "اعدادات الصوت", "playSound": "Play Sound" }, "viewUser": { "editProfile": "تعديل الحساب", "followsYou": "يتابعك", "followers": "المتابِعون", "following": "المتابَعون", "followHim": "تابع", "followingHim": "متابَع", "copyProfileUrl": "انسخ رابط البروفايل", "urlCopied": "تم نسخ الرابط", "unfollow": "الغاء المتابعة", "about": "حول", "bot": "بوت", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "إعدادات المحادثة الصوتية", "mic": "ميكروفون:", "permissionError": "لم يتم العثور على ميكروفونات ، إما أنك لم تقم بتوصيل أي ميكروفون أو لم تمنحنا إذن الوصول.", "refresh": "تحديث قائمة الميكروفونات", "volume": "ارتفاع الصوت:", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "خطأ في اسم التطبيق", "label": "ادخل اسم التطبيق" }, "header": "Overlay اعدادات", "errorMsg": "ادخل اسم تطبيق صحيح", "label": "ادخل اسم التطبيق" }, "download": { "starting": "...بدأ التحميل", "failed": "لم يتم التنزيل التلقائي الرجاء المحاولة لاحقاً", "visit_gh": "تحقق من اخر الاصدارات علي github", "prompt": "أنقر للتنزيل", "download_now": "تنزيل الآن", "download_for": "تنزيل إلى %platform% (%ext%)" }, "privacySettings": { "title": "اعدادات الخصوصية", "header": "اعدادات الخصوصية", "whispers": { "label": "الهمسات", "on": "تشغيل", "off": "ايقاف" } }, "botEdit": { "yourBots": "روبوتاتك", "bots": "الروبوتات", "title": "معلومات البوت", "apiKey": "ApiKey", "regenerate": "اعادة الانشاء", "reveal": "اضغط لاظهار مقتاح ال api" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "المستخدمون المحظورون", "unban": "الغاء الحظر", "noBans": "لم يتم حظر أحد" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "مغادرة الغرفة الحالية", "confirmLeaveRoom": "هل أنت متأكد من أنك تريد المغادرة؟", "leave": "غادر", "inviteUsersToRoomBtn": "دعوة مستخدمين إلى الغرفة", "invite": "دعوة", "toggleMuteMicBtn": "كتم الميكروفون و الغاء الكتم", "mute": "كتم", "unmute": "الغاء الكتم", "makeRoomPublicBtn": "اجعل الغرفة عامة!", "settings": "الإعدادات", "speaker": "متحدث", "listener": "مستمع", "chat": "المحادثة", "toggleDeafMicBtn": "بدل الكمت", "deafen": "اكمت", "undeafen": "لا تكمت" }, "deviceNotSupported": { "notSupported": "جهازك غير مدعوم حاليا. يمكنك إنشاء", "linkText": "GitHub مشكلة على", "addSupport": "و سوف أحاول أن أدعم جهازك!" }, "inviteButton": { "invited": "مدعو", "inviteToRoom": "إدعو إلى الغرفة" }, "micPermissionBanner": { "permissionDenied": "تم رفض الإذن عند محاولة الوصول إلى الميكروفون الخاص بك (قد تحتاج إلى الدخول إلى إعدادات المتصفح وإعادة تحميل الصفحة)", "dismiss": "رفض", "tryAgain": "حاول مجدداً" }, "keyboardShortcuts": { "setKeybind": "ضبط ربط المفتاح", "listening": "جاري الإستماع", "toggleMuteKeybind": "تبديل رابط مفتاح كتم الصوت", "togglePushToTalkKeybind": "تبديل رابط مفتاح الضغط والتحدث", "toggleOverlayKeybind": "toggle overlay keybind", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "لا يوجد مستهلك صوتي لسبب ما" }, "addToCalendar": { "add": "أضف إلى التقويم" }, "wsKilled": { "description": "تمت مقاطعة الإتصال بواسطة الخادم. يحدث هذا عادةً عند فتح موقع الويب في علامة تبويب أخرى.", "reconnect": "أعد الاتصال" }, "modals": { "createRoomModal": { "public": "عام", "private": "خاص", "roomName": "اسم الغرفة", "roomDescription": "وصف عن الغرفة", "descriptionError": "أقصى حد 500", "nameError": "يجب أن يكون ما بين حرفين و 60 حرف", "subtitle": "اكمل المعلومات التالية لتبدأ غرفة جديدة" }, "invitedToJoinRoomModal": { "newRoomCreated": "تم إنشاء غرفة جديدة", "roomInviteFrom": "الدعوة من", "justStarted": "لقد بدؤوا للتو", "likeToJoin": "، هل تريد الإنضمام؟", "inviteReceived": "لقد تم دعوتك" }, "editProfileModal": { "usernameTaken": "اسم الحساب مستخدم", "avatarUrlError": "صورة غير صالحة", "avatarUrlLabel": "رابط صورة العرض من تويتر/كيت هب", "displayNameError": "الطول من حرفين إلى 50 حرف", "displayNameLabel": "عرض الاسم", "usernameError": "الطول من 4 إلى 15 حرفًا وفقط أبجدي او رقمي او (رمز _)", "usernameLabel": "اسم المستخدم", "bioError": "أقصى طول 160 حرفًا", "bioLabel": "الوصف", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "هل أنت متأكد أنك تريد حظر هذا المستخدم من الانضمام إلى أي غرفة تقوم بإنشائها مستقبلاً؟", "blockUser": "حجب المستخدم", "makeMod": "اصنع مود", "unmod": "إزالة المود", "addAsSpeaker": "أصف كمتحدث", "moveToListener": "انقل إلى مستمع", "banFromChat": "حظر من المحادثة", "banFromRoom": "حظر من الغرفة", "goBackToListener": "إرجع إلى مستمع", "deleteMessage": "حذف الرسالة", "makeRoomCreator": "اضف كإداري للغرفة", "unBanFromChat": "الغاء الحظر من المحادثات", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "جعل التحدث بطلب فقط", "makePublic": "جعل الغرفة عامة", "makePrivate": "جعل الغرفة خاصة", "renamePublic": "اختار اسم الغرفة العامة", "renamePrivate": "اختار اسم الغرفة الخاصة", "chatDisabled": "تعطيل المحادثة", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "أشخاص", "online": "اونلاين", "noOnline": "لديك 0 اصدقاء اونلاين الان", "showMore": "اظهر المزيد" }, "upcomingRoomsCard": { "upcomingRooms": "غرف قادمة", "exploreMoreRooms": "اكتشف غرف اكثر" }, "search": { "placeholder": "ابحث عن غرف، اشخاص او تصنيفات", "placeholderShort": "بحث" }, "settingsDropdown": { "profile": "الحساب الشخصي", "language": "اللغة", "reportABug": "ابلغ عن مشكلة", "useOldVersion": "استعمل نسخة اقدم", "logOut": { "button": "تسجيل الخروج", "modalSubtitle": "هل انت متأكد انك تريد تسجيل خروجك؟" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "تنزيل التطبيق", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "الغرف المجدولة", "noneFound": "لا يوجد", "allRooms": "كل غرفي المجدولة", "myRooms": "غرفي المجدولة", "scheduleRoomHeader": "جدوِل غرفة", "startRoom": "ابدأ غرفة", "modal": { "needsFuture": "يجب أن تكون في المستقبل", "roomName": "اسم الغرفة", "minLength": "أقل طول 2", "roomDescription": "الوصف" }, "tommorow": "غدا", "today": "اليوم", "deleteModal": { "areYouSure": "هل انت متأكد بأنك تريد حذف هذه الغرفة المقررة؟" } }, "roomChat": { "title": "محادثة", "emotesSoon": "[emotes soon]", "bannedAlert": "لقد تم حظرك من المحادثة", "waitAlert": "يجب عليك الإنتظار لمدة ثانية قبل إرسال رسالة أخرى", "search": "ابحث", "searchResults": "نتائج البحث", "recent": "مستخدم مؤخرا", "sendMessage": "أرسل رسالة", "whisper": "إرسل رسالة خاصة", "welcomeMessage": "مرحبا بك في المحادثة!", "roomDescription": "وصف الغرفة", "disabled": "تم تعطيل المحادثة", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "عبي الصاروخ بنزين", "takingOff": "تقلع", "inSpace": "بالفضاء", "approachingMoon": "الاقتراب من القمر", "lunarDoge": "Lunar doge", "approachingSun": "الاقتراب من الشمس", "solarDoge": "Solar doge", "approachingGalaxy": "الاقتراب من المجره", "galacticDoge": "Galactic Doge", "spottedLife": "اكتشاف كوكب فيه حياه" }, "feed": { "yourFeed": "Your Feed" } } } ================================================ FILE: kibbeh/public/locales/az/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "Daha çox yüklə", "loading": "Yüklənir...", "noUsersFound": "İstifadəçi tapılmadı", "ok": "ОК", "yes": "Bəli", "no": "Xeyr", "cancel": "Ləğv et", "save": "Yadda saxla", "edit": "Düzəliş et", "delete": "Sil", "joinRoom": "Otağa qoşul", "copyLink": "Linki kopyala", "copied": "Kopyalandı", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Zəhmət olmasa DogeHouse-a lazımlı icazələri verin", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Səssiz | DogeHouse", "deafenedTitle": "Karlaşdırılmış | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Bağlantı alındı" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Tarix", "link_2": "Discord", "link_3": "Səhv haqqında məlumat ver" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "ban", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Gizli otaqda olmayan və sizin izlədiyiniz istifadəçilər", "currentRoom": "Hazırda:", "startPrivateRoom": "Gizli otaq yaradın", "title": "People" }, "followList": { "followHim": "İzlə", "followingHim": "İzlənir", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Otaq yaratmaq", "refresh": "Yenilə", "editRoom": "Otaqda düzəliş et", "desktopAlert": "DogeHouse tətbiqini yükləyin!" }, "inviteList": { "roomGone": "Otaq bağlandı, geri qayıt", "shareRoomLink": "Otaq keçidini paylaş", "inviteFollowers": "Aktiv olan izləyicilərinə dəvət göndər:", "whenFollowersOnline": "İzləyicilərin aktiv olduqları zaman burada görsənəcdirlər." }, "login": { "headerText": "Səs rabitəsini aya qaldırırığ 🚀", "featureText_1": "Gecə modu", "featureText_2": "Açıq qeydiyyat", "featureText_3": "Cross-Platform Dəstək", "featureText_4": "Açıq qaynaq", "featureText_5": "Çat", "featureText_6": "Doge sayəsində işləyir", "loginGithub": "GitHub ilə daxil ol", "loginTwitter": "Twitter ilə daxil ol", "createTestUser": "Test istifadəçini yarat", "loginDiscord": "Discord ilə daxil ol" }, "myProfile": { "logout": "Çıxış", "probablyLoading": "Yüklənir...", "voiceSettings": "Mikrofon parametrləri", "soundSettings": "Səs parametrləri", "deleteAccount": "Hesabı sil", "overlaySettings": "Overlay parametrləri", "couldNotFindUser": "Təəssüf, istifadəçi tapılmadı", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "Ups! Bu səhifə tapılmadı.", "goHomeMessage": "Narahat olmayın. Siz uğur qazanacaqsınız", "goHomeLinkText": "Əsas səhifəyə keç" }, "room": { "speakers": "Danışanlar", "requestingToSpeak": "Danışmaq istəyənlər", "listeners": "Dinləyicilər", "allowAll": "Hərkəsə icazə ver", "allowAllConfirm": "Təsdiqləyirsiniz? Bu seçim {{count}} istifadəçiyə danışma haqqı verəcəkdir" }, "searchUser": { "search": "Axtarış..." }, "soundEffectSettings": { "header": "Səslər", "title": "Səs paratmertləri", "playSound": "Play Sound" }, "viewUser": { "editProfile": "Profildə düzəliş et", "followsYou": "Sizi izləyənlər", "followers": "İzləyicilər", "following": "İzləyirsiniz", "followHim": "İzlə", "followingHim": "İzləyirsiniz", "copyProfileUrl": "Profil keçidini kopyalayın", "urlCopied": "Keçid kopyalandı", "unfollow": "İzləməni dayandır", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Səs parametrləri", "mic": "Mikrofon:", "permissionError": "Mikrofon tapılmadı, ya mikrofonu taxmamısınız ya da sayt üçün lazımlı icazəni verməmisiniz.", "refresh": "Yenilə", "volume": "Səs:", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "Uyğunsuz tətbiq adı", "label": "Tətbiq adını daxil et" }, "header": "Overlay parametrləri", "errorMsg": "Zəhmət olmasa uyğun bir tətbiq adı daxil edin", "label": "Tətbiq başlığını daxil et" }, "download": { "starting": "Yükləmə başlanır...", "failed": "Avtomatik yükəmədə problem aşkarlandı, zəhmət olmasa daha sonra bir daha yoxlayın", "visit_gh": "Github çıxışlarını ziyarət et", "prompt": "Aşağıdakı düyməyə basaraq yükləməni başladın", "download_now": "İndi yüklə", "download_for": "{{platform}} üçün yüklə" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Banlanmış istifadəçilər", "unban": "Banı ləğv et", "noBans": "Banlanan istifadəçi yoxdur" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Hazırkı otağı tərk et", "confirmLeaveRoom": "Tərk etmək istədiyinizə əminsiniz?", "leave": "Tərk et", "inviteUsersToRoomBtn": "İstifadəçiləri otağa dəvət et", "invite": "Dəvət et", "toggleMuteMicBtn": "Mikrofonu aç/bağla", "mute": "Səssizə keçir", "unmute": "Səsliyə keçir", "makeRoomPublicBtn": "Otağı hərkəsə açıq et!", "settings": "Parametlər", "speaker": "Danışanlar", "listener": "Dinləyicilər", "chat": "Çat", "toggleDeafMicBtn": "Karlaşdırılmış modu aç/bağla", "deafen": "Karlaşdır", "undeafen": "Karlaşdırmanı ləğv et" }, "deviceNotSupported": { "notSupported": "Sizin cihaz dəstəklənmir. Siz yarada bilərsiz", "linkText": "GitHub-da sorğu", "addSupport": "və mən sizin cihaz üçün dəstək əlavə etməyə çalışacağam!" }, "inviteButton": { "invited": "Dəvət olunub", "inviteToRoom": "Otağa dəvət et" }, "micPermissionBanner": { "permissionDenied": "Mikrofona keçid rədd edildi (Siz browser parametrlərinə keçid edib səhifəni yeniləməlisiniz)", "dismiss": "Rədd et", "tryAgain": "Yenidən cəhd et" }, "keyboardShortcuts": { "setKeybind": "Düymə kombinasiası quraşdır", "listening": "Qulaq asılır", "toggleMuteKeybind": "Susdurma açma/bağlama düymə kombinasiyası", "togglePushToTalkKeybind": "Bas danış açma/bağlama düymə kombinasiyası", "toggleOverlayKeybind": "Overlay açma/bağlama düymə kombinasiyası", "toggleDeafKeybind": "Karlaşdırma açma/bağlama düymə kombinasiyası" }, "userVolumeSlider": { "noAudioMessage": "Bir səbəbə görə səs qəbuledici yoxdur!" }, "addToCalendar": { "add": "Kalendara əlavə et" }, "wsKilled": { "description": "WebSocket server tərəfindən bağlandı. Bu adətən birdən çox səhifədə saytı açdığınız zaman baş verir.", "reconnect": "Yenidən bağlantı qur" }, "modals": { "createRoomModal": { "public": "Hərkəsə açıq", "private": "Gizli", "roomName": "Otaq adı", "roomDescription": "Otaq haqqında", "descriptionError": "maksimum uzunluq 500", "nameError": "2 və 60 simvol uzunluğunda olmalıdır", "subtitle": "Boşluqları dolduraraq yeni otaq başladın" }, "invitedToJoinRoomModal": { "newRoomCreated": "Yeni otaq yaradıldı", "roomInviteFrom": "Otaq dəvəti: ", "justStarted": "Onlar daha yeni başladılar", "likeToJoin": ", qoşulmaq istəyirsiniz?", "inviteReceived": "Siz dəvət edildiniz: " }, "editProfileModal": { "usernameTaken": "İstifadəçi adı götürülüb", "avatarUrlError": "Uyğun olmayan şəkil", "avatarUrlLabel": "Github/Twitter/Discord avatar keçidi", "displayNameError": "uzunluq 2 və 50 simvol arasında", "displayNameLabel": "Görsənən ad", "usernameError": "uzunluq 4 və 15 simvol uzunluğunda və sadəcə alfanumerik/alt xətt simvollarından ibarət olmalıdır.", "usernameLabel": "İstifadəçi adı", "bioError": "maksimum uzunluq 160 simvoldur", "bioLabel": "Bioqrafiya", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "Siz bu istifadəçini yaratdığınız bütün otaqlara qoşulmaması üçün bloklamağa əminsinizmi?", "blockUser": "İstifəçini blokla", "makeMod": "Mod et", "unmod": "Modluğu ləğv et", "addAsSpeaker": "Danışan kimi əlavə et", "moveToListener": "Dinləyiciyə keçir", "banFromChat": "Çatdan banla", "banFromRoom": "Otaqdan banla", "goBackToListener": "Dinləyiciyə geri qayıt", "deleteMessage": "Bu mesajı sil", "makeRoomCreator": "Otaq admini et", "unBanFromChat": "Çatdan banı ləğv et", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "Danışmaq üçün icazə istə", "makePublic": "Otağı hərkəsə açıq et", "makePrivate": "Otağı gizli et", "renamePublic": "Hərkəsə açıq otaq adı quraşdır", "renamePrivate": "Gizli otaq adı quraşdır", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "İnsanlar", "online": "Aktiv", "noOnline": "Sizin hazırda 0 aktiv dostunuz var", "showMore": "Daha çox göstər" }, "upcomingRoomsCard": { "upcomingRooms": "Növbəti otaqlar", "exploreMoreRooms": "Daha çox otaq kəşf et" }, "search": { "placeholder": "Otaqlar, istifadəçilər və ya kateqoriyalar axtar", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profil", "language": "Dil", "reportABug": "Səhv bildir", "useOldVersion": "Əvvəlki versiyanı istifadə et", "logOut": { "button": "Çıxış", "modalSubtitle": "Çıxmaq istədiyinizə əminsiniz?" }, "debugAudio": { "debugAudio": "Səsi incələ", "stopDebugger": "İncələmən dayandır" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Planlaşdırılmış otaqlar", "noneFound": "Tapılmadı", "allRooms": "Bütün planlaşdırılmış otaqlar", "myRooms": "Mənim planlaşdırılmış otaqlarım", "scheduleRoomHeader": "Otaq planlaşdır", "startRoom": "Otaq başlat", "modal": { "needsFuture": "Gələcək zamanda olmalıdır.", "roomName": "Otaq adı", "minLength": "Minimum uzunluq 2", "roomDescription": "Haqqında" }, "tommorow": "Sabah", "today": "Bu gün", "deleteModal": { "areYouSure": "Bu planlanmış otağı silmək istədiyinizə əminsiniz?" } }, "roomChat": { "title": "Çat", "emotesSoon": "[emodzi tezliklə]", "bannedAlert": "Bu söhbətdə blokdasınız", "waitAlert": "Siz növbəti mesajı göndərmək üçün bir saniyə gözləməlisiniz.", "search": "Axtarış", "searchResults": "Axtarış nəticələri", "recent": "Tez-tez istifadə olunan", "sendMessage": "Mesaj göndər", "whisper": "Pıçıltı", "welcomeMessage": "Çata xoş gəlmisiniz!", "roomDescription": "Otaq haqqında", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Roket yanacağı doldurulur.", "takingOff": "Uçuş başlanır", "inSpace": "Havada", "approachingMoon": "Aya yaxınlaşırıq", "lunarDoge": "Ay doge-u", "approachingSun": "Günəşə yaxınlaşırıq", "solarDoge": "Günəş doge-u", "approachingGalaxy": "Qalaktikaya yaxınlaşırıq", "galacticDoge": "Qalaktika dog-u", "spottedLife": "Həyat olan planet aşkarlandı" }, "feed": { "yourFeed": "Sənin lentin" } } } ================================================ FILE: kibbeh/public/locales/bg/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "зареди още", "loading": "зареждане...", "noUsersFound": "не са намерени потребители", "ok": "ок", "yes": "да", "no": "не", "cancel": "прекрати", "save": "запази", "edit": "промени", "delete": "изтрий", "joinRoom": "влез в стая", "copyLink": "копирай линк", "copied": "копирано", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Please give DogeHouse Accessibility permessions", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Muted | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "История", "link_2": "Дискорд", "link_3": "Докладвай за неизправност" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "бан", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Списък от потребители, които не са в ", "currentRoom": "в момента в:", "startPrivateRoom": "start a private room with them", "title": "People" }, "followList": { "followHim": "follow", "followingHim": "following", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Създай стая", "refresh": "Опресни", "editRoom": "Edit Room", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "изтекла стая, върни се назад", "shareRoomLink": "сподели линк към стая", "inviteFollowers": "Можеш да поканиш последователи, които са на линия:", "whenFollowersOnline": "Когато последователите ти са на линия, че се появят тук." }, "login": { "headerText": "Taking voice conversations to the moon 🚀", "featureText_1": "Тъмна тема", "featureText_2": "Отвори влизания", "featureText_3": "Mеждуплатформена Pоддръжка", "featureText_4": "Отворен Код", "featureText_5": "Текстов Чат", "featureText_6": "Powered by Doge", "loginGithub": "влизане с GitHub", "loginTwitter": "влизане с Twitter", "createTestUser": "създаване на тестови потребител", "loginDiscord": "Login with Discord" }, "myProfile": { "logout": "излизане", "probablyLoading": "зареждане най-вероятно...", "voiceSettings": "отиване към гласови настройки", "soundSettings": "отиване към звукови настройки", "deleteAccount": "изтриване на акаунт", "overlaySettings": "go to overlay settings", "couldNotFindUser": "Sorry, we could not find that user", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "Опаа! Тази страниза бе изгубена.", "goHomeMessage": "Не се тревожи. Можеш", "goHomeLinkText": "Към начален екран" }, "room": { "speakers": "Говорители", "requestingToSpeak": "Заявка за говорене", "listeners": "Слушатели", "allowAll": "Allow all", "allowAllConfirm": "Are you sure? This will allow all {{count}} requesting users to speak" }, "searchUser": { "search": "търсене..." }, "soundEffectSettings": { "header": "Звук", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "промяна на профил", "followsYou": "следват те", "followers": "последователи", "following": "последвани", "followHim": "follow", "followingHim": "following", "copyProfileUrl": "copy profile url", "urlCopied": "URL copied to clipboard", "unfollow": "Unfollow", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Звукови настройки", "mic": "микрофон:", "permissionError": "не бяха открити микрофони, най-вероятно няма вързани или нямат разрешение да бъдат ползвани.", "refresh": "опресняване на списък с микрофони", "volume": "ниво на звук:", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "Invalid app title", "label": "Enter App Title" }, "header": "Overlay Settings", "errorMsg": "Please enter valid app title", "label": "Enter app title" }, "download": { "starting": "Starting download...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "Click on the button below to start download", "download_now": "Download Now", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Баннати потребители", "unban": "премахване на бан", "noBans": "все още никой не е баннат" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Излизане от сегашната стая", "confirmLeaveRoom": "Сигурни ли сте, че искате да излезете?", "leave": "Излизане", "inviteUsersToRoomBtn": "Канене на потребители в стаята", "invite": "Покани", "toggleMuteMicBtn": "Превключване на заглушаване", "mute": "Заглушаване", "unmute": "Отзаглушаване", "makeRoomPublicBtn": "Направи стаята публична!", "settings": "Настройки", "speaker": "Говорител", "listener": "Слушател", "chat": "Chat", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "Вашето устройство не е поддържано. Можете да създадете", "linkText": "issue в GitHub", "addSupport": "и аз ще пробвам да добавя поддръжка за вашето устройство." }, "inviteButton": { "invited": "поканен", "inviteToRoom": "канене в стаята" }, "micPermissionBanner": { "permissionDenied": "Проблем с позволенията в браузъра (може да се наложи да отидете в настройките на браузъра и да презаредите страницата)", "dismiss": "отхвърляне", "tryAgain": "повторен опит" }, "keyboardShortcuts": { "setKeybind": "задай клавишна комбинация", "listening": "слушане", "toggleMuteKeybind": "превключване на клавишна комбинация за заглушаване", "togglePushToTalkKeybind": "превключване на клавишна комбинация за натисни-за-говорене", "toggleOverlayKeybind": "toggle overlay keybind", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "по някаква причина няма звуков консуматор" }, "addToCalendar": { "add": "Добави към календар" }, "wsKilled": { "description": "WebSocket-а беше спрян от сървъра. Това обикновенно се случва, когато сайта е отворен в друг прозорец.", "reconnect": "повторно свързване" }, "modals": { "createRoomModal": { "public": "публична", "private": "частна", "roomName": "има на стая", "roomDescription": "описание на стаята", "descriptionError": "максимална дължина 500", "nameError": "името трябва да е между 2 и 60 знака", "subtitle": "Fill the following fields to start a new room" }, "invitedToJoinRoomModal": { "newRoomCreated": "Нова стая беше създадена", "roomInviteFrom": "Покана от стая", "justStarted": "Туко-що започнаха", "likeToJoin": ", ще се присъедините ли?", "inviteReceived": "бяхте поканени в" }, "editProfileModal": { "usernameTaken": "потребителското име е взето", "avatarUrlError": "Невалидна картинка", "avatarUrlLabel": "линк към Github/Twitter/Discord аватар", "displayNameError": "дължина между 2 и 60 знака", "displayNameLabel": "Показващо се име", "usernameError": "дължина между 4 и 15, само букви, цифри и долна черта", "usernameLabel": "Потребителско име", "bioError": "максимална дължина 160 знака", "bioLabel": "Описание", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "Сигурни ли сте, че искате да блокирате този потребител да влиза във всяка стая, която създавате?", "blockUser": "блокиране на потребител", "makeMod": "направи модератор", "unmod": "премахни модератор", "addAsSpeaker": "добави като говорител", "moveToListener": "премести като слушател", "banFromChat": "блокиране от чат", "banFromRoom": "блокиране от стая", "goBackToListener": "върни се към слушател", "deleteMessage": "изтриване на това съобщение", "makeRoomCreator": "make room admin", "unBanFromChat": "Unban from Chat", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "изискване на позволение за говорене", "makePublic": "направи стаята публична", "makePrivate": "направи стаята частна", "renamePublic": "Set public room name", "renamePrivate": "Set private room name", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "People", "online": "ONLINE", "noOnline": "You have 0 friends online right now", "showMore": "Show more" }, "upcomingRoomsCard": { "upcomingRooms": "Upcoming rooms", "exploreMoreRooms": "Explore More Rooms" }, "search": { "placeholder": "Search for rooms, users or categories", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profile", "language": "Language", "reportABug": "Report A Bug", "useOldVersion": "Use Old Version", "logOut": { "button": "Log out", "modalSubtitle": "Are you sure you want to logout?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Планирани стаи", "noneFound": "няма открити", "allRooms": "всички планирани стаи", "myRooms": "моите планирани стаи", "scheduleRoomHeader": "Планирай стая", "startRoom": "започни стая", "modal": { "needsFuture": "трябва да е в бъдещето", "roomName": "име на стаята", "minLength": "минимално 2 знака", "roomDescription": "Description" }, "tommorow": "TOMMOROW", "today": "TODAY", "deleteModal": { "areYouSure": "Are you sure you want to delete this scheduled room?" } }, "roomChat": { "title": "Чат", "emotesSoon": "[emotes скоро]", "bannedAlert": "Бяхте блокирани от чата", "waitAlert": "Трябва да изчакате секунда преди да изпратите съобщение", "search": "Търси", "searchResults": "Резултати от търсенето", "recent": "Често използвани", "sendMessage": "Изпрати съобщение", "whisper": "Прошепни", "welcomeMessage": "Добре дошъл в чата!", "roomDescription": "описание на стаята", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Fueling rocket", "takingOff": "Taking off", "inSpace": "In space", "approachingMoon": "Approaching moon", "lunarDoge": "Lunar doge", "approachingSun": "Approaching sun", "solarDoge": "Solar doge", "approachingGalaxy": "Approaching galaxy", "galacticDoge": "Galactic Doge", "spottedLife": "Planet with life spotted" }, "feed": { "yourFeed": "Your Feed" } } } ================================================ FILE: kibbeh/public/locales/bn/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "আরো লোড করুন", "loading": "লোডিং...", "noUsersFound": "কোনো ইউজার পাওয়া যায়নি", "ok": "ওকে", "yes": "হ্যাঁ", "no": "না", "cancel": "বাতিল", "save": "সেভ", "edit": "এডিট", "delete": "মুছুন", "joinRoom": "রুমে ঢুকুন", "copyLink": "লিংক কপি করুন", "copied": "কপি হয়ে গেছে", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "দয়া করে DogeHouse কে অ্যাক্সেস পারমিশন দিন", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "নিঃশব্দ | DogeHouse", "deafenedTitle": "সাউন্ড বন্ধ | DogeHouse", "dashboard": "ড্যাশবোর্ড", "connectionTaken": "কানেকশন নেওয়া হয়ে গিয়েছে" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "অরিজিন স্টোরি", "link_2": "ডিসকর্ড", "link_3": "বাগ রিপোর্ট করুন" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "ব্যান করুন", "userStaffandContrib": "ইউজার স্টাফ & অবদান", "staff": "স্টাফ: ", "contributions": "অবদান", "username": "ইউজার নাম", "usrStaff": "ইউজার স্টাফ", "usrContributions": "ইউজারের অবদানগুলো", "reason": "কারণ", "usernamePlaceholder": "ইউজার নাম যার উপর কাজ সম্পাদন করা হবে" }, "followingOnlineList": { "listHeader": "যেসব ইউজারকে আপনি অনুসরণ করেন কিন্তু এখন তারা কোনো প্রাইভেট রুম এ নেই।", "currentRoom": "ভেতরে আছেন:", "startPrivateRoom": "তাদের সাথে প্রাইভেট রুম শুরু করুন", "title": "মানুষ" }, "followList": { "followHim": "অনুসরণ করুন", "followingHim": "অনুসরণ করছেন", "title": "মানুষ", "followingNone": "কাউকে অনুসরণ করছেন না", "noFollowers": "কোনো অনুসরণকারী নেই" }, "home": { "createRoom": "রুম বানান", "refresh": "রিফ্রেশ করুন", "editRoom": "রুম এডিট করুন", "desktopAlert": "ডাউনলোড করুন DogeHouse ডেস্কটপ অ্যাপ্লিকেশন আজকেই!" }, "inviteList": { "roomGone": "রুম শেষ, ফিরে আসুন", "shareRoomLink": "রুমের লিংক শেয়ার করুন", "inviteFollowers": "আপনি আপনার অনুসরণকারীদের আমন্ত্রণ করতে পারেন যারা এখন অনলাইনে রয়েছেন:", "whenFollowersOnline": "যখন আপনার অনুসরণকারীরা অনলাইন হবে, তাদেরকে এখানে দেখাবে।" }, "login": { "headerText": "আপনার আওয়াজ চাঁদ পর্যন্ত নিয়ে যান 🚀", "featureText_1": "ডার্ক থিম", "featureText_2": "ওপেন সাইন-আপ", "featureText_3": "ক্রস প্লাটফর্ম সাপোর্ট", "featureText_4": "ওপেন সোর্স", "featureText_5": "টেক্সট চ্যাট", "featureText_6": "সৌজন্যে Doge", "loginGithub": "GitHub এর দ্বারা লগইন করুন", "loginTwitter": "Twitter এর দ্বারা লগইন করুন", "createTestUser": "টেস্ট ইউজার তৈরি করুন", "loginDiscord": "Discord এর দ্বারা লগইন করুন" }, "myProfile": { "logout": "লগআউট", "probablyLoading": "সম্ভবত লোডিং...", "voiceSettings": "ভয়েস সেটিংস এ যান", "soundSettings": "সাউন্ড সেটিংস এ যান", "deleteAccount": "অ্যাকাউন্ট ডিলিট করুন", "overlaySettings": "ওভারলে সেটিংস এ যান", "couldNotFindUser": "দুঃখিত, আমরা সেই ইউজারকে খুঁজে পাইনি", "privacySettings": "গোপনীয়তা সেটিংস" }, "notFound": { "whoopsError": "উফ! এই পেজের বার্তালাপ কেটে গেছে।", "goHomeMessage": "চিন্তা করবেন না। আপনি পারবেন", "goHomeLinkText": "হোমে যেতে" }, "room": { "speakers": "স্পিকারস", "requestingToSpeak": "কথা বলার জন্য অনুরোধ করছেন", "listeners": "শ্রোতাগণ", "allowAll": "সবাইকে অনুমতি দিন", "allowAllConfirm": "আপনি কি নিশ্চিত? এটা অনুমতি দেবে সব {{count}} জন অনুরোধ করা ইউজারদের কথা বলতে" }, "searchUser": { "search": "খুঁজুন..." }, "soundEffectSettings": { "header": "সাউন্ডস", "title": "সাউন্ড সেটিংস", "playSound": "সাউন্ড প্লে করুন" }, "viewUser": { "editProfile": "প্রোফাইল এডিট করুন", "followsYou": "আপনাকে অনুসরণ করে", "followers": "অনুসরণকারীরা", "following": "অনুসরণ করছেন", "followHim": "অনুসরণ করুন", "followingHim": "অনুসরণ করছেন", "copyProfileUrl": "প্রোফাইলের URL কপি করুন", "urlCopied": "URL ক্লিপবোর্ডে কপি করা হয়েছে", "unfollow": "অনুসরণ বাতিল করুন", "about": "সম্বন্ধে", "bot": "বট", "profileTabs": { "about": "সম্বন্ধে", "rooms": "রুমগুলো", "scheduled": "পরিকল্পিত", "recorded": "রেকর্ড করেছেন", "clips": "ক্লিপগুলো", "admin": "অ্যাডমিন" }, "block": "ব্লক করুন", "unblock": "আনব্লক করুন", "sendDM": "মেসেজ করুন", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "ভয়েস সেটিংস", "mic": "মাইক:", "permissionError": "কোনো মাইক খুঁজে পাওয়া যাইনি, আপনি কোনো মাইক প্লাগ করেননি অথবা এই ওয়েবসাইটকে পারমিশন দেননি।", "refresh": "মাইক লিস্ট রিফ্রেশ করুন", "volume": "ভলিউম:", "title": "ভয়েস সেটিংস" }, "overlaySettings": { "input": { "errorMsg": "অবৈধ অ্যাপ শিরোনাম", "label": "অ্যাপ শিরোনাম দিন" }, "header": "ওভারলে সেটিংস", "errorMsg": "দয়া করে বৈধ অ্যাপ শিরোনাম দিন", "label": "অ্যাপ শিরোনাম দিন" }, "download": { "starting": "ডাউনলোড শুরু হচ্ছে...", "failed": "অটো-ডাউনলোড করা যাচ্ছে না, পরে আবার চেষ্টা করুন", "visit_gh": "যান গিটহাব রিলিজেস এ", "prompt": "নিচের বাটনটিতে ক্লিক করুন ডাউনলোড শুরু করতে", "download_now": "ডাউনলোড করুন এখন", "download_for": "%platform% (%ext%)-এর জন্য ডাউনলোড করুন" }, "privacySettings": { "title": "গোপনীয়তা সেটিংস", "header": "গোপনীয়তা সেটিংস", "whispers": { "label": "ফিসফিস", "on": "অন", "off": "অফ" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "ব্যান করা ইউজারস", "unban": "আনব্যান", "noBans": "কেও এখনো ব্যান হয়নি" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "বর্তমান রুম থেকে বেরিয়ে যান", "confirmLeaveRoom": "আপনি কি বেরিয়ে যেতে ইচ্ছুক?", "leave": "বেরোন", "inviteUsersToRoomBtn": "রুমে ইউজারদের ডাকুন", "invite": "ডাকুন", "toggleMuteMicBtn": "মাইক মিউট টগল করুন", "mute": "মিউট", "unmute": "আনমিউট", "makeRoomPublicBtn": "রুমটাকে পাবলিক করুন!", "settings": "সেটিংস", "speaker": "স্পিকার", "listener": "শ্রোতাগণ", "chat": "চ্যাট", "toggleDeafMicBtn": "সাউন্ড টগল করুন", "deafen": "সাউন্ড বন্ধ", "undeafen": "সাউন্ড অন" }, "deviceNotSupported": { "notSupported": "আপনার ডিভাইসটি বর্তমানে সাপোর্টেড নয়। আপনি তৈরি করতে পারেন একটি", "linkText": "ইস্যু GitHub - এ", "addSupport": "এবং আমি চেষ্টা করব আপনার ডিভাইসের জন্য সাপোর্ট আনার।" }, "inviteButton": { "invited": "আমন্ত্রিত", "inviteToRoom": "রুম এ আমন্ত্রণ করুন" }, "micPermissionBanner": { "permissionDenied": "পারমিশন পাওয়া যাইনি আপনার মাইকের (আপনি ব্রাউজার সেটিংস এ গিয়ে রিলোড করুন পেজটিকে)", "dismiss": "বাদ দিন", "tryAgain": "পুনরায় চেষ্টা করুন" }, "keyboardShortcuts": { "setKeybind": "কীবাইন্ড সেট করুন", "listening": "শুনুন", "toggleMuteKeybind": "টগল করুন মাইক কীবাইন্ড", "togglePushToTalkKeybind": "টগল করুন পুশ-টু-টক কীবাইন্ড", "toggleOverlayKeybind": "টগল করুন ওভারলে কীবাইন্ড", "toggleDeafKeybind": "টগল করুন সাউন্ড কীবাইন্ড" }, "userVolumeSlider": { "noAudioMessage": "কিছু কারনে অডিও কনসিউম করা যাইনি" }, "addToCalendar": { "add": "ক্যালেন্ডারে যুক্ত করুন" }, "wsKilled": { "description": "সার্ভারের দ্বারা ওয়েবসকেটটি শেষ হয়ে গেছে। এটি সাধারণত হয় যখন আপনি ওয়েবসাইটটি আরেকটি ট্যাব এ ওপেন করেন।", "reconnect": "পুনরায় সংযোগ করুন" }, "modals": { "createRoomModal": { "public": "পাবলিক", "private": "প্রাইভেট", "roomName": "রুমের নাম", "roomDescription": "রুমের সম্বন্ধে", "descriptionError": "৫০০ শব্দের মধ্যে হতে হবে", "nameError": "২ থেকে ৬০ অক্ষরের মধ্যে হতে হবে", "subtitle": "নিচের স্থানগুলো পূরণ করুন একটি নতুন রুম শুরু করতে" }, "invitedToJoinRoomModal": { "newRoomCreated": "নতুন রুম তৈরি হয়েছে", "roomInviteFrom": "রুমের আমন্ত্রণ যার থেকে", "justStarted": "তারা শুরু করেছে", "likeToJoin": ", আপনি কি যুক্ত হতে চান?", "inviteReceived": "আপনাকে আমন্ত্রণ করা হয়েছে" }, "editProfileModal": { "usernameTaken": "ইউজার নাম নেওয়া হয়ে গিয়েছে", "avatarUrlError": "অবৈধ ছবি", "avatarUrlLabel": "Github/Twitter/Discord এর Avatar URL", "displayNameError": "২ থেকে ৬০ অক্ষরের মধ্যে হতে হবে", "displayNameLabel": "ডিসপ্লে নাম", "usernameError": "২ থেকে ৬০ অক্ষরের মধ্যে হতে হবে এবং শুধুমাত্র বর্ণমালা ও সংখ্যা/আন্ডারস্কোর", "usernameLabel": "ইউজার নাম", "bioError": "১৬০ অক্ষরের মধ্যে হতে হবে", "bioLabel": "বর্ণনা", "bannerUrlLabel": "টুইটার ব্যানার URL" }, "profileModal": { "blockUserConfirm": "আপনি কি নিশ্চিত যে আপনি এই ইউজারকে চিরকালের জন্য ব্লক করছেন আপনার সব রুমে জয়েন করা থেকে?", "blockUser": "ইউজার ব্লক করুন", "makeMod": "মডারেটর তৈরি করুন", "unmod": "মডারেটর থেকে রিমুভ করুন", "addAsSpeaker": "স্পিকার হিসেবে যুক্ত করুন", "moveToListener": "শ্রোতাতে পাঠান", "banFromChat": "চ্যাট থেকে ব্যান করুন", "banFromRoom": "রুম থেকে ব্যান করুন", "goBackToListener": "শ্রোতাতে ফিরে যান", "deleteMessage": "মেসেজটি মুছে ফেলুন", "makeRoomCreator": "রুম অ্যাডমিন তৈরি করুন", "unBanFromChat": "চ্যাট থেকে আনব্যান করুন", "banIPFromRoom": "রুম থেকে IP ব্যান করুন" }, "roomSettingsModal": { "requirePermission": "কথা বলার জন্য পারমিশন লাগবে", "makePublic": "রুমটাকে পাবলিক করুন", "makePrivate": "রুমটাকে প্রাইভেট করুন", "renamePublic": "পাবলিক রুমের নাম সেট করুন", "renamePrivate": "প্রাইভেট রুমের নাম সেট করুন", "chatDisabled": "চ্যাট অফ করুন", "chatCooldown": "চ্যাট কুলডাউন (মিলিসেকেন্ড)", "chat": { "label": "চ্যাট", "enabled": "অন করা", "disabled": "অফ করা", "followerOnly": "অনুসরণকারীদের জন্য শুধু" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "মানুষ", "online": "অনলাইন", "noOnline": "এই মুহুর্তে আপনার অনলাইনে ০ জন বন্ধু রয়েছে", "showMore": "আরো দেখুন" }, "upcomingRoomsCard": { "upcomingRooms": "আসন্ন রুমগুলো", "exploreMoreRooms": "আরো রুম এক্সপ্লোর করুন" }, "search": { "placeholder": "সার্চ করুন রুম, ইউজার অথবা ক্যাটেগরি", "placeholderShort": "সার্চ করুন" }, "settingsDropdown": { "profile": "প্রোফাইল", "language": "ভাষা", "reportABug": "বাগ রিপোর্ট করুন", "useOldVersion": "পুরাতন ভার্সন ব্যবহার করুন", "logOut": { "button": "লগ আউট", "modalSubtitle": "আপনি কি নিশ্চিত আপনি লগ আউট করতে চান?" }, "debugAudio": { "debugAudio": "অডিও ডিবাগ করুন", "stopDebugger": "ডিবাগার বন্ধ করুন" }, "downloadApp": "ডাউনলোড করুন অ্যাপ্লিকেশনটি", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse স্টাফ", "dhContributor": "DogeHouse অবদানকারী" }, "messagesDropdown": { "title": "মেসেজগুলো", "showMore": "আরো দেখুন", "noMessages": "কোনো নতুন মেসেজ নেই" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "পরিকল্পিত রুমগুলো", "noneFound": "পাওয়া যাইনি কোনো", "allRooms": "সব পরিকল্পিত রুমগুলো", "myRooms": "আমার পরিকল্পিত রুমগুলো", "scheduleRoomHeader": "রুম পরিকল্পনা করুন", "startRoom": "রুম শুরু করুন", "modal": { "needsFuture": "ভবিষ্যতের জন্য চাই", "roomName": "রুমের নাম", "minLength": "মিনিমাম ২ অক্ষরের", "roomDescription": "রুমের বর্ণনা" }, "tommorow": "আগামীকাল", "today": "আজ", "deleteModal": { "areYouSure": "আপনি কি নিশ্চিত আপনি এই পরিকল্পিত রুমটি ডিলিট করতে চান?" } }, "roomChat": { "title": "চ্যাট", "emotesSoon": "[emotes শীঘ্রই আসছে]", "bannedAlert": "আপনি চ্যাট থেকে ব্যান হয়েছেন", "waitAlert": "একটু অপেক্ষা করুন আরেকটা মেসেজ করার আগে", "search": "খুঁজুন", "searchResults": "খুঁজে পাওয়া ফলাফল", "recent": "সাম্প্রতিক", "sendMessage": "মেসেজ পাঠান", "whisper": "ফিসফিস", "welcomeMessage": "চ্যাট এ স্বাগতম!", "roomDescription": "রুমের বর্ণনা", "disabled": "রুম চ্যাট অফ করা হয়েছে", "messageDeletion": { "message": "মেসেজ", "retracted": "ডিলিট করেছেন", "deleted": "ডিলিট করা হয়েছে" } }, "roomStatus": { "fuelingRocket": "রকেটে জ্বালানি দেওয়া হচ্ছে", "takingOff": "রকেট ছাড়ছে", "inSpace": "মহাকাশে আছে", "approachingMoon": "চাঁদের নিকটে", "lunarDoge": "চন্দ্র Doge", "approachingSun": "সূর্যের নিকটে", "solarDoge": "সৌর Doge", "approachingGalaxy": "গ্যালাক্সি এর নিকটে", "galacticDoge": "গ্যালাকটিক Doge", "spottedLife": "গ্রহে জীবনের সন্ধান পাওয়া গেছে" }, "feed": { "yourFeed": "আপনার ফিড" } } } ================================================ FILE: kibbeh/public/locales/bottom/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "💖✨✨🥺,👉👈💖💖✨,👉👈💖✨✨✨✨🥺,,👉👈💖💖👉👈✨✨✨,,👉👈💖✨✨🥺,,👉👈💖💖✨,👉👈💖💖✨,,,,👉👈💖💖,👉👈", "loading": "💖✨✨🥺,👉👈💖💖✨,👉👈💖✨✨✨✨🥺,,👉👈💖💖👉👈💖💖🥺👉👈💖💖✨👉👈💖💖,,,👉👈✨✨✨✨🥺,👉👈✨✨✨✨🥺,👉👈✨✨✨✨🥺,👉👈", "noUsersFound": "💖✨✨🥺,,,👉👈💖💖✨,👉👈✨✨✨,,👉👈💖💖✨🥺,,👉👈💖💖✨🥺👉👈💖💖,👉👈💖💖✨,,,,👉👈💖💖✨🥺👉👈✨✨✨,,👉👈💖💖,,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈💖💖✨👉👈💖💖👉👈✨✨✨,,,👉👈", "ok": "💖💖✨,👉👈💖💖🥺,,👉👈", "yes": "💖💖✨✨,👉👈💖💖,👉👈💖💖✨🥺👉👈", "no": "💖💖✨👉👈💖💖✨,👉👈", "cancel": "💖✨🥺,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨👉👈💖✨✨✨✨🥺,,,,👉👈💖💖,👉👈💖💖🥺,,,👉👈", "save": "💖✨✨✨,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,,,👉👈💖💖,👉👈", "edit": "💖✨🥺,,,,👉👈💖💖👉👈💖💖🥺👉👈💖💖✨🥺,👉👈", "delete": "💖✨🥺,,,👉👈💖💖,👉👈💖💖🥺,,,👉👈💖💖,👉👈💖💖✨🥺,👉👈💖💖,👉👈", "joinRoom": "💖✨✨,,,,👉👈💖💖✨,👉👈💖💖🥺👉👈💖💖✨👉👈✨✨✨,,👉👈💖✨✨✨,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈", "copyLink": "💖✨🥺,,👉👈💖💖✨,👉👈💖💖✨,,👉👈💖💖✨✨,👉👈✨✨✨,,👉👈💖✨✨🥺,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖🥺,,👉👈", "copied": "💖✨🥺,,👉👈💖💖✨,👉👈💖💖✨,,👉👈💖💖🥺👉👈💖💖,👉👈💖💖👉👈✨✨✨,,,👉👈", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "💖✨✨✨👉👈💖💖🥺,,,👉👈💖💖,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨👉👈💖💖✨,👉👈💖💖✨🥺,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨,,,,👉👈💖💖✨🥺,,👉👈💖💖✨👉👈💖💖✨👉👈💖💖🥺👉👈💖💖✨👉👈💖💖,,,👉👈✨✨✨,,👉👈💖✨🥺,,,👉👈💖💖✨,👉👈💖💖,,,👉👈💖💖,👉👈💖✨✨,,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈💖💖✨🥺👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨🥺,,,,👉👈💖💖🥺👉👈💖💖✨🥺,👉👈💖💖,,,,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,👉👈💖✨✨✨✨🥺,,,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖,👉👈💖💖✨🥺👉👈💖💖✨🥺👉👈💖💖🥺👉👈💖✨✨✨✨🥺,,,👉👈💖💖🥺👉👈💖💖🥺,,,👉👈💖💖🥺👉👈💖💖✨🥺,👉👈💖💖✨✨,👉👈✨✨✨,,👉👈💖💖✨,,👉👈💖💖,👉👈💖💖✨,,,,👉👈💖💖🥺,,,,👉👈💖💖🥺👉👈💖💖✨🥺👉👈💖💖✨🥺👉👈💖💖🥺👉👈💖💖✨,👉👈💖💖✨👉👈💖💖✨🥺👉👈✨✨✨,,👉👈💖💖🥺,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨✨,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,,👉👈💖💖✨🥺👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨🥺,,👉👈💖💖✨👉👈💖💖✨🥺,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨👉👈💖💖✨🥺,👉👈💖💖,👉👈💖💖👉👈✨✨✨,,👉👈💖💖,👉👈💖💖✨,,,,👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖💖✨,,,,👉👈💖💖✨🥺👉👈", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "💖✨🥺,,,👉👈💖💖✨,👉👈💖💖,,,👉👈💖💖,👉👈💖✨✨,,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈💖💖✨🥺👉👈💖💖,👉👈", "mutedTitle": "💖✨✨🥺,,👉👈💖💖✨🥺,,👉👈💖💖✨🥺,👉👈💖💖,👉👈💖💖👉👈✨✨✨,,👉👈💖💖✨✨,,,,👉👈✨✨✨,,👉👈💖✨🥺,,,👉👈💖💖✨,👉👈💖💖,,,👉👈💖💖,👉👈💖✨✨,,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈💖💖✨🥺👉👈💖💖,👉👈", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "💖✨✨🥺,,,,👉👈💖💖✨,,,,👉👈💖💖🥺👉👈💖💖,,,👉👈💖💖🥺👉👈💖💖✨👉👈✨✨✨,,👉👈💖✨✨✨,,,👉👈💖💖✨🥺,👉👈💖💖✨,👉👈💖💖✨,,,,👉👈💖💖✨✨,👉👈", "link_2": "💖✨🥺,,,👉👈💖💖🥺👉👈💖💖✨🥺👉👈💖✨✨✨✨🥺,,,,👉👈💖💖✨,👉👈💖💖✨,,,,👉👈💖💖👉👈", "link_3": "💖✨✨✨,,👉👈💖💖,👉👈💖💖✨,,👉👈💖💖✨,👉👈💖💖✨,,,,👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,👉👈✨✨✨,,👉👈💖✨🥺,👉👈💖💖✨🥺,,👉👈💖💖,,,👉👈" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "💖✨🥺,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨👉👈", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "💖✨✨🥺,👉👈💖💖🥺👉👈💖💖✨🥺👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖💖✨,👉👈💖💖,,👉👈✨✨✨,,👉👈💖💖✨🥺,,👉👈💖💖✨🥺👉👈💖💖,👉👈💖💖✨,,,,👉👈💖💖✨🥺👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨,,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨👉👈💖💖✨,👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖💖🥺👉👈💖💖✨👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,👉👈✨✨✨,,👉👈💖💖✨,,👉👈💖💖✨,,,,👉👈💖💖🥺👉👈💖💖✨🥺,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨👉👈💖💖👉👈✨✨✨,,👉👈💖💖✨✨,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈✨✨✨,,👉👈💖💖,,👉👈💖💖✨,👉👈💖💖🥺,,,👉👈💖💖🥺,,,👉👈💖💖✨,👉👈💖💖✨🥺,,,,👉👈✨✨✨✨🥺,👉👈", "currentRoom": "💖✨🥺,,👉👈💖💖✨🥺,,👉👈💖💖✨,,,,👉👈💖💖✨,,,,👉👈💖💖,👉👈💖💖✨👉👈💖💖✨🥺,👉👈💖💖🥺,,,👉👈💖💖✨✨,👉👈✨✨✨,,👉👈💖💖🥺👉👈💖💖✨👉👈💖🥺,,,👉👈", "startPrivateRoom": "💖✨✨✨,,,👉👈💖💖✨🥺,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨,,,,👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,👉👈✨✨✨,,👉👈💖💖✨,,👉👈💖💖✨,,,,👉👈💖💖🥺👉👈💖💖✨🥺,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈✨✨✨,,👉👈💖💖✨🥺,,,,👉👈💖💖🥺👉👈💖💖✨🥺,👉👈💖💖,,,,👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖,,,,👉👈💖💖,👉👈💖💖🥺,,,,👉👈", "title": "People" }, "followList": { "followHim": "💖✨✨👉👈💖💖✨,👉👈💖💖🥺,,,👉👈💖💖🥺,,,👉👈💖💖✨,👉👈💖💖✨🥺,,,,👉👈", "followingHim": "💖✨✨👉👈💖💖✨,👉👈💖💖🥺,,,👉👈💖💖🥺,,,👉👈💖💖✨,👉👈💖💖✨🥺,,,,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖,,,👉👈", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "💖✨✨🥺,,,👉👈💖💖,👉👈💖💖✨🥺,,,,👉👈✨✨✨,,👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈", "editRoom": "💖✨🥺,,,,👉👈💖💖👉👈💖💖🥺👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖✨✨✨,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈", "refresh": "💖✨✨✨,,👉👈💖💖,👉👈💖💖,,👉👈💖💖✨,,,,👉👈💖💖,👉👈💖💖✨🥺👉👈💖💖,,,,👉👈", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "💖✨✨✨,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈✨✨✨,,👉👈💖💖,,,👉👈💖💖✨,👉👈💖💖✨👉👈💖💖,👉👈💖🥺,,,,👉👈✨✨✨,,👉👈💖💖,,,👉👈💖💖✨,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,,👉👈💖✨✨✨✨🥺,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖🥺,,👉👈", "shareRoomLink": "💖✨✨✨,,,👉👈💖💖,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨,,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖✨✨✨,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈✨✨✨,,👉👈💖✨✨🥺,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖🥺,,👉👈", "inviteFollowers": "💖✨✨✨🥺,,,,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨👉👈✨✨✨,,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖✨🥺,,,👉👈💖💖🥺👉👈💖💖✨🥺,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨✨,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈💖💖✨,,,,👉👈✨✨✨,,👉👈💖💖,,👉👈💖💖✨,👉👈💖💖🥺,,,👉👈💖💖🥺,,,👉👈💖💖✨,👉👈💖💖✨🥺,,,,👉👈💖💖,👉👈💖💖✨,,,,👉👈💖💖✨🥺👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨,,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨,👉👈💖💖✨👉👈💖💖🥺,,,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖,👉👈💖🥺,,,👉👈", "whenFollowersOnline": "💖✨✨✨🥺,,👉👈💖💖,,,,👉👈💖💖,👉👈💖💖✨👉👈✨✨✨,,👉👈💖💖✨✨,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈💖💖✨,,,,👉👈✨✨✨,,👉👈💖💖,,👉👈💖💖✨,👉👈💖💖🥺,,,👉👈💖💖🥺,,,👉👈💖💖✨,👉👈💖💖✨🥺,,,,👉👈💖💖,👉👈💖💖✨,,,,👉👈💖💖✨🥺👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨,,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨,👉👈💖💖✨👉👈💖💖🥺,,,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖,👉👈✨✨✨✨,,,,👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖,,,,👉👈💖💖,👉👈💖💖✨✨,👉👈✨✨✨,,👉👈💖💖✨🥺,,,,👉👈💖💖🥺👉👈💖💖🥺,,,👉👈💖💖🥺,,,👉👈✨✨✨,,👉👈💖💖✨🥺👉👈💖💖,,,,👉👈💖💖✨,👉👈💖💖✨🥺,,,,👉👈✨✨✨,,👉👈💖💖✨🥺,,👉👈💖💖✨,,👉👈✨✨✨,,👉👈💖💖,,,,👉👈💖💖,👉👈💖💖✨,,,,👉👈💖💖,👉👈✨✨✨✨🥺,👉👈" }, "login": { "headerText": "💖✨✨✨,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖🥺,,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖,,,👉👈✨✨✨,,👉👈💖💖✨🥺,,,👉👈💖💖✨,👉👈💖💖🥺👉👈💖✨✨✨✨🥺,,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖✨,👉👈💖💖✨👉👈💖💖✨🥺,,,👉👈💖💖,👉👈💖💖✨,,,,👉👈💖💖✨🥺👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,👉👈💖💖🥺👉👈💖💖✨,👉👈💖💖✨👉👈💖💖✨🥺👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖✨,👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖,,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖🥺,,,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖✨👉👈✨✨✨,,👉👈✨✨✨✨👉👈💖💖💖🥺,,,,👉👈💖💖💖,,,,👉👈💖💖✨✨🥺,,,👉👈", "featureText_1": "💖✨🥺,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨,,,,👉👈💖💖🥺,,👉👈✨✨✨,,👉👈💖✨✨✨,,,,👉👈💖💖,,,,👉👈💖💖,👉👈💖💖🥺,,,,👉👈💖💖,👉👈", "featureText_2": "💖✨✨🥺,,,,👉👈💖💖✨,,👉👈💖💖,👉👈💖💖✨👉👈✨✨✨,,👉👈💖✨✨✨,,,👉👈💖💖🥺👉👈💖💖,,,👉👈💖💖✨👉👈✨✨✨✨🥺👉👈💖✨✨✨🥺👉👈💖💖✨,,👉👈💖💖✨🥺👉👈", "featureText_3": "💖✨🥺,,👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖💖✨🥺👉👈💖💖✨🥺👉👈✨✨✨✨🥺👉👈💖✨✨✨👉👈💖💖🥺,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,👉👈💖💖,,👉👈💖💖✨,👉👈💖💖✨,,,,👉👈💖💖🥺,,,,👉👈✨✨✨,,👉👈💖✨✨✨,,,👉👈💖💖✨🥺,,👉👈💖💖✨,,👉👈💖💖✨,,👉👈💖💖✨,👉👈💖💖✨,,,,👉👈💖💖✨🥺,👉👈", "featureText_4": "💖✨✨🥺,,,,👉👈💖💖✨,,👉👈💖💖,👉👈💖💖✨👉👈✨✨✨,,👉👈💖✨✨✨,,,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈💖💖✨,,,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖,👉👈", "featureText_5": "💖✨✨✨,,,,👉👈💖💖,👉👈💖💖✨✨👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖✨🥺,,👉👈💖💖,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,👉👈", "featureText_6": "💖✨✨✨👉👈💖💖✨,👉👈💖💖✨🥺,,,,👉👈💖💖,👉👈💖💖✨,,,,👉👈💖💖,👉👈💖💖👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,,👉👈💖💖✨✨,👉👈✨✨✨,,👉👈💖✨🥺,,,👉👈💖💖✨,👉👈💖💖,,,👉👈💖💖,👉👈", "loginGithub": "💖✨✨🥺,👉👈💖💖✨,👉👈💖💖,,,👉👈💖💖🥺👉👈💖💖✨👉👈✨✨✨,,👉👈💖💖✨🥺,,,,👉👈💖💖🥺👉👈💖💖✨🥺,👉👈💖💖,,,,👉👈✨✨✨,,👉👈💖✨✨,👉👈💖💖🥺👉👈💖💖✨🥺,👉👈💖✨✨,,👉👈💖💖✨🥺,,👉👈💖✨✨✨✨🥺,,,👉👈", "loginTwitter": "💖✨✨🥺,👉👈💖💖✨,👉👈💖💖,,,👉👈💖💖🥺👉👈💖💖✨👉👈✨✨✨,,👉👈💖💖✨🥺,,,,👉👈💖💖🥺👉👈💖💖✨🥺,👉👈💖💖,,,,👉👈✨✨✨,,👉👈💖✨✨✨,,,,👉👈💖💖✨🥺,,,,👉👈💖💖🥺👉👈💖💖✨🥺,👉👈💖💖✨🥺,👉👈💖💖,👉👈💖💖✨,,,,👉👈", "createTestUser": "💖✨🥺,,👉👈💖💖✨,,,,👉👈💖💖,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,👉👈💖💖,👉👈✨✨✨,,👉👈💖✨✨✨,,,,👉👈💖💖,👉👈💖💖✨🥺👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖✨✨✨🥺👉👈💖💖✨🥺👉👈💖💖,👉👈💖💖✨,,,,👉👈", "loginDiscord": "Login with Discord" }, "myProfile": { "logout": "💖✨✨🥺,👉👈💖💖✨,👉👈💖💖,,,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈💖💖✨🥺,👉👈", "probablyLoading": "💖💖✨,,👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖✨✨✨✨🥺,,,👉👈💖✨✨✨✨🥺,,👉👈💖✨✨✨✨🥺,,,👉👈💖💖🥺,,,👉👈💖💖✨✨,👉👈✨✨✨,,👉👈💖💖🥺,,,👉👈💖💖✨,👉👈💖✨✨✨✨🥺,,👉👈💖💖👉👈💖💖🥺👉👈💖💖✨👉👈💖💖,,,👉👈✨✨✨✨🥺,👉👈✨✨✨✨🥺,👉👈✨✨✨✨🥺,👉👈", "voiceSettings": "💖✨✨✨🥺,👉👈💖💖✨,👉👈💖💖🥺👉👈💖✨✨✨✨🥺,,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖✨✨✨,,,👉👈💖💖,👉👈💖💖✨🥺,👉👈💖💖✨🥺,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖,,,👉👈💖💖✨🥺👉👈", "overlaySettings": "💖✨✨🥺,,,,👉👈💖💖✨🥺,,,👉👈💖💖,👉👈💖💖✨,,,,👉👈💖💖🥺,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨✨,👉👈✨✨✨,,👉👈💖✨✨✨,,,👉👈💖💖,👉👈💖💖✨🥺,👉👈💖💖✨🥺,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖,,,👉👈💖💖✨🥺👉👈", "soundSettings": "💖✨✨✨,,,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈💖💖✨👉👈💖💖👉👈✨✨✨,,👉👈💖✨✨✨,,,👉👈💖💖,👉👈💖💖✨🥺,👉👈💖💖✨🥺,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖,,,👉👈💖💖✨🥺👉👈", "deleteAccount": "💖✨🥺,,,👉👈💖💖,👉👈💖💖🥺,,,👉👈💖💖,👉👈💖💖✨🥺,👉👈💖💖,👉👈✨✨✨,,👉👈💖✨🥺👉👈💖✨✨✨✨🥺,,,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈💖💖✨👉👈💖💖✨🥺,👉👈", "couldNotFindUser": "💖✨✨✨,,,👉👈💖💖✨,👉👈💖💖✨,,,,👉👈💖💖✨,,,,👉👈💖💖✨✨,👉👈✨✨✨✨,,,,👉👈✨✨✨,,👉👈💖💖✨🥺,,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈💖💖🥺,,,👉👈💖💖👉👈✨✨✨,,👉👈💖💖✨👉👈💖💖✨,👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖💖,,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖💖✨🥺,,👉👈💖💖✨🥺👉👈💖💖,👉👈💖💖✨,,,,👉👈", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "💖✨✨✨🥺,,👉👈💖💖,,,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖✨,,👉👈💖💖✨🥺👉👈✨✨✨,,,👉👈✨✨✨,,👉👈💖✨✨✨,,,,👉👈💖💖,,,,👉👈💖💖🥺👉👈💖💖✨🥺👉👈✨✨✨,,👉👈💖💖✨,,👉👈💖✨✨✨✨🥺,,👉👈💖💖,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖,,,👉👈💖💖✨,👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖💖🥺,,,👉👈💖💖✨,👉👈💖💖✨🥺👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖💖🥺👉👈💖💖✨👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖✨,👉👈💖💖✨👉👈💖💖✨🥺,,,👉👈💖💖,👉👈💖💖✨,,,,👉👈💖💖✨🥺👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,👉👈💖💖🥺👉👈💖💖✨,👉👈💖💖✨👉👈✨✨✨✨🥺,👉👈", "goHomeMessage": "💖✨✨🥺,,,👉👈💖💖✨,👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖✨,👉👈✨✨✨,,👉👈💖💖✨🥺,,,,👉👈💖💖✨,👉👈💖💖✨,,,,👉👈💖💖✨,,,,👉👈💖💖✨✨,👉👈✨✨✨✨🥺,👉👈✨✨✨,,👉👈💖✨✨✨🥺,,,,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨👉👈", "goHomeLinkText": "💖💖,,,👉👈💖💖✨,👉👈✨✨✨,,👉👈💖💖,,,,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈💖💖,👉👈" }, "room": { "speakers": "💖✨✨✨,,,👉👈💖💖✨,,👉👈💖💖,👉👈💖✨✨✨✨🥺,,👉👈💖💖🥺,,👉👈💖💖,👉👈💖💖✨,,,,👉👈💖💖✨🥺👉👈", "requestingToSpeak": "💖✨✨✨,,👉👈💖💖,👉👈💖💖✨,,,👉👈💖💖✨🥺,,👉👈💖💖,👉👈💖💖✨🥺👉👈💖💖✨🥺,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖,,,👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖✨,👉👈✨✨✨,,👉👈💖✨✨✨,,,👉👈💖💖✨,,👉👈💖💖,👉👈💖✨✨✨✨🥺,,👉👈💖💖🥺,,👉👈", "listeners": "💖✨✨🥺,👉👈💖💖🥺👉👈💖💖✨🥺👉👈💖💖✨🥺,👉👈💖💖,👉👈💖💖✨👉👈💖💖,👉👈💖💖✨,,,,👉👈💖💖✨🥺👉👈", "allowAll": "💖✨🥺👉👈💖💖🥺,,,👉👈💖💖🥺,,,👉👈💖💖✨,👉👈💖💖✨🥺,,,,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,👉👈💖💖🥺,,,👉👈💖💖🥺,,,👉👈", "allowAllConfirm": "💖✨🥺👉👈💖💖✨,,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨✨,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈✨✨✨,,👉👈💖💖✨🥺👉👈💖💖✨🥺,,👉👈💖💖✨,,,,👉👈💖💖,👉👈💖✨,,,👉👈✨✨✨,,👉👈💖✨✨✨,,,,👉👈💖💖,,,,👉👈💖💖🥺👉👈💖💖✨🥺👉👈✨✨✨,,👉👈💖💖✨🥺,,,,👉👈💖💖🥺👉👈💖💖🥺,,,👉👈💖💖🥺,,,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,👉👈💖💖🥺,,,👉👈💖💖🥺,,,👉👈💖💖✨,👉👈💖💖✨🥺,,,,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,👉👈💖💖🥺,,,👉👈💖💖🥺,,,👉👈✨✨✨,,👉👈💖💖✨✨,,,👉👈💖💖✨✨,,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈💖💖✨👉👈💖💖✨🥺,👉👈💖💖✨✨🥺👉👈💖💖✨✨🥺👉👈✨✨✨,,👉👈💖💖✨,,,,👉👈💖💖,👉👈💖💖✨,,,👉👈💖💖✨🥺,,👉👈💖💖,👉👈💖💖✨🥺👉👈💖💖✨🥺,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖,,,👉👈✨✨✨,,👉👈💖💖✨🥺,,👉👈💖💖✨🥺👉👈💖💖,👉👈💖💖✨,,,,👉👈💖💖✨🥺👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖✨,👉👈✨✨✨,,👉👈💖💖✨🥺👉👈💖💖✨,,👉👈💖💖,👉👈💖✨✨✨✨🥺,,👉👈💖💖🥺,,👉👈" }, "searchUser": { "search": "💖💖✨🥺👉👈💖💖,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨,,,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖,,,,👉👈✨✨✨✨🥺,👉👈✨✨✨✨🥺,👉👈✨✨✨✨🥺,👉👈" }, "soundEffectSettings": { "header": "💖✨✨✨,,,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈💖💖✨👉👈💖💖👉👈💖💖✨🥺👉👈", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "💖✨🥺,,,,👉👈💖💖👉👈💖💖🥺👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖✨✨✨👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖💖,,👉👈💖💖🥺👉👈💖💖🥺,,,👉👈💖💖,👉👈", "followsYou": "💖✨✨👉👈💖💖✨,👉👈💖💖🥺,,,👉👈💖💖🥺,,,👉👈💖💖✨,👉👈💖💖✨🥺,,,,👉👈💖💖✨🥺👉👈✨✨✨,,👉👈💖💖✨✨,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈", "followers": "💖💖,,👉👈💖💖✨,👉👈💖💖🥺,,,👉👈💖💖🥺,,,👉👈💖💖✨,👉👈💖💖✨🥺,,,,👉👈💖💖,👉👈💖💖✨,,,,👉👈💖💖✨🥺👉👈", "following": "💖💖,,👉👈💖💖✨,👉👈💖💖🥺,,,👉👈💖💖🥺,,,👉👈💖💖✨,👉👈💖💖✨🥺,,,,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖,,,👉👈", "followHim": "💖✨✨👉👈💖💖✨,👉👈💖💖🥺,,,👉👈💖💖🥺,,,👉👈💖💖✨,👉👈💖💖✨🥺,,,,👉👈", "unfollow": "💖✨✨✨🥺👉👈💖💖✨👉👈💖💖,,👉👈💖💖✨,👉👈💖💖🥺,,,👉👈💖💖🥺,,,👉👈💖💖✨,👉👈💖💖✨🥺,,,,👉👈", "followingHim": "💖✨✨👉👈💖💖✨,👉👈💖💖🥺,,,👉👈💖💖🥺,,,👉👈💖💖✨,👉👈💖💖✨🥺,,,,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖,,,👉👈", "copyProfileUrl": "💖✨🥺,,👉👈💖💖✨,👉👈💖💖✨,,👉👈💖💖✨✨,👉👈✨✨✨,,👉👈💖✨✨✨👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖💖,,👉👈💖💖🥺👉👈💖💖🥺,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖✨✨✨🥺👉👈💖✨✨✨,,👉👈💖✨✨🥺,👉👈", "urlCopied": "💖✨✨✨🥺👉👈💖✨✨✨,,👉👈💖✨✨🥺,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖✨,👉👈💖💖✨,,👉👈💖💖🥺👉👈💖💖,👉👈💖💖👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖✨,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖🥺,,,👉👈💖💖🥺👉👈💖💖✨,,👉👈💖✨✨✨✨🥺,,,👉👈💖💖✨,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨,,,,👉👈💖💖👉👈", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "💖✨✨✨🥺,👉👈💖💖✨,👉👈💖💖🥺👉👈💖✨✨✨✨🥺,,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖✨✨✨,,,👉👈💖💖,👉👈💖💖✨🥺,👉👈💖💖✨🥺,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖,,,👉👈💖💖✨🥺👉👈", "mic": "💖✨✨🥺,,👉👈💖💖🥺👉👈💖✨✨✨✨🥺,,,,👉👈💖🥺,,,👉👈", "permissionError": "💖✨✨🥺,,,👉👈💖💖✨,👉👈✨✨✨,,👉👈💖💖🥺,,,,👉👈💖💖🥺👉👈💖✨✨✨✨🥺,,,,👉👈💖💖✨🥺👉👈✨✨✨,,👉👈💖💖,,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈💖💖✨👉👈💖💖👉👈✨✨✨✨,,,,👉👈✨✨✨,,👉👈💖💖✨✨,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈✨✨✨,,👉👈💖💖,👉👈💖💖🥺👉👈💖💖✨🥺,👉👈💖💖,,,,👉👈💖💖,👉👈💖💖✨,,,,👉👈✨✨✨,,👉👈💖💖,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨👉👈💖💖✨,👉👈💖💖✨👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨,,👉👈💖💖🥺,,,👉👈💖💖✨🥺,,👉👈💖💖,,,👉👈💖💖,,,👉👈💖💖,👉👈💖💖👉👈✨✨✨,,👉👈💖💖🥺👉👈💖💖✨👉👈✨✨✨,,👉👈💖💖✨,👉👈💖💖✨,,,,👉👈✨✨✨,,👉👈💖💖,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,,,👉👈💖💖,👉👈💖💖✨👉👈✨✨✨🥺,,,,👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖💖,,,👉👈💖💖🥺👉👈💖💖✨🥺,,,👉👈💖💖,👉👈💖💖✨👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖,,,,👉👈💖💖🥺👉👈💖💖✨🥺👉👈✨✨✨,,👉👈💖💖✨🥺,,,,👉👈💖💖,👉👈💖✨✨✨✨🥺,,,👉👈💖💖✨🥺👉👈💖💖🥺👉👈💖💖✨🥺,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨,,👉👈💖💖,👉👈💖💖✨,,,,👉👈💖💖🥺,,,,👉👈💖💖🥺👉👈💖💖✨🥺👉👈💖💖✨🥺👉👈💖💖🥺👉👈💖💖✨,👉👈💖💖✨👉👈✨✨✨✨🥺,👉👈", "refresh": "💖✨✨✨,,👉👈💖💖,👉👈💖💖,,👉👈💖💖✨,,,,👉👈💖💖,👉👈💖💖✨🥺👉👈💖💖,,,,👉👈✨✨✨,,👉👈💖✨✨🥺,,👉👈💖💖🥺👉👈💖✨✨✨✨🥺,,,,👉👈✨✨✨,,👉👈💖✨✨🥺,👉👈💖💖🥺👉👈💖💖✨🥺👉👈💖💖✨🥺,👉👈", "volume": "💖✨✨✨🥺,👉👈💖💖✨,👉👈💖💖🥺,,,👉👈💖💖✨🥺,,👉👈💖💖🥺,,,,👉👈💖💖,👉👈💖🥺,,,👉👈", "title": "Voice Settings" }, "overlaySettings": { "header": "💖✨✨🥺,,,,👉👈💖💖✨🥺,,,👉👈💖💖,👉👈💖💖✨,,,,👉👈💖💖🥺,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨✨,👉👈✨✨✨,,👉👈💖✨✨✨,,,👉👈💖💖,👉👈💖💖✨🥺,👉👈💖💖✨🥺,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖,,,👉👈💖💖✨🥺👉👈", "input": { "errorMsg": "💖✨✨✨👉👈💖💖🥺,,,👉👈💖💖,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺👉👈💖💖,👉👈✨✨✨,,👉👈💖💖,👉👈💖💖✨👉👈💖💖✨🥺,👉👈💖💖,👉👈💖💖✨,,,,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,👉👈✨✨✨,,👉👈💖💖✨🥺,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖🥺,,,👉👈💖💖🥺👉👈💖💖👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨,,👉👈💖💖✨,,👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖🥺👉👈💖💖✨🥺,👉👈💖💖🥺,,,👉👈💖💖,👉👈", "label": "💖✨🥺👉👈💖💖✨,,👉👈💖💖✨,,👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖🥺👉👈💖💖✨🥺,👉👈💖💖🥺,,,👉👈💖💖,👉👈" } }, "download": { "starting": "Starting download...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "Click on the button below to start download", "download_now": "Download Now", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "💖✨🥺,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨👉👈💖💖✨👉👈💖💖,👉👈💖💖👉👈✨✨✨,,👉👈💖✨✨✨🥺👉👈💖💖✨🥺👉👈💖💖,👉👈💖💖✨,,,,👉👈💖💖✨🥺👉👈", "unban": "💖✨✨✨🥺👉👈💖💖✨👉👈💖✨✨✨✨🥺,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨👉👈", "noBans": "💖✨✨🥺,,,👉👈💖💖✨,👉👈✨✨✨,,👉👈💖💖✨,👉👈💖💖✨👉👈💖💖,👉👈✨✨✨,,👉👈💖💖,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,,👉👈💖💖,👉👈💖💖,👉👈💖💖✨👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨👉👈💖💖✨👉👈💖💖,👉👈💖💖👉👈✨✨✨,,👉👈💖💖✨✨,👉👈💖💖,👉👈💖💖✨🥺,👉👈" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "💖✨✨🥺,👉👈💖💖,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖✨🥺,,👉👈💖💖✨🥺,,👉👈💖💖✨,,,,👉👈💖💖✨,,,,👉👈💖💖,👉👈💖💖✨👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖✨✨✨,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈", "confirmLeaveRoom": "💖✨🥺👉👈💖💖✨,,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨✨,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈✨✨✨,,👉👈💖💖✨🥺👉👈💖💖✨🥺,,👉👈💖💖✨,,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨✨,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈✨✨✨,,👉👈💖💖✨🥺,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖✨,👉👈✨✨✨,,👉👈💖💖🥺,,,👉👈💖💖,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,,,👉👈💖💖,👉👈💖✨,,,👉👈", "leave": "💖✨✨🥺,👉👈💖💖,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,,,👉👈💖💖,👉👈", "inviteUsersToRoomBtn": "💖✨✨,,,👉👈💖💖✨👉👈💖💖✨🥺,,,👉👈💖💖🥺👉👈💖💖✨🥺,👉👈💖💖,👉👈✨✨✨,,👉👈💖✨✨✨🥺👉👈💖💖✨🥺👉👈💖💖,👉👈💖💖✨,,,,👉👈💖💖✨🥺👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖✨,👉👈✨✨✨,,👉👈💖✨✨✨,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈", "invite": "💖✨✨,,,👉👈💖💖✨👉👈💖💖✨🥺,,,👉👈💖💖🥺👉👈💖💖✨🥺,👉👈💖💖,👉👈", "toggleMuteMicBtn": "💖✨✨✨,,,,👉👈💖💖✨,👉👈💖💖,,,👉👈💖💖,,,👉👈💖💖🥺,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖✨✨🥺,,👉👈💖💖✨🥺,,👉👈💖💖✨🥺,👉👈💖💖,👉👈", "mute": "💖✨✨🥺,,👉👈💖💖✨🥺,,👉👈💖💖✨🥺,👉👈💖💖,👉👈", "unmute": "💖✨✨✨🥺👉👈💖💖✨👉👈💖💖🥺,,,,👉👈💖💖✨🥺,,👉👈💖💖✨🥺,👉👈💖💖,👉👈", "makeRoomPublicBtn": "💖✨✨🥺,,👉👈💖✨✨✨✨🥺,,👉👈💖💖🥺,,👉👈💖💖,👉👈✨✨✨,,👉👈💖✨✨✨,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈✨✨✨,,👉👈💖✨✨✨👉👈💖💖✨🥺,,👉👈💖✨✨✨✨🥺,,,👉👈💖💖🥺,,,👉👈💖💖🥺👉👈💖✨✨✨✨🥺,,,,👉👈✨✨✨,,,👉👈", "settings": "💖✨✨✨,,,👉👈💖💖,👉👈💖💖✨🥺,👉👈💖💖✨🥺,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖,,,👉👈💖💖✨🥺👉👈", "speaker": "💖✨✨✨,,,👉👈💖💖✨,,👉👈💖💖,👉👈💖✨✨✨✨🥺,,👉👈💖💖🥺,,👉👈💖💖,👉👈💖💖✨,,,,👉👈", "listener": "💖✨✨🥺,👉👈💖💖🥺👉👈💖💖✨🥺👉👈💖💖✨🥺,👉👈💖💖,👉👈💖💖✨👉👈💖💖,👉👈💖💖✨,,,,👉👈", "chat": "💖✨🥺,,👉👈💖💖,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,👉👈", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "💖✨✨✨🥺,,,,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈💖💖✨,,,,👉👈✨✨✨,,👉👈💖💖👉👈💖💖,👉👈💖💖✨🥺,,,👉👈💖💖🥺👉👈💖✨✨✨✨🥺,,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖🥺👉👈💖💖✨🥺👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖✨🥺,,👉👈💖💖✨,,,,👉👈💖💖✨,,,,👉👈💖💖,👉👈💖💖✨👉👈💖💖✨🥺,👉👈💖💖🥺,,,👉👈💖💖✨✨,👉👈✨✨✨,,👉👈💖💖✨👉👈💖💖✨,👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖💖✨🥺👉👈💖💖✨🥺,,👉👈💖💖✨,,👉👈💖💖✨,,👉👈💖💖✨,👉👈💖💖✨,,,,👉👈💖💖✨🥺,👉👈💖💖,👉👈💖💖👉👈✨✨✨✨🥺,👉👈✨✨✨,,👉👈💖✨✨✨🥺,,,,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖✨,,,,👉👈💖💖,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,👉👈💖💖,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨👉👈", "linkText": "💖💖🥺👉👈💖💖✨🥺👉👈💖💖✨🥺👉👈💖💖✨🥺,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨,👉👈💖💖✨👉👈✨✨✨,,👉👈💖✨✨,👉👈💖💖🥺👉👈💖💖✨🥺,👉👈💖✨✨,,👉👈💖💖✨🥺,,👉👈💖✨✨✨✨🥺,,,👉👈", "addSupport": "💖✨✨✨✨🥺,,👉👈💖💖✨👉👈💖💖👉👈✨✨✨,,👉👈💖✨✨,,,👉👈✨✨✨,,👉👈💖💖✨🥺,,,,👉👈💖💖🥺👉👈💖💖🥺,,,👉👈💖💖🥺,,,👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖✨,,,,👉👈💖💖✨✨,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,👉👈💖💖👉👈💖💖👉👈💖💖🥺👉👈💖💖✨👉👈💖💖,,,👉👈✨✨✨,,👉👈💖💖✨🥺👉👈💖💖✨🥺,,👉👈💖💖✨,,👉👈💖💖✨,,👉👈💖💖✨,👉👈💖💖✨,,,,👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖💖,,👉👈💖💖✨,👉👈💖💖✨,,,,👉👈✨✨✨,,👉👈💖💖✨✨,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈💖💖✨,,,,👉👈✨✨✨,,👉👈💖💖👉👈💖💖,👉👈💖💖✨🥺,,,👉👈💖💖🥺👉👈💖✨✨✨✨🥺,,,,👉👈💖💖,👉👈✨✨✨✨🥺,👉👈" }, "followingOnline": { "people": "💖✨✨✨👉👈💖💖,👉👈💖💖✨,👉👈💖💖✨,,👉👈💖💖🥺,,,👉👈💖💖,👉👈", "online": "💖✨✨🥺,,,,👉👈💖✨✨🥺,,,👉👈💖✨✨🥺,👉👈💖✨✨,,,👉👈💖✨✨🥺,,,👉👈💖✨🥺,,,,👉👈", "noOnline": "💖✨✨✨🥺,,,,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈✨✨✨,,👉👈💖💖,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,,,👉👈💖💖,👉👈✨✨✨,,👉👈✨✨✨✨🥺,,,👉👈✨✨✨,,👉👈💖💖,,👉👈💖💖✨,,,,👉👈💖💖🥺👉👈💖💖,👉👈💖💖✨👉👈💖💖👉👈💖💖✨🥺👉👈✨✨✨,,👉👈💖💖✨,👉👈💖💖✨👉👈💖💖🥺,,,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨,,,,👉👈💖💖🥺👉👈💖💖,,,👉👈💖💖,,,,👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖💖✨👉👈💖💖✨,👉👈💖💖✨🥺,,,,👉👈", "showMore": "💖✨✨✨,,,👉👈💖💖,,,,👉👈💖💖✨,👉👈💖💖✨🥺,,,,👉👈✨✨✨,,👉👈💖💖🥺,,,,👉👈💖💖✨,👉👈💖💖✨,,,,👉👈💖💖,👉👈" }, "inviteButton": { "invited": "💖✨✨,,,👉👈💖💖✨👉👈💖💖✨🥺,,,👉👈💖💖🥺👉👈💖💖✨🥺,👉👈💖💖,👉👈💖💖👉👈✨✨✨,,,👉👈", "inviteToRoom": "💖✨✨,,,👉👈💖💖✨👉👈💖💖✨🥺,,,👉👈💖💖🥺👉👈💖💖✨🥺,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖✨,👉👈✨✨✨,,👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈" }, "micPermissionBanner": { "permissionDenied": "💖✨✨✨👉👈💖💖,👉👈💖💖✨,,,,👉👈💖💖🥺,,,,👉👈💖💖🥺👉👈💖💖✨🥺👉👈💖💖✨🥺👉👈💖💖🥺👉👈💖💖✨,👉👈💖💖✨👉👈✨✨✨,,👉👈💖💖👉👈💖💖,👉👈💖💖✨👉👈💖💖🥺👉👈💖💖,👉👈💖💖👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖✨,,,,👉👈💖💖✨✨,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖,,,👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖✨,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,👉👈💖✨✨✨✨🥺,,,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖,👉👈💖💖✨🥺👉👈💖💖✨🥺👉👈✨✨✨,,👉👈💖💖✨✨,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈💖💖✨,,,,👉👈✨✨✨,,👉👈💖💖🥺,,,,👉👈💖💖🥺👉👈💖✨✨✨✨🥺,,,,👉👈✨✨✨,,👉👈✨✨✨✨👉👈💖💖✨✨,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈✨✨✨,,👉👈💖💖🥺,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨✨,👉👈✨✨✨,,👉👈💖💖✨👉👈💖💖,👉👈💖💖,👉👈💖💖👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖✨,👉👈✨✨✨,,👉👈💖💖,,,👉👈💖💖✨,👉👈✨✨✨,,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖✨🥺,👉👈💖💖✨,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,,👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖💖✨🥺,,,,👉👈💖💖✨🥺👉👈💖💖,👉👈💖💖✨,,,,👉👈✨✨✨,,👉👈💖💖✨🥺👉👈💖💖,👉👈💖💖✨🥺,👉👈💖💖✨🥺,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖,,,👉👈💖💖✨🥺👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨👉👈💖💖👉👈✨✨✨,,👉👈💖💖✨,,,,👉👈💖💖,👉👈💖💖🥺,,,👉👈💖💖✨,👉👈💖✨✨✨✨🥺,,👉👈💖💖👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖,,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨,,👉👈💖✨✨✨✨🥺,,👉👈💖💖,,,👉👈💖💖,👉👈✨✨✨✨,👉👈", "dismiss": "💖✨🥺,,,👉👈💖💖🥺👉👈💖💖✨🥺👉👈💖💖🥺,,,,👉👈💖💖🥺👉👈💖💖✨🥺👉👈💖💖✨🥺👉👈", "tryAgain": "💖✨✨✨,,,,👉👈💖💖✨,,,,👉👈💖💖✨✨,👉👈✨✨✨,,👉👈💖✨🥺👉👈💖💖,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖🥺👉👈💖💖✨👉👈" }, "keyboardShortcuts": { "setKeybind": "💖✨✨✨,,,👉👈💖💖,👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖✨✨🥺👉👈💖💖,👉👈💖💖✨✨,👉👈💖✨✨✨✨🥺,,,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖👉👈", "listening": "💖✨✨🥺,👉👈💖💖🥺👉👈💖💖✨🥺👉👈💖💖✨🥺,👉👈💖💖,👉👈💖💖✨👉👈💖💖🥺👉👈💖💖✨👉👈💖💖,,,👉👈✨✨✨✨🥺,👉👈✨✨✨✨🥺,👉👈✨✨✨✨🥺,👉👈", "toggleMuteKeybind": "💖✨✨✨,,,,👉👈💖💖✨,👉👈💖💖,,,👉👈💖💖,,,👉👈💖💖🥺,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖🥺,,,,👉👈💖💖✨🥺,,👉👈💖💖✨🥺,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖🥺,,👉👈💖💖,👉👈💖💖✨✨,👉👈💖✨✨✨✨🥺,,,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖👉👈", "toggleOverlayKeybind": "💖✨✨✨,,,,👉👈💖💖✨,👉👈💖💖,,,👉👈💖💖,,,👉👈💖💖🥺,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨,👉👈💖💖✨🥺,,,👉👈💖💖,👉👈💖💖✨,,,,👉👈💖💖🥺,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨✨,👉👈✨✨✨,,👉👈💖💖🥺,,👉👈💖💖,👉👈💖💖✨✨,👉👈💖✨✨✨✨🥺,,,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖👉👈", "togglePushToTalkKeybind": "💖✨✨✨,,,,👉👈💖💖✨,👉👈💖💖,,,👉👈💖💖,,,👉👈💖💖🥺,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨,,👉👈💖💖✨🥺,,👉👈💖💖✨🥺👉👈💖💖,,,,👉👈✨✨✨✨🥺👉👈💖💖✨🥺,👉👈💖💖✨,👉👈✨✨✨✨🥺👉👈💖💖✨🥺,👉👈💖✨✨✨✨🥺,,👉👈💖💖🥺,,,👉👈💖💖🥺,,👉👈✨✨✨,,👉👈💖💖🥺,,👉👈💖💖,👉👈💖💖✨✨,👉👈💖✨✨✨✨🥺,,,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖👉👈", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "💖✨✨🥺,,,👉👈💖💖✨,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,,👉👈💖💖👉👈💖💖🥺👉👈💖💖✨,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖✨,👉👈💖💖✨👉👈💖💖✨🥺👉👈💖💖✨🥺,,👉👈💖💖🥺,,,,👉👈💖💖,👉👈💖💖✨,,,,👉👈✨✨✨,,👉👈💖💖,,👉👈💖💖✨,👉👈💖💖✨,,,,👉👈✨✨✨,,👉👈💖💖✨🥺👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨,,,,👉👈💖💖,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺👉👈💖💖✨,👉👈💖💖✨👉👈" }, "upcomingRoomsCard": { "upcomingRooms": "💖✨✨✨🥺👉👈💖💖✨,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖,,,👉👈✨✨✨,,👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈💖💖✨🥺👉👈", "exploreMoreRooms": "💖✨🥺,,,,👉👈💖💖✨✨👉👈💖💖✨,,👉👈💖💖🥺,,,👉👈💖💖✨,👉👈💖💖✨,,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖🥺,,,,👉👈💖💖✨,👉👈💖💖✨,,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈💖💖✨🥺👉👈" }, "addToCalendar": { "add": "💖✨🥺👉👈💖💖👉👈💖💖👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖✨,👉👈✨✨✨,,👉👈💖✨🥺,,👉👈💖✨✨✨✨🥺,,👉👈💖💖🥺,,,👉👈💖💖,👉👈💖💖✨👉👈💖💖👉👈💖✨✨✨✨🥺,,👉👈💖💖✨,,,,👉👈" }, "wsKilled": { "description": "💖✨✨✨🥺,,👉👈💖💖,👉👈💖✨✨✨✨🥺,,,👉👈💖✨✨✨,,,👉👈💖💖✨,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖🥺,,👉👈💖💖,👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖💖✨🥺,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺👉👈✨✨✨,,👉👈💖💖🥺,,👉👈💖💖🥺👉👈💖💖🥺,,,👉👈💖💖🥺,,,👉👈💖💖,👉👈💖💖👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,,👉👈💖💖✨✨,👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖,,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨🥺👉👈💖💖,👉👈💖💖✨,,,,👉👈💖💖✨🥺,,,👉👈💖💖,👉👈💖💖✨,,,,👉👈✨✨✨✨🥺,👉👈✨✨✨,,👉👈💖✨✨✨,,,,👉👈💖💖,,,,👉👈💖💖🥺👉👈💖💖✨🥺👉👈✨✨✨,,👉👈💖💖✨🥺,,👉👈💖💖✨🥺👉👈💖💖✨🥺,,👉👈💖✨✨✨✨🥺,,👉👈💖💖🥺,,,👉👈💖💖🥺,,,👉👈💖💖✨✨,👉👈✨✨✨,,👉👈💖💖,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨,,👉👈💖💖✨,,👉👈💖💖,👉👈💖💖✨👉👈💖💖✨🥺👉👈✨✨✨,,👉👈💖💖✨🥺,,,,👉👈💖💖,,,,👉👈💖💖,👉👈💖💖✨👉👈✨✨✨,,👉👈💖💖✨✨,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈✨✨✨,,👉👈💖💖✨,👉👈💖💖✨,,👉👈💖💖,👉👈💖💖✨👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖,,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨🥺,,,,👉👈💖💖,👉👈💖✨✨✨✨🥺,,,👉👈💖💖✨🥺👉👈💖💖🥺👉👈💖💖✨🥺,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖🥺👉👈💖💖✨👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨👉👈💖💖✨,👉👈💖💖✨🥺,👉👈💖💖,,,,👉👈💖💖,👉👈💖💖✨,,,,👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖✨✨✨✨🥺,,👉👈💖✨✨✨✨🥺,,,👉👈✨✨✨✨🥺,👉👈", "reconnect": "💖✨✨✨,,👉👈💖💖,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖✨,👉👈💖💖✨👉👈💖💖✨👉👈💖💖,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖✨🥺,👉👈" }, "search": { "placeholder": "💖✨✨✨,,,👉👈💖💖,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨,,,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖,,,,👉👈✨✨✨,,👉👈💖💖,,👉👈💖💖✨,👉👈💖💖✨,,,,👉👈✨✨✨,,👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈💖💖✨🥺👉👈✨✨✨✨,,,,👉👈✨✨✨,,👉👈💖💖✨🥺,,👉👈💖💖✨🥺👉👈💖💖,👉👈💖💖✨,,,,👉👈💖💖✨🥺👉👈✨✨✨,,👉👈💖💖✨,👉👈💖💖✨,,,,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,👉👈💖💖,👉👈💖💖,,,👉👈💖💖✨,👉👈💖💖✨,,,,👉👈💖💖🥺👉👈💖💖,👉👈💖💖✨🥺👉👈", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "💖✨✨✨👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖💖,,👉👈💖💖🥺👉👈💖💖🥺,,,👉👈💖💖,👉👈", "language": "💖✨✨🥺,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨👉👈💖💖,,,👉👈💖💖✨🥺,,👉👈💖✨✨✨✨🥺,,👉👈💖💖,,,👉👈💖💖,👉👈", "reportABug": "💖✨✨✨,,👉👈💖💖,👉👈💖💖✨,,👉👈💖💖✨,👉👈💖💖✨,,,,👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖✨🥺👉👈✨✨✨,,👉👈💖✨🥺,👉👈💖💖✨🥺,,👉👈💖💖,,,👉👈", "useOldVersion": "💖✨✨✨🥺👉👈💖💖✨🥺👉👈💖💖,👉👈✨✨✨,,👉👈💖✨✨🥺,,,,👉👈💖💖🥺,,,👉👈💖💖👉👈✨✨✨,,👉👈💖✨✨✨🥺,👉👈💖💖,👉👈💖💖✨,,,,👉👈💖💖✨🥺👉👈💖💖🥺👉👈💖💖✨,👉👈💖💖✨👉👈", "logOut": { "button": "💖✨✨🥺,👉👈💖💖✨,👉👈💖💖,,,👉👈✨✨✨,,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈💖💖✨🥺,👉👈", "modalSubtitle": "💖✨🥺👉👈💖💖✨,,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨✨,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈✨✨✨,,👉👈💖💖✨🥺👉👈💖💖✨🥺,,👉👈💖💖✨,,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨✨,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈✨✨✨,,👉👈💖💖✨🥺,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖✨,👉👈✨✨✨,,👉👈💖💖🥺,,,👉👈💖💖✨,👉👈💖💖,,,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈💖💖✨🥺,👉👈💖✨,,,👉👈" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "modals": { "createRoomModal": { "subtitle": "💖✨✨👉👈💖💖🥺👉👈💖💖🥺,,,👉👈💖💖🥺,,,👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖,,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖,,👉👈💖💖✨,👉👈💖💖🥺,,,👉👈💖💖🥺,,,👉👈💖💖✨,👉👈💖💖✨🥺,,,,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖,,,👉👈✨✨✨,,👉👈💖💖,,👉👈💖💖🥺👉👈💖💖,👉👈💖💖🥺,,,👉👈💖💖👉👈💖💖✨🥺👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖✨,👉👈✨✨✨,,👉👈💖💖✨🥺👉👈💖💖✨🥺,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨,,,,👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,👉👈✨✨✨,,👉👈💖💖✨👉👈💖💖,👉👈💖💖✨🥺,,,,👉👈✨✨✨,,👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈", "public": "💖✨✨✨👉👈💖💖✨🥺,,👉👈💖✨✨✨✨🥺,,,👉👈💖💖🥺,,,👉👈💖💖🥺👉👈💖✨✨✨✨🥺,,,,👉👈", "private": "💖✨✨✨👉👈💖💖✨,,,,👉👈💖💖🥺👉👈💖💖✨🥺,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,👉👈💖💖,👉👈", "roomName": "💖✨✨✨,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈✨✨✨,,👉👈💖💖✨👉👈💖✨✨✨✨🥺,,👉👈💖💖🥺,,,,👉👈💖💖,👉👈", "roomDescription": "💖✨✨✨,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈✨✨✨,,👉👈💖💖👉👈💖💖,👉👈💖💖✨🥺👉👈💖✨✨✨✨🥺,,,,👉👈💖💖✨,,,,👉👈💖💖🥺👉👈💖💖✨,,👉👈💖💖✨🥺,👉👈💖💖🥺👉👈💖💖✨,👉👈💖💖✨👉👈", "descriptionError": "💖✨✨🥺,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨✨👉👈✨✨✨,,👉👈💖💖🥺,,,👉👈💖💖,👉👈💖💖✨👉👈💖💖,,,👉👈💖💖✨🥺,👉👈💖💖,,,,👉👈✨✨✨,,👉👈💖,,,👉👈✨✨✨✨🥺,,,👉👈✨✨✨✨🥺,,,👉👈", "nameError": "💖✨✨🥺,,👉👈💖💖✨🥺,,👉👈💖💖✨🥺👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,,👉👈💖💖,👉👈💖💖✨🥺,👉👈💖💖✨🥺,,,,👉👈💖💖,👉👈💖💖,👉👈💖💖✨👉👈✨✨✨,,👉👈💖👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖✨,👉👈✨✨✨,,👉👈💖,,,,👉👈✨✨✨✨🥺,,,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨,,,,👉👈💖✨✨✨✨🥺,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖✨🥺,👉👈💖💖,👉👈💖💖✨,,,,👉👈💖💖✨🥺👉👈✨✨✨,,👉👈💖💖🥺,,,👉👈💖💖✨,👉👈💖💖✨👉👈💖💖,,,👉👈" }, "invitedToJoinRoomModal": { "newRoomCreated": "💖✨✨🥺,,,👉👈💖💖,👉👈💖💖✨🥺,,,,👉👈✨✨✨,,👉👈💖✨✨✨,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈✨✨✨,,👉👈💖✨🥺,,👉👈💖💖✨,,,,👉👈💖💖,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,👉👈💖💖,👉👈💖💖👉👈", "roomInviteFrom": "💖✨✨✨,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈✨✨✨,,👉👈💖✨✨,,,👉👈💖💖✨👉👈💖💖✨🥺,,,👉👈💖💖🥺👉👈💖💖✨🥺,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖,,👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈", "justStarted": "💖✨✨✨,,,,👉👈💖💖,,,,👉👈💖💖,👉👈💖💖✨✨,👉👈✨✨✨,,👉👈💖💖🥺,👉👈💖💖✨🥺,,👉👈💖💖✨🥺👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖💖✨🥺👉👈💖💖✨🥺,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨,,,,👉👈💖💖✨🥺,👉👈💖💖,👉👈💖💖👉👈", "likeToJoin": "✨✨✨✨,,,,👉👈✨✨✨,,👉👈💖💖✨🥺,,,,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈💖💖🥺,,,👉👈💖💖👉👈✨✨✨,,👉👈💖💖✨✨,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈✨✨✨,,👉👈💖💖🥺,,,👉👈💖💖🥺👉👈💖💖🥺,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖✨,👉👈✨✨✨,,👉👈💖💖🥺,👉👈💖💖✨,👉👈💖💖🥺👉👈💖💖✨👉👈💖✨,,,👉👈", "inviteReceived": "💖💖✨✨,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈✨✨✨🥺,,,,👉👈💖💖✨🥺,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,,👉👈💖💖,👉👈💖💖,👉👈💖💖✨👉👈✨✨✨,,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖✨🥺,,,👉👈💖💖🥺👉👈💖💖✨🥺,👉👈💖💖,👉👈💖💖👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖✨,👉👈" }, "editProfileModal": { "usernameTaken": "💖✨✨✨🥺👉👈💖💖✨🥺👉👈💖💖,👉👈💖💖✨,,,,👉👈💖💖✨👉👈💖✨✨✨✨🥺,,👉👈💖💖🥺,,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖✨✨✨✨🥺,,👉👈💖💖🥺,,👉👈💖💖,👉👈💖💖✨👉👈", "avatarUrlError": "💖✨✨,,,👉👈💖💖✨👉👈💖💖✨🥺,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖🥺,,,👉👈💖💖🥺👉👈💖💖👉👈✨✨✨,,👉👈💖💖🥺👉👈💖💖🥺,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖,,,👉👈💖💖,👉👈", "avatarUrlLabel": "💖✨✨,👉👈💖💖🥺👉👈💖💖✨🥺,👉👈💖✨✨,,👉👈💖💖✨🥺,,👉👈💖✨✨✨✨🥺,,,👉👈✨✨✨✨🥺,,👉👈💖✨✨✨,,,,👉👈💖💖✨🥺,,,,👉👈💖💖🥺👉👈💖💖✨🥺,👉👈💖💖✨🥺,👉👈💖💖,👉👈💖💖✨,,,,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨,,,,👉👈✨✨✨,,👉👈💖✨✨✨🥺👉👈💖✨✨✨,,👉👈💖✨✨🥺,👉👈", "displayNameError": "💖✨✨🥺,👉👈💖💖,👉👈💖💖✨👉👈💖💖,,,👉👈💖💖✨🥺,👉👈💖💖,,,,👉👈✨✨✨,,👉👈💖👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖✨,👉👈✨✨✨,,👉👈💖,,,👉👈✨✨✨✨🥺,,,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨,,,,👉👈💖✨✨✨✨🥺,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖✨🥺,👉👈💖💖,👉👈💖💖✨,,,,👉👈💖💖✨🥺👉👈", "displayNameLabel": "💖✨🥺,,,👉👈💖💖🥺👉👈💖💖✨🥺👉👈💖💖✨,,👉👈💖💖🥺,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨✨,👉👈✨✨✨,,👉👈💖✨✨🥺,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖🥺,,,,👉👈💖💖,👉👈", "usernameError": "💖✨✨🥺,👉👈💖💖,👉👈💖💖✨👉👈💖💖,,,👉👈💖💖✨🥺,👉👈💖💖,,,,👉👈✨✨✨,,👉👈💖,,👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖✨,👉👈✨✨✨,,👉👈✨✨✨✨🥺,,,,👉👈💖,,,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨,,,,👉👈💖✨✨✨✨🥺,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖✨🥺,👉👈💖💖,👉👈💖💖✨,,,,👉👈💖💖✨🥺👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨👉👈💖💖👉👈✨✨✨,,👉👈💖💖✨,👉👈💖💖✨👉👈💖💖🥺,,,👉👈💖💖✨✨,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,👉👈💖💖🥺,,,👉👈💖💖✨,,👉👈💖💖,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨👉👈💖💖✨🥺,,👉👈💖💖🥺,,,,👉👈💖💖,👉👈💖💖✨,,,,👉👈💖💖🥺👉👈💖✨✨✨✨🥺,,,,👉👈✨✨✨✨🥺,,👉👈💖💖✨🥺,,👉👈💖💖✨👉👈💖💖👉👈💖💖,👉👈💖💖✨,,,,👉👈💖💖✨🥺👉👈💖✨✨✨✨🥺,,,,👉👈💖💖✨,👉👈💖💖✨,,,,👉👈💖💖,👉👈", "usernameLabel": "💖✨✨✨🥺👉👈💖💖✨🥺👉👈💖💖,👉👈💖💖✨,,,,👉👈💖💖✨👉👈💖✨✨✨✨🥺,,👉👈💖💖🥺,,,,👉👈💖💖,👉👈", "bioError": "💖✨✨🥺,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨✨👉👈✨✨✨,,👉👈💖💖🥺,,,👉👈💖💖,👉👈💖💖✨👉👈💖💖,,,👉👈💖💖✨🥺,👉👈💖💖,,,,👉👈✨✨✨,,👉👈💖💖✨,👉👈💖💖,,👉👈✨✨✨,,👉👈✨✨✨✨🥺,,,,👉👈💖,,,,👉👈✨✨✨✨🥺,,,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨,,,,👉👈💖✨✨✨✨🥺,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖✨🥺,👉👈💖💖,👉👈💖💖✨,,,,👉👈💖💖✨🥺👉👈", "bioLabel": "💖✨🥺,👉👈💖💖🥺👉👈💖💖✨,👉👈", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "💖✨🥺👉👈💖💖✨,,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨✨,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈✨✨✨,,👉👈💖💖✨🥺👉👈💖💖✨🥺,,👉👈💖💖✨,,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨✨,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈✨✨✨,,👉👈💖💖✨🥺,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖✨,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,,👉👈💖💖🥺,,,👉👈💖💖✨,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖🥺,,👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖,,,,👉👈💖💖🥺👉👈💖💖✨🥺👉👈✨✨✨,,👉👈💖💖✨🥺,,👉👈💖💖✨🥺👉👈💖💖,👉👈💖💖✨,,,,👉👈✨✨✨,,👉👈💖💖,,👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈✨✨✨,,👉👈💖💖🥺,👉👈💖💖✨,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖🥺👉👈💖💖✨👉👈💖💖,,,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨👉👈💖💖✨✨,👉👈✨✨✨,,👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈✨✨✨,,👉👈💖💖✨✨,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈✨✨✨,,👉👈💖💖,👉👈💖💖✨🥺,,,👉👈💖💖,👉👈💖💖✨,,,,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖✨,,,,👉👈💖💖,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,👉👈💖💖,👉👈💖✨,,,👉👈", "blockUser": "💖✨🥺,👉👈💖💖🥺,,,👉👈💖💖✨,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖🥺,,👉👈✨✨✨,,👉👈💖💖✨🥺,,👉👈💖💖✨🥺👉👈💖💖,👉👈💖💖✨,,,,👉👈", "makeMod": "💖✨✨✨👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈💖💖✨,👉👈💖💖✨🥺,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖✨,👉👈✨✨✨,,👉👈💖✨✨🥺,,👉👈💖💖✨,👉👈💖💖👉👈", "unmod": "💖✨🥺,,,👉👈💖💖,👉👈💖💖🥺,,,,👉👈💖💖✨,👉👈💖💖✨🥺,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖,,👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈✨✨✨,,👉👈💖✨✨🥺,,👉👈💖💖✨,👉👈💖💖👉👈", "addAsSpeaker": "💖✨🥺👉👈💖💖👉👈💖💖👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺👉👈✨✨✨,,👉👈💖✨✨✨,,,👉👈💖💖✨,,👉👈💖💖,👉👈💖✨✨✨✨🥺,,👉👈💖💖🥺,,👉👈💖💖,👉👈💖💖✨,,,,👉👈", "moveToListener": "💖✨✨🥺,,👉👈💖💖✨,👉👈💖💖✨🥺,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖✨,👉👈✨✨✨,,👉👈💖✨✨🥺,👉👈💖💖🥺👉👈💖💖✨🥺👉👈💖💖✨🥺,👉👈💖💖,👉👈💖💖✨👉👈💖💖,👉👈💖💖✨,,,,👉👈", "banFromChat": "💖✨🥺,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨👉👈✨✨✨,,👉👈💖💖,,👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈✨✨✨,,👉👈💖✨🥺,,👉👈💖💖,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,👉👈", "banFromRoom": "💖✨🥺,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨👉👈✨✨✨,,👉👈💖💖,,👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈✨✨✨,,👉👈💖✨✨✨,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈", "goBackToListener": "💖✨✨,👉👈💖💖✨,👉👈✨✨✨,,👉👈💖✨🥺,👉👈💖✨✨✨✨🥺,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖🥺,,👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖✨,👉👈✨✨✨,,👉👈💖✨✨🥺,👉👈💖💖🥺👉👈💖💖✨🥺👉👈💖💖✨🥺,👉👈💖💖,👉👈💖💖✨👉👈💖💖,👉👈💖💖✨,,,,👉👈", "deleteMessage": "💖✨🥺,,,👉👈💖💖,👉👈💖💖🥺,,,👉👈💖💖,👉👈💖💖✨🥺,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖,,,,👉👈💖💖🥺👉👈💖💖✨🥺👉👈✨✨✨,,👉👈💖✨✨🥺,,👉👈💖💖,👉👈💖💖✨🥺👉👈💖💖✨🥺👉👈💖✨✨✨✨🥺,,👉👈💖💖,,,👉👈💖💖,👉👈", "makeRoomCreator": "💖✨✨✨👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈💖💖✨,👉👈💖💖✨🥺,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖✨,👉👈✨✨✨,,👉👈💖✨🥺👉👈💖💖👉👈💖💖🥺,,,,👉👈💖💖🥺👉👈💖💖✨👉👈", "unBanFromChat": "Unban from Chat", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "💖💖✨,,,,👉👈💖💖,👉👈💖💖✨,,,👉👈💖💖✨🥺,,👉👈💖💖🥺👉👈💖💖✨,,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨,,👉👈💖💖,👉👈💖💖✨,,,,👉👈💖💖🥺,,,,👉👈💖💖🥺👉👈💖💖✨🥺👉👈💖💖✨🥺👉👈💖💖🥺👉👈💖💖✨,👉👈💖💖✨👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖✨,👉👈✨✨✨,,👉👈💖💖✨🥺👉👈💖💖✨,,👉👈💖💖,👉👈💖✨✨✨✨🥺,,👉👈💖💖🥺,,👉👈", "makePublic": "💖💖🥺,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖🥺,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈✨✨✨,,👉👈💖💖✨,,👉👈💖💖✨🥺,,👉👈💖✨✨✨✨🥺,,,👉👈💖💖🥺,,,👉👈💖💖🥺👉👈💖✨✨✨✨🥺,,,,👉👈", "makePrivate": "💖💖🥺,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖🥺,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈✨✨✨,,👉👈💖💖✨,,👉👈💖💖✨,,,,👉👈💖💖🥺👉👈💖💖✨🥺,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,👉👈💖💖,👉👈", "renamePublic": "💖✨✨✨,,,👉👈💖💖,👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖💖✨,,👉👈💖💖✨🥺,,👉👈💖✨✨✨✨🥺,,,👉👈💖💖🥺,,,👉👈💖💖🥺👉👈💖✨✨✨✨🥺,,,,👉👈✨✨✨,,👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈✨✨✨,,👉👈💖💖✨👉👈💖✨✨✨✨🥺,,👉👈💖💖🥺,,,,👉👈💖💖,👉👈", "renamePrivate": "💖✨✨✨,,,👉👈💖💖,👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖💖✨,,👉👈💖💖✨,,,,👉👈💖💖🥺👉👈💖💖✨🥺,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈✨✨✨,,👉👈💖💖✨👉👈💖✨✨✨✨🥺,,👉👈💖💖🥺,,,,👉👈💖💖,👉👈", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "feed": { "yourFeed": "💖✨✨✨🥺,,,,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈💖💖✨,,,,👉👈✨✨✨,,👉👈💖💖,,👉👈💖💖,👉👈💖💖,👉👈💖💖👉👈" }, "scheduledRooms": { "title": "💖✨✨✨,,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖,,,,👉👈💖💖,👉👈💖💖👉👈💖💖✨🥺,,👉👈💖💖🥺,,,👉👈💖💖,👉👈💖💖👉👈✨✨✨,,👉👈💖✨✨✨,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈💖💖✨🥺👉👈", "noneFound": "💖💖✨👉👈💖💖✨,👉👈💖💖✨👉👈💖💖,👉👈✨✨✨,,👉👈💖💖,,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈💖💖✨👉👈💖💖👉👈", "allRooms": "💖✨✨✨✨🥺,,👉👈💖💖🥺,,,👉👈💖💖🥺,,,👉👈✨✨✨,,👉👈💖💖✨🥺👉👈💖✨✨✨✨🥺,,,,👉👈💖💖,,,,👉👈💖💖,👉👈💖💖👉👈💖💖✨🥺,,👉👈💖💖🥺,,,👉👈💖💖,👉👈💖💖👉👈✨✨✨,,👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈💖💖✨🥺👉👈", "myRooms": "💖💖🥺,,,,👉👈💖💖✨✨,👉👈✨✨✨,,👉👈💖💖✨🥺👉👈💖✨✨✨✨🥺,,,,👉👈💖💖,,,,👉👈💖💖,👉👈💖💖👉👈💖💖✨🥺,,👉👈💖💖🥺,,,👉👈💖💖,👉👈💖💖👉👈✨✨✨,,👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈💖💖✨🥺👉👈", "scheduleRoomHeader": "💖✨✨✨,,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖,,,,👉👈💖💖,👉👈💖💖👉👈💖💖✨🥺,,👉👈💖💖🥺,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖✨✨✨,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈", "startRoom": "💖💖✨🥺👉👈💖💖✨🥺,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨,,,,👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈", "modal": { "needsFuture": "💖💖✨👉👈💖💖,👉👈💖💖,👉👈💖💖👉👈💖💖✨🥺👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖✨,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖🥺👉👈💖💖✨👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖,,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖,,👉👈💖💖✨🥺,,👉👈💖💖✨🥺,👉👈💖💖✨🥺,,👉👈💖💖✨,,,,👉👈💖💖,👉👈", "roomName": "💖💖✨,,,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈✨✨✨,,👉👈💖💖✨👉👈💖✨✨✨✨🥺,,👉👈💖💖🥺,,,,👉👈💖💖,👉👈", "roomDescription": "💖✨🥺,,,👉👈💖💖,👉👈💖💖✨🥺👉👈💖✨✨✨✨🥺,,,,👉👈💖💖✨,,,,👉👈💖💖🥺👉👈💖💖✨,,👉👈💖💖✨🥺,👉👈💖💖🥺👉👈💖💖✨,👉👈💖💖✨👉👈", "minLength": "💖💖🥺,,,,👉👈💖💖🥺👉👈💖💖✨👉👈✨✨✨,,👉👈💖💖🥺,,,👉👈💖💖,👉👈💖💖✨👉👈💖💖,,,👉👈💖💖✨🥺,👉👈💖💖,,,,👉👈✨✨✨,,👉👈💖👉👈" }, "tommorow": "TOMMOROW", "today": "TODAY", "deleteModal": { "areYouSure": "Are you sure you want to delete this scheduled room?" } }, "roomChat": { "title": "💖✨🥺,,👉👈💖💖,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,👉👈", "emotesSoon": "💖✨✨✨✨,👉👈💖💖,👉👈💖💖🥺,,,,👉👈💖💖✨,👉👈💖💖✨🥺,👉👈💖💖,👉👈💖💖✨🥺👉👈✨✨✨,,👉👈💖💖✨🥺👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖✨👉👈💖✨✨✨✨,,,👉👈", "bannedAlert": "💖✨✨✨🥺,,,,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈✨✨✨,,👉👈💖💖,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,,👉👈💖💖,👉👈💖💖,👉👈💖💖✨👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨👉👈💖💖✨👉👈💖💖,👉👈💖💖👉👈✨✨✨,,👉👈💖💖,,👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,👉👈", "waitAlert": "💖✨✨✨🥺,,,,👉👈💖💖✨,👉👈💖💖✨🥺,,👉👈✨✨✨,,👉👈💖💖,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖✨,👉👈✨✨✨,,👉👈💖💖✨🥺,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖🥺👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,👉👈✨✨✨,,👉👈💖💖✨🥺👉👈💖💖,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖✨,👉👈💖💖✨👉👈💖💖👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,,👉👈💖💖,👉👈💖💖,,👉👈💖💖✨,👉👈💖💖✨,,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨🥺👉👈💖💖,👉👈💖💖✨👉👈💖💖👉👈💖💖🥺👉👈💖💖✨👉👈💖💖,,,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨👉👈💖💖✨,👉👈💖💖✨🥺,👉👈💖💖,,,,👉👈💖💖,👉👈💖💖✨,,,,👉👈✨✨✨,,👉👈💖💖🥺,,,,👉👈💖💖,👉👈💖💖✨🥺👉👈💖💖✨🥺👉👈💖✨✨✨✨🥺,,👉👈💖💖,,,👉👈💖💖,👉👈", "search": "💖✨✨✨,,,👉👈💖💖,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨,,,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖,,,,👉👈", "searchResults": "💖✨✨✨,,,👉👈💖💖,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨,,,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖,,,,👉👈✨✨✨,,👉👈💖✨✨✨,,👉👈💖💖,👉👈💖💖✨🥺👉👈💖💖✨🥺,,👉👈💖💖🥺,,,👉👈💖💖✨🥺,👉👈💖💖✨🥺👉👈", "recent": "💖✨✨👉👈💖💖✨,,,,👉👈💖💖,👉👈💖💖✨,,,👉👈💖💖✨🥺,,👉👈💖💖,👉👈💖💖✨👉👈💖💖✨🥺,👉👈💖💖🥺,,,👉👈💖💖✨✨,👉👈✨✨✨,,👉👈💖✨✨✨🥺👉👈💖💖✨🥺👉👈💖💖,👉👈💖💖👉👈", "sendMessage": "💖✨✨✨,,,👉👈💖💖,👉👈💖💖✨👉👈💖💖👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,👉👈✨✨✨,,👉👈💖✨✨🥺,,👉👈💖💖,👉👈💖💖✨🥺👉👈💖💖✨🥺👉👈💖✨✨✨✨🥺,,👉👈💖💖,,,👉👈💖💖,👉👈", "whisper": "💖✨✨✨🥺,,👉👈💖💖,,,,👉👈💖💖🥺👉👈💖💖✨🥺👉👈💖💖✨,,👉👈💖💖,👉👈💖💖✨,,,,👉👈", "welcomeMessage": "💖✨✨✨🥺,,👉👈💖💖,👉👈💖💖🥺,,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨🥺,👉👈💖💖✨,👉👈✨✨✨,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨🥺,👉👈✨✨✨,,,👉👈", "roomDescription": "💖✨✨✨,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖🥺,,,,👉👈✨✨✨,,👉👈💖💖👉👈💖💖,👉👈💖💖✨🥺👉👈💖✨✨✨✨🥺,,,,👉👈💖💖✨,,,,👉👈💖💖🥺👉👈💖💖✨,,👉👈💖💖✨🥺,👉👈💖💖🥺👉👈💖💖✨,👉👈💖💖✨👉👈", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "💖✨✨👉👈💖💖✨🥺,,👉👈💖💖,👉👈💖💖🥺,,,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖,,,👉👈✨✨✨,,👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖🥺,,👉👈💖💖,👉👈💖💖✨🥺,👉👈", "takingOff": "💖✨✨✨,,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖🥺,,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖,,,👉👈✨✨✨,,👉👈💖💖✨,👉👈💖💖,,👉👈💖💖,,👉👈", "inSpace": "💖✨✨,,,👉👈💖💖✨👉👈✨✨✨,,👉👈💖💖✨🥺👉👈💖💖✨,,👉👈💖✨✨✨✨🥺,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖,👉👈", "approachingMoon": "💖✨🥺👉👈💖💖✨,,👉👈💖💖✨,,👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖✨✨✨✨🥺,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖,,,,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖,,,👉👈✨✨✨,,👉👈💖💖🥺,,,,👉👈💖💖✨,👉👈💖💖✨,👉👈💖💖✨👉👈", "lunarDoge": "💖✨✨🥺,👉👈💖💖✨🥺,,👉👈💖💖✨👉👈💖✨✨✨✨🥺,,👉👈💖💖✨,,,,👉👈✨✨✨,,👉👈💖✨🥺,,,👉👈💖💖✨,👉👈💖💖,,,👉👈💖💖,👉👈", "approachingSun": "💖✨🥺👉👈💖💖✨,,👉👈💖💖✨,,👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖✨✨✨✨🥺,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖,,,,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖,,,👉👈✨✨✨,,👉👈💖💖✨🥺👉👈💖💖✨🥺,,👉👈💖💖✨👉👈", "solarDoge": "💖✨✨✨,,,👉👈💖💖✨,👉👈💖💖🥺,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨,,,,👉👈✨✨✨,,👉👈💖✨🥺,,,👉👈💖💖✨,👉👈💖💖,,,👉👈💖💖,👉👈", "approachingGalaxy": "💖✨🥺👉👈💖💖✨,,👉👈💖💖✨,,👉👈💖💖✨,,,,👉👈💖💖✨,👉👈💖✨✨✨✨🥺,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖,,,,👉👈💖💖🥺👉👈💖💖✨👉👈💖💖,,,👉👈✨✨✨,,👉👈💖💖,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖🥺,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨✨👉👈💖💖✨✨,👉👈", "galacticDoge": "💖✨✨,👉👈💖✨✨✨✨🥺,,👉👈💖💖🥺,,,👉👈💖✨✨✨✨🥺,,👉👈💖✨✨✨✨🥺,,,,👉👈💖💖✨🥺,👉👈💖💖🥺👉👈💖✨✨✨✨🥺,,,,👉👈✨✨✨,,👉👈💖✨🥺,,,👉👈💖💖✨,👉👈💖💖,,,👉👈💖💖,👉👈", "spottedLife": "💖✨✨✨👉👈💖💖🥺,,,👉👈💖✨✨✨✨🥺,,👉👈💖💖✨👉👈💖💖,👉👈💖💖✨🥺,👉👈✨✨✨,,👉👈💖💖✨🥺,,,,👉👈💖💖🥺👉👈💖💖✨🥺,👉👈💖💖,,,,👉👈✨✨✨,,👉👈💖💖🥺,,,👉👈💖💖🥺👉👈💖💖,,👉👈💖💖,👉👈✨✨✨,,👉👈💖💖✨🥺👉👈💖💖✨,,👉👈💖💖✨,👉👈💖💖✨🥺,👉👈💖💖✨🥺,👉👈💖💖,👉👈💖💖👉👈" } } } ================================================ FILE: kibbeh/public/locales/cs/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "Načíst více", "loading": "Načítám...", "noUsersFound": "Nikdo tu není", "ok": "Ok", "yes": "Ano", "no": "Ne", "cancel": "Zrušit", "save": "Uložit", "edit": "Pozměnit", "delete": "Smazat", "joinRoom": "Připojit se do místnosti", "copyLink": "Kopírovat odkaz", "copied": "Zkopírováno!", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Prosím, dej DogeHousu práva na \"Dostupnost\".", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Ztlumen | DogeHouse", "deafenedTitle": "Vypnutý zvuk | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Původ", "link_2": "Discord", "link_3": "Nahlásit chybu" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "Zabanovat", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "důvod", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Seznam uživatelů které sleduješ a nejsou v soukromé místnosti", "currentRoom": "Právě v:", "startPrivateRoom": "Otevřít soukromou místnost", "title": "Lidé" }, "followList": { "followHim": "sledovat", "followingHim": "sleduješ", "title": "Lidé", "followingNone": "Nesleduješ nikoho", "noFollowers": "Nemáš žádné sledující" }, "home": { "createRoom": "Vytvořit místnost", "refresh": "Obnovit", "editRoom": "Upravit místnost", "desktopAlert": "Stáhni si desktopovou aplikaci DogeHouse již dnes!" }, "inviteList": { "roomGone": "Místnost není dostupná, jít zpět", "shareRoomLink": "Sdílet odkaz na místnost", "inviteFollowers": "Můžeš pozvat své následovníky, kteří jsou online:", "whenFollowersOnline": "Až budou tví následovníci online, objeví se zde." }, "login": { "headerText": "Voicechat, který stoupá ke hvězdám 🚀", "featureText_1": "Tmavý motiv", "featureText_2": "Otevřené registrace", "featureText_3": "Funguje na všech platformách", "featureText_4": "Open Source", "featureText_5": "Textový Chat", "featureText_6": "Doporučuje 10/10 hafanů", "loginGithub": "Přihlásit se přes GitHub", "loginTwitter": "Přihlásit se přes Twitter", "createTestUser": "Vytvořit testovacího uživatele", "loginDiscord": "Přihlásit se přes Discord" }, "myProfile": { "logout": "Odhlásit se", "probablyLoading": "Nejspíš se to načítá...", "voiceSettings": "Nastavení hlasu", "soundSettings": "Nastavení zvuku", "deleteAccount": "Smazat účet", "overlaySettings": "Nastavení overlaye", "couldNotFindUser": "Uživatel bohužel nenalezen...", "privacySettings": "Nastavení soukromí" }, "notFound": { "whoopsError": "Upst! Tahle místnost se ztratila v konverzaci.", "goHomeMessage": "Netřeba se strachovat. Můžeš", "goHomeLinkText": "přejít na hlavní stránku" }, "room": { "speakers": "Mluvící", "requestingToSpeak": "Požaduje oprávnění mluvit", "listeners": "Posluchači", "allowAll": "Povolit všem", "allowAllConfirm": "Jsi si jistý? Tohle povolí všem {{count}} žádajícím uživatelům mluvit" }, "searchUser": { "search": "Hledat..." }, "soundEffectSettings": { "header": "Zvuky", "title": "Nastavení zvuku", "playSound": "Přehrát zvuk" }, "viewUser": { "editProfile": "Upravit profil", "followsYou": "Sleduje tě.", "followers": "Sledující", "following": "Sleduje", "followHim": "Sledovat", "followingHim": "Sleduješ", "copyProfileUrl": "Zkopírovat URL profilu", "urlCopied": "URL zkopírováno do schránky", "unfollow": "Přestat sledovat", "about": "O uživateli", "bot": "Bot", "profileTabs": { "about": "O uživateli", "rooms": "Místnosti", "scheduled": "Naplánováno", "recorded": "Nahráno", "clips": "Klipy", "admin": "Admin" }, "block": "Blokovat", "unblock": "Odblokovat", "sendDM": "Poslat zprávu", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Nastavení hlasu", "mic": "Mikrofon:", "permissionError": "Buď nemáš mikrofon, nebo jsi jej nepovolil/a.", "refresh": "Znovu načíst mikrofon", "volume": "Hlasitost:", "title": "Nastavení hlasu" }, "overlaySettings": { "input": { "errorMsg": "Neplatný název aplikace", "label": "Zadej název aplikace" }, "header": "Nastavení overlaye", "errorMsg": "Zadej platný název aplikace", "label": "Zadej název aplikace" }, "download": { "starting": "Zahájení stahování...", "failed": "Stahování selhalo, prosím zkus to později", "visit_gh": "Navštívit Github Releases", "prompt": "Kliknutím na tlačítko níže zahájíš stahování", "download_now": "Stáhnout nyní", "download_for": "Stáhnout pro %platform% (%ext%)" }, "privacySettings": { "title": "Nastavení soukromí", "header": "Nastavení soukromí", "whispers": { "label": "Zprávy šeptem", "on": "Zapnuté", "off": "Vypnuté" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Zabanovaní uživatelé", "unban": "Odbanovat", "noBans": "Nikdo není zabanovaný." }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Opustit místnost", "confirmLeaveRoom": "Určitě opustit místnost?", "leave": "Opustit", "inviteUsersToRoomBtn": "Pozvat někoho", "invite": "Pozvat", "toggleMuteMicBtn": "Zapnout/vypnout mikrofon", "mute": "Ztlumit mikrofon", "unmute": "Zrušit ztlumení mikrofonu", "makeRoomPublicBtn": "Udělat místnost veřejnou", "settings": "Nastavení", "speaker": "Mluvící", "listener": "Posluchač", "chat": "Chat", "toggleDeafMicBtn": "Zapnout/vypnout zvuk", "deafen": "Ztlumit zvuk", "undeafen": "Zrušit ztlumení zvuku" }, "deviceNotSupported": { "notSupported": "Tvé zařízení není momentálně podporováno. Můžeš o podporu", "linkText": "požádat na GitHubu,", "addSupport": "a pokusíme se podporu přidat." }, "inviteButton": { "invited": "Pozván", "inviteToRoom": "Pozvat do místnosti" }, "micPermissionBanner": { "permissionDenied": "Nemáš povolený mikrofon! Zkus znovu načíst stránku.", "dismiss": "Zavřít", "tryAgain": "Zkusit znovu" }, "keyboardShortcuts": { "setKeybind": "Nastavit klávesovou zkratku", "listening": "Poslouchám...", "toggleMuteKeybind": "Zapnout/vypnout mikrofon", "togglePushToTalkKeybind": "Push-To-Talk (mluvit jen po zmáčknutí tlačítka)", "toggleOverlayKeybind": "Zapnout/vypnout overlay", "toggleDeafKeybind": "Zapnout/vypnout zvuk" }, "userVolumeSlider": { "noAudioMessage": "Z nějakého důvodu není vysílán zvuk" }, "addToCalendar": { "add": "Přidat do kalendáře" }, "wsKilled": { "description": "Server tě odpojil. Neotevřel jsi další okno?", "reconnect": "Připojit se znovu" }, "modals": { "createRoomModal": { "public": "Veřejná", "private": "Soukromá", "roomName": "Název místnosti", "roomDescription": "Popis místnosti", "descriptionError": "Maximální délka: 500", "nameError": "Musí být 2 až 60 znaků", "subtitle": "Prosím, vyplň následující pole:" }, "invitedToJoinRoomModal": { "newRoomCreated": "Nová místnost vytvořena.", "roomInviteFrom": "Pozvánka od", "justStarted": "Právě začali", "likeToJoin": ", chceš se přidat?", "inviteReceived": "Byl jsi pozván do" }, "editProfileModal": { "usernameTaken": "Jméno zabráno.", "avatarUrlError": "Neplatný obrázek", "avatarUrlLabel": "Odkaz na avatar z Githubu či Twitteru", "displayNameError": "2-50 znaků!", "displayNameLabel": "Zobrazované jméno", "usernameError": "4-15 znaků bez diakritiky", "usernameLabel": "Uživatelské jméno", "bioError": "Maximálně 160 znaků", "bioLabel": "O mně", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "Chceš zablokovat uživatele ze všech místností, co kdy vytvoříš?", "blockUser": "Zablokovat", "makeMod": "Přidat práva moderátora", "unmod": "Odstranit práva moderátora", "addAsSpeaker": "Přidat jako mluvícího", "moveToListener": "Umlčet", "banFromChat": "Zabanovat z chatu", "banFromRoom": "Zabanovat z místnosti", "goBackToListener": "Přesunout se do posluchačů", "deleteMessage": "Smazat tuto zprávu", "makeRoomCreator": "Předat místnost", "unBanFromChat": "Odbanovat z chatu", "banIPFromRoom": "Zabanovat IP z místnosti" }, "roomSettingsModal": { "requirePermission": "Požádat o přesunutí do mluvících", "makePublic": "Udělat místnost veřejnou", "makePrivate": "Udělat místnost soukromou", "renamePublic": "Nastavit jméno veřejné místnosti", "renamePrivate": "Nastavit jméno soukromé místnosti", "chatDisabled": "Vypnout chat", "chatCooldown": "Chat Cooldown (v milisekundách)", "chat": { "label": "Chat", "enabled": "Zapnut", "disabled": "Vypnut", "followerOnly": "Pouze pro sledující" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "Lidé", "online": "PRÁVĚ AKTIVNÍ", "noOnline": "Nikdo z tvých přátel není právě aktivní.", "showMore": "Načíst více" }, "upcomingRoomsCard": { "upcomingRooms": "Očekávané místnosti", "exploreMoreRooms": "Hledat nové místnosti" }, "search": { "placeholder": "Hledat místnosti, uživatele, nebo kategorie", "placeholderShort": "Hledat" }, "settingsDropdown": { "profile": "Profil", "language": "Jazyk (Language)", "reportABug": "Nahlásit chybu", "useOldVersion": "Přejít na starou verzi stránky", "logOut": { "button": "Odhlásit se", "modalSubtitle": "Určitě se chceš odhlásit?" }, "debugAudio": { "debugAudio": "Ladit zvuk", "stopDebugger": "Zastavit ladění" }, "downloadApp": "Stáhnout aplikaci", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Zprávy", "showMore": "Ukázat více", "noMessages": "Žádné nové zprávy" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Naplánované místnosti", "noneFound": "Žádné nenalezeny", "allRooms": "Všechny naplánované místnosti", "myRooms": "Tvé naplánované místnosti", "scheduleRoomHeader": "Naplánovat místnost", "startRoom": "Otevřít místnost", "modal": { "needsFuture": "Musí být v budoucnosti", "roomName": "Jméno místnosti", "minLength": "Minimálně dva znaky", "roomDescription": "Popis místnosti" }, "tommorow": "ZÍTRA", "today": "DNES", "deleteModal": { "areYouSure": "Opravdu chceš smazat tuto naplánovanou místnost?" } }, "roomChat": { "title": "Chat", "emotesSoon": "Emoty \"již brzy\"", "bannedAlert": "Jsi zabanovaný z chatu.", "waitAlert": "Prosím, vyčkej pár sekund, než začneš zase psát!", "search": "Hledat", "searchResults": "Výsledky hledání", "recent": "Často využívané", "sendMessage": "Odeslat zprávu", "whisper": "Šeptem", "welcomeMessage": "Vítej v chatu!", "roomDescription": "Popis místnosti", "disabled": "Chat této místnosti byl vypnut", "messageDeletion": { "message": "zpráva", "retracted": "odvolána", "deleted": "smazána" } }, "roomStatus": { "fuelingRocket": "Plníme raketu", "takingOff": "Vzlétáme", "inSpace": "Ve vesmíru", "approachingMoon": "Přibližujeme se k měsíci", "lunarDoge": "Měsíční Doge", "approachingSun": "Blížíme se ke Slunci", "solarDoge": "Sluneční Doge", "approachingGalaxy": "Vylétáme z Galaxie", "galacticDoge": "Galaktický Doge", "spottedLife": "Planeta se životem objevena" }, "feed": { "yourFeed": "Tvůj Feed" } } } ================================================ FILE: kibbeh/public/locales/da/translation.json ================================================ { "common": { "loadMore": "Indlæs mere", "loading": "Indlæser...", "noUsersFound": "Ingen brugere fundet", "ok": "Ok", "yes": "Ja", "no": "Nej", "cancel": "Afbryd", "save": "Gem", "edit": "Rediger", "delete": "Slet", "joinRoom": "Tilslut rum", "copyLink": "Kopier link", "copied": "Kopieret", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Please give DogeHouse Accessibility permessions", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Lydløs | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Forbindelse optaget" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Historie", "link_2": "Discord", "link_3": "Rapporter en fejl" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "Bandlys", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Liste af brugere du følger, som ikke er i et privat rum.", "currentRoom": "tilsluttet til:", "startPrivateRoom": "Start et privat rum med dem", "title": "People" }, "followList": { "followHim": "follow", "followingHim": "following", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Start Rum", "refresh": "Opdater", "editRoom": "Edit Room", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "rummet er væk, gå tilbage", "shareRoomLink": "Del et link til rummet", "inviteFollowers": "Du kan invitere dine følgere, der er online:", "whenFollowersOnline": "Når dine følgere er online, vil de være her." }, "login": { "headerText": "Tager taleopkald til månen 🚀", "featureText_1": "Mørk Tema", "featureText_2": "Åben Tilmelding", "featureText_3": "Tvær-platform understøttelse", "featureText_4": "Åben Kildekode", "featureText_5": "Tekst Chat", "featureText_6": "Drevet af Doge", "loginGithub": "Log ind med GitHub", "loginTwitter": "Log ind med Twitter", "createTestUser": "Lav en test bruger", "loginDiscord": "Log ind med Discord" }, "myProfile": { "logout": "Log ud", "probablyLoading": "Indlæser sandsynligvis...", "voiceSettings": "Gå til stemmeindstillinger", "soundSettings": "Gå til lydindstillinger", "deleteAccount": "Slet konto", "overlaySettings": "Gå til overlay indstillinger", "couldNotFindUser": "Vi kunne desværre ikke finde den bruger", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "Ups! Denne side gik tabt i samtalen.", "goHomeMessage": "Bare rolig. Du kan", "goHomeLinkText": "Gå hjem" }, "room": { "speakers": "Højttalere", "requestingToSpeak": "Anmoder om at tale", "listeners": "Lyttere", "allowAll": "Allow all", "allowAllConfirm": "Er du sikker? Dette giver tilladelse til alle {{count}} brugere der anmoder om tilladelse til at tale" }, "searchUser": { "search": "Søger..." }, "soundEffectSettings": { "header": "Lyde", "title": "Lydstillinger", "playSound": "Play Sound" }, "viewUser": { "editProfile": "Rediger profil", "followsYou": "Følger dig", "followers": "Følgere", "following": "Følger", "followHim": "follow", "followingHim": "Følger", "copyProfileUrl": "Kopier profil url", "urlCopied": "URL kopieret til udklipsholder", "unfollow": "Følg ikke længere", "about": "Om", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Lydindstillinger", "mic": "Mikrofon:", "permissionError": "Ingen mikrofoner fundet, du har enten ikke koblet nogen til eller ikke givet denne hjemmeside tilladelse.", "refresh": "Opdater mikrofonliste", "volume": "Lydstyrke:", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "Invalid app title", "label": "Enter App Title" }, "header": "Overlay Settings", "errorMsg": "Please enter valid app title", "label": "Enter app title" }, "download": { "starting": "Starting download...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "Click on the button below to start download", "download_now": "Download nu", "download_for": "Download til %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Bandlyste Brugere", "unban": "Ophæv bandlysning", "noBans": "Ingen er bandlyst endnu" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Forlad nuværende rum", "confirmLeaveRoom": "Er du sikker på at du vil forlade rummet?", "leave": "Forlad rummet", "inviteUsersToRoomBtn": "Inviter brugere til rummet", "invite": "Inviter", "toggleMuteMicBtn": "Slå mikrofon til/fra", "mute": "Slå mikrofon fra", "unmute": "Slå mikrofon til", "makeRoomPublicBtn": "Gør rummet offentligt!", "settings": "Indstillinger", "speaker": "Taler", "listener": "Lytter", "chat": "Chat", "toggleDeafMicBtn": "Skift døvhed", "deafen": "Gør døv", "undeafen": "Stop døvhed" }, "deviceNotSupported": { "notSupported": "Din enhed understøttes ikke lige nu. Du kan oprette et", "linkText": "issue på GitHub", "addSupport": "og så vil jeg prøve at tilføje understøttelse til din enhed." }, "inviteButton": { "invited": "inviteret", "inviteToRoom": "Inviter til rum" }, "micPermissionBanner": { "permissionDenied": "Adgang nægtet ved tilslutning af din mikrofon (du bliver måske nød til at gå ind i dine browserindstillinger og genindlæse siden)", "dismiss": "Ignorer", "tryAgain": "Prøv igen" }, "keyboardShortcuts": { "setKeybind": "Indstil genvej", "listening": "Lytter", "toggleMuteKeybind": "Slå mikrofon til/fra genvej", "togglePushToTalkKeybind": "Slå push-to-talk til/fra genvej", "toggleOverlayKeybind": "Skift overlay genvej", "toggleDeafKeybind": "Skift døvhed genvej" }, "userVolumeSlider": { "noAudioMessage": "Ingen audio consumer af en eller anden grund" }, "addToCalendar": { "add": "Tilføj til kalender" }, "wsKilled": { "description": "Websocketen blev dræbt af serveren. Dette sker typisk når du har hjemmesiden åben i en anden fane.", "reconnect": "Tilslut igen" }, "modals": { "createRoomModal": { "public": "Offentlig", "private": "Privat", "roomName": "Rum navn", "roomDescription": "Rum beskrivelse", "descriptionError": "Max længde 500", "nameError": "Skal være mellem 2 og 60 tegn langt", "subtitle": "Udfyld følgende felter for at starte et nyt rum" }, "invitedToJoinRoomModal": { "newRoomCreated": "Nyt rum oprettet", "roomInviteFrom": "Rum Invitation fra", "justStarted": "De er lige begyndt", "likeToJoin": ", Har du lyst til at deltage?", "inviteReceived": "Du er blevet inviteret til" }, "editProfileModal": { "usernameTaken": "Brugernavn optaget", "avatarUrlError": "Ugyldigt billede", "avatarUrlLabel": "Github/Twitter/Discord avatar url", "displayNameError": "Længde 2 til 50 tegn", "displayNameLabel": "Offentligt Navn", "usernameError": "Længde 4 til 15 tegn og kun alphanumerisk/underscore", "usernameLabel": "Brugernavn", "bioError": "Max længde på 160 tegn", "bioLabel": "Bio", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "Er du sikker på at du vil blokere denne bruger fra at tilslutte sig til alle de rum du nogensinde kommer til at lave?", "blockUser": "Bloker bruger", "makeMod": "Gør til moderator", "unmod": "Fjern moderator", "addAsSpeaker": "Tilføj som taler", "moveToListener": "Flyt til lyttere", "banFromChat": "Bandlys fra chatten", "banFromRoom": "Bandlys fra rummet", "goBackToListener": "Gå tilbage til lytter", "deleteMessage": "Slet denne besked", "makeRoomCreator": "make room admin", "unBanFromChat": "Fjern bandlysning fra chatten", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "kræv tilladelse for at tale", "makePublic": "Gør rum offentligt", "makePrivate": "Gør rum privat", "renamePublic": "Skift navnet på offentligt rum", "renamePrivate": "Skift navnet på privat rum", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "Personer", "online": "ONLINE", "noOnline": "Du har 0 venner online lige nu", "showMore": "Vis mere" }, "upcomingRoomsCard": { "upcomingRooms": "Kommende rum", "exploreMoreRooms": "Udforsk flere rum" }, "search": { "placeholder": "Søg efter rum, brugere eller kategorier", "placeholderShort": "Søg" }, "settingsDropdown": { "profile": "Profil", "language": "Sprog", "reportABug": "Anmeld en fejl", "useOldVersion": "Brug gammel version", "logOut": { "button": "Log ud", "modalSubtitle": "Er du sikker på at du vil logge ud?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Planlagte Rum", "noneFound": "Ingen fundet", "allRooms": "Alle planlagte rum", "myRooms": "Mine planlagte rum", "scheduleRoomHeader": "Planlæg Rum", "startRoom": "Start rum", "modal": { "needsFuture": "skal være i fremtiden", "roomName": "Rum navn", "minLength": "Minimum længde på 2 tegn", "roomDescription": "Beskrivelse" }, "tommorow": "I MORGEN", "today": "I DAG", "deleteModal": { "areYouSure": "Er du sikker på at du vil slette dette planlagte rum?" } }, "roomChat": { "title": "Chat", "emotesSoon": "[emotes kommer snart]", "bannedAlert": "Du blev bandlyst fra chatten", "waitAlert": "Du skal vente et sekund før du sender endnu en besked", "search": "Søg", "searchResults": "Søgeresultater", "recent": "Ofte Anvendt", "sendMessage": "Send en Besked", "whisper": "Hvisk", "welcomeMessage": "Velkommen til chatten!", "roomDescription": "Rum beskrivelse", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Tanker raket", "takingOff": "Tager afsted", "inSpace": "I rummet", "approachingMoon": "Nærmes månen", "lunarDoge": "Måne doge", "approachingSun": "Nærmes solen", "solarDoge": "Sol doge", "approachingGalaxy": "Nærmer galakse", "galacticDoge": "Galaktisk Doge", "spottedLife": "Fået øje på planet med liv" }, "feed": { "yourFeed": "Din Feed" } } } ================================================ FILE: kibbeh/public/locales/de/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "Mehr laden", "loading": "Lädt...", "noUsersFound": "Keine Benutzer gefunden", "ok": "Ok", "yes": "Ja", "no": "Nein", "cancel": "Abbrechen", "save": "Speichern", "edit": "Bearbeiten", "delete": "Löschen", "joinRoom": "Raum beitreten", "copyLink": "Link kopieren", "copied": "kopiert", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Bitte erteile DogeHouse Browserberechtigungen.", "copy": "Kopieren", "error": "Fehler" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Stumm | DogeHouse", "deafenedTitle": "Lautsprecher stumm | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Verbindung getrennt" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Ursprungsgeschichte", "link_2": "Discord", "link_3": "Problem melden" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "blockieren", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Nutzername", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "Grund", "usernamePlaceholder": "Benutzername, für den Aktionen ausgeführt werden sollen" }, "followingOnlineList": { "listHeader": "Benutzer, denen du folgst, die nicht in einem privaten Raum sind.", "currentRoom": "Zurzeit in:", "startPrivateRoom": "Einen privaten Raum mit diesem Benutzer eröffnen", "title": "People" }, "followList": { "followHim": "Folgen", "followingHim": "Entfolgen", "title": "People", "followingNone": "Folgt keinem", "noFollowers": "Keine Follower" }, "home": { "createRoom": "Raum erstellen", "refresh": "Aktualisieren", "editRoom": "Bearbeite Raum", "desktopAlert": "Lade die DogeHouse Desktop-App noch heute herunter." }, "inviteList": { "roomGone": "Raum konnte nicht gefunden werden! Zurück", "shareRoomLink": "Link zum Raum teilen", "inviteFollowers": "Du kannst deine Abonnenten, die online sind, einladen:", "whenFollowersOnline": "Wenn deine Abonnenten online sind, werden sie hier angezeigt." }, "login": { "headerText": "Wir bringen den Sprachchat zum Mond", "featureText_1": "Dark-Mode", "featureText_2": "Unbeschränkte Registrierung", "featureText_3": "Plattformunabhängig", "featureText_4": "Open-Source", "featureText_5": "Text-Chat", "featureText_6": "Angetrieben durch Doge", "loginGithub": "mit GitHub anmelden", "loginTwitter": "mit Twitter anmelden", "createTestUser": "Testnutzer erstellen", "loginDiscord": "mit Discord anmelden" }, "myProfile": { "logout": "Abmelden", "probablyLoading": "Lädt vermutlich...", "voiceSettings": "Spracheinstellungen", "soundSettings": "Soundeinstellungen", "deleteAccount": "Konto löschen", "overlaySettings": "Overlay-Einstellungen löschen", "couldNotFindUser": "Wir konnten diesen Benutzer leider nicht finden. ", "privacySettings": "Privacy Settings" }, "notFound": { "whoopsError": "Hoppla! Diese Seite ging im Gespräch verloren.", "goHomeMessage": "Keine Sorge. Du kannst", "goHomeLinkText": "nach Hause" }, "room": { "speakers": "Sprecher", "requestingToSpeak": "Sprachanfragen", "listeners": "Zuhörer", "allowAll": "Alle zulassen", "allowAllConfirm": "Bist du sicher? Damit erteilst du {{count}} Benutzern Redeberechtigungen." }, "searchUser": { "search": "Suchen..." }, "soundEffectSettings": { "header": "Ton", "title": "Toneinstellungen", "playSound": "Play Sound" }, "viewUser": { "editProfile": "Profil bearbeiten", "followsYou": "Folgt dir", "following": "Abonniert", "followers": "Abonnenten", "followHim": "Folgen", "followingHim": "Folgt bereits", "copyProfileUrl": "Benutzer-URL kopieren", "urlCopied": "URL wurde in die Zwischenablage kopiert", "unfollow": "Entfolgen", "about": "Über", "bot": "Bot", "profileTabs": { "about": "Über", "rooms": "Räume", "scheduled": "Geplant", "recorded": "Aufgenommen", "clips": "Clips", "admin": "Admin" }, "block": "Blockieren", "unblock": "Freigeben", "sendDM": "Sende Direktnachricht", "aboutSuffix": "", "errors": { "blocked": "Dieser Nutzer hat dich blockiert.", "default": "Hoppla! Wir konnten diesen Benutzer nicht laden." } }, "voiceSettings": { "header": "Spracheinstellungen", "mic": "Mikrofon:", "permissionError": "Keine Mikrofone gefunden, es ist entweder keines angeschlosen oder diese Seite besitzt nicht die benötigten Berechtigungen.", "volume": "Lautstärke:", "refresh": "Mikrofonliste aktualisieren", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "Ungültiger App-Titel", "label": "Gib den App-Titel ein" }, "header": "Overlay Einstellungen", "errorMsg": "Bitte gib einen gültigen App-Titel ein", "label": "App-Titel eingeben" }, "download": { "starting": "Starte Download...", "failed": "Konnte nicht automatisch herunterladen. Bitte versuche es später erneut. ", "visit_gh": "Besuche Github Releases", "prompt": "Drücke den Button unten, um den Download zu starten.", "download_now": "Lade herunter", "download_for": "Download für %platform% (%ext%)" }, "privacySettings": { "title": "Privatsphäre Einstellungen", "header": "Privatsphäre Einstellungen", "whispers": { "label": "Flüstern", "on": "An", "off": "Aus" } }, "botEdit": { "yourBots": "Deine Bots", "bots": "Bots", "title": "Bot Informationen", "apiKey": "API-Key", "regenerate": "Neugenerieren", "reveal": "Klicke hier, um den API-Key anzuzeigen" } }, "components": { "_comment": "Component UI Internationalization Strings", "addToCalendar": { "add": "Zum Kalender hinzufügen" }, "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Blockierte Benutzer", "unban": "Blockierung aufheben", "noBans": "Du hast aktuell (noch) niemanden blockiert" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Aktuellen Raum verlassen", "confirmLeaveRoom": "Bist du sicher, dass du gehen möchtest?", "leave": "Verlassen", "inviteUsersToRoomBtn": "Benutzer zum Raum einladen", "invite": "Einladen", "toggleMuteMicBtn": "Mikrofon ein-/ausschalten", "mute": "Stumm schalten", "unmute": "Stummschaltung aufheben", "makeRoomPublicBtn": "Raum öffentlich machen!", "settings": "Einstellungen", "speaker": "Sprecher", "listener": "Zuhörer", "chat": "Chat", "toggleDeafMicBtn": "Audioausgabe ein-/ausschalten", "deafen": "Audioausgabe", "undeafen": "Audioausgabe aufheben" }, "micPermissionBanner": { "permissionDenied": "Wir haben keinen Zugriff auf dein Mikrofon. Öffne deine Browsereinstellungen, setze die nötigen Berechtigungen und lade die Seite erneut.", "dismiss": "Verstanden", "tryAgain": "Erneut versuchen" }, "modals": { "createRoomModal": { "public": "Öffentlich", "private": "Privat", "roomName": "Raumname", "roomDescription": "Raumbeschreibung", "descriptionError": "Die maximale Länge beträgt 500 Zeichen", "nameError": "Muss zwischen 2 und 60 Zeichen lang sein", "subtitle": "Fülle die folgenden Felder aus, um einen Raum zu erstellen" }, "invitedToJoinRoomModal": { "newRoomCreated": "Neuen Raum erstellt", "roomInviteFrom": "Neue Einladung von", "justStarted": "Sie starten gerade", "likeToJoin": ", möchtest du beitreten?", "inviteReceived": "Du wurdest eingeladen zu" }, "editProfileModal": { "usernameTaken": "Benutzername ist bereits vergeben", "avatarUrlError": "Ungültiges Bild", "avatarUrlLabel": "GitHub / Twitter Avatar URL", "displayNameError": "Länge: 2 bis 50 Buchstaben", "displayNameLabel": "Anzeigename", "usernameError": "Länge: 4 bis 15 alphanumerische Zeichen und Unterstriche", "usernameLabel": "Benutzername", "bioError": "Maximal 160 Buchstaben", "bioLabel": "Biografie", "bannerUrlLabel": "Twitter Banner URL" }, "profileModal": { "blockUserConfirm": "Bist du sicher, dass du diesen Benutzer aus allen deinen zukünftigen Räumen ausschließen möchtest?", "blockUser": "Benutzer blockieren", "makeMod": "Zum Moderator befördern", "unmod": "Moderator Status aufheben", "addAsSpeaker": "Zu Sprecher befördern", "moveToListener": "Zu Zuhörer herabstufen", "banFromChat": "Im Chat blockieren", "banFromRoom": "Aus Raum ausschließen", "goBackToListener": "Zurück zum Zuhörer", "deleteMessage": "Nachricht löschen", "makeRoomCreator": "Zum Raumadmin befördern", "unBanFromChat": "Vom Chat entbannen", "banIPFromRoom": "IP aus Raum bannen" }, "roomSettingsModal": { "requirePermission": "Berechtigung zum Sprechen verlangen", "makePublic": "Raum öffentlich machen", "makePrivate": "Raum privat machen", "renamePublic": "Öffentlichen Raum-Namen setzen", "renamePrivate": "Privaten Raum-Namen setzen", "chatDisabled": "Chat ausschalten", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Aktiviert", "disabled": "Deaktiviert", "followerOnly": "Nur Abonnenten" } }, "createBotModal": { "usernameTaken": "Nutzername ist bereits vergeben", "subtitle": "Bitte fülle die angaben unten aus, um deinen Bot zu erstellen", "title": "Bot Erstellen" } }, "userVolumeSlider": { "noAudioMessage": "Aus unbekannten Gründen wurde kein Audio Consumer gefunden" }, "keyboardShortcuts": { "setKeybind": "Tastenkürzel setzen", "listening": "Zuhören", "toggleMuteKeybind": "Stummschalt-Tastenkürzel umschalten", "togglePushToTalkKeybind": "Push-to-Talk-Tastenkürzel umschalten", "toggleOverlayKeybind": "Overlay-Tastenkürzel umschalten", "toggleDeafKeybind": "Audioausgabe-Tastenkürzel umschalten" }, "wsKilled": { "description": "Die Websocket Verbindung zum Server wurde unterbrochen. Dies geschieht normalerweise, wenn du die Website in einem anderen Tab öffnest.", "reconnect": "Erneut verbinden" }, "deviceNotSupported": { "notSupported": "Dein Gerät wird aktuell nicht unterstützt. Du kannst ein", "linkText": "Issue auf GitHub", "addSupport": "erstellen und ich werde versuchen, die Unterstützung für dein Gerät hinzuzufügen." }, "inviteButton": { "invited": "Eingeladen", "inviteToRoom": "Zum Raum einladen" }, "followingOnline": { "people": "Leute", "online": "ONLINE", "noOnline": "Aktuell sind keine deiner Freunde online.", "showMore": "Zeige mehr" }, "upcomingRoomsCard": { "upcomingRooms": "Anstehende Räume", "exploreMoreRooms": "Finde weitere Räume" }, "search": { "placeholder": "Suche nach Räumen, Benutzern oder Kategorien", "placeholderShort": "Suche" }, "settingsDropdown": { "profile": "Profil", "language": "Sprache", "reportABug": "Melde einen Fehler", "useOldVersion": "Benutze alte Version", "logOut": { "button": "Abmelden", "modalSubtitle": "Möchtest du dich wirklich abmelden?" }, "debugAudio": { "debugAudio": "Ton debuggen", "stopDebugger": "Stoppe Debugger" }, "downloadApp": "App herunterladen", "developer": "Entwickler Einstellungen" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Nachrichten", "showMore": "Zeige mehr", "noMessages": "Keine neue Nachrichten" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Geplante Räume", "noneFound": "Nicht gefunden", "allRooms": "Alle geplanten Räume", "myRooms": "Meine geplanten Räume", "scheduleRoomHeader": "Plane einen Raum", "startRoom": "Raum starten", "modal": { "needsFuture": "Zeitpunkt muss in der Zukunft liegen", "roomName": "Name des Raums", "minLength": "minimale Länge: 2", "roomDescription": "Raumbeschreibung" }, "tommorow": "Morgen", "today": "Heute", "deleteModal": { "areYouSure": "Möchtest du diesen geplanten Raum wirklich löschen?" } }, "roomChat": { "title": "Chat", "emotesSoon": "[Emotes kommen bald]", "bannedAlert": "Du wurdest aus dem Chat ausgeschlossen", "waitAlert": "Du musst eine Sekunde warten, bevor du eine weitere Nachricht schreiben kannst", "search": "Suchen", "searchResults": "Suchergebnisse", "recent": "Häufig verwendet", "sendMessage": "Eine Nachricht schicken", "whisper": "Flüstern", "welcomeMessage": "Willkommen im Chat!", "roomDescription": "Raumbeschreibung", "disabled": "Der Chat wurde vom Raum ausgeschaltet", "messageDeletion": { "message": "Nachicht", "retracted": "zurückgezogen", "deleted": "gelöscht" } }, "roomStatus": { "fuelingRocket": "Rakete wird getankt!", "takingOff": "Am Abheben", "inSpace": "Im Weltall", "approachingMoon": "Nähert sich dem Mond!", "lunarDoge": "Lunar doge", "approachingSun": "Nähert sich der Sonne!", "solarDoge": "Solar doge", "approachingGalaxy": "Nähert sich einer Galaxie!", "galacticDoge": "Galactic Doge", "spottedLife": "Planet mit Leben gefunden!" }, "feed": { "yourFeed": "Dein Feed" } } } ================================================ FILE: kibbeh/public/locales/de-AT/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "Zag mehr au", "loading": "Lona...", "noUsersFound": "Kane Benutzer gfunden", "ok": "Ok", "yes": "Jo", "no": "Na", "cancel": "Wü I ned", "save": "Speichan", "edit": "Beorbeiten", "delete": "Weghauen", "joinRoom": "Raum einigeh", "copyLink": "Link kopian", "copied": "kopiart", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Bitte beachte, wennst Dogehouse ohne a Berechtigung rennen lost kennan ungwollte Fehler auftretn.", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Stüh | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Ursprungsgschicht", "link_2": "Discord", "link_3": "Problem möden" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "blockian", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Benutzer, denen du foigst, die oba in an privaten Raum san.", "currentRoom": "Zurzeit in:", "startPrivateRoom": "An neichn Raum mit dem Benutzer starten", "title": "People" }, "followList": { "followHim": "follow", "followingHim": "following", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Raum erstön", "refresh": "Aktualisiern", "editRoom": "Raum bearbeiten", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "Den Raum kau ma ned finden. Zruck", "shareRoomLink": "Link zum Raum teilen", "inviteFollowers": "Du kaust deine Abonnenten, de online san, eilona:", "whenFollowersOnline": "Wenn deine Abonnenten online san, werden de do auzagt." }, "login": { "headerText": "Wir bringan den Sprochchat zum Mond 🚀", "featureText_1": "Dark-Mode", "featureText_2": "Unbeschränkte Registrierung", "featureText_3": "Plattformunobhängig", "featureText_4": "Open-Source", "featureText_5": "Text-Chat", "featureText_6": "Autrieben durch Doge", "loginGithub": "mit GitHub aumöden", "loginTwitter": "mit Twitter aumöden", "createTestUser": "Testnutzer erstön", "loginDiscord": "mit Discord aumöden" }, "myProfile": { "logout": "Omöden", "probablyLoading": "Londt vermutlich...", "voiceSettings": "Sprocheinstöllungen", "soundSettings": "Toneinstöllungen", "deleteAccount": "Konto löschn", "overlaySettings": "go to overlay settings", "couldNotFindUser": "Tuat uns leid, konntn den Nutza ned findn", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "Oida! De Seite ist im Gespräch verlurn gaunga.", "goHomeMessage": "Ka Sorg. Du kaunst", "goHomeLinkText": "noch Hause" }, "room": { "speakers": "Sprecha", "requestingToSpeak": "Sprochanfrogen", "listeners": "Zuhöra", "allowAll": "Ollen erlaubn", "allowAllConfirm": "Bist da sicha? Dadurch kennan olle {{count}} anfragenden Bnutzer spröchn" }, "searchUser": { "search": "Suachn..." }, "soundEffectSettings": { "header": "Ton", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "Profü beorbeiten", "followsYou": "foigt da", "following": "Abonniert", "followers": "Abonnenten", "followHim": "follow", "followingHim": "following", "copyProfileUrl": "Profil URL kopian", "urlCopied": "URL zua Zwischenablag kopian", "unfollow": "Entfolgn", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Sprocheinstöllungen", "mic": "Mikrofon:", "permissionError": "Kane Mikrofone gfunden, es is entweda kans augschlossen oder de Seitn besitzt ned die benötigten Berechtigungen.", "volume": "Lautstärkn:", "refresh": "Mikrofonliste aktualisiern", "title": "Voice Settings" }, "overlaySettings": { "header": "Overlay Settings", "input": { "errorMsg": "Bitte giab an gültign Apptitel au", "label": "Giab an Apptitel au" } }, "download": { "starting": "Starting download...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "Click on the button below to start download", "download_now": "Download Now", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "addToCalendar": { "add": "Zum Kalenda hinzufügn" }, "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "blockierte Benutzer", "unban": "Blockierung aufhebn", "noBans": "Du host aktuell (nu) nermt blockiert" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Aktuellen Raum verlossen", "confirmLeaveRoom": "Bist da sicher, dass du geh mechst?", "leave": "Verlossen", "inviteUsersToRoomBtn": "Benutzer zum Raum eilona", "invite": "Eilona", "toggleMuteMicBtn": "Mikrofon ein-/ausschoiten", "mute": "Stumm schoiten", "unmute": "Stummschoitung aufhebn", "makeRoomPublicBtn": "Raum öffentlich mochen!", "settings": "Einstöllungen", "speaker": "Sprecha", "listener": "Zuhörer", "chat": "Chat", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "micPermissionBanner": { "permissionDenied": "Wir haum kan Zugriff auf dei Mikrofon. Öffne eine Browsereinstöllungen, setz die nötigen Berechtigungen und lod de Seitn neich.", "dismiss": "verstaunden", "tryAgain": "erneut versuachen" }, "modals": { "createRoomModal": { "public": "Öffentlich", "private": "Privat", "roomName": "Raumnaum", "roomDescription": "Raumbeschreibung", "descriptionError": "de maximale Länge is 500", "nameError": "muas zwischen 2 und 60 Zeichn laung sei", "subtitle": "Füll de folgendn Felder aus um den Raum zu startn" }, "invitedToJoinRoomModal": { "newRoomCreated": "Neichn Raum erstöt", "roomInviteFrom": "Neiche Einlodung vo", "justStarted": "Sie starten grod", "likeToJoin": ", mechast du beitreten?", "inviteReceived": "Du wurdest einglondt zu" }, "editProfileModal": { "usernameTaken": "Benutzernaume is bereits weg", "avatarUrlError": "ungütigs Büd", "avatarUrlLabel": "GitHub / Twitter Avatar URL", "displayNameError": "Läng: 2 bis 50 Buchstauben", "displayNameLabel": "Anzeigenaume", "usernameError": "Läng: 4 bis 15 alphanumerische Zeichn und Unterstriche", "usernameLabel": "Benutzernaume", "bioError": "Maximal 160 Buchstauben", "bioLabel": "Bio", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "Bist da sicher, dass du den Benutzer aus ollen deinen zukünftigen Räumen ausschliaßen mechast?", "blockUser": "Benutzer blockian", "makeMod": "Zum Moderator befördern", "unmod": "Moderator Status aufhebn", "addAsSpeaker": "zu Sprecha befördern", "moveToListener": "zu Zuhörer herabstufen", "banFromChat": "Im Chat blockian", "banFromRoom": "Aus Raum ausschliaßen", "goBackToListener": "Zruck zum Zuhörer", "deleteMessage": "Nochricht löschn", "makeRoomCreator": "zum Raumadmin befördern", "unBanFromChat": "Vom Chat entblockian", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "Berechtigung zum Sprechen verlaungen", "makePublic": "Raum öffentlich mochen", "makePrivate": "Raum privat mochen", "renamePublic": "Öffentlichn Raumnaumn festlegn", "renamePrivate": "Privatn Raumnaumn festlegn", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "userVolumeSlider": { "noAudioMessage": "Aus irgendan Grund wurde ka Audio Consumer gfunden" }, "keyboardShortcuts": { "setKeybind": "Tastenkürzel setzen", "listening": "Zuhören", "toggleMuteKeybind": "Stummschoittaste umschoiten", "togglePushToTalkKeybind": "Push-to-Talk Tastenkürzl umschoiten", "toggleOverlayKeybind": "Overlay-Tastenkürzl umschoiten", "toggleDeafKeybind": "Toggle deafen keybind" }, "wsKilled": { "description": "De Websocket Verbindung zum Server wurde unterbrochen. Des passiert normalerweise, wenn du de Website in an aunderen Tab öffnest.", "reconnect": "Nur moi verbinden" }, "deviceNotSupported": { "notSupported": "Dei Gerät wird aktuell ned unterstützt. Du kaunnst a", "linkText": "Issue auf GitHub", "addSupport": "erstön und I werd versuachen, de Unterstützung für dei Gerät hinzuzufügn." }, "inviteButton": { "invited": "einglondt", "inviteToRoom": "zum Raum eilona" }, "followingOnline": { "people": "Leit", "online": "ONLINE", "noOnline": "Du host grod 0 freind online", "showMore": "Zoag ma mehr" }, "upcomingRoomsCard": { "upcomingRooms": "Zukünftige Räum", "exploreMoreRooms": "Erforsch mehr Räum" }, "search": { "placeholder": "Search for rooms, users or categories", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profil", "language": "Sproch", "reportABug": "An Fehler möden", "useOldVersion": "Nutz a oide Version", "logOut": { "button": "Omöden", "modalSubtitle": "Bist da sicha dost di omöden wüst?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Geplante Räume", "noneFound": "Ned gefundn", "allRooms": "Olle geplanten Räume", "myRooms": "Meine geplanten Räume", "scheduleRoomHeader": "Plane an Raum", "startRoom": "Raum starten", "modal": { "needsFuture": "Zeitpunkt muas in da Zukunft liegn", "roomName": "Naum des Raums", "minLength": "minimale Läng: 2", "roomDescription": "Raumbeschreibung" }, "tommorow": "TOMMOROW", "today": "TODAY", "deleteModal": { "areYouSure": "Are you sure you want to delete this scheduled room?" } }, "roomChat": { "title": "Chat", "emotesSoon": "[emotes boid]", "bannedAlert": "Du wurdest aus dem Chat ausgeschlossn", "waitAlert": "Du musst a Sekunde worten, bevor du a weitere Nochricht schreiben kaunst", "search": "Suachen", "searchResults": "Suachergebnisse", "recent": "Oft verwendet", "sendMessage": "A Nochricht schickn", "whisper": "Flüstern", "welcomeMessage": "Servus im Chat!", "roomDescription": "Raumbeschreibung", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Rakete betankn", "takingOff": "Auhebn", "inSpace": "Im Wödall", "approachingMoon": "Dem Mond aunnähern", "lunarDoge": "Lunar doge", "approachingSun": "Da Sun aunnähern", "solarDoge": "Solar doge", "approachingGalaxy": "Da Galaxie aunnähern", "galacticDoge": "Galactic Doge", "spottedLife": "Planet mit Lebn gsichtet" }, "feed": { "yourFeed": "Your Feed" } } } ================================================ FILE: kibbeh/public/locales/el/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "Περισσότερα", "loading": "Φόρτωση...", "noUsersFound": "Δεν βρέθηκαν χρήστες!", "ok": "Οκ", "yes": "Ναι", "no": "Όχι", "cancel": "Ακύρωση", "save": "Αποθήκευση", "edit": "Επεξεργασία", "delete": "Διαγραφή", "joinRoom": "Είσοδος στο δωμάτιο", "copyLink": "Αντιγραφή συνδέσμου", "copied": "Αντιγράφτηκε", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Λάβετε υπόψη ότι το να τρέχετε το DogeHouse χωρίς δικαιώματα προσβασιμότητας μπορεί να προκαλέσει ανεπιθύμητα σφάλματα", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Σε σίγαση | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Ταμπλό", "connectionTaken": "Έγινε σύνδεση" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Ιστορία", "link_2": "Discord", "link_3": "Αναφορά Προβλήματος" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "Αποκλεισμός", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Xρήστες που ακολουθείτε και δεν βρίσκονται σε κάποιο δωμάτιο", "currentRoom": "Aυτή τη στιγμή βρίσκεστε σε:", "startPrivateRoom": "Δημιουργήστε ένα ιδιωτικό δωμάτιο μαζί τους", "title": "People" }, "download": { "starting": "Εκίνηση κατεβάσματως...", "failed": "Δεν έγινε αυτόματο κατέβασμα, δοκιμάστε αργότερα", "visit_gh": "Δείτε τις εκδόσεις στο Github", "prompt": "Πατήστε το κουμπί απο κάτω για να αρχίσει το κατέβασμα", "download_now": "Κατεβάστε το τώρα", "download_for": "Κατεβάστε για %platform% (%ext%)" }, "followList": { "followHim": "Ακολουθήστε", "ακολουθήστε": "Ακολουθείτε", "followingHim": "Ακολουθείτε", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Δημιουργία δωματίου", "refresh": "Επαναφόρτωση", "editRoom": "Επεξεργασία δωματίου", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "Το δωμάτιο διαγράφηκε, πηγαίνετε πίσω", "shareRoomLink": "Κοινοποίηση σύνδεσμου δωματίου", "inviteFollowers": "Μπορείτε να προσκαλέσετε τους ακόλουθους σας που είναι ενεργοί:", "whenFollowersOnline": "Όταν οι ακόλουθοί σας είναι ενεργοί, θα εμφανίζονται εδώ." }, "login": { "headerText": "Πάμε τις φωνητικές συνομιλίες στο φεγγάρι 🚀", "featureText_1": "Σκούρο Θέμα", "featureText_2": "Ανοιχτές Εγγραφές", "featureText_3": "Υποστήριξη Πολλαπλών Συσκευών", "featureText_4": "Ανοιχτού Πηγαίου Κώδικα", "featureText_5": "Συζήτηση Κειμένου", "featureText_6": "Με την υποστήριξη του Doge", "loginGithub": "Σύνδεση μέσω GitHub", "loginTwitter": "Σύνδεση μέσω Twitter", "createTestUser": "Δημιουργήστε Δοκιμαστικό Χρήστη", "loginDiscord": "Σύνδεση μέσω Discord" }, "myProfile": { "logout": "Αποσύνδεση", "probablyLoading": "μάλλον φορτώνει...", "voiceSettings": "Ρυθμίσεις φωνής", "soundSettings": "Ρυθμίσεις ήχου", "deleteAccount": "Διαγραφή λογαριασμού", "overlaySettings": "Πηγαιντε στις ρυθμίσεις του overlay", "couldNotFindUser": "Συγγνώμη, αυτός ο χρήστης δεν υπάρχει", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "Ουπς! Αυτή η σελίδα χάθηκε στη συζήτηση.", "goHomeMessage": "Μην ανησυχείτε. Μπορείτε να", "goHomeLinkText": "επιστρέψετε στην αρχική σελίδα" }, "room": { "speakers": "Ομιλητές", "requestingToSpeak": "Ζητούν να μιλήσουν", "listeners": "Ακροατές", "allowAll": "Να επιτρέπονται όλα", "allowAllConfirm": "Είστε σίγουροι; Αυτό θα επιτρέψει σε όλους τους {{count}} χρήστες που έχουν ζητήσει, να μιλήσουν" }, "searchUser": { "search": "αναζήτηση..." }, "soundEffectSettings": { "header": "Ήχοι", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "Επεξεργασία προφίλ", "followsYou": "Σας ακολουθεί", "followers": "ακόλουθοι", "following": "ακολουθείτε", "followHim": "Ακολουθήστε", "followingHim": "Τον ακολουθείτε", "copyProfileUrl": "Αντιγραφή συνδέσμου προφίλ", "urlCopied": "Ο συνδεσμος αντιγράφθηκε στο πρόχειρο", "unfollow": "Ξε-ακολουθήστε", "about": "Βιογραφικό", "bot": "Ρομπότ", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Ρυθμίσεις Φωνής", "mic": "Μικρόφωνο:", "permissionError": "Δεν βρέθηκε μικρόφωνο, είτε δεν έχετε κανένα συνδεδεμένο είτε δεν έχετε δώσει άδεια.", "refresh": "Ανανέωση λίστας μικροφώνων", "volume": "Ένταση ήχου:", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "Μη έγκυρος τίτλος εφαρμογής", "label": "Εισάγετε τον τίτλο της εφαρμογής" }, "header": "Ρυθμίσεις overlay" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Αποκλεισμένοι Χρήστες", "unban": "Κατάργηση αποκλεισμού", "noBans": "Κανένας δεν έχει αποκλειστεί ακόμα" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Αποχώρηση από το παρόν δωμάτιο", "confirmLeaveRoom": "Είστε σίγουροι ότι θέλετε να αποχωρήσετε;", "leave": "Αποχώρηση", "inviteUsersToRoomBtn": "Προσκαλέστε χρήστες στο δωμάτιο", "invite": "Πρόσκληση", "toggleMuteMicBtn": "Εναλλαγή κατάστασης μικροφώνου", "mute": "Σίγαση", "unmute": "Κατάργηση σίγασης", "makeRoomPublicBtn": "Κάντε το δωμάτιο δημόσιο", "settings": "Ρυθμίσεις", "speaker": "Ομιλητής", "listener": "Ακροατής", "chat": "Συζήτηση", "toggleDeafMicBtn": "Εναλλαγή Κούφανσης", "deafen": "Κουφαθείτε", "undeafen": "ξε-κουφαθείτε" }, "deviceNotSupported": { "notSupported": "Η συσκευή σας δεν υποστηρίζεται αυτή τη στιγμή. Μπορείτε να δημιουργήσετε ένα", "linkText": "ζήτημα στο GitHub", "addSupport": "και θα προσπαθήσουμε να προσθέσουμε υποστήριξη για την συσκευή σας." }, "inviteButton": { "invited": "Προσκλήθηκαν!", "inviteToRoom": "Πρόσκληση στο δωμάτιο" }, "micPermissionBanner": { "permissionDenied": "Απορρίφθηκε η άδεια για πρόσβαση στο μικρόφωνό σας (ίσως χρειαστεί να πάτε στις ρυθμίσεις του περιηγητή σας και να κάνετε επαναφόρτωση της σελίδας)", "dismiss": "Παράλειψη", "tryAgain": "Προσπαθήστε ξανά" }, "keyboardShortcuts": { "setKeybind": "Αλλαγή συντόμευσης", "listening": "Ακροατές", "toggleMuteKeybind": "Συντόμευση εναλλαγής σίγασης", "togglePushToTalkKeybind": "Συντόμευση εναλλαγής push-to-talk", "toggleOverlayKeybind": "Συντόμευση για το overlay", "toggleDeafKeybind": "Συντόμευση για κούφανση" }, "userVolumeSlider": { "noAudioMessage": "Δεν υπάρχει δέκτης ήχου για κάποιο λόγο" }, "addToCalendar": { "add": "Προσθήκη στο Ημερολόγιο" }, "wsKilled": { "description": "Το WebSocket διακόπηκε από τον σέρβερ. Αυτό συμβαίνει συνήθως όταν ανοίγετε την ιστοσελίδα σε άλλη καρτέλα.", "reconnect": "Επανασύνδεση" }, "modals": { "createRoomModal": { "public": "Δημόσιο", "private": "Ιδιωτικό", "roomName": "Όνομα δωματίου", "roomDescription": "Περιγραφή δωματίου", "descriptionError": "Μέγιστο μήκος 500", "nameError": "Πρέπει να έχει μήκος μεταξύ 2 και 60 χαρακτήρων", "subtitle": "Συμπληρώστε τα παρακάτω πεδία για να ξεκινήσετε ένα νέο δωμάτιο" }, "invitedToJoinRoomModal": { "newRoomCreated": "Δημιουργήθηκε Νέο Δωμάτιο", "roomInviteFrom": "Πρόσκληση σε Δωμάτιο από", "justStarted": "Μόλις ξεκίνησαν", "likeToJoin": ", θα θέλατε να συμμετέχετε;", "inviteReceived": "έχετε προσκληθεί στο" }, "editProfileModal": { "usernameTaken": "Όνομα χρήστη μη διαθέσιμο", "avatarUrlError": "Μη έγκυρη φωτογραφία", "avatarUrlLabel": "Διεύθυνση URL άβαταρ απο Github/Twitter/Discord", "displayNameError": "Μήκος από 2 έως 50 χαρακτήρες", "displayNameLabel": "Εμφανιζόμενο όνομα", "usernameError": "Μήκος από 4 έως 15 χαρακτήρες και μόνο αλφαριθμητικά/κάτω παύλα", "usernameLabel": "Όνομα χρήστη", "bioError": "Μέγιστο μήκος 160 χαρακτήρες", "bioLabel": "Βιογραφικό", "bannerUrlLabel": "URL πανό Twitter" }, "profileModal": { "blockUserConfirm": "Είστε σίγουροι ότι θέλετε να μπλοκάρετε αυτό το χρήστη από το να συμμετέχει σε οποιοδήποτε δωμάτιο δημιουργήσετε στο μέλλον;", "blockUser": "Μπλοκάρισμα χρήστη", "makeMod": "Προσθήκη ως συντονιστή", "unmod": "Αφαίρεση από συντονιστή", "addAsSpeaker": "Προσθήκη ως ομιλητή", "moveToListener": "Μετακίνηση σε ακροατή", "banFromChat": "Αποκλεισμός από τη συζήτηση", "banFromRoom": "Αποκλεισμός από το δωμάτιο", "goBackToListener": "Επιστροφή σε ακροατή", "deleteMessage": "Διαγράψτε αυτό το μήνυμα", "makeRoomCreator": "Μετατροπή σε διαχειριστή δωματίου", "unBanFromChat": "Κατάργηση αποκλεισμού από την συζήτηση", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "Να απαιτείται άδεια για ομιλία", "makePublic": "Κάντε το δωμάτιο δημόσιο", "makePrivate": "Κάντε το δωμάτιο ιδιωτικό", "renamePublic": "Ορίστε ένα όνομα για το δημόσιο δωμάτιο", "renamePrivate": "Ορίστε ένα όνομα για το ιδιωτικό δωμάτιο", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "Χρήστες", "online": "Ενεργοί", "noOnline": "Έχετε 0 ενεργούς φίλους αυτήν την στιγμή", "showMore": "Περισσότερα" }, "upcomingRoomsCard": { "upcomingRooms": "Επερχόμενα δωμάτια ", "exploreMoreRooms": "Ανακαλύψτε περισσότερα δωμάτια" }, "search": { "placeholder": "Αναζητήστε δωμάτια, χρήστες ή κατηγορίες", "placeholderShort": "Αναζήτηση" }, "settingsDropdown": { "profile": "Προφίλ", "language": "Γλώσσα", "reportABug": "Αναφορά Προβλήματος", "useOldVersion": "Χρησιμοποιήστε την παλιά έκδοση", "logOut": { "button": "Αποσύνδεση", "modalSubtitle": "Είστε σίγουροι πως θέλετε να αποσυνδεθείτε;" }, "debugAudio": { "debugAudio": "Κάντε debug τον ήχο", "stopDebugger": "Σταματήστε το Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Προγραμματισμένα δωμάτια", "noneFound": "Δεν βρέθηκε κανένα", "allRooms": "Όλα τα προγραμματισμένα δωμάτια", "myRooms": "Τα προγραμματισμένα δωμάτια μου", "scheduleRoomHeader": "Προγραμματισμός Δωματίου", "startRoom": "Έναρξη δωματίου", "modal": { "needsFuture": "Πρέπει να είναι στο μέλλον", "roomName": "'Ονομα δωματίου", "roomDescription": "Περιγραφή δωματίου", "minLength": "Ελάχιστο μήκος 2" }, "tommorow": "Άυριο", "today": "Σήμερα", "deleteModal": { "areYouSure": "Είστε σίγουρος πως θέλετε να διαγράψετε αυτό το προγραμματισμέν δωμάτιο;" } }, "roomChat": { "title": "Συζήτηση", "emotesSoon": "[τα emotes έρχονται σύντομα]", "bannedAlert": "Αποκλειστήκατε από τη συζήτηση", "waitAlert": "Πρέπει να περιμένετε ένα δευτερόλεπτο προτού στείλετε και άλλο μήνυμα", "search": "Αναζήτηση", "searchResults": "Αποτελέσματα αναζήτησης", "recent": "Συχνά χρησιμοποιημένα", "sendMessage": "Στείλτε ένα Μήνυμα", "whisper": "Ψίθυρος", "welcomeMessage": "Καλως ήλθατε στο Τσάτ!", "roomDescription": "Περιγραφή δωματίου", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Ανεφοδιασμός πυραύλου", "takingOff": "Απογείωση", "inSpace": "Στο διάστημα", "approachingMoon": "Πλησιάζουμε το Φεγγάρι", "lunarDoge": "Σεληνιακό Doge", "approachingSun": "Πλησιάζουμε τον Ήλιο", "solarDoge": "Ηλιακό Doge", "approachingGalaxy": "Πλησιάζουμε τον Γαλαξία", "galacticDoge": "Γαλαξιακό Doge", "spottedLife": "Εντοπίστηκε πλανήτης με ζωή!" }, "feed": { "yourFeed": "Η ροή σας" } } } ================================================ FILE: kibbeh/public/locales/en/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "Load More", "loading": "Loading...", "noUsersFound": "No users found!", "ok": "Ok", "yes": "Yes", "no": "No", "cancel": "Cancel", "save": "Save", "edit": "Edit", "delete": "Delete", "joinRoom": "Join Room", "copyLink": "Copy Link", "copied": "Copied!", "copy": "Copy", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Please note running DogeHouse without accessibility permissions may cause unwanted errors", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken", "mutedTitle": "Muted | DogeHouse", "deafenedTitle": "Deafened | DogeHouse" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Origin Story", "link_2": "Discord", "link_3": "Report a Bug" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" }, "admin": { "ban": "Ban", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "download": { "prompt": "Download the DogeHouse Desktop app", "download_for": "Download for %platform% (%ext%)", "failed": "Unable to detect platform, please try again later or visit GitHub Releases", "visit_gh": "Visit GitHub Releases" }, "followingOnlineList": { "title": "People", "listHeader": "List of users that are not in a private room and you follow.", "currentRoom": "Currently in:", "startPrivateRoom": "Start a private room with them" }, "followList": { "title": "People", "followHim": "Follow", "followingHim": "Following", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "New room", "editRoom": "Edit Room", "refresh": "Refresh", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "Room gone; go back", "shareRoomLink": "Share Room Link", "inviteFollowers": "You can invite your followers that are online:", "whenFollowersOnline": "When your followers are online, they will show up here." }, "login": { "headerText": "Taking voice conversations to the moon 🚀", "featureText_1": "Dark Theme", "featureText_2": "Open Sign-Ups", "featureText_3": "Cross-Platform Support", "featureText_4": "Open Source", "featureText_5": "Text Chat", "featureText_6": "Powered by Doge", "loginGithub": "Login with GitHub", "loginTwitter": "Login with Twitter", "loginDiscord": "Login with Discord", "createTestUser": "Create Test User" }, "myProfile": { "logout": "Logout", "probablyLoading": "probably loading...", "voiceSettings": "Voice Settings", "overlaySettings": "Overlay Settings", "soundSettings": "Sound Settings", "deleteAccount": "Delete Account", "couldNotFindUser": "Sorry, we could not find that user", "privacySettings": "Privacy Settings" }, "notFound": { "whoopsError": "Whoops! This page got lost in conversation.", "goHomeMessage": "Not to worry. You can", "goHomeLinkText": "go home" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "room": { "speakers": "Speakers", "requestingToSpeak": "Requesting to Speak", "listeners": "Listeners", "allowAll": "Allow all", "allowAllConfirm": "Are you sure? This will allow all {{count}} requesting users to speak" }, "searchUser": { "search": "search..." }, "soundEffectSettings": { "title": "Sound Settings", "header": "Sounds", "playSound": "Play Sound" }, "viewUser": { "editProfile": "Edit Profile", "followsYou": "Follows you", "followers": "followers", "following": "following", "followHim": "Follow", "unfollow": "Unfollow", "followingHim": "Following", "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "copyProfileUrl": "Copy Profile URL", "urlCopied": "URL copied to clipboard", "about": "About", "aboutSuffix": "", "bot": "Bot", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." }, "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" } }, "voiceSettings": { "title": "Voice Settings", "header": "Voice Settings", "mic": "Mic:", "permissionError": "No mics found, you either have none plugged in or haven't given this website permission.", "refresh": "Refresh Mic List", "volume": "Volume:" }, "overlaySettings": { "header": "Overlay Settings", "input": { "errorMsg": "Please enter a valid app title", "label": "App title" } } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Banned Users", "unban": "Unban", "noBans": "No one has been banned yet" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Leave Current Room", "confirmLeaveRoom": "Are you sure you want to leave?", "leave": "Leave", "inviteUsersToRoomBtn": "Invite Users to Room", "invite": "Invite", "toggleMuteMicBtn": "Toggle Mute", "toggleDeafMicBtn": "Toggle Deafen", "mute": "Mute", "unmute": "Unmute", "deafen": "Deafen", "undeafen": "Undeafen", "makeRoomPublicBtn": "Make Room Public!", "settings": "Settings", "speaker": "Speaker", "listener": "Listener", "chat": "Chat" }, "deviceNotSupported": { "notSupported": "Your device is currently not supported. You can create an", "linkText": "issue on GitHub", "addSupport": "and I will try adding support for your device." }, "followingOnline": { "people": "People", "online": "ONLINE", "noOnline": "You have 0 friends online right now", "showMore": "Show more" }, "inviteButton": { "invited": "Invited!", "inviteToRoom": "Invite to room" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" }, "micPermissionBanner": { "permissionDenied": "Permission denied trying to access your mic (you may need to go into browser settings and reload the page)", "dismiss": "Dismiss", "tryAgain": "Try Again" }, "keyboardShortcuts": { "setKeybind": "Set Keybind", "listening": "Listening...", "toggleMuteKeybind": "Toggle mute keybind", "toggleDeafKeybind": "Toggle deafen keybind", "toggleOverlayKeybind": "Toggle overlay keybind", "togglePushToTalkKeybind": "Toggle push-to-talk keybind" }, "userVolumeSlider": { "noAudioMessage": "No audio consumer for some reason" }, "upcomingRoomsCard": { "upcomingRooms": "Upcoming rooms", "exploreMoreRooms": "Explore more rooms" }, "addToCalendar": { "add": "Add to Calendar" }, "wsKilled": { "description": "WebSocket was killed by the server. This usually happens when you open the website in another tab.", "reconnect": "Reconnect" }, "search": { "placeholder": "Search for rooms, users or categories", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profile", "language": "Language", "reportABug": "Report A Bug", "useOldVersion": "Use Old Version", "logOut": { "button": "Log out", "modalSubtitle": "Are you sure you want to logout?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "modals": { "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" }, "createRoomModal": { "subtitle": "Fill the following fields to start a new room", "public": "Public", "private": "Private", "roomName": "Room name", "roomDescription": "Room description", "descriptionError": "Max length 500", "nameError": "Must be between 2 to 60 characters long" }, "invitedToJoinRoomModal": { "newRoomCreated": "New Room Created", "roomInviteFrom": "Room Invite from", "justStarted": "They just started", "likeToJoin": ", would you like to join?", "inviteReceived": "you've been invited to" }, "editProfileModal": { "usernameTaken": "Username taken", "avatarUrlError": "Invalid image", "avatarUrlLabel": "Github/Twitter/Discord avatar URL", "bannerUrlLabel": "Twitter banner URL", "displayNameError": "Length 2 to 50 characters", "displayNameLabel": "Display Name", "usernameError": "Length 4 to 15 characters and only alphanumeric/underscore", "usernameLabel": "Username", "bioError": "Max length of 160 characters", "bioLabel": "Bio" }, "profileModal": { "blockUserConfirm": "Are you sure you want to block this user from joining any room you ever create?", "blockUser": "Block user", "makeMod": "Promote to Mod", "unmod": "Demote from Mod", "addAsSpeaker": "Add as Speaker", "moveToListener": "Move to Listener", "unBanFromChat": "Unban from Chat", "banFromChat": "Ban from Chat", "banFromRoom": "Ban from Room", "banIPFromRoom": "Ban IP from Room", "goBackToListener": "Go Back to Listener", "deleteMessage": "Delete this Message", "makeRoomCreator": "Promote to Admin" }, "roomSettingsModal": { "requirePermission": "require permission to speak", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" }, "makePublic": "make room public", "makePrivate": "make room private", "renamePublic": "Set public room name", "renamePrivate": "Set private room name" } } }, "modules": { "_comment": "Modules UI Internationalization Strings", "feed": { "yourFeed": "Your feed" }, "scheduledRooms": { "title": "Scheduled Rooms", "noneFound": "none found", "allRooms": "all scheduled rooms", "myRooms": "my scheduled rooms", "scheduleRoomHeader": "Schedule Room", "startRoom": "start room", "tommorow": "TOMMOROW", "today": "TODAY", "modal": { "needsFuture": "needs to be in the future", "roomName": "room name", "roomDescription": "Description", "minLength": "min length 2" }, "deleteModal": { "areYouSure": "Are you sure you want to delete this scheduled room?" } }, "roomChat": { "title": "Chat", "emotesSoon": "[emotes soon]", "bannedAlert": "You have been banned from chat", "waitAlert": "You have to wait a second before sending another message", "search": "Search", "searchResults": "Search Results", "recent": "Frequently Used", "sendMessage": "Send a Message", "whisper": "Whisper", "welcomeMessage": "Welcome to chat!", "roomDescription": "Room description", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Fueling rocket", "takingOff": "Taking off", "inSpace": "In space", "approachingMoon": "Approaching moon", "lunarDoge": "Lunar Doge", "approachingSun": "Approaching sun", "solarDoge": "Solar Doge", "approachingGalaxy": "Approaching galaxy", "galacticDoge": "Galactic Doge", "spottedLife": "Planet with life spotted" } } } ================================================ FILE: kibbeh/public/locales/en-AU/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "ǝɹoɯ pɐoꞁ", "loading": "˙˙˙ƃuᴉpɐoꞁ", "noUsersFound": "punoɟ sɹǝsn ou", "ok": "ʞo", "yes": "sǝʎ", "no": "ou", "cancel": "ꞁǝɔuɐƆ", "save": "ǝʌɐs", "edit": "ʇᴉpǝ", "delete": "ǝʇǝꞁǝp", "joinRoom": "ɯooɹ uᴉoɾ", "copyLink": "ʞuᴉꞁ ʎdoɔ", "copied": "pǝᴉdoɔ", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "sɹoɹɹǝ pǝʇuɐʍun ǝsnɐɔ ʎɐɯ suoᴉssᴉɯɹǝd ʎʇᴉꞁᴉqᴉssǝɔɔɐ ʇnoɥʇᴉʍ ǝsnoHǝƃoᗡ ƃuᴉuunɹ ǝʇou ǝsɐǝꞁԀ", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "ǝsnoHǝƃoᗡ", "mutedTitle": "ǝsnoHǝƃoᗡ | pǝʇnW", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "ʎɹoʇS uᴉƃᴉɹO", "link_2": "pɹoɔsᴉᗡ", "link_3": "ƃnᗺ ɐ ʇɹodǝᴚ" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "uɐq", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "˙ʍoꞁꞁoɟ noʎ puɐ ɯooɹ ǝʇɐʌᴉɹd ɐ uᴉ ʇou ǝɹɐ ʇɐɥʇ sɹǝsn ɟo ʇsᴉꞀ", "currentRoom": ":uᴉ ʎꞁʇuǝɹɹnɔ", "startPrivateRoom": "ɯǝɥʇ ɥʇᴉʍ ɯooɹ ǝʇɐʌᴉɹd ɐ ʇɹɐʇs", "title": "People" }, "followList": { "followHim": "ʍoꞁꞁoɟ", "followingHim": "ƃuᴉʍoꞁꞁoɟ", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "ɯooᴚ ǝʇɐǝɹƆ", "refresh": "ɥsǝɹɟǝᴚ", "editRoom": "Edit Room", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "ʞɔɐq oƃ 'ǝuoƃ ɯooɹ", "shareRoomLink": "ɯooɹ oʇ ʞuᴉꞁ ǝɹɐɥs", "inviteFollowers": ":ǝuᴉꞁuo ǝɹɐ ʇɐɥʇ sɹǝʍoꞁꞁoɟ ɹnoʎ ǝʇᴉʌuᴉ uɐɔ no⅄", "whenFollowersOnline": "˙ǝɹǝɥ dn ʍoɥs ꞁꞁᴉʍ ʎǝɥʇ 'ǝuᴉꞁuo ǝɹɐ sɹǝʍoꞁꞁoɟ ɹnoʎ uǝɥM" }, "login": { "headerText": "🚀 uooɯ ǝɥʇ oʇ suoᴉʇɐsɹǝʌuoɔ ǝɔᴉoʌ ƃuᴉʞɐ⊥", "featureText_1": "ǝɯǝɥ⊥ ʞɹɐᗡ", "featureText_2": "sd∩-uƃᴉS uǝdO", "featureText_3": "ʇɹoddnS ɯɹoɟʇɐꞁԀ-ssoɹƆ", "featureText_4": "ǝɔɹnoS uǝdO", "featureText_5": "ʇɐɥƆ ʇxǝ⊥", "featureText_6": "ǝƃoᗡ ʎq pǝɹǝʍoԀ", "loginGithub": "qnHʇᴉ⅁ ɥʇᴉʍ uᴉƃoꞁ", "loginTwitter": "ɹǝʇʇᴉʍ⊥ ɥʇᴉʍ uᴉƃoꞁ", "createTestUser": "ɹǝsn ʇsǝʇ ǝʇɐǝɹɔ", "loginDiscord": "Login with Discord" }, "myProfile": { "logout": "ʇnoƃoꞁ", "probablyLoading": "˙˙˙ƃuᴉpɐoꞁ ʎꞁqɐqoɹd", "voiceSettings": "sƃuᴉʇʇǝs ǝɔᴉoʌ oʇ oƃ", "overlaySettings": "sƃuᴉʇʇǝs ʎɐꞁɹǝʌo oʇ oƃ", "soundSettings": "sƃuᴉʇʇǝs punos oʇ oƃ", "deleteAccount": "ʇunoɔɔɐ ǝʇǝꞁǝp", "couldNotFindUser": "Sorry, we could not find that user", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "˙uoᴉʇɐsɹǝʌuoɔ uᴉ ʇsoꞁ ʇoƃ ǝƃɐd sᴉɥ⊥ ¡sdooɥM", "goHomeMessage": "uɐɔ no⅄ ˙ʎɹɹoʍ oʇ ʇoN", "goHomeLinkText": "ǝɯoɥ oƃ" }, "room": { "speakers": "sɹǝʞɐǝdS", "requestingToSpeak": "ʞɐǝds oʇ ƃuᴉʇsǝnbǝᴚ", "listeners": "sɹǝuǝʇsᴉꞀ", "allowAll": "ꞁꞁɐ ʍoꞁꞁⱯ", "allowAllConfirm": "ʞɐǝds oʇ sɹǝsn ƃuᴉʇsǝnbǝɹ {{count}} ꞁꞁɐ ʍoꞁꞁɐ ꞁꞁᴉʍ sᴉɥ⊥ ¿ǝɹns noʎ ǝɹⱯ" }, "searchUser": { "search": "˙˙˙ɥɔɹɐǝs" }, "soundEffectSettings": { "header": "spunoS", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "ǝꞁᴉɟoɹd ʇᴉpǝ", "followsYou": "noʎ sʍoꞁꞁoɟ", "followers": "sɹǝʍoꞁꞁoɟ", "following": "ƃuᴉʍoꞁꞁoɟ", "followHim": "ʍoꞁꞁoɟ", "followingHim": "ƃuᴉʍoꞁꞁoɟ", "copyProfileUrl": "ꞁɹn ǝꞁᴉɟoɹd ʎdoɔ", "urlCopied": "pɹɐoqdᴉꞁɔ oʇ pǝᴉdoɔ Ꞁᴚ∩", "unfollow": "Unfollow", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "sƃuᴉʇʇǝS ǝɔᴉoɅ", "mic": ":ɔᴉɯ", "permissionError": "˙uoᴉssᴉɯɹǝd ǝʇᴉsqǝʍ sᴉɥʇ uǝʌᴉƃ ʇ,uǝʌɐɥ ɹo uᴉ pǝƃƃnꞁd ǝuou ǝʌɐɥ ɹǝɥʇᴉǝ noʎ 'punoɟ sɔᴉɯ ou", "refresh": "ʇsᴉꞁ ɔᴉɯ ɥsǝɹɟǝɹ", "volume": ":ǝɯnꞁoʌ", "title": "Voice Settings" }, "overlaySettings": { "header": "sƃuᴉʇʇǝS ʎɐꞁɹǝʌO", "input": { "errorMsg": "ǝꞁʇᴉʇ ddɐ pᴉꞁɐʌ ɹǝʇuǝ ǝsɐǝꞁԀ", "label": "ǝꞁʇᴉʇ ddɐ ɹǝʇuƎ" } }, "download": { "starting": "Starting download...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "Click on the button below to start download", "download_now": "Download Now", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "sɹǝs∩ pǝuuɐᗺ", "unban": "uɐqun", "noBans": "ʇǝʎ pǝuuɐq uǝǝq sɐɥ ǝuo ou" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "ɯooɹ ʇuǝɹɹnɔ ǝʌɐǝꞀ", "confirmLeaveRoom": "¿ǝʌɐǝꞁ oʇ ʇuɐʍ noʎ ǝɹns noʎ ǝɹⱯ", "leave": "ǝʌɐǝꞀ", "inviteUsersToRoomBtn": "ɯooɹ oʇ sɹǝsn ǝʇᴉʌuI", "invite": "ǝʇᴉʌuI", "toggleMuteMicBtn": "ǝuoɥdoɹɔᴉɯ ǝʇnɯ ǝꞁƃƃo⊥", "mute": "ǝʇnW", "unmute": "ǝʇnɯu∩", "makeRoomPublicBtn": "¡ɔᴉꞁqnd ɯooɹ ǝʞɐW", "settings": "sƃuᴉʇʇǝS", "speaker": "ɹǝʞɐǝdS", "listener": "ɹǝuǝʇsᴉꞀ", "chat": "ʇɐɥƆ", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "uɐ ǝʇɐǝɹɔ uɐɔ no⅄ ˙pǝʇɹoddns ʇou ʎꞁʇuǝɹɹnɔ sᴉ ǝɔᴉʌǝp ɹno⅄", "linkText": "qnHʇᴉ⅁ uo ǝnssᴉ", "addSupport": "˙ǝɔᴉʌǝp ɹnoʎ ɹoɟ ʇɹoddns ƃuᴉppɐ ʎɹʇ ꞁꞁᴉʍ I puɐ" }, "inviteButton": { "invited": "pǝʇᴉʌuᴉ", "inviteToRoom": "ɯooɹ oʇ ǝʇᴉʌuᴉ" }, "micPermissionBanner": { "permissionDenied": "(ǝƃɐd ǝɥʇ pɐoꞁǝɹ puɐ sƃuᴉʇʇǝs ɹǝsʍoɹq oʇuᴉ oƃ oʇ pǝǝu ʎɐɯ noʎ) ɔᴉɯ ɹnoʎ ssǝɔɔɐ oʇ ƃuᴉʎɹʇ pǝᴉuǝp uoᴉssᴉɯɹǝԀ", "dismiss": "ssᴉɯsᴉp", "tryAgain": "uᴉɐƃɐ ʎɹʇ" }, "keyboardShortcuts": { "setKeybind": "puᴉqʎǝʞ ʇǝs", "listening": "ƃuᴉuǝʇsᴉꞁ", "toggleMuteKeybind": "puᴉqʎǝʞ ǝʇnɯ ǝꞁƃƃoʇ", "toggleOverlayKeybind": "puᴉqʎǝʞ ʎɐꞁɹǝʌo ǝꞁƃƃoʇ", "togglePushToTalkKeybind": "puᴉqʎǝʞ ʞꞁɐʇ-oʇ-ɥsnd ǝꞁƃƃoʇ", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "uosɐǝɹ ǝɯos ɹoɟ ɹǝɯnsuoɔ oᴉpnɐ ou" }, "addToCalendar": { "add": "ɹɐpuǝꞁɐƆ oʇ ppⱯ" }, "wsKilled": { "description": "˙qɐʇ ɹǝɥʇouɐ uᴉ ǝʇᴉsqǝʍ ǝɥʇ uǝdo noʎ uǝɥʍ suǝddɐɥ ʎꞁꞁɐnsn sᴉɥ⊥ ˙ɹǝʌɹǝs ǝɥʇ ʎq pǝꞁꞁᴉʞ sɐʍ ʇǝʞɔoSqǝM", "reconnect": "ʇɔǝuuoɔǝɹ" }, "modals": { "createRoomModal": { "public": "ɔᴉꞁqnԀ", "private": "ǝʇɐʌᴉɹԀ", "roomName": "ǝɯɐu ɯooᴚ", "roomDescription": "uoᴉʇdᴉɹɔsǝp ɯooᴚ", "descriptionError": "005 ɥʇƃuǝꞁ xɐɯ", "nameError": "ƃuoꞁ sɹǝʇɔɐɹɐɥɔ 09 oʇ ᘔ uǝǝʍʇǝq ǝq ʇsnɯ", "subtitle": "Fill the following fields to start a new room" }, "invitedToJoinRoomModal": { "newRoomCreated": "pǝʇɐǝɹƆ ɯooᴚ ʍǝN", "roomInviteFrom": "ɯoɹɟ ǝʇᴉʌuI ɯooᴚ", "justStarted": "pǝʇɹɐʇs ʇsnɾ ʎǝɥ⊥", "likeToJoin": "¿uᴉoɾ oʇ ǝʞᴉꞁ noʎ pꞁnoʍ '", "inviteReceived": "oʇ pǝʇᴉʌuᴉ uǝǝq ǝʌ,noʎ" }, "editProfileModal": { "usernameTaken": "uǝʞɐʇ ǝɯɐuɹǝsn", "avatarUrlError": "ǝƃɐɯᴉ pᴉꞁɐʌuI", "avatarUrlLabel": "ꞁɹn ɹɐʇɐʌɐ ɹǝʇʇᴉʍ⊥/qnHʇᴉ⅁", "displayNameError": "sɹǝʇɔɐɹɐɥɔ 05 oʇ ᘔ ɥʇƃuǝꞁ", "displayNameLabel": "ǝɯɐN ʎɐꞁdsᴉᗡ", "usernameError": "ǝɹoɔsɹǝpun/ɔᴉɹǝɯnuɐɥdꞁɐ ʎꞁuo puɐ sɹǝʇɔɐɹɐɥɔ 5І oʇ ᔭ ɥʇƃuǝꞁ", "usernameLabel": "ǝɯɐuɹǝs∩", "bioError": "sɹǝʇɔɐɹɐɥɔ 09І ɟo ɥʇƃuǝꞁ xɐɯ", "bioLabel": "oᴉᗺ", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "¿ǝʇɐǝɹɔ ɹǝʌǝ noʎ ɯooɹ ʎuɐ ƃuᴉuᴉoɾ ɯoɹɟ ɹǝsn sᴉɥʇ ʞɔoꞁq oʇ ʇuɐʍ noʎ ǝɹns noʎ ǝɹⱯ", "blockUser": "ɹǝsn ʞɔoꞁq", "makeMod": "poɯ ǝʞɐɯ", "unmod": "poɯun", "addAsSpeaker": "ɹǝʞɐǝds sɐ ppɐ", "moveToListener": "ɹǝuǝʇsᴉꞁ oʇ ǝʌoɯ", "banFromChat": "ʇɐɥɔ ɯoɹɟ uɐq", "banFromRoom": "ɯooɹ ɯoɹɟ uɐq", "goBackToListener": "ɹǝuǝʇsᴉꞁ oʇ ʞɔɐq oƃ", "deleteMessage": "ǝƃɐssǝɯ sᴉɥʇ ǝʇǝꞁǝp", "makeRoomCreator": "uᴉɯpɐ ɯooɹ ǝʞɐɯ", "unBanFromChat": "Unban from Chat", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "ʞɐǝds oʇ uoᴉssᴉɯɹǝd ǝɹᴉnbǝɹ", "makePublic": "ɔᴉꞁqnd ɯooɹ ǝʞɐɯ", "makePrivate": "ǝʇɐʌᴉɹd ɯooɹ ǝʞɐɯ", "renamePublic": "Set public room name", "renamePrivate": "Set private room name", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "People", "online": "ONLINE", "noOnline": "You have 0 friends online right now", "showMore": "Show more" }, "upcomingRoomsCard": { "upcomingRooms": "Upcoming rooms", "exploreMoreRooms": "Explore More Rooms" }, "search": { "placeholder": "Search for rooms, users or categories", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profile", "language": "Language", "reportABug": "Report A Bug", "useOldVersion": "Use Old Version", "logOut": { "button": "Log out", "modalSubtitle": "Are you sure you want to logout?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "sɯooᴚ pǝꞁnpǝɥɔS", "noneFound": "punoɟ ǝuou", "allRooms": "sɯooɹ pǝꞁnpǝɥɔs ꞁꞁɐ", "myRooms": "sɯooɹ pǝꞁnpǝɥɔs ʎɯ", "scheduleRoomHeader": "ɯooᴚ ǝꞁnpǝɥɔS", "startRoom": "ɯooɹ ʇɹɐʇs", "modal": { "needsFuture": "ǝɹnʇnɟ ǝɥʇ uᴉ ǝq oʇ spǝǝu", "roomName": "ǝɯɐu ɯooɹ", "roomDescription": "uoᴉʇdᴉɹɔsǝᗡ", "minLength": "ᘔ ɥʇƃuǝꞁ uᴉɯ" }, "tommorow": "TOMMOROW", "today": "TODAY", "deleteModal": { "areYouSure": "Are you sure you want to delete this scheduled room?" } }, "roomChat": { "title": "ʇɐɥƆ", "emotesSoon": "[uoos sǝʇoɯǝ]", "bannedAlert": "ʇɐɥɔ ɯoɹɟ pǝuuɐq ʇoƃ no⅄", "waitAlert": "ǝƃɐssǝɯ ɹǝɥʇouɐ ƃuᴉpuǝs ǝɹoɟǝq puoɔǝs ɐ ʇᴉɐʍ oʇ ǝʌɐɥ no⅄", "search": "ɥɔɹɐǝS", "searchResults": "sʇꞁnsǝᴚ ɥɔɹɐǝS", "recent": "pǝs∩ ʎꞁʇuǝnbǝɹᖵ", "sendMessage": "ǝƃɐssǝW ɐ puǝS", "whisper": "ɹǝdsᴉɥM", "welcomeMessage": "¡ʇɐɥɔ oʇ ǝɯoɔꞁǝM", "roomDescription": "uoᴉʇdᴉɹɔsǝp ɯooɹ", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "ʇǝʞɔoɹ ƃuᴉꞁǝnᖵ", "takingOff": "ɟɟo ƃuᴉʞɐ⊥", "inSpace": "ǝɔɐds uI", "approachingMoon": "uooɯ ƃuᴉɥɔɐoɹddⱯ", "lunarDoge": "ǝƃoᗡ ɹɐunꞀ", "approachingSun": "uns ƃuᴉɥɔɐoɹddⱯ", "solarDoge": "ǝƃoᗡ ɹɐꞁoS", "approachingGalaxy": "ʎxɐꞁɐƃ ƃuᴉɥɔɐoɹddⱯ", "galacticDoge": "ǝƃoᗡ ɔᴉʇɔɐꞁɐ⅁", "spottedLife": "pǝʇʇods ǝɟᴉꞁ ɥʇᴉʍ ʇǝuɐꞁԀ" }, "feed": { "yourFeed": "Your Feed" } } } ================================================ FILE: kibbeh/public/locales/en-C/GUIDE.md ================================================ # C'z Iŋglis̈ Alfubet (C's English Alphabet) ### Wï? (Why?) I'll explain, I swear.... later. For now, just know that this has been 3 years in the making, with help from many many many (mostly either unwilling or mocking) people. If adopted, I predict the effective end of illiteracy. We learn the alphabet in Kindergarten, and then spend the next 12 years of school having to learn why it doesn't work. What if we threw off the shackles of our Roman/Latin oppressors and created an actual English alphabet, made for our language? What if in Kindergarten, you learned the alphabet, and then you could just read? **"That's Not Realistic. You can't just change the alphabet."** Oh ya? [The Turkish did it](https://en.wikipedia.org/wiki/Turkish_alphabet#Introduction_of_the_modern_Turkish_alphabet) when they replaced the Arabic alphabet with their own Turkish one! Granted, they had the help of being a dictatorship.... Ok, how about [Canada's switch to the metric system](https://en.wikipedia.org/wiki/Metrication_in_Canada)? It could happen like that. ### Þë Alfubet (The Alphabet) The table below shows all the differences between the Roman/Latin alphabet you are currently indoctrinated into using, and Mr C's new and improved English Alphabet. Most consonants are the same, with a couple exceptions. Five new consonants and one new vowel are required. **Character (name)** | **Sound** | **Notes and Examples** | **Code** --- | --- | --- | --- | | | | **Basic Consonants** | | Each letter only makes ONE sound. That means we have to fix up some problems with the current alphabet... | b, d, f, h, j, k, l, m, n, o, p, r, t, v, w, z | Just like you learned in Kindergarten. | These letters haven't changed. They work pretty well as is, and almost always make the same sound (with a few annoying exceptions) so we'll keep them. | c (doesn't exist anymore) | N/A | C has been cancelled. C is redundant. If it makes an 's' sound then use s instead, if it makes a 'k' sound use K instead. Bye bye C. | g | ONLY sounds like the hard 'g' in gum. | Don't use the letter 'g' when it sounds like a 'j'. Use J instead: rigid -> rijid | q (doesn't exist anymore) | N/A | Q has been cancelled. Q is redundant. Use K instead. Bye bye Q. | s | ONLY sounds like 's' in **s**ee. | Don't use the letter 's' when it sounds like a 'z'. Use z instead: has -> haz | y | Sounds like: 'y' in **y**es, the beginning of the 'u' in **u**se | No more crazy fancy uses of Y. Examples: use -> yüz (huh? explained more below) | x (doesn't exist anymore) | N/A | X has been cancelled, use 'ks' instead, or use Z if it makes a 'z' sound: ax -> aks | | | | | **Short Vowels** | | Short vowel sounds just use the normal vowel letters: a, e, i, o & u. | See instructions below for how to type special characters using this code a | The normal "short vowel" sound that "a" makes. Sounds like: the 'a' in p**a**t | Just like you learned in Kindergarten. | - e | The normal "short vowel" sound that "e" makes. Sounds like: the 'e' in p**e**t | Just like you learned in Kindergarten. | - i | The normal "short vowel" sound that "i" makes. Sounds like: the 'i' in p**i**t | Just like you learned in Kindergarten. | - o | The normal "short vowel" sound that "o" makes. Sounds like: the 'o' in p**o**t | Just like you learned in Kindergarten. This is actually the hardest letter to use, since you brain is so used to pronouncing 'o' in so many different ways in so many different contexts. From now on, it just says 'o' like in pot! | - u | The normal "short vowel" sound that "u" makes. Sounds like: the 'u' in p**u**tt (WHY are there two "t"s in this word? it makes no sense) | Just like you learned in Kindergarten. | - **ə** (schwa) | The "unstressed vowel" sound. Sounds like: the 'u' in p**u**t, the 2nd 'e' in carp**e**t, the 'ea' in l**ea**rn, the 'io' in dict**io**nary | The most common vowel sound in English doesn't actually have its own letter. Instead of it's own letter, English just throws a random vowel or combo of vowels and we have to guess how to pronounce it! | *u*0259 | | | | **Long Vowels** | | Long vowels are when a vowel says it's own name (except 'u'). To differentiate long vowels from short vowels we had a line or double dots over the vowel. | Type the letter first, then use the code to add double dots over it (see below table for instructions) ä | Sounds like: 'a' in h**a**te, and 'ei' in **ei**ght | Examples: hate -> hät, eight -> ät | A + *u*0308 ë | Sounds like: 'e' in h**e**, 'ea' in m**ea**t, 'ee' in cr**ee**p, 'ie' in f**ie**ld, 'y' in an**y**, and 'e' in **e**vil | Examples: he -> hë, meat -> mët, creep -> krëp, field -> fëld, evil -> ëvil, (if you enunciate the 'i', otherwise it would be ëvəl) | E + *u*0308 ï | Sounds like: 'i' in k**i**te, and 'y' in cr**y** | Examples: kite -> kït, cry -> krï | I + *u*0308 ö | Sounds like the 'o' in r**o**pe | This one is pretty easy. Example: poke -> pök | O + *u*0308 ü | Sounds like: 'u' in d**u**ty, 'oe' in sh**oe**, 'oo' in g**oo**p, and 'ew' in st**ew** | This is the only long vowel that doesn't actually say it's own name. It's like the name of the letter "u" with the 'y' sound removed form the beginning. Examples: poo -> pü, who -> hü | U + *u*0308 | | | | **New Characters** | | The best part, where we get to introduce NEW characters into the alphabet so we can write sounds that don't have their own letter in the Roman/Latin alphabet! | s̈ | Sounds like: 'sh' in a**sh** | We need a letter for the 'sh' sound, so let's just add some dots above an 's'! Examples: ash -> as̈, she -> s̈ë | S + *u*0308 c or c̈ | Sounds like: 'ch' in **ch**eese | Woah woah woah. I though the C was cancelled? Well, it's still on the keyboard so we might as well use it, so lets give it the 'ch' sound. To prevent confusing your brain, let's put double dots over it to make it consistent with the 'sh' character: chick -> c̈ik,cheese -> c̈ëz, church -> c̈ərc̈ | C + *u*0308 z̈ | Sounds like 'zh': 's' in mea**s**ure , 'z' in sei**z**ure, 'ti' in equa**ti**on, and 'g' in gara**g**e | This is one of the greatest examples of the failure of the Roman/Latin alphabet to capture the English language. There are a million ways that we spell the 'zh' sound, and none of them actually use 'zh' !?!!? Examples: measure -> mez̈ər, seizure -> sëz̈ər, equation -> ëkwäz̈ən, garage -> guroz̈ (remember 'o' like in p**o**t) | Z + *u*0308 **þ** (thorn) | The voiced 'th' sound: 'th' in **th**en, 'th' in fea**th**er, and 'th' in brea**th**e | Thorn, þ, has a [cool history](https://www.mentalfloss.com/article/31904/12-letters-didnt-make-alphabet#file-306119) and actually was a letter used in Old and Middle English. Examples: then -> þen, feather -> feþər, breathe -> brëþ | *u*00FE **ð** (eth) | The voiceless 'th' sound: 'th' in **th**in, 'th' in ba**th**tub, 'th' in ten**th** | Say "this" and "thing" and listen to what sound the 'th' makes. They make different sounds, so they need different letters! Another Old English letter with a [neat history](https://www.mentalfloss.com/article/31904/12-letters-didnt-make-alphabet#file-306124) that was tossed out around the year 1000. Well, it's back baby!! Examples: thin -> ðin, bathtub -> baðtub, tenth -> tenð | *u*00F0 **ŋ** (eng) | Sounds like: 'ng' in si**ng**, 'ng' in po**ng**, and 'n' in ri**n**k | Like an 'n' with a 'j' tail. Also has a [cool history](https://www.mentalfloss.com/article/31904/12-letters-didnt-make-alphabet#file-306130). Examples: sing -> siŋ, pong -> poŋ, rink -> riŋk | *u*014B ### Tïpəŋ Spes̈əl Kerəktərz (Typing Special Characters) To type special characters in Ubuntu (and many other Linux distros) you can use the special code `Ctrl` + `Shift` + `U` (which will appear as an underlined *u*) then type the four digit code for the character (e.g. 0259), then hit `Space` or `Enter` and the *u* will turn into the character for that code. For example, to type thorn: **þ**, you would type this combo of keys: `Ctrl` + `Shift` + `U`, `0`, `0`, `F`, `E`, `Space` To create a long vowel with two dots, or a line above it, type the vowel, then type the code combo for the symbol as described above. The line or dots will appear above the letter. For example, to type **ä**, you would type: `A`, `Ctrl` + `Shift` + `U`, `0`, `0`, `F`, `E`, `Space` ### Fïnul Tip (Final Tip). Don't know how to spell something? It's spelled just as it sounds, no funny business. ================================================ FILE: kibbeh/public/locales/en-C/translation.json ================================================ { "_comment": "to contribute to this you can see the translation guide in the /en-C directory.", "common": { "loadMore": "Löd Mör", "loading": "Lödiŋ...", "noUsersFound": "Nö yüzrz fawnd!", "ok": "Ök", "yes": "Yes", "no": "Nö", "cancel": "Kansəl", "save": "Säv", "edit": "Edit", "delete": "Dəlët", "joinRoom": "Jöën Rüm", "copyLink": "Kopë Link", "copied": "Kopëd!", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Plëz nöt runiŋ DogeHouse wiðawt aksesibilitë pərmis̈onz mä koz unwontəd erərz", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Män Hedər UI Intərnas̈ənəlïzäs̈un Striŋz", "title": "DogeHouse", "dashboard": "Das̈börd", "connectionTaken": "Koneks̈un Täkən", "mutedTitle": "Myütəd | DogeHouse", "deafenedTitle": "Defənd | DogeHouse" }, "footer": { "_comment": "Män Fətər UI Intərnas̈ənəlïzäs̈un Striŋz", "link_1": "Örijin Störë", "link_2": "Discord", "link_3": "Rëpört ä Bug" }, "pages": { "_comment": "Rëspektiv Päj UI Intərnas̈ənəlïzäs̈un Striŋz", "admin": { "ban": "Ban", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "download": { "prompt": "Dawnlöd þə DogeHouse Desktop ap", "download_for": "Dawnlöd för %platform% (%ext%)", "failed": "Unäbəl tü dətekt platförm, plëz trï ägen lätər ör vizit GitHub Rëlësəz", "visit_gh": "Vizit GitHub Rëlësez" }, "followingOnlineList": { "listHeader": "List uv yüzərz þat ar not in ä prïvit rüm and yü folö.", "currentRoom": "Kərəntlë in:", "startPrivateRoom": "Stort ä prïvit rüm wið þem", "title": "People" }, "followList": { "followHim": "Folö", "followingHim": "Folöiŋ", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Nü̈ Rüm", "editRoom": "Edit Rüm", "refresh": "Rëfres̈", "desktopAlert": "Dawnlöd þə DogeHouse desktop ap tüdä!" }, "inviteList": { "roomGone": "Rüm gon; gö bak", "shareRoomLink": "S̈är Rüm Link", "inviteFollowers": "Yü kan invït yor folöərz þat or onlïn:", "whenFollowersOnline": "Wen yör folöərz or onlïn, þä wil s̈ö up hër." }, "login": { "headerText": "Täkiŋ vöës konvrsäs̈onz tü þə mün 🚀", "featureText_1": "Dərk ðëm", "featureText_2": "Öpen Sïn-əps", "featureText_3": "Kros-Platförm Səport", "featureText_4": "Öpen Sörs", "featureText_5": "Tekst C̈at", "featureText_6": "Pawrd bï Döj", "loginGithub": "Login wið GitHub", "loginTwitter": "Login wið Twitter", "loginDiscord": "Login wið Discord", "createTestUser": "Crëä̈t Test Yüzr" }, "myProfile": { "logout": "Logawt", "probablyLoading": "probäblë lödiŋ...", "voiceSettings": "Vöës Setiŋz", "overlaySettings": "Övrlä Setiŋz", "soundSettings": "Sawnd Setiŋz", "deleteAccount": "Dlët Akawnt", "couldNotFindUser": "Sorë, wë kud not fïnd þat yüzr", "privacySettings": "Prïvasë Setiŋz" }, "notFound": { "whoopsError": "Wəps! Þis päj got lost in konvrsäs̈on.", "goHomeMessage": "Not tü wrë. Yü kan", "goHomeLinkText": "gö höm" }, "room": { "speakers": "Spëkrz", "requestingToSpeak": "Rekwestiŋ tü Spëk", "listeners": "Lisenrz", "allowAll": "Alaw əl", "allowAllConfirm": "Ər yü s̈r? Þis wil alaw əl {{count}} rekwestiŋ yüzrz tü spëk" }, "searchUser": { "search": "src̈..." }, "soundEffectSettings": { "header": "Sawndz", "title": "Sawnd Setiŋz", "playSound": "Play Sound" }, "viewUser": { "editProfile": "Edit Pröfïl", "followsYou": "Folöz yü", "followers": "folörz", "following": "folöiŋ", "followHim": "Folö", "unfollow": "Unfolö", "followingHim": "Folöiŋ", "copyProfileUrl": "Kopë Pröfïl URL", "urlCopied": "URL kopëd tü klipbörd", "about": "Abawt", "bot": "Bot", "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Vöës Setiŋz", "mic": "Mïk:", "permissionError": "Nö mïks fawnd, yü ïþr hav nun plugd in ör havn't givn þis websït prmis̈on.", "refresh": "Rëfres̈ Mïk List", "volume": "Volyüm:", "title": "Voice Settings" }, "overlaySettings": { "header": "Övrlä Setiŋz", "input": { "errorMsg": "Plëz entr ä valid ap tïtl", "label": "Ap tïtl" } }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Kompönent UI Intərnas̈ənəlïzäs̈un Striŋz", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Band Yüzrz", "unban": "Unban", "noBans": "No won haz bën band yet" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Lëv Krnt Röm", "confirmLeaveRoom": "Ər yü s̈r yü wont tü lëv?", "leave": "Lëv", "inviteUsersToRoomBtn": "Invit Yüzrz tü Rüm", "invite": "Invit", "toggleMuteMicBtn": "Togl Myüt", "toggleDeafMicBtn": "Togl Defen", "mute": "Myüt", "unmute": "Unmyüt", "deafen": "Defen", "undeafen": "Undefen", "makeRoomPublicBtn": "Mäk Rüm Public!", "settings": "Setiŋz", "speaker": "Spëkr", "listener": "Lisenr", "chat": "C̈at" }, "deviceNotSupported": { "notSupported": "Yör devis is kurentlë not supörtd. Yü kan krëät an", "linkText": "is̈ü on GitHub", "addSupport": "and Ï wil trï adiŋ səport för yör devis." }, "followingOnline": { "people": "Pëpol", "online": "ONLIN", "noOnline": "Yü hav 0 frendz onlïn rït naw", "showMore": "S̈ö mör" }, "inviteButton": { "invited": "Invïtd!", "inviteToRoom": "Invït tü rüm" }, "micPermissionBanner": { "permissionDenied": "Prmis̈on dënïd trïiŋ tü akses yör mïk (yü mä nëd tü gö intü brawsr setiŋz and rëlöd þə pëj)", "dismiss": "Dismis", "tryAgain": "Trï Ägän" }, "keyboardShortcuts": { "setKeybind": "Set Këbïnd", "listening": "Liseniŋ...", "toggleMuteKeybind": "Togl myüt këbïnd", "toggleDeafKeybind": "Togl defen këbïnd", "toggleOverlayKeybind": "Togl övrlä këbïnd", "togglePushToTalkKeybind": "Togl pus̈-tü-tak këbïnd" }, "userVolumeSlider": { "noAudioMessage": "Nö ədëö konsümr för sum rëson" }, "upcomingRoomsCard": { "upcomingRooms": "Upcəmiŋ rümz", "exploreMoreRooms": "Eksplör mör rümz" }, "addToCalendar": { "add": "Ad tü Kalendr" }, "wsKilled": { "description": "WebSocket wəz kild bï þə srvr. Þis yüs̈üalë hapnz wen yü öpn þe websit in anəþr tab.", "reconnect": "Rekonekt" }, "search": { "placeholder": "Src̈ för rümz, yüzrz ör kategörëz", "placeholderShort": "Src̈" }, "settingsDropdown": { "profile": "Profil", "language": "Laŋgwaj", "reportABug": "Rëport Ä Bəg", "useOldVersion": "Yüz Old Vrzon", "logOut": { "button": "Log awt", "modalSubtitle": "Ər yü s̈r yü want tü logawt?" }, "debugAudio": { "debugAudio": "Debəg Ədëö", "stopDebugger": "Stop Debəgr" }, "downloadApp": "Dawnlöd App", "developer": "Developer Settings" }, "modals": { "createRoomModal": { "subtitle": "Fil þe folowiŋ fëldz tü start ä nü rüm", "public": "Public", "private": "Prïvit", "roomName": "Rüm näm", "roomDescription": "Rüm descrips̈on", "descriptionError": "Maks lenð 500", "nameError": "Must bë bëtwën 2 tü 60 karictrz lon" }, "invitedToJoinRoomModal": { "newRoomCreated": "Nü Rüm Krëäted", "roomInviteFrom": "Rüm Invit frəm", "justStarted": "Þä just stərted", "likeToJoin": ", wəd yü lïk tü jöën?", "inviteReceived": "yü'v bën invitd tü" }, "editProfileModal": { "usernameTaken": "Yüzrnäm täkn", "avatarUrlError": "Invalid imag", "avatarUrlLabel": "Github/Twitter/Discord avatar URL", "bannerUrlLabel": "Twitter banr URL", "displayNameError": "Lenð 2 tü 50 karaktrz", "displayNameLabel": "Displä Näm", "usernameError": "Lenð 4 tü 15 karaktrz and önlë alfanümerik/undrscör", "usernameLabel": "Yüzrnäm", "bioError": "Maks lenð uv 160 characters", "bioLabel": "Bïö" }, "profileModal": { "blockUserConfirm": "Ər yü s̈r yü wont tü blok ðis yüzr frəm jöëniŋ anë rüm yü evr krëät?", "blockUser": "Blok yüzr", "makeMod": "Promot tü Mod", "unmod": "Demot frəm Mod", "addAsSpeaker": "Ad az Spëkr", "moveToListener": "Müv tü Lisenr", "unBanFromChat": "Unban frəm C̈at", "banFromChat": "Ban frəm C̈at", "banFromRoom": "Ban frəm Rüm", "goBackToListener": "Gö Bak tü Lisenr", "deleteMessage": "Dlët þis Mesəj", "makeRoomCreator": "Promot tü Admin", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "rekwïr prmis̈on tü spëk", "makePublic": "mäk rüm public", "makePrivate": "mäk rüm prïvit", "renamePublic": "Set public rüm näm", "renamePrivate": "Set prïvit rüm näm", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modyülz UI Intərnas̈ənəlïzäs̈un Striŋz", "feed": { "yourFeed": "Yör fëd" }, "scheduledRooms": { "title": "Skejüld Rümz", "noneFound": "nun fawnd", "allRooms": "əl scheduled rümz", "myRooms": "my skejüld rümz", "scheduleRoomHeader": "skejül Rüm", "startRoom": "stərt rüm", "tommorow": "TÜMÖRÖ", "today": "TÜDÄ", "modal": { "needsFuture": "nëdz tü bë in þə fyüc̈ur", "roomName": "rüm näm", "roomDescription": "Deskrips̈on", "minLength": "min lenð 2" }, "deleteModal": { "areYouSure": "Ər yü s̈r yü wont tü dlët þis skejüld rüm?" } }, "roomChat": { "title": "C̈at", "emotesSoon": "[ëmötz sün]", "bannedAlert": "Yü hav bën band frəm c̈at", "waitAlert": "Yü hav tü wät ä secund bëfor sendiŋ anəþr mesəj", "search": "Src̈", "searchResults": "Src̈ Rezultz", "recent": "Frekwentlë Yüzd", "sendMessage": "Send ä Mesəj", "whisper": "Wispr", "welcomeMessage": "Welcom tü c̈at!", "roomDescription": "Rüm deskrips̈on", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Fyüliŋ roket", "takingOff": "Takiŋ of", "inSpace": "In späs", "approachingMoon": "Apröc̈iŋ mün", "lunarDoge": "Lünr Döj", "approachingSun": "Apröc̈iŋ sun", "solarDoge": "Solr Döj", "approachingGalaxy": "Apröc̈iŋ galaksë", "galacticDoge": "Galaktik Döj", "spottedLife": "Planet wið lif spotd" } } } ================================================ FILE: kibbeh/public/locales/en-CODE/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "loadMore();", "loading": "...loading", "noUsersFound": "ERR: No users found!", "ok": "ok", "yes": "yes", "no": "no", "cancel": "cancel", "save": "save()", "edit": "edit()", "delete": "delete()", "joinRoom": "joinRoom()", "copyLink": "copy()", "copied": "copied", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "WARNING: please note running DogeHouse without accessibility permissions may cause unwanted console errors", "copy": "copy", "error": "error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "Doge.House()", "dashboard": "./dashboard", "connectionTaken": "ERR: connection taken", "mutedTitle": "mute() | Doge.House()", "deafenedTitle": "deafen() | Doge.House()" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "origin story;", "link_2": "discord;", "link_3": "make a github issue;" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "botEdit": { "yourBots": "your clients", "bots": "clients", "title": "client.information", "apiKey": "process.env.APIKEY", "regenerate": "regen();", "reveal": "hack into .env" }, "admin": { "ban": "ban();", "userStaffandContrib": "user staff & contributions", "staff": "staff: ", "contributions": "contributions", "username": "username", "usrStaff": "user staff", "usrContributions": "programmer contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "download": { "prompt": "download the Doge.House() desktop app", "download_for": "download for %platform% (%ext%)", "failed": "ERR: unable to detect platform, please try again later or visit gitHub releases", "visit_gh": "visit gitHub releases" }, "followingOnlineList": { "title": "programmers", "listHeader": "list of programmers that are not in a private room and you follow.", "currentRoom": "currently in:", "startPrivateRoom": "start a private room with them" }, "followList": { "title": "programmers", "followHim": "follow();", "followingHim": "programmer.following", "followingNone": "not following anyone", "noFollowers": "no followers | null" }, "home": { "createRoom": "new file", "editRoom": "edit file", "refresh": "refresh", "desktopAlert": "download the Doge.House() desktop app today!" }, "inviteList": { "roomGone": "room gone; return;", "shareRoomLink": "link.share()", "inviteFollowers": "you can invite your followers that are online:", "whenFollowersOnline": "when your followers are online, they will show up here." }, "login": { "headerText": "Taking voice conversations to the moon 🚀", "featureText_1": "dark theme", "featureText_2": "sign-ups.open();", "featureText_3": "cross-platform support", "featureText_4": "open source", "featureText_5": "sonar chat", "featureText_6": "powered by doge", "loginGithub": "login with gitHub", "loginTwitter": "login with twitter", "loginDiscord": "login with discord", "createTestUser": "create test programmer" }, "myProfile": { "logout": "user.logout();", "probablyLoading": "probably loading...", "voiceSettings": "voice-config.json", "overlaySettings": "overlay-config.json", "soundSettings": "sound-config.json", "deleteAccount": "account.delete();", "couldNotFindUser": "ERR: could not find 'programmer' of null", "privacySettings": "privacy-config.json" }, "notFound": { "whoopsError": "ERR: this page got lost in conversation.", "goHomeMessage": "not to worry. you can. npm will handle it for you", "goHomeLinkText": "home.js" }, "privacySettings": { "title": "privacy-config.json", "header": "privacy-config.json", "whispers": { "label": "whispers", "on": ".on()", "off": ".off()" } }, "room": { "speakers": "professors", "requestingToSpeak": "requesting to teach", "listeners": "students", "allowAll": "allowAll: true", "allowAllConfirm": "WARNING: are you sure? This will allow all {{count}} requesting programmers to speak" }, "searchUser": { "search": "ctrl+f..." }, "soundEffectSettings": { "title": "sound-config.json", "header": "sounds", "playSound": "play sound" }, "viewUser": { "editProfile": "edit profile.json", "followsYou": "follows you: true", "followers": "followers", "following": "following", "followHim": "follow();", "unfollow": "unfollow()", "followingHim": "following: true", "block": "block({reason: 'bad'})", "unblock": "unblock()", "sendDM": "send dm", "copyProfileUrl": "profileURL.copy();", "urlCopied": "copied", "about": "about", "aboutSuffix": "", "bot": "bot: true", "errors": { "blocked": "ERR: this programmer has blocked you.", "default": "ERR: couldn't load this programmer." }, "profileTabs": { "about": "_about", "rooms": "_rooms", "scheduled": "_scheduled", "recorded": "_Recorded", "clips": "_clips", "admin": "_admin" } }, "voiceSettings": { "title": "voice-config.json", "header": "voice-config.json", "mic": "mic:", "permissionError": "ERR: no mics found, you either have none plugged in or haven't given this website permission.", "refresh": "mic-list.refresh()", "volume": "volume:" }, "overlaySettings": { "header": "overlay-config.json", "input": { "errorMsg": "ERR: please enter a valid app title", "label": "app.title" } } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "room.banned", "unban": "unban();", "noBans": "node(6969): no one has been banned yet" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "room.leave()", "confirmLeaveRoom": "WARNING: are you sure you want to leave?", "leave": "room.leave()", "inviteUsersToRoomBtn": "room.inviteURL", "invite": "invite()", "toggleMuteMicBtn": "toggleMute()", "toggleDeafMicBtn": "toggleDeafen()", "mute": "mute()", "unmute": "unmute()", "deafen": "deafen()", "undeafen": "undeafen()", "makeRoomPublicBtn": "room.public: true", "settings": "config.json", "speaker": "speaker", "listener": "listener", "chat": "console" }, "deviceNotSupported": { "notSupported": "ERR: your device is currently not supported. you can create an", "linkText": "issue on gitHub", "addSupport": "and i will try adding support for your device." }, "followingOnline": { "people": "programmers", "online": "CODING", "noOnline": "friends-online: 0;", "showMore": "fetchMore()" }, "inviteButton": { "invited": "invited!", "inviteToRoom": "invite to room" }, "messagesDropdown": { "title": "console logs", "showMore": "fetchMore()", "noMessages": "no new console logs" }, "micPermissionBanner": { "permissionDenied": "ERR: permission denied trying to access your mic (you may need to go into browser settings and reload the page)", "dismiss": "dismiss", "tryAgain": "try again" }, "keyboardShortcuts": { "setKeybind": "setKeybind()", "listening": "listening...", "toggleMuteKeybind": "", "toggleDeafKeybind": "", "toggleOverlayKeybind": "", "togglePushToTalkKeybind": "" }, "userVolumeSlider": { "noAudioMessage": "ERR: no audio consumer for some reason" }, "upcomingRoomsCard": { "upcomingRooms": "upcoming files", "exploreMoreRooms": "explore more files" }, "addToCalendar": { "add": "calendar.add()" }, "wsKilled": { "description": "app crashed: websocket was killed by the server. This usually happens when you open the website in another tab.", "reconnect": "reconnect()" }, "search": { "placeholder": "search for files, programmers or categories", "placeholderShort": "find()" }, "settingsDropdown": { "profile": "profile", "language": "language", "reportABug": "report a bug", "useOldVersion": "use old version", "logOut": { "button": "logout()", "modalSubtitle": "WARNING: are you sure you want to logout?" }, "debugAudio": { "debugAudio": "audio.debug()", "stopDebugger": "debugger.stop()" }, "downloadApp": "download app", "developer": "developer-config.json" }, "userBadges": { "dhStaff": "Doge.House() staff", "dhContributor": "Doge.House() contributor" }, "modals": { "createBotModal": { "usernameTaken": "username is taken", "subtitle": "please fill the details below to create your client", "title": "create client" }, "createRoomModal": { "subtitle": "> fill the following fields to start a new room", "public": "...public", "private": "...private", "roomName": "file name", "roomDescription": "file description", "descriptionError": "max length 500", "nameError": "ERR: must be between 2 to 60 characters long" }, "invitedToJoinRoomModal": { "newRoomCreated": "new file Created", "roomInviteFrom": "file invite from", "justStarted": "they just started", "likeToJoin": ", would you like to join?", "inviteReceived": "you've been invited to" }, "editProfileModal": { "usernameTaken": "username taken", "avatarUrlError": "invalid image", "avatarUrlLabel": "github/twitter/discord avatar URL", "bannerUrlLabel": "twitter banner URL", "displayNameError": "length 2 to 50 characters", "displayNameLabel": "display name", "usernameError": "length 4 to 15 characters and only alphanumeric/underscore", "usernameLabel": "username", "bioError": "max length of 160 characters", "bioLabel": "bio" }, "profileModal": { "blockUserConfirm": "WARNING: are you sure you want to block this programmer from joining any file you ever create?", "blockUser": "block programmer", "makeMod": "promote to mod", "unmod": "demote from mod", "addAsSpeaker": "speaker.add()", "moveToListener": "listener.add()", "unBanFromChat": "unban from console", "banFromChat": "ban from console", "banFromRoom": "ban from file", "banIPFromRoom": "ban IP from file", "goBackToListener": "go back to listener", "deleteMessage": "delete this log", "makeRoomCreator": "setLevel(ADMIN)" }, "roomSettingsModal": { "requirePermission": "require permission to speak", "chatCooldown": "chat cooldown (milliseconds)", "chat": { "label": "console", "enabled": "enabled", "disabled": "disabled", "followerOnly": "follower only" }, "makePublic": "make file public", "makePrivate": "make file private", "renamePublic": "set public file name", "renamePrivate": "set private file name" } } }, "modules": { "_comment": "Modules UI Internationalization Strings", "feed": { "yourFeed": "your feed" }, "scheduledRooms": { "title": "scheduled files", "noneFound": "none found", "allRooms": "all scheduled files", "myRooms": "my scheduled files", "scheduleRoomHeader": "schedule file", "startRoom": "start file", "tommorow": "TOMMOROW", "today": "TODAY", "modal": { "needsFuture": "needs to be in the future", "roomName": "file name", "roomDescription": "description", "minLength": "min length 2" }, "deleteModal": { "areYouSure": "are you sure you want to delete this file?" } }, "roomChat": { "title": "console", "emotesSoon": "[emotes soon]", "bannedAlert": "you have been banned from console", "waitAlert": "you have to wait a second before sending another command. greedy programmer", "search": "search(query)", "searchResults": "search results", "recent": "frequently used", "sendMessage": "send a command", "whisper": "whisper", "welcomeMessage": "welcome to console!", "roomDescription": "file description", "disabled": "roomChatDisabled: true", "messageDeletion": { "message": "command", "retracted": "retracted", "deleted": "recylced" } }, "roomStatus": { "fuelingRocket": "fuelingRocket: true", "takingOff": "takingOff: true", "inSpace": "inSpace: true", "approachingMoon": "approaching united states", "lunarDoge": "lunar doge", "approachingSun": "approaching massachusetts", "solarDoge": "solar doge", "approachingGalaxy": "approaching MIT", "galacticDoge": "galactic doge", "spottedLife": "planet with programmers spotted" } } } ================================================ FILE: kibbeh/public/locales/en-LOLCAT/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "mak mor apper", "loading": "lodin........", "noUsersFound": "no kittehs here :(", "ok": "k", "yes": "yeh", "no": "na", "cancel": "nvermind", "save": "sav", "edit": "mak difernt", "delete": "thow in kitteh litter", "joinRoom": "go in kitteh howse", "copyLink": "get da liNk", "copied": "got de liNk", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Please note running DogeHouse without accessibility permissions may cause unwanted errors", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "KittehHowse", "dashboard": "dashbored", "connectionTaken": "connecty thing is used", "mutedTitle": "no spek | KittehHowse", "deafenedTitle": "deaf | KittehHowse" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "wy dis exsit", "link_2": "dizcord", "link_3": "eew i fownd a buggy" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "banish", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "download": { "prompt": "get da desktp ap", "download_for": "get fur %platform% (%ext%)", "failed": "idk wut platform u usin", "visit_gh": "visit github releases" }, "followingOnlineList": { "listHeader": "kittehs who are not lookn at their privates an u stalk dem", "currentRoom": "rn ur in:", "startPrivateRoom": "go in private howse wit dem", "title": "People" }, "followList": { "followHim": "stalk", "followingHim": "stalking", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "mak new howse", "editRoom": "mak howse difernt", "refresh": "refresh", "desktopAlert": "get desktp ap NOW or meh skratch u" }, "inviteList": { "roomGone": "no more howse, go away", "shareRoomLink": "shar howse lnk", "inviteFollowers": "invte ur stalkers who iz online rn:", "whenFollowersOnline": "when ur stalkers iz online, dey apper here." }, "login": { "headerText": "we get ur voice and yeet it to da moon 🚀", "featureText_1": "no lite theme cuz it cringe", "featureText_2": "any kitteh can join uz", "featureText_3": "use on many many many diff device", "featureText_4": "u can see da code and stare at it", "featureText_5": "u can type wordz too!!!!!!!", "featureText_6": "Powered by Kittehs", "loginGithub": "login with gitub", "loginTwitter": "login with twitr", "loginDiscord": "login with dizcord", "createTestUser": "mak fake testn user" }, "myProfile": { "logout": "go away", "probablyLoading": "it mite be loadng.........", "voiceSettings": "speekn settns", "overlaySettings": "ovrlai settns", "soundSettings": "sond settns", "deleteAccount": "get acont an yeet it into kitteh litter", "couldNotFindUser": "Sozz, but dat user no exist", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "dis page tok a wrong turn and got lost", "goHomeMessage": "ay u, ", "goHomeLinkText": "go ta ur howse" }, "room": { "speakers": "spekars", "requestingToSpeak": "meh wants ta spek", "listeners": "listenars", "allowAll": "let all spek", "allowAllConfirm": "u crazy? dis will let {{count}} kittehs talk" }, "searchUser": { "search": "search..." }, "soundEffectSettings": { "header": "Sounds", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "mak profile difernt", "followsYou": "stalks u", "followers": "kittehs stalking u", "following": "kittehs u stalk", "followHim": "Follow", "unfollow": "Unfollow", "followingHim": "Following", "copyProfileUrl": "Copy Profile URL", "urlCopied": "URL copied to clipboard", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Voice Settings", "mic": "Mic:", "permissionError": "No mics found, you either have none plugged in or haven't given this website permission.", "refresh": "Refresh Mic List", "volume": "Volume:", "title": "Voice Settings" }, "overlaySettings": { "header": "Overlay Settings", "input": { "errorMsg": "Please enter a valid app title", "label": "App title" } }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Banned Users", "unban": "Unban", "noBans": "No one has been banned yet" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Leave Current Room", "confirmLeaveRoom": "Are you sure you want to leave?", "leave": "Leave", "inviteUsersToRoomBtn": "Invite Users to Room", "invite": "Invite", "toggleMuteMicBtn": "Toggle Mute", "toggleDeafMicBtn": "Toggle Deafen", "mute": "Mute", "unmute": "Unmute", "deafen": "Deafen", "undeafen": "Undeafen", "makeRoomPublicBtn": "Make Room Public!", "settings": "Settings", "speaker": "Speaker", "listener": "Listener", "chat": "Chat" }, "deviceNotSupported": { "notSupported": "Your device is currently not supported. You can create an", "linkText": "issue on GitHub", "addSupport": "and I will try adding support for your device." }, "followingOnline": { "people": "Kittehs", "online": "ONLINE", "noOnline": "u has no fwens", "showMore": "Show more" }, "inviteButton": { "invited": "Invited!", "inviteToRoom": "Invite to room" }, "micPermissionBanner": { "permissionDenied": "Permission denied trying to access your mic (you may need to go into browser settings and reload the page)", "dismiss": "Dismiss", "tryAgain": "Try Again" }, "keyboardShortcuts": { "setKeybind": "Set Keybind", "listening": "Listening...", "toggleMuteKeybind": "Toggle mute keybind", "toggleDeafKeybind": "Toggle deafen keybind", "toggleOverlayKeybind": "Toggle overlay keybind", "togglePushToTalkKeybind": "Toggle push-to-talk keybind" }, "userVolumeSlider": { "noAudioMessage": "No audio consumer for some reason" }, "upcomingRoomsCard": { "upcomingRooms": "Upcoming rooms", "exploreMoreRooms": "Explore more rooms" }, "addToCalendar": { "add": "Add to Calendar" }, "wsKilled": { "description": "WebSocket was killed by the server. This usually happens when you open the website in another tab.", "reconnect": "Reconnect" }, "search": { "placeholder": "Search for rooms, users or categories", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profile", "language": "Language", "reportABug": "Report A Bug", "useOldVersion": "Use Old Version", "logOut": { "button": "Log out", "modalSubtitle": "Are you sure you want to logout?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "modals": { "createRoomModal": { "subtitle": "Fill the following fields to start a new room", "public": "Public", "private": "Private", "roomName": "Room name", "roomDescription": "Room description", "descriptionError": "Max length 500", "nameError": "Must be between 2 to 60 characters long" }, "invitedToJoinRoomModal": { "newRoomCreated": "New Room Created", "roomInviteFrom": "Room Invite from", "justStarted": "They just started", "likeToJoin": ", would you like to join?", "inviteReceived": "you've been invited to" }, "editProfileModal": { "usernameTaken": "Username taken", "avatarUrlError": "Invalid image", "avatarUrlLabel": "Github/Twitter/Discord avatar URL", "bannerUrlLabel": "Twitter banner URL", "displayNameError": "Length 2 to 50 characters", "displayNameLabel": "Display Name", "usernameError": "Length 4 to 15 characters and only alphanumeric/underscore", "usernameLabel": "Username", "bioError": "Max length of 160 characters", "bioLabel": "Bio" }, "profileModal": { "blockUserConfirm": "Are you sure you want to block this user from joining any room you ever create?", "blockUser": "Block user", "makeMod": "Promote to Mod", "unmod": "Demote from Mod", "addAsSpeaker": "Add as Speaker", "moveToListener": "Move to Listener", "unBanFromChat": "Unban from Chat", "banFromChat": "Ban from Chat", "banFromRoom": "Ban from Room", "goBackToListener": "Go Back to Listener", "deleteMessage": "Delete this Message", "makeRoomCreator": "Promote to Admin", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "require permission to speak", "makePublic": "make room public", "makePrivate": "make room private", "renamePublic": "Set public room name", "renamePrivate": "Set private room name", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "feed": { "yourFeed": "Your feed" }, "scheduledRooms": { "title": "Scheduled Rooms", "noneFound": "none found", "allRooms": "all scheduled rooms", "myRooms": "my scheduled rooms", "scheduleRoomHeader": "Schedule Room", "startRoom": "start room", "tommorow": "TOMMOROW", "today": "TODAY", "modal": { "needsFuture": "needs to be in the future", "roomName": "room name", "roomDescription": "Description", "minLength": "min length 2" }, "deleteModal": { "areYouSure": "Are you sure you want to delete this scheduled room?" } }, "roomChat": { "title": "Chat", "emotesSoon": "[emotes soon]", "bannedAlert": "You have been banned from chat", "waitAlert": "You have to wait a second before sending another message", "search": "Search", "searchResults": "Search Results", "recent": "Frequently Used", "sendMessage": "Send a Message", "whisper": "Whisper", "welcomeMessage": "Welcome to chat!", "roomDescription": "Room description", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Fueling rocket", "takingOff": "Taking off", "inSpace": "In space", "approachingMoon": "Approaching moon", "lunarDoge": "Lunar Doge", "approachingSun": "Approaching sun", "solarDoge": "Solar Doge", "approachingGalaxy": "Approaching galaxy", "galacticDoge": "Galactic Doge", "spottedLife": "Planet with life spotted" } } } ================================================ FILE: kibbeh/public/locales/en-OWO/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "0w0 Woad Mowe UwU", "loading": "<3 Woading... ;-;", "noUsersFound": "<3 Nu usews found T_T", "ok": "okie UwU xD", "yes": "yes xD", "no": "no xD", "cancel": "Cancew <{^v^}>", "save": "0w0 Save (T w T)", "edit": "UwU Edit", "delete": "UnU Dewete", "joinRoom": "Join Woom ^_^", "copyLink": "Copy Wink :3", "copied": "Copied ^-^", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "<3 Pwease note ruwwing DwogeHouse without accessabiwity pewmissiowns may cause ewwows (・_・)", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DwogeHouse :3", "mutedTitle": "Muted | DwogeHouse xD", "deafenedTitle": "Deafened | DwogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": " Owigin Stowy ʕʘ‿ʘʔ", "link_2": "Discord o_o", "link_3": "Wepowt a Bug UwU (✿ ♡‿♡)" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "ban >:C", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason UwU", "usernamePlaceholder": "username to perform actions on >:)" }, "followingOnlineList": { "listHeader": "<3 Wist of usews that awe nwot in a pwivate woom and uu fowwow. :3", "currentRoom": "Cuwwentwy in:", "startPrivateRoom": "<3 Stawt a pwivate woom with them xD", "title": "Fuwwies (People)" }, "followList": { "followHim": "Follow >_<", "followingHim": "Following :O", "title": "Fuwwies (People)", "followingNone": "Not following anyone >⌓<", "noFollowers": "No followers >⌓<" }, "home": { "createRoom": "Cweate Woom (◕ω◕)", "refresh": " Wefwesh (◠‿◠✿)", "editRoom": "Edit Woom", "desktopAlert": "Downwoad the DwogeHouse desktop app today!" }, "inviteList": { "roomGone": "Woom gone, go back <{^v^}>", "shareRoomLink": "Shawe Wink to Woom (❁´◡`❁)", "inviteFollowers": "OwO You can invite yowr fowwowers that awe onwine:", "whenFollowersOnline": "UwU When yowr fowwowews awe onwine, they wiww show up hewe. ÙωÙ" }, "login": { "headerText": "OwO Taking voice convewsations to da moon 🚀 (• o •)", "featureText_1": "Darcc Theme (°ω° )", "featureText_2": "Open Sign-Ups, fwendo", "featureText_3": "OWO Cwoss-Pwatfowm Suppowt(^v^)", "featureText_4": "0w0 Open Souwce ÙωÙ", "featureText_5": "Text Chat <{^v^}>", "featureText_6": "Powewed by Dwoge (๑ᴖ◡ᴖ)", "loginGithub": "Log in with GitHub", "loginTwitter": "Log in with Twittew", "createTestUser": "Cweate Test Usew UwU", "loginDiscord": "Login with Discord" }, "myProfile": { "logout": "Logout", "probablyLoading": "Pwobabwy woading... (๑ᴖ◡ᴖ)", "voiceSettings": "<3 Go to Voice Settings ;-;", "soundSettings": "<3 Go to Sound Settings ;-;", "deleteAccount": "Dewete Account T_T", "overlaySettings": "Gow to Owerlay Settings (๑^_^๑)", "couldNotFindUser": "Sowwy, we could not find that user :(", "privacySettings": "Privacy settings ʕ·ᴥʔ" }, "notFound": { "whoopsError": "OWO Whoops! This page got wost in convewsation. (●´ω`●)", "goHomeMessage": "Not to wowwy. You can", "goHomeLinkText": "go home (・ω・`).." }, "room": { "speakers": "Speakews :O", "requestingToSpeak": "Wequesting to speak (╯﹏╰)", "listeners": "Wistenews (´・ω・`)", "allowAll": "Allow all (~_~)", "allowAllConfirm": "Are you sure? This will allow all {{count}} requesting users to speak (〃ω 〃)" }, "searchUser": { "search": "Seawch... >~<" }, "soundEffectSettings": { "header": "OwO Sounds :D", "title": "Sound Settings :O", "playSound": "Play Sound :O" }, "viewUser": { "editProfile": "Edit Pwofiwe (⁎˃ᆺ˂)", "followsYou": "Fowwows uu (๑•́ ₃ •̀๑)", "followers": "Fowwowews >_>", "following": "Fowwowing ( ͡° ᴥ ͡°)", "followHim": "Fowwow uwu", "followingHim": "Fowwowing <3", "copyProfileUrl": "Copy Pwofile URL", "urlCopied": "URL Cwopied to Cwipboard (❤´艸`❤)", "unfollow": "Unfowwow", "about": "Awout", "bot": "Bot └[・ಎ・]┘", "profileTabs": { "about": "Awout", "rooms": "Wooms", "scheduled": "Scheduwed", "recorded": "Recorwed", "clips": "Cwips", "admin": "Admin" }, "block": "Bwock", "unblock": "Unbwock", "sendDM": "Send DM <3", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "OwO Voice Settings (✿ ♡‿♡)", "mic": "Mic:", "permissionError": "Nu mics found, uu eithew has nwne pwugged in ow hasn't given this website pewmission. ;_;", "refresh": "Wefwesh mic wist (`へ´)", "volume": "Volume:", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "Invawid awpp title", "label": "Enter Awpp Title" }, "header": "Overlay Settings" }, "download": { "starting": "Starting downwoad...", "failed": "Could not auto-downwoad, pwease try again later", "visit_gh": "Visit Github Releases", "prompt": "Cwick on the button below to start downwoad", "download_now": "Downwoad Now", "download_for": "Downwoad for %platform% (%ext%)" }, "privacySettings": { "title": "Priwacy Settings", "header": "Priwacy Settings", "whispers": { "label": "Whispers", "on": "On :)", "off": "Off :(" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Bwanned Usews, fwendo", "unban": "Unbwan", "noBans": "No one has been bwanned yet (>_<)" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Weave cuwwent woom T_T", "confirmLeaveRoom": "Awe uu suwe uu want to weave? (๑•́ ₃ •̀๑)", "leave": "Weave", "inviteUsersToRoomBtn": "Inwite Usews to Woom :D", "invite": "Inwite", "toggleMuteMicBtn": "Toggwe Mute Micwophone ( '◟ ')", "mute": "Mute", "unmute": "Unmute", "makeRoomPublicBtn": "OwO Make Woom Pubwic! (❁´◡`❁)", "settings": "Settings ^_^", "speaker": "Speakew :D", "listener": "OwO Wistenew", "chat": "Chat :O", "toggleDeafMicBtn": "Twoggle Dweafen >_<", "deafen": "Dweafen", "undeafen": "Undweafen" }, "deviceNotSupported": { "notSupported": "HIIII XDD! Youw dewice is cuwwentwy nut suppowted. You can cweate an", "linkText": "issue on GitHub", "addSupport": "and I wiww twy adding suppowt fow uuw device. :D" }, "inviteButton": { "inwited": "Inwited!", "inwiteToRoom": "Inwite to Woom", "invited": "Invited!", "inviteToRoom": "Invite to room" }, "micPermissionBanner": { "permissionDenied": "Huohhhh. Pewmission denied twying to access uuw mic (uu may need to go into bwowsew settings and wewoad da page) (❁´◡`❁)", "dismiss": "Dismiss", "tryAgain": "Twy Again" }, "keyboardShortcuts": { "setKeybind": "Set Keybind", "listening": "OwO Liswening", "toggleMuteKeybind": "0w0 Toggwe Mute keybind (❁´◡`❁)", "togglePushToTalkKeybind": "Toggwe Pwush-to-Tawk keybind :D", "toggleOverlayKeybind": "Toggwe Owerlay keybind :3", "toggleDeafKeybind": "Toggwe dweafen keybind :3" }, "userVolumeSlider": { "noAudioMessage": "Nu audio consumew fow some weason D:" }, "addToCalendar": { "add": "Add to Cawendaw ^_^" }, "wsKilled": { "description": " WebSocket was kiwwed by da sewvew. This usuawwy happens when uu open da website in anuthew tab. ;3", "reconnect": "Weconnect (;ω;)" }, "modals": { "createRoomModal": { "public": "Pubwic", "private": "UwU Pwivate ^_^", "roomName": "Woom name ʕʘ‿ʘʔ", "roomDescription": "OwO Woom descwiption :D", "descriptionError": "Max wength 500 (●´ω`●)", "nameError": "Must be between 2 to 60 chawactews wong :3", "subtitle": "Fill the following fields to start a new room" }, "invitedToJoinRoomModal": { "newRoomCreated": "0w0 New Woom Cweated (●´ω`●)", "roomInviteFrom": "0w0 Woom Invite fwom :D", "justStarted": "0w0 They just stawted ^_^", "likeToJoin": ", wouwd uu wike to join? ^-^", "inviteReceived": "uu've been invited to" }, "editProfileModal": { "usernameTaken": "Usewname taken (人◕ω◕)", "avatarUrlError": "Invawid image (⁎˃ᆺ˂)", "avatarUrlLabel": "GitHub/Twittew avataw uww UwU", "displayNameError": "wength 2 to 50 chawactews ㅇㅅㅇ", "displayNameLabel": "<3 Dispway Name", "usernameError": "OwO wength 4 to 15 chawactews and onwy awphanumewic/undewscowe (இωஇ )", "usernameLabel": "UwU Usewname UwU", "bioError": "Max wength of 160 chawactews :D", "bioLabel": "Bio", "bannerUrlLabel": "Twittew banner URL" }, "profileModal": { "blockUserConfirm": "OwO Awe uu suwe uu want to bwock this usew fwom joining any woom uu evew cweate? ( '◟ ')", "blockUser": "Bwock Usew ʕʘ‿ʘʔ", "makeMod": "Make Mod ;)", "unmod": "Unmod", "addAsSpeaker": "UwU Add as Speakew (人◕ω◕)", "moveToListener": "Move to Wistenew ;3", "banFromChat": "_>", "makeRoomCreator": "Make Woom Admin", "unBanFromChat": "Unban from Chat", "banIPFromRoom": "Bwan IP from Room" }, "roomSettingsModal": { "requirePermission": "Wequiwe pewmission to speak <{^n^}>", "makePublic": "UwU Make Woom Pubwic (⁎˃ᆺ˂)", "makePrivate": "Make Woom Pwivate xD", "renamePublic": "Set Public Woom Name", "renamePrivate": "Set Pwivate Woom Name", "chatDisabled": "disable chat", "chatCooldown": "Chat Cwoldown (miwwiseconds)", "chat": { "label": "Chat", "enabled": "Enabwed", "disabled": "Disabwed", "followerOnly": "Fowwower Onwy" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "Fuwwies (People)", "online": "ONWINE", "noOnline": "You hv 0 fwends onwine wight now >_<", "showMore": "Show mowe" }, "upcomingRoomsCard": { "upcomingRooms": "Upcoming Wooms :D", "exploreMoreRooms": "Expwore Mowe Wooms :O" }, "search": { "placeholder": "Search for wooms, usews or categowies :O", "placeholderShort": "Seawch" }, "settingsDropdown": { "profile": "Pwofile", "language": "Language UwU", "reportABug": "Repowt A Bug", "useOldVersion": "Use Old Vewsion", "logOut": { "button": "Log out D:", "modalSubtitle": "Are you sure you want to logout?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Downwoad App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DwogeHouse Stwaff", "dhContributor": "DwogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show Mowe", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Intewationalization Stwings", "scheduledRooms": { "title": "Scheduwed Wooms (• o •)", "noneFound": "Noone fwound ;3", "allRooms": "<3 Aww Scheduwed Wooms <3", "myRooms": "My Scheduwed Wooms x3", "scheduleRoomHeader": "Scheduwe Woom >_<", "startRoom": "<3 Stawt Woom ;_;", "modal": { "needsFuture": "Nweeds to be in da futuwe (人◕ω◕)", "roomName": "Woom Name (◠‿◠✿)", "minLength": "<3 min wength 2 ^_^", "roomDescription": "Descwiption" }, "tommorow": "TOMMOWOW", "today": "TODAY", "deleteModal": { "areYouSure": "Awe you suwe you want to delete this scheduled woom? [._.]" } }, "roomChat": { "title": "Chat", "emotesSoon": "[emwotes soon ._.]", "bannedAlert": "You got bwanned fwom chat (๑•́ ₃ •̀๑)", "waitAlert": "You haz to wait a second befowe sending anuthew message ( ͡° ᴥ ͡°)", "search": "UwU Seawch (;ω;)", "searchResults": "<3 Seawch Wesuwts", "recent": "Fwequentwy Used :P", "sendMessage": "Send a Message xD", "whisper": "Whispew <{^v^}>", "welcomeMessage": "UwU Wewcome to chat! (✿ ♡‿♡)", "roomDescription": "Woom Descwiption(^v^)", "disabled": "woom chat has been disabwed", "messageDeletion": { "message": "message", "retracted": "retwacted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Fuewing rocket OwO", "takingOff": "Tawking off :O", "inSpace": "In space ʕʘ‿ʘʔ", "approachingMoon": "Appwoaching moon (❁´◡`❁)", "lunarDoge": "Lunar dwoge (;ω;)", "approachingSun": "Appwoaching sun >_<", "solarDoge": "Solar dwoge :3", "approachingGalaxy": "Appwoaching galaxy (◠‿◠)", "galacticDoge": "Galactic Dwoge", "spottedLife": "Pwanet with fuwwy life spotted (• o •)" }, "feed": { "yourFeed": "Your Feed" } } } ================================================ FILE: kibbeh/public/locales/en-PIGLATIN/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "oad-lay ore-may", "loading": "oading-lay...", "noUsersFound": "o-nay sers-uay ound-fay!", "ok": "Kay-ay", "yes": "Es-yay", "no": "o-nay", "cancel": "ancel-cay", "save": "ave-say", "edit": "dit-ay", "delete": "elete-day", "joinRoom": "oin-jay oom-ray", "copyLink": "opy-cay ink-lay", "copied": "opied-cay!", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "lease-pay ote-nay unning-ray oge-day huse-hay ithout-way ccessibility-ay ermissions-pay ay-may ause-cay nwanted-uay rrors-eay", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "oge-Day ouse-Hay", "dashboard": "ashboard-Day", "connectionTaken": "onnection-cay aken-tay", "mutedTitle": "uted-may | oge-day ouse-hay", "deafenedTitle": "eafened-day | oge-day ouse-hay" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Origin-way ory-stay", "link_2": "Iscord-day", "link_3": "Eport-ray a-way Ug-bay" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "an0bay", "userStaffandContrib": "er-usay aff-stay & ibutions-contray", "staff": "Aff-stay: ", "contributions": "ibutions-Contray", "username": "Ername-usay", "usrStaff": "er-usay aff-stay ", "usrContributions": "er-usay ibutions-Contray", "reason": "eason-ray", "usernamePlaceholder": "ername-usay o-tay erform-pay ions-actay n-oay" }, "download": { "prompt": "download-day he-tay doge-day ouse-hay esktop-day pp-ay", "download_for": "ownload-day or-fay %platform% (%ext%)", "failed": "nable-unay to detect platform, please try again later or visit GitHub Releases", "visit_gh": "isit-vay it-gay ub-hay leases-ray" }, "followingOnlineList": { "title": "Eople-pay", "listHeader": "Ist-lay f-oay ers-usay at-thay re-ay ot-nay n-iay a rivate-pay oom-ray and u-yoay low-folay.", "currentRoom": "Urrently-cay N-iay", "startPrivateRoom": "Art-stay a ivate-pray oom-ray ith-way em-thay" }, "followList": { "title": "Eople-pay", "followHim": "Ollow-fay", "followingHim": "Ollowing-fay", "followingNone": "Ot-nay ollowing-fay one-anyay", "noFollowers": "O-nay ollowers-fay" }, "home": { "createRoom": "Ew-nay oom-ray", "editRoom": "It-eday oom-ray", "refresh": "Efresh-ray", "desktopAlert": "Ownload-day he-thay oge-day ouse-hay esktop-day pp-ay oday-ay!" }, "inviteList": { "roomGone": "Room-ray one-gay; o-gay ack-bay", "shareRoomLink": "are-shay oom-ray ink-lay", "inviteFollowers": "U-uay an-cay vite-inay ur-yay ollowers-fay hat-thay re-ay line-onay:", "whenFollowersOnline": "Hen-way our-yay ollowers-fay re-ay line-onay, hey-tay ill-way how-say p-uay ere-hay." }, "login": { "headerText": "Aking-tay oice-vay onversations-cay o-tay he-tay oon-may 🐷 🚀", "featureText_1": "Ark-day heme-tay", "featureText_2": "Pen-oay ign-say-ps-uay", "featureText_3": "Ross-cay-Latform-pay Upport-say", "featureText_4": "Pen-ay ource-say", "featureText_5": "Ext-tay Hat-cay", "featureText_6": "owered-pay y-bay oge-day (e-way so-alay ave-hay ig-pay atin-lay)", "loginGithub": "Ogin-lay ith-way It-gay-Ub-hay", "loginTwitter": "Ogin-lay ith-way Witter-tay", "loginDiscord": "Ogin-lay ith-way Iscord-day", "createTestUser": "reate-cay est-tay er-usay" }, "myProfile": { "logout": "og-lay ut-oay", "probablyLoading": "robably-pay oading-lay...", "voiceSettings": "Oice-vay Ettings-say", "overlaySettings": "Erlay-ovay Ettings-say", "soundSettings": "Ound-say Ettings-say", "deleteAccount": "Elete-day ccount-ay", "couldNotFindUser": "Orry-say, e-way ould-cay ot-nay ind-fay hat-tay er-usay", "privacySettings": "Rivacy-pay Ettings-say" }, "notFound": { "whoopsError": "Hoops-way! his-tay age-ay ot-gay ost-lay n-iay onversation-cay.", "goHomeMessage": "Ot-nay o-tay orry-way. ou-yay an-cay", "goHomeLinkText": "o-gay ome-hay" }, "privacySettings": { "title": "Rivacy-pay Ettings-say", "header": "Rivacy-pay Ettings-say", "whispers": { "label": "Hispers-way", "on": "N-oay", "off": "FF-oay" } }, "room": { "speakers": "Peakers-say", "requestingToSpeak": "Equesting-ray o-tay Peak-say", "listeners": "Isteners-lay", "allowAll": "Llow-lay ll-ay", "allowAllConfirm": "Re-ay u-yay ure-say? His-tay ill-way low-alay l-alay {{count}} equesting-ray ers-usay o-tay eak-spay." }, "searchUser": { "search": "Earch-say..." }, "soundEffectSettings": { "title": "Ound-say Ettings-say", "header": "Ounds-say", "playSound": "Lay-pay Ound-say" }, "viewUser": { "editProfile": "Dit-eay Rofile-pay", "followsYou": "Ollows-fay uo-yay", "followers": "ollowers-fay", "following": "ollowing-fay", "followHim": "Ollow-fay", "unfollow": "follow-unay", "followingHim": "Ollowing-fay", "block": "Lock-bay", "unblock": "Block-unay", "sendDM": "End-say DM-ay", "copyProfileUrl": "Copy-cay rofile-pay URL-ay", "urlCopied": "URL-ay opied-cay o-tay lipboard-cay", "about": "Bout-ay", "aboutSuffix": "", "bot": "Ot-bay", "profileTabs": { "about": "Bout-ay", "rooms": "Ooms-ray", "scheduled": "Cheduled-say", "recorded": "Ecorded-ray", "clips": "Lips-cay", "admin": "Min-aday" }, "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "title": "Oice-vay Ettings-say", "header": "Oice-vay Ettings-say", "mic": "Ic-may:", "permissionError": "O-nay ics-may ound-fay, u-oay ither-eay ave-hay one-nay ugged-play n-iay r-oay aven't-hay iven-gay his-tay ebsite-way ermission-pay.", "refresh": "Efresh-ray ic-may ist-lay", "volume": "Olume-vay:" }, "overlaySettings": { "header": "Verlay-oay Ettings-say", "input": { "errorMsg": "Lease-pay ter-enay a lid-vay pp-ay itle-tay", "label": "Pp-ay itle-tay" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Anned-bay Ers-usay", "unban": "Ban-unay", "noBans": "O0nay ne-oay as-hay een-bay anned-bay et-yayt" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Eave-lay Urrent-lay Oom-ray", "confirmLeaveRoom": "E-ray ou-yay ure-say ou-yay ant-way o-tay eave-lay?", "leave": "Eave-lay", "inviteUsersToRoomBtn": "Vite-inay Ers-usay o-tay oom-ray", "invite": "Vite-inay", "toggleMuteMicBtn": "Oggle-tay Ute-may", "toggleDeafMicBtn": "Oggle-tay Eafen-day", "mute": "Ute-may", "unmute": "Mute-unay", "deafen": "Eafen-day", "undeafen": "Deafen-unay", "makeRoomPublicBtn": "Ake-may Oom-ray Ublic-pay!", "settings": "Ettings-say", "speaker": "Eaker-pay", "listener": "Istener-lay", "chat": "Hat-cay" }, "deviceNotSupported": { "notSupported": "Our-yay evice-day s-iay urrently-cay ot-nay upportedsay. ou-yay an-cay reate-cay n-ay", "linkText": "sue-say n-oay It-gay-Ub-hay", "addSupport": "d-anay I ill-way ry-tay ing-adday upport-say or-fay our-yay evice-day." }, "followingOnline": { "people": "Eople-pay", "online": "LINE-ONAY", "noOnline": "Ou-yay ave-hay 0 riends-fay line-onay ight-ray ow-nay", "showMore": "how-say ore-may" }, "inviteButton": { "invited": "Vited-inay!", "inviteToRoom": "Vite-inay o-tay oom-ray" }, "messagesDropdown": { "title": "Essages-may", "showMore": "How-say Ore-may", "noMessages": "O-nay ew-nay essages-may" }, "micPermissionBanner": { "permissionDenied": "Ermission-pay enied-day ying-tray o-tay ess-accay our-yay ic-may (ou-yay ay-may eed-nay o-tay o-gay to-inay rowser-bay ettings-say nd-ay eload-ray he-tay age-pay)", "dismiss": "Ismiss-day", "tryAgain": "Ry-tay Gain-ay" }, "keyboardShortcuts": { "setKeybind": "Et-say Ebind-kay", "listening": "Istening-lay...", "toggleMuteKeybind": "Oggle-tay utemay eybind-kay", "toggleDeafKeybind": "Oggle-tay eafen-day eybind-kay", "toggleOverlayKeybind": "Oggle-tay Verlay-oay eybind-kay", "togglePushToTalkKeybind": "Oggle-tay Ush-pay-O-tay-Alk-tay eybind-kay" }, "userVolumeSlider": { "noAudioMessage": "O-nay dio-auay onsumer-cay or-fay ome-say eason-ray" }, "upcomingRoomsCard": { "upcomingRooms": "Coming-upay Ooms-ray", "exploreMoreRooms": "Plore-exay ore-may ooms-ray" }, "addToCalendar": { "add": "D-aday o-tay Alendar-cay" }, "wsKilled": { "description": "Eb-wayOcket-say as-way illed-kay y-bay he-tay erver-say. His-tay Ally-usuay appens-hay hen-way ou-yay en-opay he-tay ebsite-way n-iay nother-ay ab-tay.", "reconnect": "Econnect-ray" }, "search": { "placeholder": "Earch-say or-fay ooms-ray, ers-usay or-ay ategories-cay", "placeholderShort": "Earch-say" }, "settingsDropdown": { "profile": "Rofile-pay", "language": "Anguage-lay", "reportABug": "Eport-ray A-ay ug-bay", "useOldVersion": "Use d-olay ersion-vay", "logOut": { "button": "Og-lay Ut-oay", "modalSubtitle": "Re-ay ou-yay ure-say ou-yay ant-way o-tay ogout-lay?" }, "debugAudio": { "debugAudio": "Ebug-day Audio", "stopDebugger": "Top-say Ebugger-day" }, "downloadApp": "Ownload-day Ap-pay", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "Oge-day-Ouse-hay Aff-stay", "dhContributor": "Oge-day-Ouse-hay Ributor-contray" }, "modals": { "createRoomModal": { "subtitle": "Ill-fay he-tay ollowing-fay ields-fay o-tay art-stay a-ay ew-nay oom-ray", "public": "Ublic-pay", "private": "Rivate-pay", "roomName": "Oom-ray ame-nay", "roomDescription": "Oom-ray escription-day", "descriptionError": "Ax-may Ength-lay 500", "nameError": "Ust-may e-bay etween-bay 2 o-tay 60 aracters-chay ong-lay" }, "invitedToJoinRoomModal": { "newRoomCreated": "Ew-nay Oom-ray Reated-cay", "roomInviteFrom": "Oom-ray Vite-inay Rom-fay", "justStarted": "Hey-tay ust-jay arted-stay", "likeToJoin": ", Ould-way ou-yay ike-lay o-tay oin-jay?", "inviteReceived": "Ou've-yay een-bay vited-inay o-tay" }, "editProfileModal": { "usernameTaken": "Ername-usay Aken-tay", "avatarUrlError": "Valid-inay age-imay", "avatarUrlLabel": "It-gay-Ub-hay/Witter-tay/Iscord-day atar-avay URL-ay", "bannerUrlLabel": "Witter-ay anner-bay URL-ay", "displayNameError": "Ength-lay 2 o-tay 50 aracters-chay", "displayNameLabel": "Isplay-day Ame-nay", "usernameError": "Length 4 to 15 characters and only alphanumeric/underscore", "usernameLabel": "Ername-usay", "bioError": "Ax-may ength-lay f-oay 160 aracters-chay", "bioLabel": "Io-bay" }, "profileModal": { "blockUserConfirm": "Re-ay ou-yay ure-say ou-yay ant-way o-tay lock-bay his-tay er-usay rom-fay oining-jay ny-ay oom-ray ou-yay ver-eay reate-cay?", "blockUser": "Lock-bay er-say", "makeMod": "Romote-ay o-tay od-may", "unmod": "Emote=day Rom-fay Od-may", "addAsSpeaker": "D-aday s-aay Eaker-spay", "moveToListener": "Ove-may o-tay Istener-lay", "unBanFromChat": "Ban-unay rom-fay Hat-cay", "banFromChat": "An-bay rom-fay Hat-cay", "banFromRoom": "An-bay rom-fay Oom-ray", "banIPFromRoom": "An-bay IP-ay Rom-fay Oom-ray", "goBackToListener": "O-gay Ack-bay o-tay Istener-lay", "deleteMessage": "Elete-day His-tay Essage-may", "makeRoomCreator": "Romote-pay o-tay Min-aday" }, "roomSettingsModal": { "requirePermission": "Equire-ray ermission-pay o-tay peak-say", "chatCooldown": "Hat-cay Ooldown-cay (illiseconds-may)", "chat": { "label": "Hat-cay", "enabled": "Abled-enay", "disabled": "Isabled-day", "followerOnly": "Ollower-fay Ly-on" }, "makePublic": "Ake-may oom-ray ublic-pay", "makePrivate": "ake-may oom-ray rivate-pay", "renamePublic": "Et-say ublic-pay oom-ray ame-nay", "renamePrivate": "Et-say rivate-pay oom-ray ame-nay" }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } } }, "modules": { "_comment": "Modules UI Internationalization Strings", "feed": { "yourFeed": "Our-yay eed-fay" }, "scheduledRooms": { "title": "Cheduled-say Ooms-ray", "noneFound": "One-nay Ound-fay", "allRooms": "All-ay Cheduled-say Ooms-ray", "myRooms": "Y-may Cheduled-say Ooms-ray", "scheduleRoomHeader": "Chedule-say Oom-ray", "startRoom": "art-stat oom-ray", "tommorow": "OMORROW-TAY", "today": "ODAY-TAY", "modal": { "needsFuture": "eeds-nay o-tay e-bay n-iay he-tay uture-fay", "roomName": "oom-ray ame-nay", "roomDescription": "Escription-day", "minLength": "in-may ength-lay 2" }, "deleteModal": { "areYouSure": "Re-ay ou-yay uresay ou-yay ant-way o-tay elete-day his-tay cheduled-say oom-ray?" } }, "roomChat": { "title": "Hat-cay", "emotesSoon": "[Otes-enay Oon-say]", "bannedAlert": "Ou-yay ave-hay een-bay anned-bay rom-fay hat-cay", "waitAlert": "Ou-yay ave-hay o-tay ait-way a-ay Econd-say Efore-bay ending-say nother-ay essage-may", "search": "Earch-say", "searchResults": "Earch-say Esults-ray", "recent": "Requently-fay Ed-usay", "sendMessage": "End-say a-ay Essage-may", "whisper": "Hisper-way", "welcomeMessage": "Elcome-way o-tay hat-cay!", "roomDescription": "Oom-ray Escription-day", "disabled": "Oom-ray hat-cay as-hay een-bay isabled-day", "messageDeletion": { "message": "Essage-may", "retracted": "Etracted-ray", "deleted": "Eleted-day" } }, "roomStatus": { "fuelingRocket": "Ueling-fay ocket-ray", "takingOff": "Aking-tay f-ofay", "inSpace": "n-iay pace-say", "approachingMoon": "Proaching-apay Oon-may", "lunarDoge": "Unar-lay Oge-day", "approachingSun": "Pproaching-apay Un-say", "solarDoge": "Olar-say Oge-day", "approachingGalaxy": "Pproaching-apay Alaxy-gay", "galacticDoge": "Alactic-gay Oge-day", "spottedLife": "Lanet-pay Ith-way Ife-lay Potted-say" } } } ================================================ FILE: kibbeh/public/locales/en-PIRATE/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "get some more", "loading": "loadin'", "noUsersFound": "no ones 'ere", "ok": "ok", "yes": "aye", "no": "nay", "cancel": "Abandon ship!", "save": "save", "edit": "edit", "delete": "Blow The Man Down!", "joinRoom": "join cabin", "copyLink": "copy link", "copied": "copied", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Please note running DogeHouse without accessibility permissions may cause unwanted errors", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Muted | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Origin Tale", "link_2": "Discord", "link_3": "Report a Bug" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "ban", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "List o' users that are nah in a private cabin 'n ye follow.", "currentRoom": "currently in:", "startPrivateRoom": "start a private cabin wit' 'em", "title": "People" }, "followList": { "followHim": "follow", "followingHim": "following", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Create Cabin", "refresh": "Refresh", "editRoom": "Edit Room", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "cabin gone, go back", "shareRoomLink": "share link t' cabin", "inviteFollowers": "Ye can invite yer mateys that are online:", "whenFollowersOnline": "When yer scallywags are online, they will show up here." }, "login": { "headerText": "Takin' voice natters t' the open sea 🌊", "featureText_1": "Dark Theme", "featureText_2": "Open Sign-Ups", "featureText_3": "Cross-Platform Support", "featureText_4": "Open Source", "featureText_5": "Text Chat", "featureText_6": "Powered by Doge", "loginGithub": "Set Sail wit' with GitHub", "loginTwitter": "Set Sail wit' Twitter", "createTestUser": "Set Sail wit' a Test User", "loginDiscord": "Login with Discord" }, "myProfile": { "logout": "Walk the plank!", "probablyLoading": "prolly loadin'...", "voiceSettings": "go t' voice settings", "soundSettings": "go t' sound settings", "deleteAccount": "Cleave Him to the Brisket!", "overlaySettings": "go t' overlay settings", "couldNotFindUser": "Sorry, we could not find that user", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "Blast ye! This page got lost in natter.", "goHomeMessage": "Nah t' worry. Ye can", "goHomeLinkText": "Davy Jones' Locker" }, "room": { "speakers": "Crew", "requestingToSpeak": "Requestin' t' speak", "listeners": "Shipmates", "allowAll": "Allow all", "allowAllConfirm": "Ye sure? Ye will allow all {{count}} skallywags to speak!" }, "searchUser": { "search": "searchin' fer booty..." }, "soundEffectSettings": { "header": "Sounds", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "avast ye profile", "followsYou": "follows you", "followers": "scallywags", "following": "hearties", "followHim": "follow", "followingHim": "following", "copyProfileUrl": "Copy profile url", "urlCopied": "URL copied to clipboard", "unfollow": "Unfollow", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Voice Settings", "mic": "mic:", "permissionError": "no mics found, ye either 'ave none plugged in or haven't given this website permission.", "refresh": "refresh mic list", "volume": "volume:", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "Invalid app title", "label": "Enter App Title" }, "header": "Overlay Settings" }, "download": { "starting": "Starting download...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "Click on the button below to start download", "download_now": "Download Now", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "People who 'ave walked eh plank", "unban": "save 'em from the o'en seas", "noBans": "no one has walked the plank yet" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Weigh anchor", "confirmLeaveRoom": "Are ye sure ye wants t' weigh anchor?", "leave": "Weigh anchor", "inviteUsersToRoomBtn": "Invite scallywags t' cabin", "invite": "Invite scallywags", "toggleMuteMicBtn": "Toggle mute microphone", "mute": "Belay yer mouth!", "unmute": "Unmute", "makeRoomPublicBtn": "Make cabin a'ilable to eh o'en seas!", "settings": "Settings", "speaker": "Captain", "listener": "Listener", "chat": "Chat", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "Yer device be currently nah supported. Ye can create an", "linkText": "issue on GitHub", "addSupport": "'n I will try addin' support fer yer device." }, "inviteButton": { "invited": "invited", "inviteToRoom": "invite t' cabin" }, "micPermissionBanner": { "permissionDenied": "Permission denied trying t' access yer mic (ye may needs t' go into browser settings 'n reload the page)", "dismiss": "dismiss", "tryAgain": "try again" }, "keyboardShortcuts": { "setKeybind": "set keybind", "listening": "listening", "toggleMuteKeybind": "toggle mute keybind", "togglePushToTalkKeybind": "toggle push-t'-natter keybind", "toggleOverlayKeybind": "toggle overlay keybind", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "no audio consumer fer some reason" }, "addToCalendar": { "add": "Add t' Calendar" }, "wsKilled": { "description": "WebSocket was scuttled by the server. This usually happens when ye open the website in another tab.", "reconnect": "reconnect" }, "modals": { "createRoomModal": { "public": "public", "private": "private", "roomName": "cabin name", "roomDescription": "cabin description", "descriptionError": "max length 500", "nameError": "must be between 2 t' 60 characters long", "subtitle": "Fill the following fields to start a new room" }, "invitedToJoinRoomModal": { "newRoomCreated": "New Cabin Created", "roomInviteFrom": "Cabin Invite from", "justStarted": "They jus' started", "likeToJoin": ", would ye like t' join?", "inviteReceived": "ye've been invited t'" }, "editProfileModal": { "usernameTaken": "username taken", "avatarUrlError": "Invalid image", "avatarUrlLabel": "Github/Twitter/Discord avatar url", "displayNameError": "length 2 t' 50 characters", "displayNameLabel": "Display Name", "usernameError": "length 4 t' 15 characters 'n only alphanumeric/underscore", "usernameLabel": "Username", "bioError": "max length o' 160 characters", "bioLabel": "Bio", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "Are ye sure ye wants t' block this user from joinin' any cabin ye ever create?", "blockUser": "Block User", "makeMod": "Make Mod", "unmod": "Unmod", "addAsSpeaker": "Add to crew", "moveToListener": "move t' shipmate", "banFromChat": "Ban from chat", "banFromRoom": "Ban from cabin", "goBackToListener": "Go back t' shipmate", "deleteMessage": "Scuttle this message", "makeRoomCreator": "Make cabin cap'n", "unBanFromChat": "Unban from Chat", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "Require permission t' speak", "makePublic": "Make Cabin Public", "makePrivate": "Make Cabin Private", "renamePublic": "Set Public Cabin Name", "renamePrivate": "Set Private Cabin Name", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "People", "online": "ONLINE", "noOnline": "You have 0 friends online right now", "showMore": "Show more" }, "upcomingRoomsCard": { "upcomingRooms": "Upcoming rooms", "exploreMoreRooms": "Explore More Rooms" }, "search": { "placeholder": "Search for rooms, users or categories", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profile", "language": "Language", "reportABug": "Report A Bug", "useOldVersion": "Use Old Version", "logOut": { "button": "Log out", "modalSubtitle": "Are you sure you want to logout?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Scheduled Cabins", "noneFound": "none found", "allRooms": "all scheduled cabins", "myRooms": "me scheduled cabins", "scheduleRoomHeader": "Schedule Cabin", "startRoom": "start cabin", "modal": { "needsFuture": "needs t' be in the future", "roomName": "cabin name", "minLength": "min length 2", "roomDescription": "Description" }, "tommorow": "TOMMOROW", "today": "TODAY", "deleteModal": { "areYouSure": "Are you sure you want to delete this scheduled room?" } }, "roomChat": { "title": "Chat", "emotesSoon": "[emotes soon]", "bannedAlert": "Ye got banned from chat, walk the plank!", "waitAlert": "Ye 'ave t' wait a second afore sendin' another message", "search": "Search", "searchResults": "Search Results", "recent": "Frequently Used", "sendMessage": "Send a Message in a bottle", "whisper": "Whisper", "welcomeMessage": "Ahoy t' chat!", "roomDescription": "cabin description", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Fuelin' rocket", "takingOff": "Takin' off", "inSpace": "In space", "approachingMoon": "Approachin' moon", "lunarDoge": "Lunar doge", "approachingSun": "Approachin' sun", "solarDoge": "Solar doge", "approachingGalaxy": "Approachin' galaxy", "galacticDoge": "Galactic doge been spotted", "spottedLife": "Planet wit' life spotted" }, "feed": { "yourFeed": "Your Feed" } } } ================================================ FILE: kibbeh/public/locales/eo/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "ŝarĝi pli", "loading": "ŝarĝante...", "noUsersFound": "neniuj uzantoj trovis", "ok": "bone", "yes": "jes", "no": "ne", "cancel": "nuligi", "save": "savi", "edit": "redakti", "delete": "forigi", "joinRoom": "aliĝi al ĉambro", "copyLink": "kopiu ligon", "copied": "kopiita", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Please note running DogeHouse without accessibility permissions may cause unwanted errors", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Silentigita | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Origina Rakonto", "link_2": "Discord", "link_3": "Raporti Cimon" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "malpermeso", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Listo de uzantoj, kiuj ne estas en privata ĉambro kaj kiun vi sekvas.", "currentRoom": "nuntempe en:", "startPrivateRoom": "komencu privatan ĉambron kun ili", "title": "People" }, "followList": { "followHim": "follow", "followingHim": "following", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Kreu Ĉambron", "refresh": "Refreŝigu", "editRoom": "Edit Room", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "ĉambro for, reiru", "shareRoomLink": "dividi ligon al ĉambro", "inviteFollowers": "Vi povas inviti viajn sekvantojn interrete:", "whenFollowersOnline": "Kiam viaj anoj estos interrete, ili aperos ĉi tie." }, "login": { "headerText": "Prenante voĉajn konversaciojn al la luno 🚀", "featureText_1": "Malhela Temo", "featureText_2": "Malfermu Registriĝojn", "featureText_3": "Transsistema Subteno", "featureText_4": "Malferma fonto", "featureText_5": "Teksta Babilejo", "featureText_6": "Funkciigita de Doge", "loginGithub": "ensaluti per GitHub", "loginTwitter": "ensaluti per Twitter", "createTestUser": "krei testuzanton", "loginDiscord": "Login with Discord" }, "myProfile": { "logout": "elsaluti", "probablyLoading": "probable ŝarĝante ...", "voiceSettings": "iri al voĉaj agordoj", "soundSettings": "iru al sonaj agordoj", "deleteAccount": "forigi konton", "overlaySettings": "go to overlay settings", "couldNotFindUser": "Sorry, we could not find that user", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "Ho ve! Ĉi tiu paĝo perdiĝis en konversacio", "goHomeMessage": "Ne zorgu. Vi povas", "goHomeLinkText": "hejmeniri" }, "room": { "speakers": "Parolantoj", "requestingToSpeak": "Petante paroli", "listeners": "Aŭskultantoj", "allowAll": "Allow all", "allowAllConfirm": "Are you sure? This will allow all {{count}} requesting users to speak" }, "searchUser": { "search": "serĉi..." }, "soundEffectSettings": { "header": "Sonoj", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "redakti profilon", "followsYou": "sekvas vin", "followers": "sekvantoj", "following": "sekvante", "followHim": "follow", "followingHim": "following", "copyProfileUrl": "copy profile url", "urlCopied": "URL copied to clipboard", "unfollow": "Unfollow", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Voĉaj Agordoj", "mic": "mikrofono:", "permissionError": "neniuj mikrofonoj trovitaj, vi aŭ havas neniujn enŝovitajn aŭ ne donis permeson al ĉi tiu retejo.", "refresh": "refreŝigi mikrofonan liston", "volume": "volumo:", "title": "Voice Settings" }, "overlaySettings": { "header": "Overlay Settings", "input": { "errorMsg": "Please enter valid app title", "label": "Enter app title" } }, "download": { "starting": "Starting download...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "Click on the button below to start download", "download_now": "Download Now", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Malpermesitaj Uzantoj", "unban": "malpermesi", "noBans": "neniu estis malpermesita ankoraŭ" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Forlasu nunan ĉambron", "confirmLeaveRoom": "Ĉu vi certas, ke vi volas foriri?", "leave": "Foriru", "inviteUsersToRoomBtn": "Invitu uzantojn al ĉambro", "invite": "Inviti", "toggleMuteMicBtn": "Ŝalti mutan mikrofonon", "mute": "Mutulo", "unmute": "Malmuta", "makeRoomPublicBtn": "Publikigu ĉambron!", "settings": "Agordoj", "speaker": "Parolanto", "listener": "Aŭskultanto", "chat": "Babili", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "Via aparato nuntempe ne estas subtenata. Vi povas krei", "linkText": "numero ĉe GitHub", "addSupport": "kaj mi provos aldoni subtenon por via aparato." }, "inviteButton": { "invited": "invitita", "inviteToRoom": "inviti al ĉambro" }, "micPermissionBanner": { "permissionDenied": "Permeso rifuzita provi aliri vian mikrofonon (eble vi bezonos eniri en retumilajn agordojn kaj reŝargi la paĝon)", "dismiss": "eksigi", "tryAgain": "provu denove" }, "keyboardShortcuts": { "setKeybind": "agordi klavokombinon", "listening": "aŭskultanta", "toggleMuteKeybind": "baskuli mutan klavaron", "togglePushToTalkKeybind": "ŝalti puŝ-al-parolan klavaron", "toggleOverlayKeybind": "toggle overlay keybind", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "neniu audio-konsumanto ial" }, "addToCalendar": { "add": "Aldoni al Kalendaro" }, "wsKilled": { "description": "WebSocket estis mortigita de la servilo. Ĉi tio kutime okazas kiam vi malfermas la retejon en alia langeto.", "reconnect": "rekonekti" }, "modals": { "createRoomModal": { "public": "publika", "private": "privata", "roomName": "ĉambronomo", "roomDescription": "ĉambra priskribo", "descriptionError": "maksimuma longo 500", "nameError": "devas havi inter 2 kaj 60 signojn", "subtitle": "Fill the following fields to start a new room" }, "invitedToJoinRoomModal": { "newRoomCreated": "Nova Ĉambro Kreita", "roomInviteFrom": "Ĉambro Invitu de", "justStarted": "Ili ĵus komencis", "likeToJoin": ", ĉu vi ŝatus aliĝi?", "inviteReceived": "vi estis invitita" }, "editProfileModal": { "usernameTaken": "Uzantnomo estis prenita", "avatarUrlError": "Nevalida bildo", "avatarUrlLabel": "URL de Github/Twitter/Discord avataro", "displayNameError": "longo 2 ĝis 50 signoj", "displayNameLabel": "Vidiga Nomo", "usernameError": "longo 4 ĝis 15 signoj kaj nur alfanombra/substreko", "usernameLabel": "Uzantnomo", "bioError": "maksimuma longo de 160 signoj", "bioLabel": "Biografio", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "Ĉu vi certas, ke vi volas malhelpi ĉi tiun uzanton aliĝi al iu ajn ĉambro, kiun vi iam kreis?", "blockUser": "bloki uzanton", "makeMod": "fari moderanton", "unmod": "forigu moderatoron", "addAsSpeaker": "aldonu kiel parolanto", "moveToListener": "transloĝiĝu al aŭskultanto", "banFromChat": "malpermesi babili", "banFromRoom": "malpermeso de ĉambro", "goBackToListener": "reiru al aŭskultanto", "deleteMessage": "forigu ĉi tiun mesaĝon", "makeRoomCreator": "fari ĉambron administranto", "unBanFromChat": "Unban from Chat", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "postulas permeson paroli", "makePublic": "publikigi ĉambron", "makePrivate": "privatigi ĉambron", "renamePublic": "Set public room name", "renamePrivate": "Set private room name", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "People", "online": "ONLINE", "noOnline": "You have 0 friends online right now", "showMore": "Show more" }, "upcomingRoomsCard": { "upcomingRooms": "Upcoming rooms", "exploreMoreRooms": "Explore More Rooms" }, "search": { "placeholder": "Search for rooms, users or categories", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profile", "language": "Language", "reportABug": "Report A Bug", "useOldVersion": "Use Old Version", "logOut": { "button": "Log out", "modalSubtitle": "Are you sure you want to logout?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Planitaj Ĉambroj", "noneFound": "neniu trovis", "allRooms": "ĉiuj planitaj ĉambroj", "myRooms": "miaj planitaj ĉambroj", "scheduleRoomHeader": "Planu Ĉambron", "startRoom": "komencu ĉambron", "modal": { "needsFuture": "bezonas esti en la estonteco", "roomName": "ĉambronomo", "roomDescription": "Priskribo", "minLength": "minimuma longo 2" }, "tommorow": "TOMMOROW", "today": "TODAY", "deleteModal": { "areYouSure": "Are you sure you want to delete this scheduled room?" } }, "roomChat": { "title": "Babili", "emotesSoon": "[emotes baldaŭ]", "bannedAlert": "Vi malpermesis babili", "waitAlert": "Vi devas atendi sekundon antaŭ sendi alian mesaĝon", "search": "Serĉu", "searchResults": "Serĉrezultoj", "recent": "Ofte Uzata", "sendMessage": "Sendu Mesaĝon", "whisper": "Flustro", "welcomeMessage": "Bonvenon babili!", "roomDescription": "ĉambra priskribo", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Brulaĵo raketo", "takingOff": "Ekflugante", "inSpace": "En la spaco", "approachingMoon": "Alproksimiĝanta luno", "lunarDoge": "Luna doge", "approachingSun": "Alproksimiĝanta suno", "solarDoge": "Suna doge", "approachingGalaxy": "Alproksimiĝanta galaksio", "galacticDoge": "Galaksia Doge", "spottedLife": "Planedo kun vivo ekvidita" }, "feed": { "yourFeed": "Your Feed" } } } ================================================ FILE: kibbeh/public/locales/es/translation.json ================================================ { "common": { "loadMore": "Cargar más", "loading": "Cargando...", "noUsersFound": "No se han encontrado usuarios", "ok": "Ok", "yes": "Si", "no": "No", "cancel": "Cancelar", "save": "Guardar", "edit": "Editar", "delete": "Eliminar", "joinRoom": "Unirse a la sala", "copyLink": "Copiar enlace", "copied": "¡Copiado!", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Por favor, ten en cuenta que ejecutar DogeHouse sin permisos podría causar errores no deseados", "copy": "Copiar", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Silenciado | DogeHouse", "deafenedTitle": "Ensordecido | DogeHouse", "dashboard": "Panel de control", "connectionTaken": "Conexión ocupada" }, "footer": { "link_1": "Historia de origen", "link_2": "Discord", "link_3": "Reportar un error" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "Banear", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Nombre de usuario", "usrStaff": "Usuario Staff", "usrContributions": "Contribuciones de Usuario", "reason": "motivo", "usernamePlaceholder": "nombre de usuario en el que operar" }, "followingOnlineList": { "listHeader": "Lista de usuarios que sigues y que no se encuentran en una sala privada.", "currentRoom": "Actualmente en la sala:", "startPrivateRoom": "Empezar una sala privada con ellos", "title": "Personas" }, "followList": { "followHim": "Seguir", "followingHim": "Siguiendo", "title": "Persona", "followingNone": "No estás siguiendo a nadie", "noFollowers": "No hay seguidores" }, "home": { "createRoom": "Crear sala", "editRoom": "Editar sala", "refresh": "Recargar", "desktopAlert": "¡Descarga la aplicación de escritorio de DogeHouse!" }, "inviteList": { "roomGone": "Sala no disponible, volver atrás", "shareRoomLink": "Compartir el enlace de la sala", "inviteFollowers": "Puedes invitar a tus seguidores que están en línea:", "whenFollowersOnline": "Cuando tus seguidores estén en línea se mostrarán aquí." }, "login": { "headerText": "Llevando conversaciones de voz a la luna 🚀", "featureText_1": "Modo oscuro", "featureText_2": "Registro abierto", "featureText_3": "Soporte multiplataforma", "featureText_4": "Código abierto", "featureText_5": "Chat de texto", "featureText_6": "Desarrollado por Doge", "loginGithub": "Iniciar sesión con GitHub", "loginTwitter": "Iniciar sesión con Twitter", "loginDiscord": "Iniciar sesión con Discord", "createTestUser": "Crear usuario de prueba" }, "myProfile": { "logout": "Cerrar sesión", "probablyLoading": "Cargando (probablemente)...", "voiceSettings": "Ir a los ajustes de voz", "overlaySettings": "Ir a los ajustes del overlay", "soundSettings": "Ir a los ajustes de sonido", "deleteAccount": "Eliminar cuenta", "couldNotFindUser": "Lo siento, no pudimos encontrar ese usuario", "privacySettings": "Ir a los ajustes de privacidad" }, "notFound": { "whoopsError": "¡Ups! Esta página parece que se ha perdido.", "goHomeMessage": "No te preocupes. Puedes ir al", "goHomeLinkText": "Inicio" }, "room": { "speakers": "Hablantes", "requestingToSpeak": "Queriendo hablar", "listeners": "Oyentes", "allowAll": "Permitir todos", "allowAllConfirm": "¿Estás seguro? Esto dejará hablar a los {{count}} usuarios que quieren hablar" }, "searchUser": { "search": "Buscar..." }, "soundEffectSettings": { "header": "Sonidos", "title": "Ajustes de sonido", "playSound": "Reproducir sonido" }, "viewUser": { "editProfile": "Editar perfil", "followsYou": "Te sigue", "followers": "Seguidores", "following": "Siguiendo", "followHim": "Seguir", "unfollow": "Dejar de seguir", "followingHim": "Siguiendo", "copyProfileUrl": "Copiar URL del perfil", "urlCopied": "URL copiado en el portapapeles", "about": "Acerca de", "bot": "Bot", "profileTabs": { "about": "Acerca de", "rooms": "Salas", "scheduled": "Programado", "recorded": "Grabado", "clips": "Clips", "admin": "Admin" }, "block": "Bloquear", "unblock": "Desbloquear", "sendDM": "Enviar PM", "aboutSuffix": "", "errors": { "blocked": "Este usuario te ha bloqueado", "default": "¡Ups! No se ha podido cargar este perfil" } }, "voiceSettings": { "header": "Ajustes de voz", "mic": "Micrófono:", "permissionError": "No se encontraron micrófonos; puede que no esté conectado o no hayas otorgado los permisos correctos.", "refresh": "Recargar la lista de micrófonos", "volume": "Volúmen:", "title": "Configuración de voz" }, "overlaySettings": { "header": "Opciones del overlay", "input": { "errorMsg": "Ese nombre de aplicación no es válido", "label": "Introduce el nombre de la aplicación" } }, "download": { "starting": "Comenzando a descargar...", "failed": "No se pudo descargar automáticamente. Vuelve a intentarlo más tarde.", "visit_gh": "Visitar Github Releases", "prompt": "Haz clic en el botón de abajo para iniciar la descarga", "download_now": "Descargar ahora", "download_for": "Descargar para %platform% (%ext%)" }, "privacySettings": { "title": "Configuración de privacidad", "header": "Configuración de privacidad", "whispers": { "label": "Susurros", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Tus Bots", "bots": "Bots", "title": "Información de bot", "apiKey": "ApiKey", "regenerate": "Regenerar", "reveal": "Click aquí para mostrar tu API Key" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Usuarios baneados", "unban": "Desbanear", "noBans": "Nadie ha sido baneado todavía" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Abandonar la sala actual", "confirmLeaveRoom": "¿Estás seguro de que quieres abandonar la sala?", "leave": "Abandonar", "inviteUsersToRoomBtn": "Invitar usuarios a la sala", "invite": "Invitar", "toggleMuteMicBtn": "Alternar silenciar micrófono", "mute": "Desactivar micrófono", "unmute": "Activar micrófono", "makeRoomPublicBtn": "Hacer la sala pública", "settings": "Ajustes", "speaker": "Hablante", "listener": "Oyente", "chat": "Chat", "toggleDeafMicBtn": "Alternar ensordecimiento", "deafen": "Ensordecer", "undeafen": "Desactivar ensordecimiento" }, "deviceNotSupported": { "notSupported": "Actualmente tu dispositivo no es compatible. Puedes crear un", "linkText": "issue en GitHub", "addSupport": "e intentaremos agregar soporte para tu dispositivo." }, "followingOnline": { "people": "Personas", "online": "EN LÍNEA", "noOnline": "Ninguno de tus amigos en línea", "showMore": "Mostrar más" }, "inviteButton": { "invited": "¡Invitado!", "inviteToRoom": "Invitar a la sala" }, "micPermissionBanner": { "permissionDenied": "Permiso denegado al intentar acceder a tu micrófono (es posible que tengas que acceder a la configuración del navegador y recargar la página)", "dismiss": "Descartar", "tryAgain": "Intentar de nuevo" }, "keyboardShortcuts": { "setKeybind": "Configurar combinación de teclas", "listening": "Escuchando", "toggleMuteKeybind": "Combinación de teclas para apagar/encender tu micrófono", "toggleOverlayKeybind": "Combinación de teclas para alternar el overlay", "togglePushToTalkKeybind": "Combinación de teclas para activar/desactivar tocar-para-hablar", "toggleDeafKeybind": "Alternar combinación de teclas para ensordecer" }, "userVolumeSlider": { "noAudioMessage": "Por alguna razón no hay ningún consumidor de audio" }, "upcomingRoomsCard": { "upcomingRooms": "Próximas salas", "exploreMoreRooms": "Explorar nuevas salas" }, "addToCalendar": { "add": "Añadir al calendario" }, "wsKilled": { "description": "El Websocket fue eliminado por el servidor. Esto suele suceder cuando abres el sitio web en otra pestaña.", "reconnect": "Reconectar" }, "search": { "placeholder": "Buscar salas, usuarios o categorías", "placeholderShort": "Buscar" }, "settingsDropdown": { "profile": "Perfil", "language": "Idioma", "reportABug": "Reportar un problema", "useOldVersion": "Usar versión antigua", "logOut": { "button": "Cerrar sesión", "modalSubtitle": "¿Estás seguro de que quieres cerrar sesión?" }, "debugAudio": { "debugAudio": "Depurar audio", "stopDebugger": "Detener depurador" }, "downloadApp": "Descargar App", "developer": "Developer Settings" }, "modals": { "createRoomModal": { "subtitle": "Completa este formulario para crear una nueva sala", "public": "Pública", "private": "Privada", "roomName": "Nombre de la sala", "roomDescription": "Descripción de la sala", "descriptionError": "Longitud máxima de 500 caracteres", "nameError": "Debe contener entre 2 y 60 caracteres" }, "invitedToJoinRoomModal": { "newRoomCreated": "Nueva sala creada", "roomInviteFrom": "Invitación a la sala de", "justStarted": "Acaban de comenzar", "likeToJoin": ", ¿Te gustaría unirte?", "inviteReceived": "Has sido invitado a" }, "editProfileModal": { "usernameTaken": "Nombre de usuario ya ocupado", "avatarUrlError": "Imagen inválida", "avatarUrlLabel": "URL del avatar de Github/Twitter/Discord", "displayNameError": "Longitud de 2 a 50 caracteres", "displayNameLabel": "Nombre a mostrar", "usernameError": "Longitud de 4 a 15 caracteres y solo puede contener caracteres alfanuméricos/guión bajo", "usernameLabel": "Nombre de usuario", "bioError": "Longitud máxima de 160 caracteres", "bioLabel": "Biografía", "bannerUrlLabel": "URL del banner de Twitter" }, "profileModal": { "blockUserConfirm": "¿Estás seguro de que quieres bloquear a este usuario para que no pueda unirse a las salas que crees?", "blockUser": "Bloquear usuario", "makeMod": "Convertir en moderador", "unmod": "Quitar moderador", "addAsSpeaker": "Añadir como hablante", "moveToListener": "Mover a oyente", "unBanFromChat": "Desbanear del chat", "banFromChat": "Banear del chat", "banFromRoom": "Banear de la sala", "goBackToListener": "Volver a ser oyente", "deleteMessage": "Eliminar mensaje", "makeRoomCreator": "Hacer administrador de la sala", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "Solicitar permiso para hablar", "makePublic": "Hacer la sala pública", "makePrivate": "Hacer la sala privada", "renamePublic": "Configurar el nombre de la sala pública", "renamePrivate": "Configurar el nombre de la sala privada", "chatDisabled": "Deshabilitar chat", "chatCooldown": "Chat Cooldown (milisegundos)", "chat": { "label": "Chat", "enabled": "Habilitado", "disabled": "Deshabilitado", "followerOnly": "Solo seguidores" } }, "createBotModal": { "usernameTaken": "Ese nombre de usuario ya esta siendo usado", "subtitle": "Rellena los datos para crear tu bot", "title": "Crear Bot" } }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Mensajes", "showMore": "Mostrar más", "noMessages": "No hay más mensajes" } }, "modules": { "feed": { "yourFeed": "Tu inicio" }, "scheduledRooms": { "title": "Salas programadas", "noneFound": "No se ha encontrado ninguna", "allRooms": "Todas las salas programadas", "myRooms": "Mis salas programadas", "scheduleRoomHeader": "Programar una sala", "startRoom": "Iniciar una sala", "modal": { "needsFuture": "Debe estar en el futuro", "roomName": "Nombre de la sala", "roomDescription": "Descripción", "minLength": "La longitud mínima es de 2 caracteres" }, "tommorow": "MAÑANA", "today": "HOY", "deleteModal": { "areYouSure": "¿Estás seguro de que quieres eliminar esta sala programada?" } }, "roomChat": { "title": "Chat", "emotesSoon": "[emotes pronto]", "bannedAlert": "Fuiste baneado del chat", "waitAlert": "Tienes que esperar un segundo antes de enviar otro mensaje.", "search": "Buscar", "searchResults": "Resultados de la búsqueda", "recent": "Usados frecuentemente", "sendMessage": "Enviar un mensaje", "whisper": "Susurrar", "welcomeMessage": "¡Bienvenido al chat!", "roomDescription": "Descripción de la sala", "disabled": "El chat ha sido deshabilitado", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Llenando el cohete de combustible", "takingOff": "Despegando", "inSpace": "En el espacio", "approachingMoon": "Acercándose a la luna", "lunarDoge": "Doge lunar", "approachingSun": "Acercándose al sol", "solarDoge": "Doge solar", "approachingGalaxy": "Acercándose a la galaxia", "galacticDoge": "Doge galáctico", "spottedLife": "Vida descubierta en el planeta" } } } ================================================ FILE: kibbeh/public/locales/et/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "laadi rohkem", "loading": "laadib...", "noUsersFound": "ühtegi kasutajat ei leitud", "ok": "ok", "yes": "jah", "no": "ei", "cancel": "tühista", "save": "salvesta", "edit": "muuda", "delete": "kustuta", "joinRoom": "liitu ruumiga", "copyLink": "kopeeri link", "copied": "kopeeritud", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Pange tähele, et DogeHouse'i käitamine ilma juurdepääsulubadeta võib põhjustada soovimatuid vigu", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Vaigistatud | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Ajalugu", "link_2": "Discord", "link_3": "Teata veast" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "bänni", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Kasutajad, keda jälgid ja kes ei ole privaatses ruumis", "currentRoom": "praegu sees:", "startPrivateRoom": "loo nendega privaatne ruum", "title": "People" }, "followList": { "followHim": "jälgi", "followingHim": "jälgid", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Loo ruum", "refresh": "Värskenda", "editRoom": "Edit Room", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "ruum läinud, mine tagasi", "shareRoomLink": "jaga link ruumi", "inviteFollowers": "Saad kutsuda oma jälgijaid, kes on hetkel aktiivsed:", "whenFollowersOnline": "Teie aktiivsed jälgijad ilmuvad siia" }, "login": { "headerText": "Viime häälevestlused kuule 🚀", "featureText_1": "Tume teema", "featureText_2": "Avatud registreerimised", "featureText_3": "Platvormidevaheline toetus", "featureText_4": "Avatud lähtekoodiga", "featureText_5": "Tekstivestlus", "featureText_6": "Töötab Doge'i jõul", "loginGithub": "Logi GitHub'iga", "loginTwitter": "Logi Twitter'iga", "createTestUser": "Loo test-kasutaja", "loginDiscord": "Login with Discord" }, "myProfile": { "logout": "logi välja", "probablyLoading": "ilmselt laadib...", "voiceSettings": "mine häälesätetesse", "overlaySettings": "go to overlay settings", "soundSettings": "mine helisätetesse", "deleteAccount": "kustuta konto", "couldNotFindUser": "Sorry, we could not find that user", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "Oih! See leht läks vestluses kaduma.", "goHomeMessage": "Pole vaja muretseda. Sa saad", "goHomeLinkText": "minna koju" }, "room": { "speakers": "Kõnelejad", "requestingToSpeak": "Kõnelemise taotlemine", "listeners": "Kuulajad", "allowAll": "Luba kõik", "allowAllConfirm": "Oled sa kindel? See tegevus lubab kõigil {{count}} taotlejal rääkida" }, "searchUser": { "search": "otsi..." }, "soundEffectSettings": { "header": "Helid", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "muuda profiili", "followsYou": "jälgib sind", "followers": "jälgijaid", "following": "jälgib", "followHim": "jälgi", "followingHim": "jälgid", "copyProfileUrl": "copy profile url", "urlCopied": "URL copied to clipboard", "unfollow": "Unfollow", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Häälesätted", "mic": "mikrofon:", "permissionError": "ühtegi mikrofoni ei leitud; mikrofone ei ole ühendatud või veebilehel puudub õigus neid kasutada.", "refresh": "värskenda mikrofonide loendit", "volume": "helitugevus:", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "Invalid app title", "label": "Enter App Title" }, "header": "Ülekatte Sätted" }, "download": { "starting": "Starting download...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "Click on the button below to start download", "download_now": "Download Now", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Bännitud kasutajad", "unban": "tühista bänn", "noBans": "kedagi pole veel bännitud" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Lahku ruumist", "confirmLeaveRoom": "Kas oled kindel, et soovid ruumist lahkuda?", "leave": "Lahku", "inviteUsersToRoomBtn": "Kutsu ruumi kasutajaid", "invite": "Kutsu", "toggleMuteMicBtn": "Mikrofoni lüliti", "mute": "Vaigista mikrofon", "unmute": "Ava mikrofon", "makeRoomPublicBtn": "Tee ruum avalikuks!", "settings": "Sätted", "speaker": "Kõneleja", "listener": "Kuulaja", "chat": "Vestlus", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "Sinu seadet ei toetata veel. Saad luua", "linkText": "GitHub'is veateate", "addSupport": "ning üritame lisada toe teie seadmele." }, "inviteButton": { "invited": "kutsutud", "inviteToRoom": "kutsu ruumi" }, "micPermissionBanner": { "permissionDenied": "Ligipääs mikrofonile keelatud (võib-olla peate vaatama brauseri sätteid ning lehte värskendama)", "dismiss": "tühista", "tryAgain": "proovi uuesti" }, "keyboardShortcuts": { "setKeybind": "määra klahvistik", "listening": "kuulab", "toggleMuteKeybind": "vaigistamise klahvistik", "togglePushToTalkKeybind": "push-to-talk klahvistik", "toggleOverlayKeybind": "toggle overlay keybind", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "pole ühtegi audiotarbijat mingil põhjusel" }, "addToCalendar": { "add": "Lisa kalendrisse" }, "wsKilled": { "description": "Veebipesa suleti serveri poolt. See juhtub tavaliselt siis, kui avad veebilehe teisel vahelehel.", "reconnect": "ühenda uuesti" }, "modals": { "createRoomModal": { "public": "avalik", "private": "privaatne", "roomName": "ruumi nimi", "roomDescription": "ruumi kirjeldus", "descriptionError": "max. pikkus 500", "nameError": "peab olema 2 kuni 60 tähemärki pikk", "subtitle": "Fill the following fields to start a new room" }, "invitedToJoinRoomModal": { "newRoomCreated": "Uus ruum loodud", "roomInviteFrom": "Ruumi kutse kasutajalt", "justStarted": "Nad just alustasid", "likeToJoin": ", kas tahad liituda?", "inviteReceived": "sind on kutsutud ruumi" }, "editProfileModal": { "usernameTaken": "kasutajanimi on juba kasutusel", "avatarUrlError": "Vigane pilt", "avatarUrlLabel": "Github/Twitter/Discord avatari URL", "displayNameError": "2 kuni 50 tähemärki pikk", "displayNameLabel": "Kuvatav nimi", "usernameError": "4 kuni 15 tähemärki pikk ja ainult tähenumbriline/alakriips", "usernameLabel": "Kasutajanimi", "bioError": "maksimum pikkus: 160 tähemärki", "bioLabel": "Bio", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "Kas tahad kindlasti selle kasutaja liitumist teie ruumidesse keelata?", "blockUser": "Blokeeri kasutaja", "makeMod": "Tee moderaatoriks", "unmod": "eemalda moderaatoriõigus", "addAsSpeaker": "lisa kõnelejana", "moveToListener": "liiguta kuulajatesse", "banFromChat": "bänni vestlusest", "banFromRoom": "bänni ruumist", "goBackToListener": "mine tagasi kuulajatesse", "deleteMessage": "kustuta sõnum", "makeRoomCreator": "make room admin", "unBanFromChat": "Unban from Chat", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "nõua luba rääkimiseks", "makePublic": "tee ruum avalikuks", "makePrivate": "tee ruum privaatseks", "renamePublic": "Säti avaliku ruumi nimi", "renamePrivate": "Säti privaatse ruumi nimi", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "People", "online": "ONLINE", "noOnline": "You have 0 friends online right now", "showMore": "Show more" }, "upcomingRoomsCard": { "upcomingRooms": "Upcoming rooms", "exploreMoreRooms": "Explore More Rooms" }, "search": { "placeholder": "Search for rooms, users or categories", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profile", "language": "Language", "reportABug": "Report A Bug", "useOldVersion": "Use Old Version", "logOut": { "button": "Log out", "modalSubtitle": "Are you sure you want to logout?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Ajastatud ruumid", "noneFound": "ühtegi ei leitud", "allRooms": "kõik ajastatud ruumid", "myRooms": "minu ajastatud ruumid", "scheduleRoomHeader": "Ajasta ruum", "startRoom": "Alusta ruum", "modal": { "needsFuture": "peab olema tulevikus", "roomName": "ruumi nimi", "roomDescription": "kirjeldus", "minLength": "min. pikkus 2" }, "tommorow": "TOMMOROW", "today": "TODAY", "deleteModal": { "areYouSure": "Are you sure you want to delete this scheduled room?" } }, "roomChat": { "title": "Vestlus", "emotesSoon": "[emojid varsti]", "bannedAlert": "Sind bänniti vestlusest", "waitAlert": "Pead ootama sekundi enne, kui saad sõnumit saata", "search": "Otsing", "searchResults": "Otsingu tulemused", "recent": "Enim kasutatud", "sendMessage": "Saada sõnum", "whisper": "Sosista", "welcomeMessage": "Tere tulemast vestlusesse!", "roomDescription": "ruumi kirjeldus", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Tankimas raketti", "takingOff": "Startimas", "inSpace": "Kosmoses", "approachingMoon": "Lähenemas Kuule", "lunarDoge": "Kuu-doge", "approachingSun": "Lähenemas Päikesele", "solarDoge": "Päikese-Doge", "approachingGalaxy": "Lähenemas galaktikale", "galacticDoge": "Galaktiline-Doge", "spottedLife": "Planeet eluga" }, "feed": { "yourFeed": "Your Feed" } } } ================================================ FILE: kibbeh/public/locales/eu/translation.json ================================================ { "common": { "loadMore": "gehiago kargatu", "loading": "kargatzen", "noUsersFound": "ez dira erabiltzaileak aurkitu", "ok": "ados", "yes": "bai", "no": "ez", "cancel": "deuseztatu", "save": "gorde", "edit": "editatu", "delete": "ezabatu", "joinRoom": "gelara sartu", "copyLink": "esteka kopiatu", "copied": "kopiatuta", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Please note running DogeHouse without accessibility permissions may cause unwanted errors", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Isilik | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Jatorri historia", "link_2": "Discord", "link_3": "Errore bat jakinarazi" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "blokeatu", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "List of users that are not in a private room and you follow.", "currentRoom": "orain:", "startPrivateRoom": "hasi saio pribatu bat", "title": "People" }, "followList": { "followHim": "Follow", "followingHim": "Following", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Gela Sortu", "editRoom": "Edit Room", "refresh": "Refresh", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "gela ez dago erabilgarri", "shareRoomLink": "gelaren esteka partekatu", "inviteFollowers": "You can invite your followers that are online:", "whenFollowersOnline": "Zure jarraitzaileak linean daudenean hemen agertuko dira." }, "login": { "headerText": "Elkarrizketak ilargira eramaten 🚀", "featureText_1": "Modu iluna", "featureText_2": "Erregistro irekia", "featureText_3": "Soporte multiplataforma", "featureText_4": "Kode irekia", "featureText_5": "Testu txat", "featureText_6": "Powered by Doge", "loginGithub": "saioa hasi GitHub-en bidez", "loginTwitter": "saioa hasi Twitter-en bidez", "loginDiscord": "saioa hasi Discord-en bidez", "createTestUser": "froga erabiltzailea sortu" }, "myProfile": { "logout": "saioa itxi", "probablyLoading": "Segur aski kargatzen...", "voiceSettings": "ahots aukerak", "overlaySettings": "Overlay Settings", "soundSettings": "soinu aukerak", "deleteAccount": "kontua ezabatu", "couldNotFindUser": "Sorry, we could not find that user", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "Whoops! This page got lost in conversation.", "goHomeMessage": "Not to worry. You can", "goHomeLinkText": "go home" }, "room": { "speakers": "mintzatzaileak", "requestingToSpeak": "hitza eskatzen", "listeners": "entzuleak", "allowAll": "Allow all", "allowAllConfirm": "Are you sure? This will allow all {{count}} requesting users to speak" }, "searchUser": { "search": "bilatu..." }, "soundEffectSettings": { "header": "Soinuak", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "editatu profila", "followsYou": "jarraitzen zaitu", "followers": "jarraitzaileak", "following": "jarraitzen", "followHim": "Follow", "unfollow": "Unfollow", "followingHim": "Following", "copyProfileUrl": "Copy Profile URL", "urlCopied": "URL copied to clipboard", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Ahots aukerak", "mic": "mikrofonoa:", "permissionError": "ez dira mikrofonorik aurkitu, you either have none plugged in or haven't given this website permission.", "refresh": "mikrofono zerrenda berriro kargatu", "volume": "ozentasuna:", "title": "Voice Settings" }, "overlaySettings": { "header": "Overlay Settings", "input": { "errorMsg": "Please enter a valid app title", "label": "App title" } }, "download": { "starting": "Starting download...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "Click on the button below to start download", "download_now": "Download Now", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Erabiltzaile blokeatutak", "unban": "Desblokeatu", "noBans": "No one has been banned yet" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Gela utzi", "confirmLeaveRoom": "gela uzten ari zara, zihur zaude?", "leave": "Utzi", "inviteUsersToRoomBtn": "Erabiltzaileak gonbidatu", "invite": "Gonbidatu", "toggleMuteMicBtn": "Aldatu mikrofonoaren isiltasuna", "mute": "Mikrofonoa desaktibatu", "unmute": "Mikrofonoa aktibatu", "makeRoomPublicBtn": "Gela publikoa sortu!", "settings": "Aukerak", "speaker": "Mintzatzaile", "listener": "Entzule", "chat": "Txat", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "Gaur egun zure gailua ez da bateragarri. Sortu", "linkText": "arazo bat GitHub-en", "addSupport": "eta saiatuko naiz zure gailuari soportea ematen." }, "followingOnline": { "people": "People", "online": "ONLINE", "noOnline": "You have 0 friends online right now", "showMore": "Show more" }, "inviteButton": { "invited": "gonbidatuta", "inviteToRoom": "gelara gonbidatu" }, "micPermissionBanner": { "permissionDenied": "Mikrofonoa atzitzeko baimenak ukatutak (you may need to go into browser settings and reload the page)", "dismiss": "baztertu", "tryAgain": "Saiatu berriro" }, "keyboardShortcuts": { "setKeybind": "konfiguratu tekla konbinazioa", "listening": "entzuten...", "toggleMuteKeybind": "Piztu/itzali isiltzeko tekla konbinazioa", "toggleOverlayKeybind": "Toggle overlay keybind", "togglePushToTalkKeybind": "Piztu/itzali sakatu-hitz-egiteko tekla konbinazioa", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "No audio consumer for some reason" }, "upcomingRoomsCard": { "upcomingRooms": "Upcoming rooms", "exploreMoreRooms": "Explore more rooms" }, "addToCalendar": { "add": "Egutegira gehitu" }, "wsKilled": { "description": "Serbitzariak websocket-a ezabatu du. Hau gertatzen da web-orrialdea beste fitxa batean irekeitzen denean.", "reconnect": "berriro konektatu" }, "search": { "placeholder": "Search for rooms, users or categories", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profila", "language": "Hizkuntza", "reportABug": "Errore bat jakinarazi", "useOldVersion": "Use Old Version", "logOut": { "button": "Saioa itxi", "modalSubtitle": "Are you sure you want to logout?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "modals": { "createRoomModal": { "subtitle": "Fill the following fields to start a new room", "public": "publikoa", "private": "pribatua", "roomName": "gelaren izena", "roomDescription": "gelaren deskribapena", "descriptionError": "luzera maximoa: 500 karaktere", "nameError": "2-60 karaktere izan behar ditu" }, "invitedToJoinRoomModal": { "newRoomCreated": "Gela berria sortuta", "roomInviteFrom": "Room Invite from", "justStarted": "They just started", "likeToJoin": ", would you like to join?", "inviteReceived": "you've been invited to" }, "editProfileModal": { "usernameTaken": "erabiltzaile izena hartuta", "avatarUrlError": "Irudi baliogabea", "avatarUrlLabel": "Github/Twitter/Discord avatar url", "displayNameError": "luzera: 2-50 karaktere", "displayNameLabel": "Erakusteko izena", "usernameError": "luzera: 4-15 karaktere alfanumerikoak/azpi-gidioa", "usernameLabel": "Erabiltzaile izena", "bioError": "luzera maximoa: 160 karaktere", "bioLabel": "Biografia", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "Are you sure you want to block this user from joining any room you ever create?", "blockUser": "erabiltzailea blokeatu", "makeMod": "moderatzaile bihurtu", "unmod": "moderatzailea kendu", "addAsSpeaker": "mintzatzaile bihurtu", "moveToListener": "entzule bihurtu", "unBanFromChat": "Unban from Chat", "banFromChat": "Txata blokeatu", "banFromRoom": "gela blokeatu", "goBackToListener": "bueltatu entzule izatera", "deleteMessage": "mezua ezabatu", "makeRoomCreator": "Promote to Admin", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "baimenak behar dituzu hitz egiteko", "makePublic": "gela publikoa bihurtu", "makePrivate": "gela pribatua bihurtu", "renamePublic": "Set public room name", "renamePrivate": "Set private room name", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "feed": { "yourFeed": "Your feed" }, "scheduledRooms": { "title": "Gela programatuak", "noneFound": "ez da bakar bat ere aurkitu", "allRooms": "Gela programatu guztiak", "myRooms": "nire gela programatuak", "scheduleRoomHeader": "Gela programatu", "startRoom": "gela hasi", "modal": { "needsFuture": "Etorkizunean izen behar da", "roomName": "gelaren izena", "roomDescription": "deskribapena", "minLength": "luzera minimoa: 2 karaktere" }, "tommorow": "TOMMOROW", "today": "TODAY", "deleteModal": { "areYouSure": "Are you sure you want to delete this scheduled room?" } }, "roomChat": { "title": "Txat", "emotesSoon": "[emoteak berehala]", "bannedAlert": "Txatean blokeatuta zaude", "waitAlert": "Segundu bat itxaron behar duzu beste mezu bat bidali baino lehen.", "search": "Bilatu", "searchResults": "Bilaketaren emaitzak", "recent": "Maiz Erabiliak", "sendMessage": "Mezua bidali", "whisper": "Xuxurlatu", "welcomeMessage": "Ongi etorri Txatera!", "roomDescription": "gelaren deskribapena", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Suziria errekargatzen", "takingOff": "Aireratzen", "inSpace": "Espazioan", "approachingMoon": "Ilargira iristen", "lunarDoge": "Ilargi doge", "approachingSun": "Eguzkira iristen", "solarDoge": "Eguzki doge", "approachingGalaxy": "Galaxiara iristen", "galacticDoge": "Doge galaktikoa", "spottedLife": "Planet with life spotted" } } } ================================================ FILE: kibbeh/public/locales/fa/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "نمایش بیشتر", "loading": "در حال بارگذاری...", "noUsersFound": "کاربری پیدا نشد!", "ok": "تایید", "yes": "بله", "no": "خیر", "cancel": "لغو", "save": "ذخیره", "edit": "ویرایش", "delete": "حذف", "joinRoom": "ورود به اتاق", "copyLink": "کپی کردن لینک", "copied": "کپی انجام شد!", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "لطفاً توجه داشته باشید که اجرای DogeHouse بدون مجوزهای دسترسی ممکن است باعث خطاهای ناخواسته شود.", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "dashboard": "داشبورد", "connectionTaken": "اتصال گرفته شده است.", "mutedTitle": "بی صدا | DogeHouse", "deafenedTitle": "ناشنوا | DogeHouse" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "داستان مبدا", "link_2": "دیسکورد", "link_3": "گزارش مشکل" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "منع کردن", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "download": { "prompt": "برنامه DogeHouse Desktop را بارگیری کنید", "download_for": "بارگیری کنید برای %platform% (%ext%)", "failed": "شناسایی سیستم عامل امکان پذیر نیست ، لطفاً بعداً دوباره امتحان کنید یا از نسخه های GitHub بازدید کنید", "visit_gh": "از نسخه های GitHub بازدید کنید" }, "followingOnlineList": { "listHeader": "لیست کاربرانی که در یک اتاق خصوصی نیستند و آنها را دنبال می کنید.", "currentRoom": "در حال حاضر در:", "startPrivateRoom": "با آنها یک اتاق خصوصی راه اندازی کنید", "title": "People" }, "followList": { "followHim": "دنبال کردن", "followingHim": "دنبال شده", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "اتاق جدید", "editRoom": "ویرایش اتاق", "refresh": "بارگیری مجدد", "desktopAlert": "همین امروز برنامه دسک تاپ DogeHouse را بارگیری کنید" }, "inviteList": { "roomGone": "اتاق بسته شد؛ برگرد به عقب", "shareRoomLink": "لینک اتاق را به اشتراک بگذارید", "inviteFollowers": "شما می توانید دنبال کنندگان خود را که آنلاین هستند دعوت کنید:", "whenFollowersOnline": "وقتی دنبال کنندگان شما آنلاین باشند ، در اینجا نشان داده می شوند." }, "login": { "headerText": "مکالمات صوتی را به ماه منتقل کنید 🚀", "featureText_1": "تم تاریک", "featureText_2": "ورود به سیستم را باز کنید", "featureText_3": "پشتیبانی از کراس پلتفرم", "featureText_4": "متن باز", "featureText_5": "چت", "featureText_6": "قدرت گرقته از Doge", "loginGithub": "با GitHub وارد شوید", "loginTwitter": "با توییتر وارد شوید", "loginDiscord": "با Discord وارد شوید", "createTestUser": "کاربر آزمایشی ایجاد کنید" }, "myProfile": { "logout": "خروج", "probablyLoading": "احتمالاً در حال بارگیری ...", "voiceSettings": "تنظیمات صدا", "overlaySettings": "تنظیمات همپوشانی", "soundSettings": "تنظیمات صدا", "deleteAccount": "حذف حساب کاربری", "couldNotFindUser": "متأسفیم ، ما آن کاربر را پیدا نکردیم", "privacySettings": "تنظیمات حریم خصوصی" }, "notFound": { "whoopsError": "اوه! این صفحه در مکالمه گم شده است.", "goHomeMessage": "نگران نباشید. تو می توانی", "goHomeLinkText": "به صفحه اصلی بروی" }, "room": { "speakers": "سخنرانان", "requestingToSpeak": "درخواست صحبت کردن", "listeners": "شنوندگان", "allowAll": "اجازه دادن به همه", "allowAllConfirm": "مطمئنی؟ با این کار به همه {{count}} درخواست کنندگان اجازه صحبت می دهید" }, "searchUser": { "search": "جستجو کردن..." }, "soundEffectSettings": { "header": "صدا", "title": "تنظیمات صدا", "playSound": "Play Sound" }, "viewUser": { "editProfile": "ویرایش نمایه", "followsYou": "شما را دنبال می کند", "followers": "دنبال کنندگان", "following": "دنبال شده", "followHim": "دنبال کردن", "unfollow": "دنبال نشود", "followingHim": "دنبال شده", "copyProfileUrl": "کپی کردن آدرس نمایه", "urlCopied": "آدرس در حافظه موقت کپی شد", "about": "درباره", "bot": "بات", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "تنظیمات صدا", "mic": "میکروفون:", "permissionError": "هیچ میکروفونی یافت نشد،شما میکروفون را متصل نکرده و یا به این وبسایت اجازه نداده اید.", "refresh": "بارگذاری مجدد لیست میکروفون", "volume": "بلندی صدا", "title": "Voice Settings" }, "overlaySettings": { "header": "تنظیمات همپوشانی", "input": { "errorMsg": "لطفاً یک عنوان معتبر برای برنامه وارد کنید.", "label": "عنوان برنامه" } }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "کاربران مسدود شده", "unban": "در آوردن از مسدود", "noBans": "هنوز هیچ شخصی مسدود نشده است" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "اتاق فعلی را ترک کنید", "confirmLeaveRoom": "آیا مطمئن هستی که می خواهی ترک کنی؟", "leave": "ترک کردن", "inviteUsersToRoomBtn": "کاربران را به اتاق دعوت کنید", "invite": "دعوت", "toggleMuteMicBtn": "قطع صدا", "toggleDeafMicBtn": "ضامن ناشنوا", "mute": "بی صدا", "unmute": "وصل کردن صدا", "deafen": "بی صدا", "undeafen": "وصل کردن صدا", "makeRoomPublicBtn": "اتاق را عمومی کنید!", "settings": "تنظیمات", "speaker": "سخنگو", "listener": "شنونده", "chat": "چت" }, "deviceNotSupported": { "notSupported": "دستگاه شما در حال حاضر پشتیبانی نمی شود. شما می توانید یک", "linkText": "مشکل در GitHub درست کنید", "addSupport": "و من سعی می کنم پشتیبانی از دستگاه شما را اضافه کنم." }, "followingOnline": { "people": "مردم", "online": "آنلاین", "noOnline": "شما در حال حاضر 0 دوست آنلاین دارید", "showMore": "اطلاعات بیشتر" }, "inviteButton": { "invited": "دعوت شد!", "inviteToRoom": "به اتاق دعوت کنید" }, "micPermissionBanner": { "permissionDenied": "مجوز تلاش برای دسترسی به میکروفن شما رد شد (ممکن است لازم باشد وارد تنظیمات مرورگر شوید و صفحه را دوباره بارگیری کنید)", "dismiss": "رد", "tryAgain": "دوباره امتحان کنید" }, "keyboardShortcuts": { "setKeybind": "Keybind را تنظیم کنید", "listening": "شنیدن", "toggleMuteKeybind": "دکمه قطع کردن صدا", "toggleDeafKeybind": "دکمه نشنیدن", "toggleOverlayKeybind": "دکمه تنظیمات همپوشانی", "togglePushToTalkKeybind": "دکمه فشردن برای صحبت کردن" }, "userVolumeSlider": { "noAudioMessage": "به دلایلی مصرف کننده صدا وجود ندارد" }, "upcomingRoomsCard": { "upcomingRooms": "اتاق های آینده", "exploreMoreRooms": "در اتاق های بیشتری کاوش کنید" }, "addToCalendar": { "add": "افزودن به تقویم" }, "wsKilled": { "description": "اتصال به سرور قطع شد. ممکن است برنامه را در صفحه ای دیگر باز کرده اید", "reconnect": "اتصال دوباره" }, "search": { "placeholder": "اتاق ها ، کاربران یا دسته ها را جستجو کنید", "placeholderShort": "جستجو کنید" }, "settingsDropdown": { "profile": "مشخصات", "language": "زبان", "reportABug": "گزارش یک اشکال", "useOldVersion": "از نسخه قدیمی استفاده کنید", "logOut": { "button": "خروج", "modalSubtitle": "آیا برای خارج شدن مطمئن هستید؟" }, "debugAudio": { "debugAudio": "اشکال زدایی صدا", "stopDebugger": "اشکال زدایی را متوقف کنید" }, "downloadApp": "بارگیری برنامه", "developer": "Developer Settings" }, "modals": { "createRoomModal": { "subtitle": "برای راه اندازی یک اتاق جدید ، قسمت های زیر را پر کنید", "public": "عمومی", "private": "خصوصی", "roomName": "نام اتاق", "roomDescription": "توضیحات اتاق", "descriptionError": "حداکثر طول 500", "nameError": "باید بین 2 تا 60 نویسه باشد" }, "invitedToJoinRoomModal": { "newRoomCreated": "اتاق جدید ایجاد شد", "roomInviteFrom": "اتاق دعوت از", "justStarted": "آنها تازه شروع کردند", "likeToJoin": "، آیا دوست دارید بپیوندید؟", "inviteReceived": "شما دعوت شده اید به" }, "editProfileModal": { "usernameTaken": "نام کاربری گرفته شده", "avatarUrlError": "تصویر نامعتبر است", "avatarUrlLabel": "Github/Twitter/Discord avatar URL", "bannerUrlLabel": "Twitter banner URL", "displayNameError": "طول 2 تا 50 نویسه", "displayNameLabel": "نمایش نام", "usernameError": "طول 4 تا 15 حرف و فقط حروف الفبا / زیر خط", "usernameLabel": "نام کاربری", "bioError": "حداکثر طول 160 نویسه", "bioLabel": "بیو" }, "profileModal": { "blockUserConfirm": "آیا مطمئن هستید که می خواهید از ورود این کاربر به هر اتاقی که ایجاد کرده اید جلوگیری کنید؟", "blockUser": "کاربر را مسدود کنید", "makeMod": "به Mod ارتقا دهید", "unmod": "تنزل مقام از Mod", "addAsSpeaker": "به عنوان سخنگو اضافه کنید", "moveToListener": "انتقال به شنوندگان", "unBanFromChat": "لغو ممنوعیت از چت", "banFromChat": "ممنوع کردن از چت", "banFromRoom": "ممنوعیت ورود به اتاق", "goBackToListener": "بازگشت به شنونده", "deleteMessage": "این پیام را حذف کنید", "makeRoomCreator": "به مدیر ارتقا دهید", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "نیاز به گرفتن اجازه برای صحبت دارد", "chatDisabled": "چت را غیرفعال کنید", "makePublic": "اتاق را عمومی کنید", "makePrivate": "اتاق را خصوصی کنید", "renamePublic": "نام اتاق عمومی را تنظیم کنید", "renamePrivate": "نام اتاق خصوصی را تنظیم کنید", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "feed": { "yourFeed": "فید شما" }, "scheduledRooms": { "title": "اتاق های برنامه ریزی شده", "noneFound": "هیچ کدام پیدا نشد", "allRooms": "تمام اتاقهای برنامه ریزی شده", "myRooms": "اتاقهای برنامه ریزی شده من", "scheduleRoomHeader": "زمانبندی اتاق", "startRoom": "شروع اتاق", "tommorow": "فردا", "today": "امروز", "modal": { "needsFuture": "باید در آینده باشد", "roomName": "نام اتاق", "roomDescription": "شرح", "minLength": "حداقل طول 2" }, "deleteModal": { "areYouSure": "آیا مطمئن هستید که می خواهید این اتاق برنامه ریزی شده را حذف کنید؟" } }, "roomChat": { "title": "چت", "emotesSoon": "[ایموت ها به زودی]", "bannedAlert": "شما از چت منع شده اید", "waitAlert": "قبل از ارسال پیام دیگری باید لحظه ای صبر کنید", "search": "جستجو", "searchResults": "نتایج جستجو", "recent": "اغلب استفاده می شود", "sendMessage": "ارسال یک پیام", "whisper": "پچ پچ", "welcomeMessage": "به چت خوش آمدید!", "roomDescription": "توضیحات اتاق", "disabled": "گفتگوی اتاق غیرفعال شده است", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "سوخت موشک", "takingOff": "در حال بلند شدن", "inSpace": "در فضا", "approachingMoon": "نزدیک شدن به ماه", "lunarDoge": "دوج قمری", "approachingSun": "نزدیک شدن به خورشید", "solarDoge": "دوج خورشیدی", "approachingGalaxy": "نزدیک شدن به کهکشان", "galacticDoge": "دوج کهکشانی", "spottedLife": "سیاره ای که در آن حیات وجود دارد پیدا شد." } } } ================================================ FILE: kibbeh/public/locales/fi/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "Lataa lisää", "loading": "Ladataan...", "noUsersFound": "Käyttäjiä ei löytynyt", "ok": "OK", "yes": "Kyllä", "no": "Ei", "cancel": "Peruuta", "save": "Tallenna", "edit": "Muokkaa", "delete": "Poista", "joinRoom": "Liity huoneeseen", "copyLink": "Kopioi linkki", "copied": "Kopioitu", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Huomaa, että käyttämällä DogeHousea ilman joitakin selaimen käyttöoikeuksia voi aiheuttaa ei-toivottuja virheitä", "copy": "Kopioi", "error": "Virhe" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Mykistetty | DogeHouse", "deafenedTitle": "Hiljennetty | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Yhteys katkaistu" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Tarina", "link_2": "Discord", "link_3": "Ilmoita Ongelmasta" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "Estä", "userStaffandContrib": "Käyttäjän henkilökuntatila ja kontribuutiot", "staff": "Henkilökunta: ", "contributions": "Kontribuutiot", "username": "Käyttäjätunnus", "usrStaff": "Käyttäjän henkilökuntatila", "usrContributions": "Käyttäjän kontribuutiot", "reason": "syy", "usernamePlaceholder": "käyttäjätunnus, johon suoritetaan toiminnot" }, "followingOnlineList": { "listHeader": "Lista seuraamistasi käyttäjistä, jotka eivät ole yksityisessä huoneessa.", "currentRoom": "Paikalla:", "startPrivateRoom": "Luo yksityinen huone heidän kanssaan", "title": "Henkilöt" }, "followList": { "followHim": "Seuraa", "followingHim": "Seurannassa", "title": "Henkilöt", "followingNone": "Ei seuraa ketään", "noFollowers": "Ei seuraajia" }, "home": { "createRoom": "Luo huone", "refresh": "Päivitä", "editRoom": "Muokkaa huonetta", "desktopAlert": "Lataa DogeHouse-työpöytäsovellus tänään!" }, "inviteList": { "roomGone": "Huone poistettu, palaa takaisin", "shareRoomLink": "Jaa linkki huoneeseen", "inviteFollowers": "Voit kutsua paikalla olevia seuraajiasi:", "whenFollowersOnline": "Kun seuraajasi on paikalla, löydät heidät täältä." }, "login": { "headerText": "Äänikeskustelu kuuhun 🚀", "featureText_1": "Tumma teema", "featureText_2": "Avoin kirjautuminen", "featureText_3": "Alustariippumaton", "featureText_4": "Avoin lähdekoodi", "featureText_5": "Tekstikanavat", "featureText_6": "Dogen voimalla", "loginGithub": "Kirjaudu GitHubilla", "loginTwitter": "Kirjaudu Twitterillä", "loginDiscord": "Kirjaudu Discordilla", "createTestUser": "Luo testikäyttäjä" }, "myProfile": { "logout": "Kirjaudu ulos", "probablyLoading": "Ladataan...", "voiceSettings": "Puheasetukset", "soundSettings": "Ääniasetukset", "overlaySettings": "Overlay-asetukset", "deleteAccount": "Poista tili", "couldNotFindUser": "Käyttäjää ei löytynyt", "privacySettings": "Yksityisyysasetukset" }, "notFound": { "whoopsError": "Hups! Tämä sivu katosi keskusteluun.", "goHomeMessage": "Älä huoli, voit", "goHomeLinkText": "palata alkuun" }, "room": { "speakers": "Puhujat", "requestingToSpeak": "Pyytävät puheoikeutta", "listeners": "Kuuntelijat", "allowAll": "Hyväksy kaikki", "allowAllConfirm": "Oletko varma? Tämä antaa kaikille {{count}} pyytäville käyttäjille puheoikeuden" }, "searchUser": { "search": "Hae..." }, "soundEffectSettings": { "header": "Äänet", "title": "Ääniasetukset", "playSound": "Toista ääni" }, "viewUser": { "editProfile": "Muokkaa profiilia", "followsYou": "Seuraa sinua", "followers": "Seuraajaa", "following": "Seurannassa", "followHim": "Seuraa", "followingHim": "Seurannassa", "copyProfileUrl": "Kopioi profiilin URL-osoite", "urlCopied": "Osoite kopioitu leikepöydälle", "unfollow": "Lopeta seuraaminen", "about": "Tietoa käyttäjästä", "bot": "Botti", "profileTabs": { "about": "Tietoa käyttäjästä", "rooms": "Huoneet", "scheduled": "Ajoitetut", "recorded": "Tallennetut", "clips": "Klipit", "admin": "Admin" }, "block": "Estä", "unblock": "Poista esto", "sendDM": "Lähetä yksityisviesti", "aboutSuffix": "", "errors": { "blocked": "Tämä käyttäjä esti sinut.", "default": "Hups! Tätä käyttäjää ei voitu ladata." } }, "voiceSettings": { "header": "Puheasetukset", "mic": "Mikrofoni:", "permissionError": "Yhtään mikrofonia ei löytynyt. joko yhtään ei ole kytketty tai et ole antanut sivustolle lupaa käyttää mikrofonia.", "refresh": "Päivitä lista", "volume": "Äänenvoimakkuus:", "title": "Puheasetukset" }, "overlaySettings": { "header": "Overlay-asetukset", "input": { "errorMsg": "Epäkelpo sovelluksen nimi", "label": "Syötä sovelluksen nimi" } }, "download": { "starting": "Aloitetaan lataaminen...", "failed": "Automaattinen lataus epäonnistui, yritä uudelleen myöhemmin", "visit_gh": "Näe Github-julkaisut", "prompt": "Aloita lataaminen klikkaamalla alla olevaa painiketta", "download_now": "Lataa nyt", "download_for": "Lataa %platform%ille (%ext%)" }, "privacySettings": { "title": "Yksityisyysasetukset", "header": "Yksityisyysasetukset", "whispers": { "label": "Kuiskaukset", "on": "Käytössä", "off": "Pois käytöstä" } }, "botEdit": { "yourBots": "Bottisi", "bots": "Botit", "title": "Botin tiedot", "apiKey": "ApiKey", "regenerate": "Uusi", "reveal": "Paljasta ApiKey klikkaamalla" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Estetyt käyttäjät", "unban": "Poista esto", "noBans": "Ketään ei ole estetty" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Poistu huoneesta", "confirmLeaveRoom": "Haluatko varmasti poistua huoneesta?", "leave": "Poistu", "inviteUsersToRoomBtn": "Kutsu käyttäjiä huoneeseen", "invite": "Kutsu", "toggleMuteMicBtn": "Kytke mikrofonin mykistys", "mute": "Mykistä", "unmute": "Poista mykistys", "makeRoomPublicBtn": "Tee huoneesta julkinen", "settings": "Asetukset", "speaker": "Puhuja", "listener": "Kuuntelija", "chat": "Chatti", "toggleDeafMicBtn": "Kytke hiljennys", "deafen": "Hiljennä", "undeafen": "Poista hiljennys" }, "deviceNotSupported": { "notSupported": "Käyttämääsi laitetta ei tueta. Voit luoda", "linkText": "ilmoituksen ongelmasta GitHubiin", "addSupport": "ja yritän lisätä tuen laitteellesi." }, "inviteButton": { "invited": "Kutsuttu", "inviteToRoom": "Kutsu huoneeseen" }, "micPermissionBanner": { "permissionDenied": "Mikrofonin käyttö estetty (sinun täytyy mahdollisesti muuttaa selaimesi asetuksia ja päivittää sivu)", "dismiss": "Ohita", "tryAgain": "Yritä uudelleen" }, "keyboardShortcuts": { "setKeybind": "Aseta pikanäppäin", "listening": "Odotetaan näppäintä", "toggleMuteKeybind": "Mikrofonin mykistys -pikanäppäin", "togglePushToTalkKeybind": "Push-to-talk-pikanäppäin", "toggleOverlayKeybind": "Overlay-pikanäppäin", "toggleDeafKeybind": "Hiljennys-pikanäppäin" }, "userVolumeSlider": { "noAudioMessage": "Ei äänen ulostulolaitteita" }, "addToCalendar": { "add": "Lisää kalenteriin" }, "wsKilled": { "description": "Palvelin katkaisi yhteyden. Tämä johtuu yleensä sivuston avaamisesta useampaan välilehteen.", "reconnect": "Yhdistä uudelleen" }, "modals": { "createRoomModal": { "public": "Julkinen", "private": "Yksityinen", "roomName": "Huoneen nimi", "roomDescription": "Huoneen kuvaus", "descriptionError": "Maksimipituus 500 merkkiä", "nameError": "Tulee olla 2-60 merkkiä pitkä", "subtitle": "Luo uusi huone täyttämällä seuraavat kentät" }, "invitedToJoinRoomModal": { "newRoomCreated": "Uusi huone luotu", "roomInviteFrom": "Kutsu huoneeseen käyttäjältä", "justStarted": "Huone on juuri aloitettu", "likeToJoin": ", Haluaisitko liittyä mukaan?", "inviteReceived": "Sinut on kutsuttu liittymään" }, "editProfileModal": { "usernameTaken": "Käyttäjätunnus on varattu", "avatarUrlError": "Virheellinen kuva", "avatarUrlLabel": "Github-/Twitter-avatarin URL-osoite", "displayNameError": "Pituus 2-50 merkkiä", "displayNameLabel": "Nimimerkki", "usernameError": "Pituus 4-15 merkkiä ja vain aakkosia, numeroita tai alaviivoja", "usernameLabel": "Käyttäjätunnus", "bioError": "Maksimipituus 160 merkkiä", "bioLabel": "Kuvaus", "bannerUrlLabel": "Twitter-bannerikuvan URL-osoite" }, "profileModal": { "blockUserConfirm": "Haluatko varmasti estää tämän käyttäjän liittymistä yhteenkään huoneeseesi?", "blockUser": "Estä käyttäjä", "makeMod": "Lisää ylläpitäjäksi", "unmod": "Poista ylläpitäjä", "addAsSpeaker": "Lisää puhujaksi", "moveToListener": "Siirrä kuuntelijaksi", "banFromChat": "Estä chatista", "banFromRoom": "Estä huoneesta", "goBackToListener": "Palaa kuuntelijaksi", "deleteMessage": "Poista viesti", "makeRoomCreator": "Ylennä huoneen ylläpitäjäksi", "unBanFromChat": "Poista esto chatista", "banIPFromRoom": "Estä IP-osoite huoneesta" }, "roomSettingsModal": { "requirePermission": "Puhuminen vaatii oikeuden", "makePublic": "Tee huoneesta julkinen", "makePrivate": "Tee huoneesta yksityinen", "renamePublic": "Aseta julkinen huoneen nimi", "renamePrivate": "Aseta yksityinen huoneen nimi", "chatDisabled": "Poista chatti käytöstä", "chatCooldown": "Chatin cooldown-aika (millisekunteina)", "chat": { "label": "Chatti", "enabled": "Käytössä", "disabled": "Pois käytöstä", "followerOnly": "Vain seuraajat" } }, "createBotModal": { "usernameTaken": "Käyttätunnus varattu", "subtitle": "Luo botti täyttämällä seuraavat kentät", "title": "Luo botti" } }, "followingOnline": { "people": "Henkilöt", "online": "PAIKALLA", "noOnline": "Sinulla on tällä hetkellä 0 kaveria paikalla", "showMore": "Näytä lisää" }, "upcomingRoomsCard": { "upcomingRooms": "Tulevat huoneet", "exploreMoreRooms": "Etsi lisää huoneita" }, "search": { "placeholder": "Hae huoneita, käyttäjiä tai kategorioita", "placeholderShort": "Hae" }, "settingsDropdown": { "profile": "Profiili", "language": "Kieli", "reportABug": "Ilmoita ongelmasta", "useOldVersion": "Käytä vanhaa versioita", "logOut": { "button": "Kirjaudu ulos", "modalSubtitle": "Haluatko varmasti kirjautua ulos?" }, "debugAudio": { "debugAudio": "Testaa äänet", "stopDebugger": "Pysäytä debuggeri" }, "downloadApp": "Lataa sovellus", "developer": "Kehittäjäasetukset" }, "userBadges": { "dhStaff": "DogeHousen henkilökunta", "dhContributor": "DogeHouse-avustaja" }, "messagesDropdown": { "title": "Viestit", "showMore": "Näytä lisää", "noMessages": "Ei uusia viestejä" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Ajoitetut huoneet", "noneFound": "Yhtään huonetta ei löytynyt", "allRooms": "Kaikki ajoitetut huoneet", "myRooms": "Minun ajoitetut huoneet", "scheduleRoomHeader": "Ajoita huone", "startRoom": "Aloita huone", "modal": { "needsFuture": "Täytyy olla tulevaisuudessa", "roomName": "Huoneen nimi", "minLength": "Minimipituus 2", "roomDescription": "Huoneen kuvaus" }, "tommorow": "HUOMENNA", "today": "TÄNÄÄN", "deleteModal": { "areYouSure": "Haluatko varmasti poistaa tämän ajoitetun huoneen?" } }, "roomChat": { "title": "Chatti", "emotesSoon": "[emojit tulossa]", "bannedAlert": "Sinut on estetty huoneesta", "waitAlert": "Odota hetki ennen uuden viestin lähettämistä", "search": "Hae", "searchResults": "Hakutulokset", "recent": "Usein käytetyt", "sendMessage": "Lähetä viesti", "whisper": "Kuiskaus", "welcomeMessage": "Tervetuloa chattiin!", "roomDescription": "Huoneen kuvaus", "disabled": "Chatti poistettiin käytöstä", "messageDeletion": { "message": "viesti", "retracted": "peruttu", "deleted": "poistettu" } }, "roomStatus": { "fuelingRocket": "Tankkaamassa rakettia", "takingOff": "Nousemassa lentoon", "inSpace": "Avaruudessa", "approachingMoon": "Lähestymässä kuuta", "lunarDoge": "Kuu-doge", "approachingSun": "Lähestymässä aurinkoa", "solarDoge": "Aurinko-doge", "approachingGalaxy": "Lähestymässä galaksia", "galacticDoge": "Galaktinen Doge", "spottedLife": "Havaittiin planeetta, jossa on elämää" }, "feed": { "yourFeed": "Syötteesi" } } } ================================================ FILE: kibbeh/public/locales/fr/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "Charger Plus", "loading": "Chargement...", "noUsersFound": "Aucun utilisateur trouvé!", "ok": "Ok", "yes": "Oui", "no": "Non", "cancel": "Annuler", "save": "Sauvegarder", "edit": "Éditer", "delete": "Supprimer", "joinRoom": "Rejoindre la Salle", "copyLink": "Copier le Lien", "copied": "Copié!", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Veuillez noter que l'exécution de DogeHouse sans autorisations d'accessibilité peut provoquer des erreurs indésirables", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Muet | DogeHouse", "deafenedTitle": "Assourdi | DogeHouse", "dashboard": "Tableau de board", "connectionTaken": "Lien Pris" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Histoire d'origine", "link_2": "Discord", "link_3": "Signaler un problème" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "Bannir", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Liste des utilisateurs qui ne sont pas dans une salle privée et que vous suivez", "currentRoom": "Actuellement dans :", "startPrivateRoom": "Lancer une salle privée avec eux", "title": "People" }, "followList": { "followHim": "S'abonner", "followingHim": "Abonné", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Créer une salle", "editRoom": "Editer la salle", "refresh": "Actualiser", "desktopAlert": "Téléchargez l'application DogeHouse aujourd'hui!" }, "inviteList": { "roomGone": "Cette salle n'existe plus; revenez en arrière", "shareRoomLink": "Partager le lien de la salle", "inviteFollowers": "Vous pouvez inviter vos abonnés en ligne :", "whenFollowersOnline": "Quand vos abonnés seront en ligne, ils apparaîtront ici." }, "login": { "headerText": "Prends les conversations vocales jusqu'à la lune 🚀", "featureText_1": "Thème sombre", "featureText_2": "Inscriptions ouvertes", "featureText_3": "Support Multi-plateforme", "featureText_4": "Open Source", "featureText_5": "Tchat Textuel", "featureText_6": "Alimenté par Doge", "loginGithub": "Se connecter avec GitHub", "loginTwitter": "Se connecter avec Twitter", "loginDiscord": "Se connecter avec Discord", "createTestUser": "Créer un utilisateur de test" }, "myProfile": { "logout": "Se déconnecter", "probablyLoading": "Probablement en train de charger...", "voiceSettings": "Paramètres Vocaux", "overlaySettings": "Paramètres de l'overlay", "soundSettings": "Paramètres Audio", "deleteAccount": "Supprimer le Compte", "couldNotFindUser": "Désolé, nous ne parvenons pas à trouver cet utilisateur", "privacySettings": "Paramètres de confidentialité" }, "notFound": { "whoopsError": "Oups ! Cette page s'est perdue dans la conversation.", "goHomeMessage": "Ne vous inquiétez pas. Vous pouvez", "goHomeLinkText": "Retourner à l'accueil" }, "room": { "speakers": "Interlocuteurs", "requestingToSpeak": "Demande la parole", "listeners": "Auditeurs", "allowAll": "Tout autoriser", "allowAllConfirm": "Êtes-vous sûr? Cela autorisera {{count}} utilisateurs en attente de parler" }, "searchUser": { "search": "recherche..." }, "soundEffectSettings": { "header": "Sons", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "Éditer le profil", "followsYou": "Vous suit", "followers": "Abonnés", "following": "Abonnements", "followHim": "S'abonner", "followingHim": "Abonné", "copyProfileUrl": "Copier le lien du profil", "urlCopied": "Lien copié dans le presse-papier", "unfollow": "Unfollow", "about": "À propos de", "bot": "Bot", "profileTabs": { "about": "À propos", "rooms": "salles", "scheduled": "Programmé", "recorded": "enregistré", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Paramètres vocaux", "mic": "Microphone :", "permissionError": "Pas de microphone trouvé, soit vous n'en avez pas branché un soit vous n'avez pas donné la permission au site de l'utiliser.", "refresh": "Rafraîchir la liste des microphones", "volume": "Volume :", "title": "Voice Settings" }, "overlaySettings": { "header": "Paramètres de l'Overlay", "input": { "errorMsg": "Veuillez rentrer un titre valide", "label": "Titre de l'application" } }, "download": { "starting": "Téléchargement entamé...", "failed": "Téléchargement interrompu, essayer de nouveau plus tard", "visit_gh": "Visiter toutes les versions sur Github", "prompt": "Cliquer sur le bouton pour commencer le Téléchargement", "download_now": "Télécharger maintenant", "download_for": "Télécharger pour la %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Utilisateurs bannis", "unban": "Débannir", "noBans": "Personne n'a été banni pour l'instant" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Quitter la salle actuelle", "confirmLeaveRoom": "Êtes-vous sûr de vouloir quitter?", "leave": "Quitter", "inviteUsersToRoomBtn": "Inviter des utilisateurs dans la salle", "invite": "Inviter", "toggleMuteMicBtn": "Activer / Désactiver le microphone", "mute": "Rendre muet", "unmute": "Rétablir la voix", "makeRoomPublicBtn": "Rendre la salle publique!", "settings": "Paramètres", "speaker": "Interlocuteur", "listener": "Auditeur", "chat": "Tchat", "toggleDeafMicBtn": "Activer / Désactiver le son", "deafen": "Couper le son", "undeafen": "Rétablier le son" }, "deviceNotSupported": { "notSupported": "Votre système n'est pas encore supporté. Vous pouvez créer une", "linkText": "issue sur GitHub", "addSupport": "et j'essaierai d'ajouter le support pour votre système." }, "followingOnline": { "people": "Personnes", "online": "EN LIGNE", "noOnline": "Vous n'avez pas d'amis en ligne pour le moment", "showMore": "Voir plus" }, "inviteButton": { "invited": "Invité!", "inviteToRoom": "Inviter dans la salle" }, "micPermissionBanner": { "permissionDenied": "Permission refusée en essayant d'accéder à votre microphone (vous devriez peut être vérifier vos paramètres de navigateur et recharger la page)", "dismiss": "Fermer", "tryAgain": "Réessayer" }, "keyboardShortcuts": { "setKeybind": "Changer les raccourcis clavier", "listening": "Écoutant...", "toggleMuteKeybind": "Activer / Désactiver le raccourci clavier pour rendre muet", "toggleOverlayKeybind": "Activer / Désactiver le raccourci clavier pour l'overlay", "togglePushToTalkKeybind": "Activer / Désactiver le raccourci clavier appuyer-pour-parler", "toggleDeafKeybind": "Activer / Désactiver le raccourci clavier pour couper le son" }, "userVolumeSlider": { "noAudioMessage": "Pas d'audio pour une raison inconnue" }, "upcomingRoomsCard": { "upcomingRooms": "Prochaines salles", "exploreMoreRooms": "Explorer plus de salles" }, "addToCalendar": { "add": "Ajouter au Calendrier" }, "wsKilled": { "description": "Le WebSocket a été fermé par le serveur. Cela arrive souvent quand vous ouvrez le site dans une autre fenêtre.", "reconnect": "Se reconnecter" }, "search": { "placeholder": "Rechercher des salles, utilisateurs ou catégories", "placeholderShort": "Recherche" }, "settingsDropdown": { "profile": "Profil", "language": "Language", "reportABug": "Signaler un problème", "useOldVersion": "Utiliser l'ancienne version", "logOut": { "button": "Se déconnecter", "modalSubtitle": "Êtes vous sur de vouloir vous déconnecter ?" }, "debugAudio": { "debugAudio": "Débugger l'audio", "stopDebugger": "Arreter le débuggage" }, "downloadApp": "Télécharger l'Application", "developer": "Developer Settings" }, "modals": { "createRoomModal": { "subtitle": "Remplis les champs suivants pour créer", "public": "Publique", "private": "Privée", "roomName": "Nom de la salle", "roomDescription": "Description de la salle", "descriptionError": "Taille maximum de 500 caractères", "nameError": "Ce champ doit être entre 2 et 60 caractères de longueur" }, "invitedToJoinRoomModal": { "newRoomCreated": "Nouvelle salle créée", "roomInviteFrom": "Invitation à la salle de", "justStarted": "Viennent de commencer", "likeToJoin": ", voulez-vous les rejoindre ?", "inviteReceived": "vous avez été invité à" }, "editProfileModal": { "usernameTaken": "Pseudo déjà pris", "avatarUrlError": "Image invalide", "avatarUrlLabel": "URL d'avatar Github/Twitter/Discord", "displayNameError": "Longueur de 2 à 50 caractères", "displayNameLabel": "Nom affiché", "usernameError": "Longueur de 4 à 15 caractères et ne doit contenir que des caractères alphanumériques ou des tirets du bas", "usernameLabel": "Pseudo", "bioError": "Longueur maximum de 160 caractères", "bioLabel": "Biographie", "bannerUrlLabel": "URL de bannière Twitter" }, "profileModal": { "blockUserConfirm": "Êtes-vous sûr de vouloir bloquer cet utilisateur de toutes vos salles ?", "blockUser": "Bloquer l'utilisateur", "makeMod": "Rendre modérateur", "unmod": "Enlever les permissions", "addAsSpeaker": "Ajouter en tant qu'interlocuteur", "moveToListener": "Rendre auditeur", "unBanFromChat": "Débannir du chat", "banFromChat": "Bannir du chat", "banFromRoom": "Bannir de la salle", "goBackToListener": "Retourner chez les auditeurs", "deleteMessage": "Supprimer ce message", "makeRoomCreator": "Transférer la propriété de la salle", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "requiert la permission de parler", "makePublic": "rendre la salle publique", "makePrivate": "rendre la salle privée", "renamePublic": "Changer le nom de la salle publique", "renamePrivate": "Changer le nom de la salle privée", "chatDisabled": "Désactiver tchat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "feed": { "yourFeed": "Votre sélection" }, "scheduledRooms": { "title": "Salles programmées", "noneFound": "aucune trouvée", "allRooms": "toutes les salles programmées", "myRooms": "mes salles programmées", "scheduleRoomHeader": "Programmer une salle", "startRoom": "lancer la salle", "modal": { "needsFuture": "doit dans être dans le futur", "roomName": "nom de salle", "roomDescription": "Description", "minLength": "longueur minimum de 2 caractères" }, "tommorow": "DEMAIN", "today": "AUJOURD'HUI", "deleteModal": { "areYouSure": "Êtes vous sûr de vouloir supprimer cette salle programmée?" } }, "roomChat": { "title": "Tchat", "emotesSoon": "[emotes bientôt]", "bannedAlert": "Vous avez été banni du tchat", "waitAlert": "Vous devez attendre une seconde avant d'envoyer un nouveau message", "search": "Rechercher", "searchResults": "Résultats de recherche", "recent": "Fréquemment utilisées", "sendMessage": "Envoyer un message", "whisper": "Chuchotement", "welcomeMessage": "Bienvenue dans le tchat !", "roomDescription": "Description de la salle", "disabled": "Le tchat a été désactivé", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Ravitaillement de la fusée", "takingOff": "Décollage", "inSpace": "Dans l'espace", "approachingMoon": "Approchant la lune", "lunarDoge": "Doge Lunaire", "approachingSun": "Approchant le soleil", "solarDoge": "Doge Solaire", "approachingGalaxy": "Approchant une galaxie", "galacticDoge": "Doge Galactique", "spottedLife": "Planète avec de la vie en vue" } } } ================================================ FILE: kibbeh/public/locales/grc/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "φόρτωση περισσοτέρων", "loading": "φόρτωση...", "noUsersFound": "δεν βρέθηκαν χρήστες", "ok": "οκ", "yes": "ναι", "no": "όχι", "cancel": "ακύρωση", "save": "αποθήκευση", "edit": "επεξεργασία", "delete": "διαγραφή", "joinRoom": "είσοδος στο δωμάτιο", "copyLink": "αντιγραφή συνδέσμου", "copied": "αντιγράφτηκε", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Please note running DogeHouse without accessibility permissions may cause unwanted errors", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Σε Σίγαση | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Ιστορία Προέλευσης", "link_2": "Discord", "link_3": "Αναφορά Προβλήματος" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "αποκλεισμός", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Χρήστες που ακολουθείτε και δεν βρίσκονται σε κάποιο δωμάτιο", "currentRoom": "αυτή τη στιγμή βρίσκεστε σε:", "startPrivateRoom": "δημιουργήστε ένα ιδιωτικό δωμάτιο μαζί τους", "title": "People" }, "followList": { "followHim": "follow", "followingHim": "following", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Δημιουργία Δωματίου", "refresh": "Επαναφόρτωση", "editRoom": "Edit Room", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "το δωμάτιο διαγράφηκε, πηγαίνετε πίσω", "shareRoomLink": "κοινοποιήστε τον σύνδεσμο του δωματίου", "inviteFollowers": "Μπορείτε να προσκαλέσετε τους ακόλουθους σας που είναι ενεργοί:", "whenFollowersOnline": "Όταν οι ακόλουθοι σας είναι ενεργοί, θα εμφανίζονται εδώ." }, "login": { "headerText": "Πάμε τις φωνητικές συνομιλίες στο φεγγάρι 🚀", "featureText_1": "Σκούρο Θέμα", "featureText_2": "Ανοιχτές Εγγραφές", "featureText_3": "Υποστήριξη Πολλαπλών Πλατφορμών", "featureText_4": "Ανοιχτού Πηγαίου Κώδικα", "featureText_5": "Συζήτηση Κειμένου", "featureText_6": "Με την υποστήριξη του Doge", "loginGithub": "σύνδεση μέσω GitHub", "loginTwitter": "σύνδεση μέσω Twitter", "createTestUser": "δημιουργήστε δοκιμαστικό χρήστη", "loginDiscord": "Login with Discord" }, "myProfile": { "logout": "αποσύνδεση", "probablyLoading": "μάλλον φορτώνει...", "voiceSettings": "πηγαίνετε στις ρυθμίσεις φωνής", "soundSettings": "πηγαίνετε στις ρυθμίσεις ήχου", "deleteAccount": "διαγραφή λογαριασμού", "overlaySettings": "go to overlay settings", "couldNotFindUser": "Sorry, we could not find that user", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "Ουπς! Αυτή η σελίδα χάθηκε στη συζήτηση.", "goHomeMessage": "Μην ανησυχείτε. Μπορείτε να", "goHomeLinkText": "επιστρέψετε στην αρχική" }, "room": { "speakers": "Ομιλητές", "requestingToSpeak": "Αιτούμενοι να μιλήσουν", "listeners": "Ακροατές", "allowAll": "Επιτρέψτε τα όλα", "allowAllConfirm": "Είστε σίγουρος; Αυτό θα επιτρέψει όλους τους {{count}} χρήστες που έχουν ζητήσει να μιλήσουν" }, "searchUser": { "search": "αναζήτηση..." }, "soundEffectSettings": { "header": "Ήχοι", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "επεξεργασία προφίλ", "followsYou": "σας ακολουθεί", "followers": "ακόλουθοι", "following": "ακολουθείτε", "followHim": "ακολουθήστε", "followingHim": "ακολουθείτε", "unfollow": "Unfollow", "copyProfileUrl": "copy profile url", "urlCopied": "URL copied to clipboard", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Ρυθμίσεις Φωνής", "mic": "μικρόφωνο:", "permissionError": "δεν βρέθηκε μικρόφωνο, είτε δεν έχετε κανένα συνδεδεμένο είτε δεν έχετε δώσει άδεια σε αυτή την ιστοσελίδα.", "refresh": "ανανέωση λίστας μικροφώνων", "volume": "ένταση ήχου:", "title": "Voice Settings" }, "overlaySettings": { "header": "Overlay Settings", "input": { "errorMsg": "Please enter valid app title", "label": "Enter app title" } }, "download": { "starting": "Starting download...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "Click on the button below to start download", "download_now": "Download Now", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Αποκλεισμένοι Χρήστες", "unban": "ξε-αποκλεισμός", "noBans": "κανένας δεν έχει αποκλειστεί ακόμα" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Αποχώρηση από το παρόν δωμάτιο", "confirmLeaveRoom": "Είστε σίγουροι ότι θέλετε να αποχωρήσετε;", "leave": "Αποχώρηση", "inviteUsersToRoomBtn": "Προσκαλέστε χρήστες στο δωμάτιο", "invite": "Πρόσκληση", "toggleMuteMicBtn": "Εναλλαγή κατάστασης μικροφώνου", "mute": "Σίγαση", "unmute": "Ξε-σίγαση", "makeRoomPublicBtn": "Κάντε το δωμάτιο δημόσιο!", "settings": "Ρυθμίσεις", "speaker": "Ομιλητής", "listener": "Ακροατής", "chat": "Συζήτηση", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "Η συσκευή σας δεν υποστηρίζεται αυτή τη στιγμή. Μπορείτε να δημιουργήσετε ένα", "linkText": "ζήτημα στο GitHub", "addSupport": "και θα προσπαθήσουμε να προσθέσουμε υποστήριξη για την συσκευή σας." }, "inviteButton": { "invited": "προσκλήθηκαν", "inviteToRoom": "προσκαλέστε στο δωμάτιο" }, "micPermissionBanner": { "permissionDenied": "Απορρίφθηκε η άδεια για πρόσβαση στο μικρόφωνό σας (ίσως χρειαστεί να πάτε στις ρυθμίσεις του περιηγητή σας και να κάνετε επαναφόρτωση της σελίδας)", "dismiss": "παράλειψη", "tryAgain": "προσπαθήστε ξανά" }, "keyboardShortcuts": { "setKeybind": "θέστε μια συντόμευση", "listening": "ακροατές", "toggleMuteKeybind": "συντόμευση εναλλαγής σίγασης", "togglePushToTalkKeybind": "συντόμευση εναλλαγής push-to-talk", "toggleOverlayKeybind": "toggle overlay keybind", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "δεν υπάρχει δέκτης ήχου για κάποιο λόγο" }, "addToCalendar": { "add": "Προσθήκη στο Ημερολόγιο" }, "wsKilled": { "description": "Το WebSocket διακόπηκε από τον διακομιστή. Αυτό συμβαίνει συνήθως όταν ανοίγετε την ιστοσελίδα σε άλλη καρτέλα.", "reconnect": "επανασύνδεση" }, "modals": { "createRoomModal": { "public": "δημόσιο", "private": "ιδιωτικό", "roomName": "όνομα δωματίου", "roomDescription": "περιγραφή δωματίου", "descriptionError": "μέγιστο μήκος 500", "nameError": "πρέπει να έχει μήκος μεταξύ 2 και 60 χαρακτήρων", "subtitle": "Fill the following fields to start a new room" }, "invitedToJoinRoomModal": { "newRoomCreated": "Δημιουργήθηκε Νέο Δωμάτιο", "roomInviteFrom": "Πρόσκληση σε Δωμάτιο από", "justStarted": "Μόλις ξεκίνησαν", "likeToJoin": ", θα θέλατε να συμμετέχετε;", "inviteReceived": "έχετε προσκληθεί στο" }, "editProfileModal": { "usernameTaken": "όνομα χρήστη μη διαθέσιμο", "avatarUrlError": "Άκυρη φωτογραφία", "avatarUrlLabel": "Διεύθυνση URL άβαταρ Github/Twitter/Discord", "displayNameError": "μήκος από 2 έως 50 χαρακτήρες", "displayNameLabel": "Εμφανιζόμενο Όνομα", "usernameError": "μήκος από 4 έως 15 χαρακτήρες και μόνο αλφαριθμητικά/κάτω παύλα", "usernameLabel": "Όνομα Χρήστη", "bioError": "μέγιστο μήκος 160 χαρακτήρες", "bioLabel": "Βιογραφικό", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "Είστε σίγουροι ότι θέλετε να μπλοκάρετε αυτό το χρήστη από το να συμμετέχει σε οποιοδήποτε δωμάτιο δημιουργήσετε στο μέλλον;", "blockUser": "μπλοκάρισμα χρήστη", "makeMod": "προσθήκη ως συντονιστή", "unmod": "αφαίρεση από συντονιστή", "addAsSpeaker": "προσθήκη ως ομιλητή", "moveToListener": "μετακίνηση σε ακροατή", "banFromChat": "αποκλεισμός από τη συζήτηση", "banFromRoom": "αποκλεισμός από το δωμάτιο", "goBackToListener": "επιστροφή σε ακροατή", "deleteMessage": "διαγράψτε αυτό το μήνυμα", "makeRoomCreator": "μετατροπή σε διαχειριστή δωματίου", "unBanFromChat": "Unban from Chat", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "απαίτηση άδειας για ομιλία", "makePublic": "κάντε το δωμάτιο δημόσιο", "makePrivate": "κάντε το δωμάτιο ιδιωτικό", "renamePublic": "Set public room name", "renamePrivate": "Set private room name", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "People", "online": "ONLINE", "noOnline": "You have 0 friends online right now", "showMore": "Show more" }, "upcomingRoomsCard": { "upcomingRooms": "Upcoming rooms", "exploreMoreRooms": "Explore More Rooms" }, "search": { "placeholder": "Search for rooms, users or categories", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profile", "language": "Language", "reportABug": "Report A Bug", "useOldVersion": "Use Old Version", "logOut": { "button": "Log out", "modalSubtitle": "Are you sure you want to logout?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Προγραμματισμένα Δωμάτια", "noneFound": "δεν βρέθηκε κανένα", "allRooms": "όλα τα προγραμματισμένα δωμάτια", "myRooms": "τα προγραμματισμένα δωμάτια μου", "scheduleRoomHeader": "Προγραμματισμός Δωματίου", "startRoom": "έναρξη δωματίου", "modal": { "needsFuture": "πρέπει να είναι στο μέλλον", "roomName": "όνομα δωματίου", "roomDescription": "Περιγραφή Δωματίου", "minLength": "ελάχιστο μήκος 2" }, "tommorow": "TOMMOROW", "today": "TODAY", "deleteModal": { "areYouSure": "Are you sure you want to delete this scheduled room?" } }, "roomChat": { "title": "Συζήτηση", "emotesSoon": "[τα emotes έρχονται σύντομα]", "bannedAlert": "Αποκλειστήκατε από τη συζήτηση", "waitAlert": "Πρέπει να περιμένετε ένα δευτερόλεπτο προτού στείλετε και άλλο μήνυμα", "search": "Αναζήτηση", "searchResults": "Αποτελέσματα Αναζήτησης", "recent": "Χρησιμοποιούμενα Συχνά", "sendMessage": "Στείλτε ένα Μήνυμα", "whisper": "Ψιθυρίστε", "welcomeMessage": "Καλως ήλθατε στη συζήτηση!", "roomDescription": "Περιγραφή Δωματίου", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Ανεφοδιασμός πυραύλου", "takingOff": "Απογείωση", "inSpace": "Στο διάστημα", "approachingMoon": "Πλησιάζοντας το φεγγάρι", "lunarDoge": "Σεληνιακό Doge", "approachingSun": "Πλησιάζοντας τον ήλιο", "solarDoge": "Ηλιακό Doge", "approachingGalaxy": "Πλησιάζουμε τον Γαλαξία", "galacticDoge": "Γαλαξιακό Doge", "spottedLife": "Εντοπίστηκε πλανήτης με ζωή" }, "feed": { "yourFeed": "Your Feed" } } } ================================================ FILE: kibbeh/public/locales/gsw/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "Meh lade", "loading": "Am lade...", "noUsersFound": "Keni Benutzer gfunge", "ok": "Ok", "yes": "Ja", "no": "Nei", "cancel": "Abbreche", "save": "Spichere", "edit": "Bearbeite", "delete": "Lösche", "joinRoom": "Ruum bitrete", "copyLink": "Link kopiere", "copied": "kopiert", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Wenn du DogeHouse ohni Berechtigunge laufe lahsch chönnti es ungwollti Fehler gäh", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Stumm | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Ursprungsgschicht", "link_2": "Discord", "link_3": "Es Problem mälde" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "blockiere", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Benutzer, wo du fougsch, aber nid imne private Ruum si.", "currentRoom": "Grad in:", "startPrivateRoom": "En private Ruum mit däm Benutzer starte", "title": "People" }, "followList": { "followHim": "Folge", "followingHim": "Am folge", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Ruum erstelle", "refresh": "Aktualisiere", "editRoom": "Edit Room", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "Ruum isch nid gfunge worde! Zrugg", "shareRoomLink": "Link zum Ruum teile", "inviteFollowers": "Du chasch dini Abonnente, wo online si, ilade:", "whenFollowersOnline": "Wenn dini Abonnente online si, werde sie da azeigt." }, "login": { "headerText": "Mir bringe de Sprachchat zum Mond 🚀", "featureText_1": "Dark-Mode", "featureText_2": "Unbeschränkti Registrierig", "featureText_3": "Plattformunabhängig", "featureText_4": "Open-Source", "featureText_5": "Text-Chat", "featureText_6": "Atribe vo Doge", "loginGithub": "mit GitHub amälde", "loginTwitter": "mit Twitter amälde", "createTestUser": "Testnutzer erstelle", "loginDiscord": "Login with Discord" }, "myProfile": { "logout": "Abmälde", "probablyLoading": "Ladt äuä...", "voiceSettings": "Sprachistellige", "soundSettings": "Tonistellige", "deleteAccount": "Konto lösche", "overlaySettings": "Gang zu de Overlay Istellige", "couldNotFindUser": "Sorry, we could not find that user", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "Hoppla! Die Site isch im Gspräch verlore gange.", "goHomeMessage": "Mach dir kei Sorge. Du chasch", "goHomeLinkText": "Hei gah" }, "room": { "speakers": "Sprächer", "requestingToSpeak": "Gsprächsafrage", "listeners": "Zuehörer", "allowAll": "Alles erlaube", "allowAllConfirm": "Bisch der sicher? Das wird all {{count}} Benutzer wo wennd rede dBerechtigung dazue gäh" }, "searchUser": { "search": "Sueche..." }, "soundEffectSettings": { "header": "Ton", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "Profil bearbeite", "followsYou": "folgt dir", "following": "Abonniert", "followers": "Abonnente", "followHim": "Folge", "followingHim": "Am Folge", "copyProfileUrl": "Profil URL kopiere", "urlCopied": "URL id Zwüscheablag kopiert", "unfollow": "Entfolge", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Sprachistellige", "mic": "Mikrofon:", "permissionError": "Keis Mikrofon gfunge, es isch entweder keis agschlosse oder die Site het nid die nötige Berechtigunge.", "volume": "Luutsterchi:", "refresh": "Mikrofonliste aktualisiere", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "Invalid app title", "label": "Enter App Title" }, "header": "Overlay Istellige" }, "download": { "starting": "Starting download...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "Click on the button below to start download", "download_now": "Download Now", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "addToCalendar": { "add": "Zum Kalender hinzuefüege" }, "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "blockierti Benutzer", "unban": "Blockierig ufhebe", "noBans": "Du hesch aktuell niemer blockiert" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Aktuelle Ruum verlah", "confirmLeaveRoom": "Bisch der sicher, dass du gah wettsch?", "leave": "Verlah", "inviteUsersToRoomBtn": "Benutzer zum Ruum ilade", "invite": "Ilade", "toggleMuteMicBtn": "Mikrofon ih-/usschalte", "mute": "Stumm schalte", "unmute": "Stummschaltig ufhebe", "makeRoomPublicBtn": "Ruum öffentlech mache!", "settings": "Istellige", "speaker": "Sprächer", "listener": "Zuehörer", "chat": "Chat", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "micPermissionBanner": { "permissionDenied": "Mir hei ke Zuegriff uf dis Mikrofon. Mach dini Browseristellige uf, setz die nötige Berechtigunge und lad d Site neu.", "dismiss": "verstange", "tryAgain": "nomal versueche" }, "modals": { "createRoomModal": { "public": "Öffentlech", "private": "Privat", "roomName": "Ruumname", "roomDescription": "Ruumbeschribig", "descriptionError": "die maximali Längi isch 500", "nameError": "mues zwüsche 2 und 60 Zeiche lang sii", "subtitle": "Fill the following fields to start a new room" }, "invitedToJoinRoomModal": { "newRoomCreated": "Neue Ruum erstellt", "roomInviteFrom": "Neui Iladig vo", "justStarted": "Sie hend grad gstartet", "likeToJoin": ", wettsch biträte?", "inviteReceived": "Du bisch iglade worde zu" }, "editProfileModal": { "usernameTaken": "Benutzername isch scho vergäh", "avatarUrlError": "ungültigs Bild", "avatarUrlLabel": "GitHub / Twitter Avatar URL", "displayNameError": "Längi: 2 bis 50 Buechstabe", "displayNameLabel": "Azeigename", "usernameError": "Längi: 4 bis 15 alphanumerischi Zeiche und Ungerstriche", "usernameLabel": "Benutzername", "bioError": "Maximal 160 Buechstabe", "bioLabel": "Bio", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "Bisch der sicher, dass du dä Benutzer us aune dine zuekünftige Rüüm usschliesse wettsch?", "blockUser": "Benutzer blockiere", "makeMod": "Zum Moderator befördere", "unmod": "Moderator Status ufhebe", "addAsSpeaker": "zum Sprächer befördere", "moveToListener": "zum Zuehörer abestufe", "banFromChat": "Im Chat blockiere", "banFromRoom": "Usem Ruum usschliesse", "goBackToListener": "Zrügg zum Zuehörer", "deleteMessage": "Nachricht lösche", "makeRoomCreator": "make room admin", "unBanFromChat": "Unban from Chat", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "Berechtigung zum Rede verlange", "makePublic": "Ruum öffentlech mache", "makePrivate": "Ruum privat mache", "renamePublic": "Set public room name", "renamePrivate": "Set private room name", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "userVolumeSlider": { "noAudioMessage": "Us unbekannte Gründ isch ke Audio Consumer gfunge worde" }, "keyboardShortcuts": { "setKeybind": "Tastenkürzu setze", "listening": "Zuelose", "toggleMuteKeybind": "Stummschalttaste umschalte", "togglePushToTalkKeybind": "Push-to-Talk Tastekürzel umschalte", "toggleOverlayKeybind": "toggle overlay keybind", "toggleDeafKeybind": "Toggle deafen keybind" }, "wsKilled": { "description": "D Websocket Verbindig zum Server isch ungebroche worde. Das gscheht normalerwiis, wenn du d Website imne angere Tab öffnisch.", "reconnect": "Nomau verbinge" }, "deviceNotSupported": { "notSupported": "Dis Grät wird aktuell nid ungerstützt. Du chasch es", "linkText": "Issue uf GitHub", "addSupport": "erstelle und ich werde versueche, d Ungerstützig für dis Grät hinzuefüege." }, "inviteButton": { "invited": "iglade", "inviteToRoom": "zum Ruum ilade" }, "followingOnline": { "people": "People", "online": "ONLINE", "noOnline": "You have 0 friends online right now", "showMore": "Show more" }, "upcomingRoomsCard": { "upcomingRooms": "Upcoming rooms", "exploreMoreRooms": "Explore More Rooms" }, "search": { "placeholder": "Search for rooms, users or categories", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profile", "language": "Language", "reportABug": "Report A Bug", "useOldVersion": "Use Old Version", "logOut": { "button": "Log out", "modalSubtitle": "Are you sure you want to logout?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Planti Rüüm", "noneFound": "Keni gfunge", "allRooms": "Alli plante Rüüm", "myRooms": "Mini plante Rüüm", "scheduleRoomHeader": "E Ruum plane", "startRoom": "Ruum starte", "modal": { "needsFuture": "Dr Zitpunkt mues ide Zuekunft lige", "roomName": "Name vom Ruum", "minLength": "minimali Längi: 2", "roomDescription": "Beschribig" }, "tommorow": "TOMMOROW", "today": "TODAY", "deleteModal": { "areYouSure": "Are you sure you want to delete this scheduled room?" } }, "roomChat": { "title": "Chat", "emotesSoon": "[gli gits emotes]", "bannedAlert": "Du bisch vom Chat usgschlosse", "waitAlert": "Du muesch e Sekunde warte, bevor e witeri Nachricht schribe chasch", "search": "Sueche", "searchResults": "Suechergäbnis", "recent": "Z'letscht gsuecht", "sendMessage": "E Nachricht schicke", "whisper": "Flüstere", "welcomeMessage": "Willkomme im Chat!", "roomDescription": "Ruumbeschribig", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Ragete wird tankt", "takingOff": "D Ragete startet", "inSpace": "Im Wäutruum", "approachingMoon": "Geit ufe Mond zue", "lunarDoge": "Mond-Doge", "approachingSun": "Geit uf d Sunne zue", "solarDoge": "Sunne-Doge", "approachingGalaxy": "Geit uf d Galaxie zue", "galacticDoge": "Galaxie-Doge", "spottedLife": "Planet mit lebe gfunge" }, "feed": { "yourFeed": "Your Feed" } } } ================================================ FILE: kibbeh/public/locales/he/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "טען עוד", "loading": "טוען...", "noUsersFound": "לא נמצאו משתמשים", "ok": "אוקי", "yes": "כן", "no": "לא", "cancel": "בטל", "save": "שמור", "edit": "ערוך", "delete": "מחק", "joinRoom": "הצטרף לחדר", "copyLink": "העתק קישור", "copied": "הועתק", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "בלי ההרשאות יכולה לגרום לבעיות לא רצויות DogeHouse שים לב שהפעלת", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "מושתק | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "סיפור מקור", "link_2": "Discord", "link_3": "דווח על באג" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "באן", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "רשימת משתמשים שאתה עוקב אחרייהם שלא בחדר פרטי.", "currentRoom": "ב:", "startPrivateRoom": "צור חדר פרטי איתם", "title": "People" }, "followList": { "followHim": "עקוב", "followingHim": "עוקב", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "צור חדר", "refresh": "טען מחדש", "editRoom": "ערוך חדר", "desktopAlert": "הורד את דוג' האוס דסקדופ היום!" }, "inviteList": { "roomGone": "החדר נעלם, חזור", "shareRoomLink": "שתף קישור לחדר שלך", "inviteFollowers": "הזמן עוקבים:", "whenFollowersOnline": " כשהעוקבים שלך יהיו מחוברים הם יופעו כאן." }, "login": { "headerText": "לוקח שיחות קוליות לירח 🚀", "featureText_1": "מצב חשוך", "featureText_2": "פתח הרשמות", "featureText_3": "תמיכה חוצה פלטפורמות", "featureText_4": "קוד פתוח", "featureText_5": "צ'אט", "featureText_6": "מופעל על ידי דוג'", "loginGithub": "התחבר באמצעות GitHub", "loginTwitter": "התחבר באמצעות Twitter", "createTestUser": "צור משתמש נסיון", "loginDiscord": "התחבר עם דיסקורד" }, "myProfile": { "logout": "התנתק", "probablyLoading": "כנראה טוען...", "voiceSettings": "עבור להגדרות קול", "soundSettings": "עבור להגדרות סאונד", "deleteAccount": "מחק חשבון", "overlaySettings": "go to overlay settings", "couldNotFindUser": "סליחה, לא הצלחנו למצוא את משתמש זה.", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "אופס! הדף הזה הלך לאיבוד בשיחה.", "goHomeMessage": "אל אל תדאג, אתה יכול.", "goHomeLinkText": "חזור לדף הבית" }, "room": { "speakers": "מדברים", "requestingToSpeak": "מבקשים לדבר", "listeners": "מקשיבים", "allowAll": "הרשה לכולם", "allowAllConfirm": "המשתמשים המבקשים רשות יכולת דיבור {{count}} אתה בטוח? זה יאפשר לכל" }, "searchUser": { "search": "חפש..." }, "soundEffectSettings": { "header": "צלילים", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "ערוך פרופיל", "followsYou": "עוקב אחריך", "followers": "עוקבים", "following": "עוקב", "followHim": "עקוב", "followingHim": "עוקב", "copyProfileUrl": "העתק קישור פרופיל", "urlCopied": "הקישור הועתק", "unfollow": "הפסק מעקב", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "הגדרות קול", "mic": "מיקרופון:", "permissionError": "לא נמצאו מיקרופונים, או שאין מיקרופון מחובר או שלא נתת אישור לאתר זה.", "refresh": "רענן את רשימת המיקרופונים", "volume": "עוצמת קול:", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "Invalid app title", "label": "Enter App Title" }, "header": "Overlay Settings" }, "download": { "starting": "מתחיל בהורדה...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "לחץ על כפתור זה כדי להתחיל בהורדה", "download_now": "הורד עכשיו", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "משתמשים שקיבלו באן", "unban": "הורד באן", "noBans": "אף אחד לא קיבל באן" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "עזוב את החדר הנוכחי", "confirmLeaveRoom": "בטוח שאתה רוצה לעזוב?", "leave": "עזוב", "inviteUsersToRoomBtn": "הזמן משתמשים לחדר", "invite": "הזמנה", "toggleMuteMicBtn": "השתק", "mute": "השתק", "unmute": "בטל השתקה", "makeRoomPublicBtn": "הפוך את החדר לציבורי!", "settings": "הגדרות", "speaker": "דובר", "listener": "מקשיב", "chat": "צ'אט", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "המכשיר שלך אינו נתמך כרגע. אתה יכול ליצור", "linkText": "בעיות בGitHub.", "addSupport": "וננסה להוסיף תמיכה למכשיר שלך." }, "inviteButton": { "invited": "מוזמן", "inviteToRoom": "הזמן לחדר" }, "micPermissionBanner": { "permissionDenied": "ההרשאה נדחתה בניסיון לגשת למיקרופון שלך (יתכן שתצטרך להיכנס להגדרות הדפדפן ולטעון מחדש את הדף)", "dismiss": "סגור", "tryAgain": "נסה שוב" }, "keyboardShortcuts": { "setKeybind": "הגדר מקש", "listening": "מקשיב", "toggleMuteKeybind": "הפעל את מקש ההשתקה", "togglePushToTalkKeybind": "הפעל push-to-talk", "toggleOverlayKeybind": "toggle overlay keybind", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "שום צרכן קול משום מה" }, "addToCalendar": { "add": "הוסף ליומן" }, "wsKilled": { "description": "הWebSocket נסגר על ידי השרת. זה קורה בדרך כלל כשפותחים את האתר בלשונית אחרת.", "reconnect": "התחבר מחדש" }, "modals": { "createRoomModal": { "public": "ציבורי", "private": "פרטי", "roomName": "שם החדר", "roomDescription": "תיאור החדר", "descriptionError": "אורך מקסימלי 500", "nameError": "חייב להיות באורך של 2 עד 60 תווים", "subtitle": "Fill the following fields to start a new room" }, "invitedToJoinRoomModal": { "newRoomCreated": "חדר חדש נוצר", "roomInviteFrom": "הזמנת חדר מ", "justStarted": "הם רק התחילו", "likeToJoin": ", תרצה להצטרף?", "inviteReceived": "הוזמנת ל" }, "editProfileModal": { "usernameTaken": "שם המשתמש תפוס", "avatarUrlError": "תמונה לא תקינה", "avatarUrlLabel": "Github/Twitter/Discordשל התמונה מ url", "displayNameError": "אורך 2 עד 50 תווים", "displayNameLabel": "שם מוצג", "usernameError": "אורך 4 עד 15 תווים ורק אותיות / מספרים / קו תחתון", "usernameLabel": "שם משתמש", "bioError": "אורך מקסימלי של 160 תווים", "bioLabel": "ביו", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "האם אתה בטוח שברצונך לחסום משתמש זה מלהצטרף לכל חדר שתיצור אי פעם?", "blockUser": "חסום משתמש", "makeMod": "הפוך למוד", "unmod": "הסר מןד", "addAsSpeaker": "הוסף כ דובר", "moveToListener": "העבר למקשיב", "banFromChat": "הרחק מהצ'אט", "banFromRoom": "הרחק מהחדר", "goBackToListener": "חזור למקשיב", "deleteMessage": "מחק הודעה זו", "makeRoomCreator": "הפוך למנהל חדר", "unBanFromChat": "Unban from Chat", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "דרוש אישור לדבר", "makePublic": "הפוך חדר לציבורי", "makePrivate": "הפוך חדר לפרטי", "renamePublic": "הגדר את שם החדר הציבורי", "renamePrivate": "הגדר את השם של החדר הפרטי", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "People", "online": "מחובר", "noOnline": "יש לך 0 חברים מחוברים כרגע", "showMore": "הראה עוד" }, "upcomingRoomsCard": { "upcomingRooms": "Upcoming rooms", "exploreMoreRooms": "טען עוד חדרים" }, "search": { "placeholder": "חפש חדרים, משתמשים, או קטגוריות", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "פרופיל", "language": "שפה", "reportABug": "דווח על באג", "useOldVersion": "השתמש בגרסא ישנה", "logOut": { "button": "יציאה מהמשתמש", "modalSubtitle": "האם אתה בטוח שתרצה לצאת מהמשתמש ?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "חדרים מתוזמנים", "noneFound": "לא נמצאו", "allRooms": "כל החדרים המתוזמנים", "myRooms": "החדרים המתוזמנים שלי", "scheduleRoomHeader": "צור חדר מתוזמן", "startRoom": "התחל חדר", "modal": { "needsFuture": "חייב להיות בעתיד", "roomName": "שם החדר", "minLength": "אורך מינימלי 2", "roomDescription": "תיאור החדר" }, "tommorow": "מחר", "today": "היום", "deleteModal": { "areYouSure": "האם אתה בטוח שתרצה למחוק את החדר הזה?" } }, "roomChat": { "title": "צ'אט", "emotesSoon": "[אימוג'ים בקרוב]", "bannedAlert": "קיבלת באן מהצ'אט", "waitAlert": "חכה שנייה לפני שליחת הודעה", "search": "חפש", "searchResults": "תוצאות חיפוש", "recent": "לעיתים קרובות בשימוש", "sendMessage": "שלח הודעה", "whisper": "הודעה פרטית", "welcomeMessage": "ברוכים הבאים לצ'אט!", "roomDescription": "תיאור החדר", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "מטדלק את הרקטה", "takingOff": "ממריא", "inSpace": "בחלל", "approachingMoon": "מתקרב לירח", "lunarDoge": "ירח doge", "approachingSun": "מתקרב לשמש", "solarDoge": "שמש doge", "approachingGalaxy": "מתקרב לגלקסיה", "galacticDoge": "גלקטי Doge", "spottedLife": "כוכב לכת עם חיים נמצא" }, "feed": { "yourFeed": "הסיפור שלך" } } } ================================================ FILE: kibbeh/public/locales/hi/translation.json ================================================ { "common": { "loadMore": "और लोड करें", "loading": "लोड हो रहा है...", "noUsersFound": "कोई उपयोग्कर्ता नहीं मिले", "ok": "ठीक है", "yes": "सही", "no": "गलत", "cancel": "रद्द करें", "save": "सेव/बचा ले", "edit": "संपादित करे", "delete": "हटाओ", "joinRoom": "कमरे में शामिल हों", "copyLink": "कॉपी", "copied": "कॉपी हो गया", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "कृपया ध्यान दें कि एक्सेसिबिलिटी परमिशन के बिना दोजेहाउस चलाना अवांछित त्रुटियों का कारण हो सकता है", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Muted | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "शूरूआत की कहानी", "link_2": "डिस्कॉर्ड ", "link_3": "रिपोर्ट अ बग " }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "ban", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "उन उपयोगकर्ताओं की सूची जो एक प्राइवेट रूम में नहीं हैं और आप उन्हें फॉलो करते हैं।", "currentRoom": "वर्तमान में:", "startPrivateRoom": "उनके साथ एक प्राइवेट रूम शुरू करें", "title": "People" }, "followList": { "followHim": "follow", "followingHim": "following", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "रूम बनाये", "refresh": "रिफ्रेश", "editRoom": "एडिट रूम ", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "रूम गया, वापस जाए", "shareRoomLink": "रूम की लिंक शेयर करें", "inviteFollowers": "आप अपने ऑनलाइन फॉलोअर्स को आमंत्रित भेज सकते हैं:", "whenFollowersOnline": "जब आपके फॉलोअर्स ऑनलाइन होंगे, वे यहां दिखेंगे।" }, "login": { "headerText": "Taking voice conversations to the moon 🚀", "featureText_1": "Dark Theme", "featureText_2": "Open Sign-Ups", "featureText_3": "Cross-Platform Support", "featureText_4": "Open Source", "featureText_5": "Text Chat", "featureText_6": "Powered by Doge", "loginGithub": "log in with GitHub", "loginTwitter": "log in with Twitter", "createTestUser": "create test user", "loginDiscord": "Login with Discord " }, "myProfile": { "logout": "logout", "probablyLoading": "शायद लोड हो रहा है...", "voiceSettings": "वॉइस सेटिंग्स में जाएं", "soundSettings": "साउंड सेटिंग में जाएं", "deleteAccount": "खाता हटाएं", "overlaySettings": "ओवरले सेटिंग्स पर जाएं", "couldNotFindUser": "क्षमा करें, हमें वह उपयोगकर्ता नहीं मिला", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "वूप्स! यह पेज बातचीत में खो गया.", "goHomeMessage": "चिंता नहीं करे। आप ऐसा कर सकते हैं।", "goHomeLinkText": "go home" }, "room": { "speakers": "बोलनेवाले", "requestingToSpeak": "बोलने की अनुमति माँग रहे है", "listeners": "सुननेवाले", "allowAll": "अल्लोव आल ", "allowAllConfirm": "अरे यू सूरे ? थिस विल अल्लोव आल {{count}} रिक्वेस्टिंग उसेर्स तो स्पीक " }, "searchUser": { "search": "खोज करे..." }, "soundEffectSettings": { "header": "आवाज़", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "edit profile", "followsYou": "follows you", "followers": "फॉलोअर्स", "following": "फॉलोइंग", "followHim": "follow", "followingHim": "following", "copyProfileUrl": "copy profile url", "urlCopied": "URL copied to clipboard", "unfollow": "Unfollow", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "आवाज़ की सेटिंग्स", "mic": "mic:", "permissionError": "कोई माइक नहीं मिला, आपने या तो इस वेबसाइट को अनुमति नहीं दी है या माइक प्लग इन नहीं किया है।", "refresh": "रिफ्रेश माइक लिस्ट", "volume": "volume:", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "Invalid app title", "label": "Enter App Title" }, "header": "Overlay Settings" }, "download": { "starting": "Starting download...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "Click on the button below to start download", "download_now": "Download Now", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Banned Users", "unban": "unban", "noBans": "no one has been banned yet" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "वर्तमान रूम छोड़े", "confirmLeaveRoom": "क्या आप छोड़ना चाहते हैं?", "leave": "लीव", "inviteUsersToRoomBtn": "उपयोगकर्ताओं को रूम में आमंत्रित करें", "invite": "आमंत्रण", "toggleMuteMicBtn": "म्यूट माइक्रोफोन टॉगल करें", "mute": "म्यूट", "unmute": "अनम्यूट", "makeRoomPublicBtn": "रूम को सार्वजनिक करें!", "settings": "सेटिंग्स", "speaker": "बोलनेवाले", "listener": "सुननेवाले", "chat": "चैट", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "वर्तमान में आपका डिवाइस समर्थित नहीं है। आप एक", "linkText": "GitHub issue", "addSupport": "बना सकते है| हम आपके डिवाइस के लिए समर्थन जोड़ने का प्रयास करेंगे।" }, "inviteButton": { "invited": "invited", "inviteToRoom": "invite to room" }, "micPermissionBanner": { "permissionDenied": "आपने माइक को उपयोग करने की अनुमति को इनकार कर दी है (आपको ब्राउज़र सेटिंग्स में जा के सैट करें या वेबसाइट को फिर से लोड करने की आवश्यकता हो सकती है)", "dismiss": "डिसमिस", "tryAgain": "फिर प्रयास करें" }, "keyboardShortcuts": { "setKeybind": "शॉर्टकट सैट करें", "listening": "सुन रहे है", "toggleMuteKeybind": "टॉगल म्यूट कीबाइंड", "togglePushToTalkKeybind": "टॉगल push-to-talk कीबाइंड", "toggleOverlayKeybind": "toggle overlay keybind", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "किसी कारण से कोई ऑडियो उपभोक्ता नहीं है" }, "addToCalendar": { "add": "कैलेंडर में जोड़ें" }, "wsKilled": { "description": "Websocket was killed by the server. This usually happens when you open the website in another tab.", "reconnect": "फिर कनेक्ट करे" }, "modals": { "createRoomModal": { "public": "सार्वजनिक", "private": "प्राइवेट", "roomName": "रूम का नाम", "roomDescription": "रूम के बारे में", "descriptionError": "500 अक्षर से कम ", "nameError": "2 अक्षर से जयादा और 60 अक्षर से कम के बीच में होने चाहए", "subtitle": "Fill the following fields to start a new room" }, "invitedToJoinRoomModal": { "newRoomCreated": "नया रूम बन गया है", "roomInviteFrom": "रूम का निमंत्रण द्वारा", "justStarted": "उन्होंने अभी शुरुआत की है", "likeToJoin": ", क्या आप शामिल होना चाहेंगे?", "inviteReceived": "आपको आमंत्रित किया गया है" }, "editProfileModal": { "usernameTaken": "username taken", "avatarUrlError": "Invalid image", "avatarUrlLabel": "Github/Twitter/Discord avatar url", "displayNameError": "length 2 to 50 characters", "displayNameLabel": "Display Name", "usernameError": "length 4 to 15 characters and only alphanumeric/underscore", "usernameLabel": "Username", "bioError": "max length of 160 characters", "bioLabel": "Bio", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "क्या आप इस उपयोगकर्ता को आपके द्वारा बनाए गए सभी रूम में शामिल होने से रोकना चाहते हैं?", "blockUser": "block user", "makeMod": "make mod", "unmod": "unmod", "addAsSpeaker": "स्पीकर के रूप में जोड़ें", "moveToListener": "move to listener", "banFromChat": "ban from chat", "banFromRoom": "ban from room", "goBackToListener": "go back to listener", "deleteMessage": "इस मैसेज को हटा दें", "makeRoomCreator": "make room admin", "unBanFromChat": "Unban from Chat", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "बोलने की अनुमति की आवश्यकता है", "makePublic": "रूम को सार्वजनिक करें", "makePrivate": "रूम को प्राइवेट करें!", "renamePublic": "Set public room name", "renamePrivate": "Set private room name", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "People", "online": "ONLINE", "noOnline": "You have 0 friends online right now", "showMore": "Show more" }, "upcomingRoomsCard": { "upcomingRooms": "Upcoming rooms", "exploreMoreRooms": "Explore More Rooms" }, "search": { "placeholder": "Search for rooms, users or categories", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profile", "language": "Language", "reportABug": "Report A Bug", "useOldVersion": "Use Old Version", "logOut": { "button": "Log out", "modalSubtitle": "Are you sure you want to logout?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "अनुसूचित रूम", "noneFound": "कोई नहीं मिला", "allRooms": "सभी अनुसूचित रूम", "myRooms": "मेरे अनुसूचित रूम", "scheduleRoomHeader": "अनुसूचित रूम", "startRoom": "नया रूम", "modal": { "needsFuture": "भविष्य में होना चाहिए", "roomName": "रूम का नाम", "minLength": "काम से काम 2", "roomDescription": "रूम के बारे में" }, "tommorow": "TOMMOROW", "today": "TODAY", "deleteModal": { "areYouSure": "Are you sure you want to delete this scheduled room?" } }, "roomChat": { "title": "चैट", "emotesSoon": "[emotes soon]", "bannedAlert": "आपको चैट से प्रतिबंधित कर दिया गया है", "waitAlert": "आपको दूसरा मैसेज भेजने से पहले एक सेकंड इंतजार करना होगा", "search": "खोज करे", "searchResults": "खोज के परिणाम", "recent": "ज्यदातर इस्तेमाल किया जाने वाला", "sendMessage": "एक मैसेज भेजो", "whisper": "व्हिस्पर ", "welcomeMessage": "चैट में आपका स्वागत है!", "roomDescription": "रूम के बारे में", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Fueling rocket", "takingOff": "अलविदा", "inSpace": "In space", "approachingMoon": "Approaching moon", "lunarDoge": "Lunar doge", "approachingSun": "Approaching sun", "solarDoge": "Solar doge", "approachingGalaxy": "Approaching galaxy", "galacticDoge": "Galactic Doge", "spottedLife": "Planet with life spotted" }, "feed": { "yourFeed": "Your Feed" } } } ================================================ FILE: kibbeh/public/locales/hr/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "učitaj više", "loading": "učitavanje ...", "noUsersFound": "nije pronađen nijedan korisnik", "ok": "ok", "yes": "da", "no": "ne", "cancel": "Otkaži", "save": "spremi", "edit": "uredi", "delete": "brisanje", "joinRoom": "pridruži se sobi", "copyLink": "kopiraj vezu", "copied": "kopirano", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Molimo Vas da upamtite da bi korištenje DogeHouse-a bez dozvola za pristupačnost moglo uzrokovati neke neželjene greške", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Prigušen | DogeHouse", "deafenedTitle": "Oglušen | DogeHouse", "dashboard": "Nadzorna ploča", "connectionTaken": "Veza Zauzeta" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Priča o nastanku", "link_2": "Nesklad", "link_3": "Prijavi grešku" }, "pages": { "_comment": "Respective Page UI Internationalization String", "admin": { "ban": "zabrani", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Popis korisnika koji nisu u privatnoj sobi, a vi ih pratite", "currentRoom": "trenutno u:", "startPrivateRoom": "započnite privatnu sobu s njima", "title": "People" }, "followList": { "followHim": "zaprati", "followingHim": "pratitelji", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Stvori sobu", "refresh": "Osvježi", "editRoom": "Uredi Sobu", "desktopAlert": "Preuzmite DogeHouse Desktop aplikaciju danas!" }, "inviteList": { "roomGone": "soba je nestala, idi natrag", "shareRoomLink": "podijeli vezu do sobe", "inviteFollowers": "Možete pozvati svoje pratitelje koji su na mreži:", "whenFollowersOnline": "Kad su vaši pratitelji na mreži, oni će se pojaviti ovdje." }, "login": { "headerText": "Dovodimo glasovne razgovore na mjesec 🚀", "featureText_1": "Tamna tema", "featureText_2": "Otvorene prijave", "featureText_3": "Podrška za više platformi", "featureText_4": "Otvoreni kod", "featureText_5": "Tekstualni chat", "featureText_6": "Powered by Doge", "loginGithub": "prijava GitHub-om", "loginTwitter": "prijava Twitter-om", "createTestUser": "izradi test korisnika", "loginDiscord": "Prijava Discord-om" }, "myProfile": { "logout": "odjava", "probablyLoading": "vjerojatno se učitava ...", "voiceSettings": "idite na glasovne postavke", "soundSettings": "idite na postavke zvuka", "deleteAccount": "izbriši račun", "overlaySettings": "idi na postavke prekrivača", "couldNotFindUser": "Oprostite, nismo mogli pronači tog korisnika", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "Ups! Ova se stranica izgubila u razgovoru.", "goHomeMessage": "Ne brinite. Možete", "goHomeLinkText": "idi kući" }, "room": { "speaker": "Govornici", "requestingToSpeak": "Zahtjev za govor", "listeners": "Slušatelji", "allowAll": "Dopusti sve", "allowAllConfirm": "Jeste li sigurni? Ovo će omogućiti svim {{count}} korisnicima koji zahtijevaju da govore", "speakers": "Govornici" }, "searchUser": { "search": "traži..." }, "soundEffectSettings": { "header": "Zvuči", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "uredi profil", "followYou": "vas prati", "followers": "pratitelja", "following": "pratite", "followHim": "zapratite", "followingHim": "pratite", "followsYou": "vas prati", "copyProfileUrl": "kopiraj url profila", "urlCopied": "URL kopiran u međuspremnik", "unfollow": "Prestani pratiti", "about": "O", "bot": "Robot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Postavke glasa", "mic": "mikrofon:", "permissionError": "nisu pronađeni mikrofoni, ili ih nitko nije priključio ili niste dali dopuštenje ovom web mjestu.", "refresh": "osvježi popis mikrofona", "volume": "jačina zvuka:", "title": "Voice Settings" }, "overlaySettings": { "header": "Postavke Prekrivača", "input": { "errorMsg": "Molimo vas da unesete važeći naslov aplikacije", "label": "Upišite naslov aplikacije" } }, "download": { "starting": "Započinjemo preuzimanje...", "failed": "Nismo mogli automatski preuzeti, molimo Vas pokušajte kasnije", "visit_gh": "Posjetite GitHub izdanja", "prompt": "Pritisnite na gumb kako biste započeli preuzimanje", "download_now": "Preuzmi Sada", "download_for": "Preuzmi za {{platform}}" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Zabranjeni korisnici", "unban": "makni zabranu", "noBans": "još nitko nije zabranjen" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Napusti trenutnu sobu", "confirmLeaveRoom": "Jeste li sigurni da želite otići?", "leave": "Napusti", "inviteUsersToRoomBtn": "Pozovite korisnike u sobu", "invite": "Pozovite", "toggleMuteMicBtn": "Uključivanje / isključivanje mikrofona", "mute": "Isključi zvuk", "unmute": "Uključi zvuk", "makeRoomPublicBtn": "Učini sobu javnom!", "settings": "Postavke", "speaker": "Govornik", "listener": "Slušatelj", "chat": "Chat", "toggleDeafMicBtn": "Uključivanje / isključivanje Oglušenja", "deafen": "Ogluši", "undeafen": "Ozvuči" }, "deviceNotSupported": { "notSupported": "Vaš uređaj trenutno nije podržan. Možete stvoriti", "linkText": "'issue' na GitHubu", "addSupport": "i pokušati ćemo dodati podršku za vaš uređaj." }, "inviteButton": { "invited": "pozvan", "inviteToRoom": "pozovi u sobu" }, "micPermissionBanner": { "permissionDenied": "Dozvola odbijena za pokušaj pristupa vašem mikrofonu (možda ćete trebati ući u postavke preglednika i ponovo učitati stranicu)", "dismiss": "zanemari", "tryAgain": "pokušaj ponovo" }, "keyboardShortcuts": { "setKeybind": "postavi tipkovnički prečac", "listening": "Slušanje", "toggleMuteKeybind": "uključivanje/isključivanje isključivanja tipkovničkih prečaca", "togglePushToTalkKeybind": "uključivanje/isključivanje push-to-talk", "toggleOverlayKeybind": "Prećac za uključivanje / isključivanje prekrivača", "toggleDeafKeybind": "Prećac za uključivanje / isključivanje oglušenja" }, "userVolumeSlider": { "noAudioMessage": "iz nekog razloga nema potrošača zvuka" }, "addToCalendar": { "add": "Dodaj u kalendar" }, "wsKilled": { "description": "Poslužitelj je ubio WebSocket. To se obično događa kada web mjesto otvorite na drugoj kartici.", "reconnect": "ponovno se poveži" }, "modals": { "createRoomModal": { "public": "Javno", "private": "Privatno", "roomName": "Naziv sobe", "roomDescription": "Opis sobe", "descriptionError": "maksimalna duljina 500", "nameError": "mora imati između 2 i 60 znakova", "subtitle": "Unesite sljedeća polja kako bi ste stvorili novu sobu" }, "invitedToJoinRoomModal": { "newRoomCreated": "Nova soba stvorena", "roomInviteFrom": "Poziv u sobu od", "justStarted": "Tek su započeli", "likeToJoin": ", želite li se pridružiti?", "inviteReceived": "pozvani ste u" }, "editProfileModal": { "usernameTaken": "korisničko ime zauzeto", "avatarUrlError": "Neispravna slika", "avatarUrlLabel": "GitHub / Twitter avatar url", "displayNameError": "duljina od 2 do 50 znakova", "displayNameLabel": "Ime za prikaz", "usernameError": "duljina od 4 do 15 znakova i samo alfanumerički / donji znak", "usernameLabel": "Korisničko ime", "bioError": "maksimalna duljina od 160 znakova", "bioLabel": "Bio", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "Jeste li sigurni da želite blokirati ovog korisnika od toga da se pridruži bilo kojoj sobi koju ste ikad stvorili?", "blockUser": "blokiraj korisnika", "makeMod": "postavi za moderatora", "unmod": "makni moderatora", "addAsSpeaker": "dodaj kao govnornika", "moveToListener": "prebaci u slušatelja", "banFromChat": "zabrani mu chat", "banFromRoom": "zabrani mu pristup sobi", "goBackToListener": "vratite se na slušatelj", "deleteMessage": "izbriši ovu poruku", "makeRoomCreator": "napravi administratorom sobe", "unBanFromChat": "Makni zabranu sa Chat-a", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "zahtijeva dopuštenje za govor", "makePublic": "učini sobu javnom", "makePrivate": "učini sobu privatnom", "renamePublic": "Postavi ime javne sobe", "renamePrivate": "Postavi ime privatne sobe", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "Ljudi", "online": "NA MREŽI", "noOnline": "Imate 0 prijatelja koji su trenutno na mreži", "showMore": "Prikaži još" }, "upcomingRoomsCard": { "upcomingRooms": "Nadolazeće sobe", "exploreMoreRooms": "Istraži još soba" }, "search": { "placeholder": "Potraži za sobe, korisnike ili kategorije", "placeholderShort": "Potraži" }, "settingsDropdown": { "profile": "Profil", "language": "Jezik", "reportABug": "Prijavi Bug", "useOldVersion": "Koristi Staru verziju", "logOut": { "button": "Odjava", "modalSubtitle": "Jeste li sigurni da se želite odjaviti?" }, "debugAudio": { "debugAudio": "Debuggaj Audio", "stopDebugger": "Zaustavi Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Planirane sobe", "noneFound": "nije pronađen", "allRooms": "sve predviđene sobe", "myRooms": "moje predviđene sobe", "scheduleRoomHeader": "Raspored prostorija", "startRoom": "start soba", "modal": { "needsFuture": "mora biti u budućnosti", "roomName": "ime sobe", "roomDescription": "Opis", "minLength": "min duljina 2" }, "tommorow": "TOMMOROW", "today": "TODAY", "deleteModal": { "areYouSure": "Jeste li sigurni da želite izbrisati ovu nadolazeću sobu?" } }, "roomChat": { "title": "Chat", "emotesSoon": "[emotikoni uskoro]", "bannedAlert": "Dobili ste zabranu chatanja", "waitAlert": "Prije slanja nove poruke morate pričekati sekundu", "search": "Traži", "searchResults": "Rezultati pretraživanja", "recent": "Često se koristi", "sendMessage": "Pošalji poruku", "whisper": "Šaputanje", "welcomeMessage": "Dobrodošli u chat!", "roomDescription": "opis sobe", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Raketa za punjenje gorivom", "takingOff": "Polijetanje", "inSpace": "U svemiru", "approachingMoon": "Približavanje Mjeseca", "lunarDoge": "Lunarni doge", "approachingSun": "Približavanje suncu", "solarDoge": "Solarni doge", "approachingGalaxy": "Približavanje galaksiji", "galacticDoge": "Galaktički doge", "spottedLife": "Planeta sa životom uočena" }, "feed": { "yourFeed": "Vaš Feed" } } } ================================================ FILE: kibbeh/public/locales/hu/translation.json ================================================ { "common": { "loadMore": "Továbbiak betöltése", "loading": "Töltés...", "noUsersFound": "Nem található felhasználó!", "ok": "Ok", "yes": "Igen", "no": "Nem", "cancel": "Mégse", "save": "Mentés", "edit": "Szerkesztés", "delete": "Törlés", "joinRoom": "Csatlakozás", "copyLink": "Link másolása", "copied": "Kimásolva!", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Figyelem, a DogeHouse kisegítő lehetőségek nélküli futtatása nem kívánt hibákat okozhat", "copy": "Másolás", "error": "Hiba" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Némítva | DogeHouse", "deafenedTitle": "Süketítve | DogeHouse", "dashboard": "Home", "connectionTaken": "Kapcsolat megszakítva" }, "footer": { "link_1": "Története", "link_2": "Discord", "link_3": "Hiba jelentése" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "ban", "userStaffandContrib": "Staff & Hozzájáruló felhasználók", "staff": "Staff: ", "contributions": "hozzájárulás", "username": "Felhasználónév", "usrStaff": "Staff felhasználó", "usrContributions": "DogeHouse hozzájáruló", "reason": "oka", "usernamePlaceholder": "felhasználónév a műveletek végrehajtásához" }, "followingOnlineList": { "listHeader": "Követett felhasználók nyilvános szobában.", "currentRoom": "Jelenleg itt:", "startPrivateRoom": "Privát szoba létrehozása velük", "title": "Felhasználok" }, "followList": { "followHim": "Követés", "followingHim": "Követve", "title": "Felhasználók", "followingNone": "Nem követ senkit", "noFollowers": "Nincsenek követők" }, "home": { "createRoom": "Szoba létrehozása", "refresh": "Frissítés", "editRoom": "Szoba szerkesztése", "desktopAlert": "Töltse le a DogeHouse asztali alkalmazást még ma!" }, "inviteList": { "roomGone": "A beszélgetés véget ért", "shareRoomLink": "Szoba linkjének megosztása", "inviteFollowers": "Meghívhatja jelenleg online követőit:", "whenFollowersOnline": "Online követőid itt fognak megjelenni." }, "login": { "headerText": " Hangbeszélgetéseket a Holdra 🚀", "featureText_1": "Sötét Téma", "featureText_2": "Nyitott regisztrációk", "featureText_3": "Platformok közötti támogatás", "featureText_4": "Nyílt forráskód", "featureText_5": "Chat", "featureText_6": "Powered by Doge", "loginGithub": "Bejelentkezés GitHub fiókkal", "loginTwitter": "Bejelentkezés Twitter fiókkal", "createTestUser": "Teszt felhasználó létrehozása", "loginDiscord": "Bejelentkezés Discord fiókkal" }, "myProfile": { "logout": "Kijelentkezés", "probablyLoading": "Valószínüleg tölt...", "voiceSettings": "Hangbeállítások", "soundSettings": "Hanghatások", "deleteAccount": "Fiók törlése", "overlaySettings": "Átfedés beállítások megnyitása", "couldNotFindUser": "Sajnáljuk, a felhasználó nem található", "privacySettings": "Személyes tér beállításai" }, "notFound": { "whoopsError": "Whoops! Ez az oldal elveszett a beszélgetésben.", "goHomeMessage": "Ne aggódjon. Vissza tud lépni a", "goHomeLinkText": "főoldalra" }, "room": { "speakers": "Beszélők", "requestingToSpeak": "Beszélő jog kérése", "listeners": "Hallgatók", "allowAll": "Mindegyik engedélyezése", "allowAllConfirm": "Biztos benne? Ezzel engedélyezi mind a {{count}} felhasználónak, hogy beszéljen" }, "searchUser": { "search": "keresés..." }, "soundEffectSettings": { "header": "Hangok", "title": "Hangbeállítások", "playSound": "Hang lejátszása" }, "viewUser": { "editProfile": "Fiók szerkesztése", "followsYou": "Követ téged", "followers": "követő", "following": "követés", "followHim": "Követés", "followingHim": "Követve", "copyProfileUrl": "Fiók URL címének másolása", "urlCopied": "URL cím kimásolva a vágólapra", "unfollow": "Követés megszűntetése", "about": "", "aboutSuffix": "névjegye", "bot": "Bot", "profileTabs": { "about": "Névjegy", "rooms": "Szobák", "scheduled": "Ütemzett", "recorded": "Felvett", "clips": "Klippek", "admin": "Admin" }, "block": "Leiltás", "unblock": "Tiltás feloldása", "sendDM": "Üzenet küldése", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Hangbeállítások", "mic": "Mikrofon:", "permissionError": "Nem található mikrofon. Vagy nincs csatlakoztatva, vagy nem adta meg az engedélyt.", "refresh": "Elérhető mikrofonok frissítése", "volume": "Hangerő:", "title": "Hangbeállítások" }, "overlaySettings": { "input": { "errorMsg": "Invalid app title", "label": "Enter App Title" }, "header": "Átfedés beállítások" }, "download": { "starting": "Letöltés elkezdve...", "failed": "Could not auto-download, please try again later", "visit_gh": "GitHub kiadások megtekintése", "prompt": "A gombra kattintva elkezdheti a letöltést", "download_now": "Letöltés", "download_for": "Letöltés %platform%-ra (%ext%)" }, "privacySettings": { "title": "Személyes tér beállításai", "header": "Személyes tér", "whispers": { "label": "Suttogó üzenetek", "on": "Bekapcsolva", "off": "Kikapcsolva" } }, "botEdit": { "yourBots": "Bot fiókjaid", "bots": "Botok", "title": "Bot Information", "apiKey": "Api kulcs", "regenerate": "Újragenerálás", "reveal": "Kattintson az api kulcs megjelenítéséhez" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Kitiltott felhasználók", "unban": "Kitiltás visszavonása", "noBans": "Senki nem lett még kitiltva" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Kilépés a szobából", "confirmLeaveRoom": "Biztosan ki szeretne lépni?", "leave": "Kilépés", "inviteUsersToRoomBtn": "Felhasználók meghívása a szobába", "invite": "Meghívás", "toggleMuteMicBtn": "Mikrofon", "mute": "Némítás", "unmute": "Némítás feloldása", "makeRoomPublicBtn": "Szoba publikussá állítása!", "settings": "Beállítások", "speaker": "Beszélők", "listener": "Hallgatók", "chat": "Chat", "toggleDeafMicBtn": "Süketítés", "deafen": "Süketítés", "undeafen": "Süketítés visszavonása" }, "micPermissionBanner": { "permissionDenied": "A mikrofonhoz való hozzáférést megtagadták (lehet, hogy be kell lépnie a böngészőbeállításaiba és újra be kell töltenie az oldalt)", "dismiss": "Elutasítás", "tryAgain": "Próbálja újra" }, "modals": { "createRoomModal": { "public": "Publikus", "private": "Privát", "roomName": "Szoba neve", "roomDescription": "Szoba leírása", "descriptionError": "Maximum 500 karakter", "nameError": "Minimum 2, maximum 60 karakter", "subtitle": "Töltse ki a mezőket a szoba létrehozásához" }, "invitedToJoinRoomModal": { "newRoomCreated": "Új szoba létrehozva", "roomInviteFrom": "Meghívás tőle:", "justStarted": "Éppen most kezdenek", "likeToJoin": ", Szeretne csatlakozni?", "inviteReceived": "Meghívtak ide:" }, "editProfileModal": { "usernameTaken": "Foglalt felhasználónév", "avatarUrlError": "Helytelen kép", "avatarUrlLabel": "Github/Twitter/Discord profilkép URL címe", "displayNameError": "Minimum 2, maximum 50 karakter", "displayNameLabel": "Megjelenített név", "usernameError": "Minimum 4, maximum 15 karakter, csak alfanumerikus és aláhúzás", "usernameLabel": "Felhasználónév", "bioError": "Maximum 160 karakter", "bioLabel": "Bio", "bannerUrlLabel": "Twitter borítókép URL címe" }, "profileModal": { "blockUserConfirm": "Biztosan tiltaná a felhasználót a szobához való csatlakozástól?", "blockUser": "Felhasználó letiltása", "makeMod": "Előreléptetés moderátorrá", "unmod": "Visszaléptetés hallgatóvá", "addAsSpeaker": "Beszélőkhöz adás", "moveToListener": "Visszaléptetés hallgatóvá", "banFromChat": "Kitiltás a chatről", "banFromRoom": "Kitiltás a szobából", "goBackToListener": "Visszalépés hallgatóvá", "deleteMessage": "Üzenet törlése", "makeRoomCreator": "Előreléptetés tulajdonossá", "unBanFromChat": "Szoba kitiltás visszavonása", "banIPFromRoom": "IP cím bannolása a szobából" }, "roomSettingsModal": { "requirePermission": "Beszélői engedélyre van szükség", "makePublic": "Szoba publikussá állítása", "makePrivate": "Szoba priváttá állítása", "renamePublic": "Szoba publikus nevének beállítása", "renamePrivate": "Szoba privát nevének beállítása", "chatDisabled": "Chat kikapcsolása", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Bekapcsolva", "disabled": "Kikapcsolva", "followerOnly": "Csak követők" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "userVolumeSlider": { "noAudioMessage": "Valamilyen okból nincs hallgató" }, "addToCalendar": { "add": "Felvétel naptárba" }, "keyboardShortcuts": { "setKeybind": "Gyorsbillentyű beállítása", "listening": "Hallgatás...", "toggleMuteKeybind": "Némítás", "togglePushToTalkKeybind": "Push-to-talk", "toggleOverlayKeybind": "Átfedés gyorsgomb", "toggleDeafKeybind": "Süketítés gyorsgomb" }, "wsKilled": { "description": "A Websocket kapcsolatot megszakította a szerver. Ez általában akkor fordul elő, amikor több fülön meg van nyitva a weboldal.", "reconnect": "Újracsatlakozás" }, "deviceNotSupported": { "notSupported": "Az eszköze jelenleg nem támogatott. Létrehozhat egy", "linkText": "hibát", "addSupport": "GitHubon, és megpróbáljuk biztosítani eszköze támogatottságát." }, "inviteButton": { "invited": "Meghívott", "inviteToRoom": "Meghívás szobába" }, "followingOnline": { "people": "Felhasználok", "online": "ONLINE", "noOnline": "Jelenleg nincsenek online barátai", "showMore": "Továbbiak" }, "upcomingRoomsCard": { "upcomingRooms": "Ütemzett szobák", "exploreMoreRooms": "További szobák felfedezése" }, "search": { "placeholder": "Kereshet szobákat, felhasználókat vagy kategóriákat", "placeholderShort": "Keresés" }, "settingsDropdown": { "profile": "Profil", "language": "Nyelv", "reportABug": "Hiba jelentése", "useOldVersion": "Régi verzió", "logOut": { "button": "Kijelentkezés", "modalSubtitle": "Biztosan kijelentkezne?" }, "debugAudio": { "debugAudio": "Audió hibakereső", "stopDebugger": "Hibakereső leállítása" }, "downloadApp": "App letöltése", "developer": "Fejlesztői beállítások" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Hozzájáruló" }, "messagesDropdown": { "title": "Üzenetek", "showMore": "Több megjelenítése", "noMessages": "Nincsenek új üzenetek" } }, "modules": { "scheduledRooms": { "title": "Ütemezett szobák", "noneFound": "Szoba nem található", "allRooms": "Összes ütemezett szoba", "myRooms": "Ütemezett szobáim", "scheduleRoomHeader": "Szoba ütemezése", "startRoom": "Szoba indítása", "modal": { "needsFuture": "Jövőbeli dátum szükséges", "roomName": "Szoba neve", "minLength": "Minimum 2 karakter", "roomDescription": "Leírás" }, "tommorow": "HOLNAP", "today": "MA", "deleteModal": { "areYouSure": "Biztosan törölné az ütemzett szobát?" } }, "roomChat": { "title": "Chat", "emotesSoon": "[emotikonok hamarosan]", "bannedAlert": "Kitiltottak a beszélgetésből", "waitAlert": "Várnod kell egy másodpercet a következő üzenet küldése előtt.", "search": "Keresés", "searchResults": "Keresés eredménye", "recent": "Gyakran használt", "sendMessage": "Üzenet küldése", "whisper": "Privát üzenet", "welcomeMessage": "Üdv a beszélgetésben!", "roomDescription": "Szoba leírása", "disabled": "Chat letiltva", "messageDeletion": { "message": "Üzenet", "retracted": "visszavonva", "deleted": "törölve" } }, "roomStatus": { "fuelingRocket": "Rakéta feltöltése", "takingOff": "Kilövés", "inSpace": "Űrben", "approachingMoon": "Hold megközelítése", "lunarDoge": "Lunar doge", "approachingSun": "Nap megközelítése", "solarDoge": "Solar doge", "approachingGalaxy": "Galaxis megközelítése", "galacticDoge": "Galaktikus Doge", "spottedLife": "Élhető bolygó felfedezve" }, "feed": { "yourFeed": "Hírfolyamod" } } } ================================================ FILE: kibbeh/public/locales/id/translation.json ================================================ { "common": { "loadMore": "Muat lebih banyak", "loading": "Memuat...", "noUsersFound": "Pengguna tidak ditemukan!", "ok": "Ok", "yes": "Ya", "no": "Tidak", "cancel": "Batal", "save": "Simpan", "edit": "Ubah", "delete": "Hapus", "joinRoom": "Gabung ke ruangan", "copyLink": "Salin tautan", "copied": "Disalin", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Mohon ingat menggunakan DogeHouse tanpa ijin aksesibilitas mungkin akan menimbulkan error yang tidak di inginkan", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Bisu | DogeHouse", "deafenedTitle": "Menulikan | DogeHouse", "dashboard": "Dasbor", "connectionTaken": "Koneksi Diambil" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Kisah Awal", "link_2": "Discord", "link_3": "Laporkan kesalahan" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "Blokir", "userStaffandContrib": "Kontrubsi pengguna & staf", "staff": "Staf: ", "contributions": "Kontribusi", "username": "Nama pengguna", "usrStaff": "Pengguna yang staf", "usrContributions": "Kontribusi pengguna", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Daftar pengguna yang tidak ada di ruangan privat dan kamu ikuti.", "currentRoom": "Saat ini di:", "startPrivateRoom": "Mulai ruangan privat dengan mereka", "title": "People" }, "followList": { "followHim": "Ikuti", "followingHim": "Mengikuti", "title": "People", "followingNone": "Tidak mengikuti siapa pun", "noFollowers": "Tidak ada pengikut" }, "home": { "createRoom": "Buat Ruangan", "refresh": "Segarkan", "editRoom": "Ubah Ruangan", "desktopAlert": "Unduh aplikasi desktop DogeHouse hari ini!" }, "inviteList": { "roomGone": "Ruangan hilang, kembali", "shareRoomLink": "Bagikan tautan ke ruangan", "inviteFollowers": "Kamu bisa ajak pengikut kamu yang online:", "whenFollowersOnline": "Saat pengikut Anda online, mereka akan muncul di sini." }, "login": { "headerText": "Membawa obrolan suara ke bulan 🚀", "featureText_1": "Mode Gelap", "featureText_2": "Pendaftaran terbuka", "featureText_3": "Dukungan Lintas Platform", "featureText_4": "Sumber Terbuka", "featureText_5": "Obrolan Teks", "featureText_6": "Dipersembahkan oleh Doge", "loginGithub": "Masuk dengan GitHub", "loginTwitter": "Masuk dengan Twitter", "createTestUser": "buat akun uji coba", "loginDiscord": "Masuk dengan Discord" }, "myProfile": { "logout": "Keluar", "probablyLoading": "mungkin sedang memuat...", "voiceSettings": "Pengaturan suara", "soundSettings": "Pengaturan bunyi", "deleteAccount": "Hapus akun", "overlaySettings": "Pergi ke pengaturan lapisan", "couldNotFindUser": "Maaf, kami tidak bisa menemukan pengguna itu", "privacySettings": "Pengaturan privasi" }, "notFound": { "whoopsError": "Oops! Halaman ini hilang dalam percakapan.", "goHomeMessage": "Tak perlu khawatir. Kamu bisa", "goHomeLinkText": "kembali ke awal" }, "room": { "speakers": "Pembicara", "requestingToSpeak": "Mohon bicara", "listeners": "Pendengar", "allowAll": "Izinkan semua", "allowAllConfirm": "Apakah anda yakin? Ini akan mengizinkan semua {{count}} permintaan pengguna untuk bicara" }, "searchUser": { "search": "cari..." }, "soundEffectSettings": { "header": "Bunyi", "title": "Pengaturan Bunyi", "playSound": "Memainkan suara" }, "viewUser": { "editProfile": "Ubah profil", "followsYou": "Mengikutimu", "followers": "pengikut", "following": "mengikuti", "followHim": "Ikuti", "followingHim": "Mengikuti", "copyProfileUrl": "Salin url profil", "urlCopied": "URL disalin ke papan klip", "unfollow": "Berhenti mengikuti", "about": "Tentang", "bot": "Bot", "profileTabs": { "about": "Tentang", "rooms": "Ruangan", "scheduled": "Terjadwal", "recorded": "Terekam", "clips": "Klip", "admin": "Admin" }, "block": "Blokir", "unblock": "Berhenti blokir", "sendDM": "Kirim DM", "aboutSuffix": "", "errors": { "blocked": "Kamu diblokir oleh pengguna ini.", "default": "Whoops! Kami tidak bisa memuat pengguna ini." } }, "voiceSettings": { "header": "Pengaturan Suara", "mic": "Mikrofon:", "permissionError": "Mikrofon tidak ditemukan, mungkin kamu belum memasangnya atau belum memberikan website ini akses.", "refresh": "Muat ulang daftar mikrofon", "volume": "Suara:", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "Judul aplikasi tidak valid", "label": "Memasukkan judul aplikasi" }, "header": "Pengaturan lapisan" }, "download": { "starting": "Mengunduh...", "failed": "Tidak bisa mengunduh otomatis, mohon coba lagi", "visit_gh": "Kunjungi Rilis Github", "prompt": "Tekan tombol di bawah untuk memulai mengunduh", "download_now": "Unduh Sekarang", "download_for": "Unduh untuk %platform% (%ext%)" }, "privacySettings": { "title": "Pengaturan privasi", "header": "Pengaturan privasi", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Pengguna diblokir", "unban": "Berhenti blokir", "noBans": "Tidak ada pengguna yang diblokir" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Keluar ruangan saat ini", "confirmLeaveRoom": "Kamu yakin ingin keluar?", "leave": "Keluar", "inviteUsersToRoomBtn": "Undang pengguna ke ruangan", "invite": "Undang", "toggleMuteMicBtn": "Beralih mikrofon untuk membisu", "mute": "Bisu", "unmute": "Suarakan", "makeRoomPublicBtn": "Buat ruangan publik!", "settings": "Pengaturan", "speaker": "Pembicara", "listener": "Pendengar", "chat": "Percakapan", "toggleDeafMicBtn": "Beralih menulikan", "deafen": "menulikan", "undeafen": "Izinkan suara" }, "deviceNotSupported": { "notSupported": "Perangkatmu saat ini belum didukung. Kamu bisa membuat", "linkText": "isu di GitHub", "addSupport": "dan kami akan coba menambahkan dukungan untuk perangkatmu." }, "inviteButton": { "invited": "Diundang!", "inviteToRoom": "Undang ke ruangan" }, "micPermissionBanner": { "permissionDenied": "Izin ditolak saat mencoba akses mikrofon (kamu mungkin bisa ke pengaturan browser dan memuat ulang halaman)", "dismiss": "Hilangkan", "tryAgain": "Coba lagi" }, "keyboardShortcuts": { "setKeybind": "Beralih tombol", "listening": "Menunggu tombol", "toggleMuteKeybind": "Beralih tombol untuk membisu", "togglePushToTalkKeybind": "Beralih tombol klik-untuk-bicara", "toggleOverlayKeybind": "Beralih tombol lapisan", "toggleDeafKeybind": "Beralih tombol menulikan" }, "userVolumeSlider": { "noAudioMessage": "Perangkat audio tidak ditemukan" }, "addToCalendar": { "add": "Tambahkan ke Kalender" }, "wsKilled": { "description": "WebSocket dihentikan oleh server. Biasanya terjadi karena kamu membuka laman web ini di tab lain.", "reconnect": "Menghubungkan kembali" }, "modals": { "createRoomModal": { "public": "publik", "private": "privat", "roomName": "nama ruangan", "roomDescription": "deskripsi ruangan", "descriptionError": "panjang maksimal 500", "nameError": "panjang karakter antara 2 sampai 60", "subtitle": "Isi kolom-kolom berikut untuk memulai ruangan baru" }, "invitedToJoinRoomModal": { "newRoomCreated": "Ruangan Baru Dibuat", "roomInviteFrom": "Undangan Ruangan dari", "justStarted": "Mereka baru saja mulai", "likeToJoin": ", maukah kamu bergabung?", "inviteReceived": "kamu telah diundang ke" }, "editProfileModal": { "usernameTaken": "Nama pengguna telah dipakai", "avatarUrlError": "Gambar tidak valid", "avatarUrlLabel": "URL avatar Github/Twitter/Discord", "displayNameError": "Panjang 2 sampai 50 karakter", "displayNameLabel": "Nama Tampilan", "usernameError": "Panjang 4 sampai 15 karakter dan hanya alfanumerik/garis bawah", "usernameLabel": "Nama pengguna", "bioError": "Maksimal 160 karakter", "bioLabel": "Biodata", "bannerUrlLabel": "Spanduk Twitter URL" }, "profileModal": { "blockUserConfirm": "Anda yakin memblokir pengguna ini untuk bergabung ke ruangan yang anda buat?", "blockUser": "Blokir pengguna", "makeMod": "Jadikan moderator", "unmod": "Berhenti menjadi moderator", "addAsSpeaker": "Tambahkan sebagai pembicara", "moveToListener": "Pindah ke pendengar", "banFromChat": "Blokir dari percakapan", "banFromRoom": "Blokir dari ruangan", "goBackToListener": "Kembali ke pendengar", "deleteMessage": "Hapus pesan ini", "makeRoomCreator": "Buat admin ruangan", "unBanFromChat": "Bolehkan di percakapan", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "membutuhkan izin untuk berbicara", "makePublic": "buat ruangan jadi publik", "makePrivate": "buat ruangan jadi privat", "renamePublic": "Ubah nama ruangan publik", "renamePrivate": "Ubah nama ruangan privat", "chatDisabled": "nonaktifkan percakapan", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Percakapan", "enabled": "Diaktifkan", "disabled": "Tidak diaktifkan", "followerOnly": "Pengikut saja" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "Orang-orang", "online": "AKTIF", "noOnline": "Kamu tidak mempunyai teman yang sedang aktif", "showMore": "Tampilkan lebih banyak" }, "upcomingRoomsCard": { "upcomingRooms": "Ruangan yang akan datang", "exploreMoreRooms": "Jelajahi ruangan lain" }, "search": { "placeholder": "Cari pengguna, ruangan, atau kategori", "placeholderShort": "Cari" }, "settingsDropdown": { "profile": "Profil", "language": "Bahasa", "reportABug": "Laporkan Kesalahan", "useOldVersion": "Pakai Versi Lama", "logOut": { "button": "Keluar", "modalSubtitle": "Apakah kamu yakin ingin keluar?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Berhentikan Debugger" }, "downloadApp": "Unduh aplikasi", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staf", "dhContributor": "DogeHouse Kontributer" }, "messagesDropdown": { "title": "Pesan", "showMore": "Menampilkan lebih banyak", "noMessages": "Tidak ada pesan yang baru" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Ruangan Terjadwal", "noneFound": "tidak ditemukan", "allRooms": "seluruh ruangan terjadwal", "myRooms": "ruangan terjadwal saya", "scheduleRoomHeader": "Jadwalkan Ruangan", "startRoom": "mulai ruangan", "modal": { "needsFuture": "dibutuhkan di masa depan", "roomName": "nama ruangan", "minLength": "minimal panjang 2", "roomDescription": "Deskripsi" }, "tommorow": "BESOK", "today": "HARI INI", "deleteModal": { "areYouSure": "Apakah kamu yakin ingin menghapus ruangan yang sudah terjadwal ini?" } }, "roomChat": { "title": "Percakapan", "emotesSoon": "[emoji segera]", "bannedAlert": "Kamu dilarang dari percakapan", "waitAlert": "Kamu harus menunggu sebentar sebelum mengirim pesan lain", "search": "Cari", "searchResults": "Hasil Pencarian", "recent": "Sering Digunakan", "sendMessage": "Kirim Pesan", "whisper": "Bisikan", "welcomeMessage": "Selamat datang di percakapan!", "roomDescription": "Deskripsi ruangan", "disabled": "percakapan sudah dinonaktifkan", "messageDeletion": { "message": "pesan", "retracted": "ditarik kembali", "deleted": "dihapus" } }, "roomStatus": { "fuelingRocket": "Mengisi bahan bakar roket", "takingOff": "Lepas landas", "inSpace": "Di ruang angkasa", "approachingMoon": "Mendekati bulan", "lunarDoge": "Doge di bulan", "approachingSun": "Mendekati matahari", "solarDoge": "Doge di matahari", "approachingGalaxy": "Mendekati galaksi", "galacticDoge": "Doge di galaksi", "spottedLife": "Planet dengan kehidupan ditemukan" }, "feed": { "yourFeed": "Feed kamu" } } } ================================================ FILE: kibbeh/public/locales/is/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "hlaða meira", "loading": "hleður...", "noUsersFound": "engir notendur fundust", "ok": "ok", "yes": "já", "no": "nei", "cancel": "hætta við", "save": "vista", "edit": "breyta", "delete": "eyða", "joinRoom": "taktu þátt", "copyLink": "afrita hlekk", "copied": "afritað", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Please note running DogeHouse without accessibility permissions may cause unwanted errors", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Þaggaður | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Upprunasaga", "link_2": "Discord", "link_3": "Tilkynna vandamál" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "ban", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Listi yfir notendur sem eru ekki í einkaherbergi og þú fylgir.", "currentRoom": "núna í", "startPrivateRoom": "stofnaðu einkaspjallrásin með þeim", "title": "People" }, "followList": { "followHim": "follow", "followingHim": "following", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Stofna Spjallrás", "refresh": "Refresh", "editRoom": "Edit Room", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "rásin horfið, farðu tíl baka", "shareRoomLink": "deila hlekknum í herbergið", "inviteFollowers": "Þú getur boðið fylgjendum þínum sem eru á netinu:", "whenFollowersOnline": "Þegar fylgjendur þínir eru tengdir, munu þeir birtast hér." }, "login": { "headerText": "Tekur raddsamræður til tunglsins🚀", "featureText_1": "Næturþema", "featureText_2": "Opið fyrir nýja notendur", "featureText_3": "Styður flest tæki", "featureText_4": "Opinn hugbúnaður", "featureText_5": "Textaspjall", "featureText_6": "Knúið af Doge", "loginGithub": "innskráning með GitHub", "loginTwitter": "innskráning með Twitter", "createTestUser": "búa til prófanotanda", "loginDiscord": "Login with Discord" }, "myProfile": { "logout": "skrá út", "probablyLoading": "hleður...(líklega)", "voiceSettings": "farðu í raddstillingar", "soundSettings": "farðu í hljóðstillingar", "deleteAccount": "eyða reikningi", "overlaySettings": "go to overlay settings", "couldNotFindUser": "Sorry, we could not find that user", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "Úps! Þessi síða týndist í samtali.", "goHomeMessage": "Ekki hafa áhyggjur. Þú getur", "goHomeLinkText": "farið heim" }, "room": { "speakers": "Hátalarar", "requestingToSpeak": "Biðja um að tala", "listeners": "Hlustendur", "allowAll": "Allow all", "allowAllConfirm": "Are you sure? This will allow all {{count}} requesting users to speak" }, "searchUser": { "search": "leita..." }, "soundEffectSettings": { "header": "Hljóðin", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "breyta prófíl", "followsYou": "fylgir þér", "followers": "fylgjendur", "following": "eftirfarandi", "followHim": "follow", "followingHim": "following", "copyProfileUrl": "copy profile url", "urlCopied": "URL copied to clipboard", "unfollow": "Unfollow", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Talstillingar", "mic": "mic:", "permissionError": "engir hljóðnemar fundust, kannski hefurðu það ekki tengt eða hefur ekki gefið leyfi til að nota það.", "refresh": "endurnýja hljóðnemalistann", "volume": "hljóðstyrkur:", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "Invalid app title", "label": "Enter App Title" }, "header": "Overlay Settings" }, "download": { "starting": "Starting download...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "Click on the button below to start download", "download_now": "Download Now", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Bannaðir Notendur", "unban": "unban", "noBans": "Enginn hefur verið bannaður ennþá" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Yfirgefa spjallrásina", "confirmLeaveRoom": "Ertu viss um að þú viljir yfirgefa rásina?", "leave": "Yfirgefa", "inviteUsersToRoomBtn": "Bjóða notendum í spjallrásina", "invite": "Bjóða", "toggleMuteMicBtn": "Slökkva á hljóðnema", "mute": "Þagga niður", "unmute": "Afþagga", "makeRoomPublicBtn": "Opinbera rás!", "settings": "Stillingar", "speaker": "Ræðumaður", "listener": "Hlustandi", "chat": "Spjall", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "Tækið þitt er sem stendur ekki stutt. Þú getur búið til", "linkText": "beiðni á GitHub", "addSupport": "og þá verður reynt að bæta við stuðningi fyrir tækið þitt." }, "inviteButton": { "invited": "boðið", "inviteToRoom": "bjóða í spjallrás" }, "micPermissionBanner": { "permissionDenied": "Leyfi hafnað þegar reynt var að fá aðgang að hljóðnemanum þínum (þú gætir þurft að fara í vafrastillingar og endurhlaða síðuna)", "dismiss": "segja upp", "tryAgain": "reyna aftur" }, "keyboardShortcuts": { "setKeybind": "stilltu lyklabindingu", "listening": "er að hlusta", "toggleMuteKeybind": "afþagga", "togglePushToTalkKeybind": "slökkva á 'Ýttu til að tala'", "toggleOverlayKeybind": "toggle overlay keybind", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "enginn hljóðnotandi af einhverjum ástæðum" }, "addToCalendar": { "add": "Bæta við dagatal" }, "wsKilled": { "description": "WebSocket tengingin var drepinn af netþjóninum. Þetta gerist venjulega þegar þú opnar vefsíðuna á öðrum flipa.", "reconnect": "endurræsa tengingu" }, "modals": { "createRoomModal": { "public": "Opin rás", "private": "Einkarás", "roomName": "Rásarheiti", "roomDescription": "Rásarlýsing", "descriptionError": "hámarks lengd 500", "nameError": "verður að vera á bilinu 2 til 60 stafir", "subtitle": "Fill the following fields to start a new room" }, "invitedToJoinRoomModal": { "newRoomCreated": "Nýtt herbergi búið til", "roomInviteFrom": "Herbergisboð frá", "justStarted": "Byrjað rétt í þessu", "likeToJoin": ", vilt þú bætast í hópinn?", "inviteReceived": "þér hefur verið boðið í" }, "editProfileModal": { "usernameTaken": "notendanafn tekið", "avatarUrlError": "Ógild mynd", "avatarUrlLabel": "Github/Twitter/Discord avatar slóð", "displayNameError": "lengd 2 til 50 stafir", "displayNameLabel": "Sýna nafn", "usernameError": "lengd 4 til 15 stafir og aðeins tölustafur / undirstrikun", "usernameLabel": "Notendanafn", "bioError": "hámarkslengd 160 stafir", "bioLabel": "Bio", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "Ertu viss um að þú viljir hindra þennan notanda í að fara í hvaða herbergi sem þú stofnar?", "blockUser": "loka á notanda", "makeMod": "gera að moderator", "unmod": "taka moderator réttindi", "addAsSpeaker": "gera að mælanda", "moveToListener": "færa til hlustenda", "banFromChat": "banna frá spjalli", "banFromRoom": "banna frá rásinni", "goBackToListener": "fara aftur til hlustandans", "deleteMessage": "eyða skilaboðum", "makeRoomCreator": "gera að rásarstjórnenda", "unBanFromChat": "Unban from Chat", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "þurfa leyfi til að tala", "makePublic": "opinbera rás", "makePrivate": "gera að einkarás", "renamePublic": "Set public room name", "renamePrivate": "Set private room name", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "People", "online": "ONLINE", "noOnline": "You have 0 friends online right now", "showMore": "Show more" }, "upcomingRoomsCard": { "upcomingRooms": "Upcoming rooms", "exploreMoreRooms": "Explore More Rooms" }, "search": { "placeholder": "Search for rooms, users or categories", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profile", "language": "Language", "reportABug": "Report A Bug", "useOldVersion": "Use Old Version", "logOut": { "button": "Log out", "modalSubtitle": "Are you sure you want to logout?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Skipulagðar Rásir", "noneFound": "enginn fannst", "allRooms": "öll ætlunarásirnar", "myRooms": "áætlunarásirnar mínar", "scheduleRoomHeader": "Skipuleggðu rásir", "startRoom": "Stofna rás", "modal": { "needsFuture": "þarf að vera í framtíðinni", "roomName": "rásarheiti", "minLength": "lágmarkslengd 2", "roomDescription": "Description" }, "tommorow": "TOMMOROW", "today": "TODAY", "deleteModal": { "areYouSure": "Are you sure you want to delete this scheduled room?" } }, "roomChat": { "title": "Spjall", "emotesSoon": "[emojis koma fljótlega]", "bannedAlert": "Þú fékkst bann við spjalli", "waitAlert": "Þú verður að bíða í sekúndu áður en þú sendir önnur skilaboð", "search": "Leita", "searchResults": "Leitarniðurstöður", "recent": "Oft notað", "sendMessage": "Senda skilaboð", "whisper": "Hvísla", "welcomeMessage": "Velkomin í spjallið!", "roomDescription": "Rásarlýsing", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Fylli á eldflaugina", "takingOff": "Tek á loft", "inSpace": "Út í geimi", "approachingMoon": "Nálgast tunglið", "lunarDoge": "Tungldoge", "approachingSun": "Nálgast sólina", "solarDoge": "Sóldoge", "approachingGalaxy": "Nálgast vetrarbraut", "galacticDoge": "Vetrarbrautar Doge", "spottedLife": "Pláneta með lífi fundin" }, "feed": { "yourFeed": "Your Feed" } } } ================================================ FILE: kibbeh/public/locales/it/translation.json ================================================ { "common": { "loadMore": "Carica altro", "loading": "Caricamento...", "noUsersFound": "Nessun utente trovato", "ok": "Ok", "yes": "Sì", "no": "No", "cancel": "Cancella", "save": "Salva", "edit": "Modifica", "delete": "Elimina", "joinRoom": "Partecipa alla stanza", "copyLink": "Copia link", "copied": "Copiato", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Si prega di notare che l'utilizzo di DogeHouse senza i permessi di accesso potrebbe causare degli errori", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Microfono disabilitato | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Origini", "link_2": "Discord", "link_3": "Segnala un bug" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "Bandisci", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Lista di utenti che segui e che non sono in una stanza privata.", "currentRoom": "In questo momento è connesso a:", "startPrivateRoom": "Avvia una stanza privata con lui", "title": "People" }, "followList": { "followHim": "Segui", "followingHim": "Segui già", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Crea una stanza", "refresh": "Ricarica", "editRoom": "Edit Room", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "La stanza non esiste, torna indietro", "shareRoomLink": "Condividi link della stanza", "inviteFollowers": "Seguaci online che puoi invitare:", "whenFollowersOnline": "Quando i tuoi seguaci saranno online spunteranno qui." }, "login": { "headerText": "Portiamo le conversazioni vocali fino alla luna 🚀", "featureText_1": "Tema scuro", "featureText_2": "Registrazioni aperte", "featureText_3": "Supporto cross-platform", "featureText_4": "Open source", "featureText_5": "Chat di testo", "featureText_6": "Offerto da Doge", "loginGithub": "Accedi con Github", "loginTwitter": "Accedi con Twitter", "createTestUser": "Area utente per test", "loginDiscord": "Login with Discord" }, "myProfile": { "logout": "Disconnetti", "probablyLoading": "Probabilmente sto caricando...", "voiceSettings": "Modifica impostazioni della voce", "soundSettings": "Modifica impostazioni dei suoni", "deleteAccount": "Elimina account", "overlaySettings": "Vai alle impostazioni di sovrapposizione", "couldNotFindUser": "Sorry, we could not find that user", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "Oops! questa pagina si è persa nella conversazione.", "goHomeMessage": "Non preoccuparti. Puoi", "goHomeLinkText": "tornare alla schermata principale" }, "room": { "speakers": "Oratori", "requestingToSpeak": "Vogliono parlare", "listeners": "Ascoltatori", "allowAll": "Permetti a tutti", "allowAllConfirm": "Sei sicuro? Questo permetterà a {{count}} che vogliono parlare di prendere la parola" }, "searchUser": { "search": "Cerca..." }, "soundEffectSettings": { "header": "Suoni", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "Modifica profilo", "followsYou": "Ti segue", "followers": "Seguaci", "following": "Seguiti", "followHim": "Segui", "followingHim": "Segui già", "copyProfileUrl": "Copia link del profilo", "urlCopied": "Link copiato negli appunti", "unfollow": "Smetti di seguire", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Impostazioni della voce", "mic": "Microfono:", "permissionError": "Nessun microfono trovato, probabilmente non hai dato i permessi necessari a DogeHouse per poterlo usare o non ne hai attaccato nessuno.", "refresh": "Ricarica la lista dei microfoni", "volume": "Volume:", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "Titolo app invalido", "label": "Inserisci titolo app" }, "header": "Impostazioni sovrapposizione" }, "download": { "starting": "Starting download...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "Click on the button below to start download", "download_now": "Download Now", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Utenti banditi", "unban": "Riammetti", "noBans": "Nessuno è stato ancora bandito" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Lascia questa stanza", "confirmLeaveRoom": "Sei sicuro di voler lasciare la stanza?", "leave": "Lascia", "inviteUsersToRoomBtn": "Invita utenti alla stanza", "invite": "Invita", "toggleMuteMicBtn": "Abilita/disabilita microfono", "mute": "Disabilita microfono", "unmute": "Abilita microfono", "makeRoomPublicBtn": "Fai diventare la stanza pubblica!", "settings": "Impostazioni", "speaker": "Oratore", "listener": "Ascoltatori", "chat": "Chat", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "Il tuo dispositivo non è supportato. Puoi segnalare il problema", "linkText": "su Github", "addSupport": "e io proverò ad aggiungere il supporto per il tuo dispositivo." }, "inviteButton": { "invited": "Invitato", "inviteToRoom": "Invita alla stanza" }, "micPermissionBanner": { "permissionDenied": "Impossibile accedere al microfono: permesso negato (potresti aver bisogno di modificare le impostazioni del browser e/o di riavviare la pagina)", "dismiss": "Ignora", "tryAgain": "Riprova di nuovo" }, "keyboardShortcuts": { "setKeybind": "Imposta scorciatoia", "listening": "Ascoltatore", "toggleMuteKeybind": "Scorciatoia per attivare/disattivare il microfono", "togglePushToTalkKeybind": "Scorciatoia per il push-to-talk", "toggleOverlayKeybind": "Attiva/disattiva la schermata delle scorciatoie", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "Nessun audio è disponibile per qualche motivo" }, "addToCalendar": { "add": "Aggiungi al calendario" }, "wsKilled": { "description": "Il websocket è stato messo fuori uso dal server. Questo accade solitamente quando riapri il sito in un'altra scheda.", "reconnect": "Riconnettiti" }, "modals": { "createRoomModal": { "public": "Pubblica", "private": "Privata", "roomName": "Nome della stanza", "roomDescription": "Descrizione della stanza", "descriptionError": "La lunghezza massima è 500", "nameError": "Il nome deve essere lungo dai 2 ai 60 caratteri", "subtitle": "Fill the following fields to start a new room" }, "invitedToJoinRoomModal": { "newRoomCreated": "Nuova stanza creata", "roomInviteFrom": "Hai ricevuto un invito da", "justStarted": "Hanno appena iniziato", "likeToJoin": ", ti piacerebbe entrare?", "inviteReceived": "Sei stato invitato" }, "editProfileModal": { "usernameTaken": "Nome utente già preso", "avatarUrlError": "Immagine invalida", "avatarUrlLabel": "Url dell'avatar di Github/Twitter/Discord", "displayNameError": "Deve essere lungo dai 2 ai 50 caratteri", "displayNameLabel": "Nome da mostrare agli altri utenti", "usernameError": "Il nome utente deve essere lungo dai 4 ai 15 caratteri e può solo contenere caratteri alfanumerici e trattini bassi", "usernameLabel": "Nome utente", "bioError": "La lunghezza massima della biografia è di 160 caratteri", "bioLabel": "Biografia", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "Sei sicuro di voler bloccare questo utente? non potrà più entrare nelle stanze che crei.", "blockUser": "Blocca utente", "makeMod": "Attribuisci permessi di amministratore", "unmod": "Rimuovi permessi di amministratore", "addAsSpeaker": "Aggiungi come oratore", "moveToListener": "Rendi un ascoltatore", "banFromChat": "Bandisci dalla chat", "banFromRoom": "Bandisci dalla stanza", "goBackToListener": "Torna ad essere un ascoltatore", "deleteMessage": "Elimina questo messaggio", "makeRoomCreator": "Rendi amministratore della stanza", "unBanFromChat": "Unban from Chat", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "Richiedi permesso per parlare", "makePublic": "Rendi la stanza pubblica", "makePrivate": "Rendi la stanza privata", "renamePublic": "Imposta il nome della stanza pubblica", "renamePrivate": "Imposta il nome della stanza privata", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "People", "online": "ONLINE", "noOnline": "You have 0 friends online right now", "showMore": "Show more" }, "upcomingRoomsCard": { "upcomingRooms": "Upcoming rooms", "exploreMoreRooms": "Explore More Rooms" }, "search": { "placeholder": "Search for rooms, users or categories", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profile", "language": "Language", "reportABug": "Report A Bug", "useOldVersion": "Use Old Version", "logOut": { "button": "Log out", "modalSubtitle": "Are you sure you want to logout?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Stanze pianificate", "noneFound": "Nessuna stanza è stata trovata", "allRooms": "Tutte le stanze pianificate", "myRooms": "Le mie stanze pianificate", "scheduleRoomHeader": "Pianifica una stanza", "startRoom": "Avvia stanza", "modal": { "needsFuture": "Deve essere nel futuro", "roomName": "Nome della stanza", "minLength": "La lunghezza minima è 2", "roomDescription": "Descrizione" }, "tommorow": "TOMMOROW", "today": "TODAY", "deleteModal": { "areYouSure": "Are you sure you want to delete this scheduled room?" } }, "roomChat": { "title": "Chat", "emotesSoon": "[le emoticon saranno disponibili in futuro]", "bannedAlert": "Sei stato bandito dalla chat", "waitAlert": "Devi aspettare un secondo prima di mandare un altro messaggio in chat", "search": "Cerca", "searchResults": "Risultati della ricerca", "recent": "Usati frequentemente", "sendMessage": "Invia un messaggio", "whisper": "Sussurra", "welcomeMessage": "Benvenuto nella chat!", "roomDescription": "Descrizione della stanza", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Rifornimento razzo", "takingOff": "Decollo", "inSpace": "Nello spazio", "approachingMoon": "Avvicinamento alla luna", "lunarDoge": "Doge lunare", "approachingSun": "Avvicinamento al sole", "solarDoge": "Doge solare", "approachingGalaxy": "Avvicinamento alla galassia", "galacticDoge": "Doge galattico", "spottedLife": "Avvistato pianeta con forme di vita" }, "feed": { "yourFeed": "Your Feed" } } } ================================================ FILE: kibbeh/public/locales/ja/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "読み込む", "loading": "読込中...", "noUsersFound": "ユーザーが見つかりませんでした", "ok": "OK", "yes": "はい", "no": "いいえ", "cancel": "キャンセル", "save": "保存", "edit": "編集", "delete": "削除", "joinRoom": "ルームに参加", "copyLink": "リンクをコピー", "copied": "コピーしました", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Please note running DogeHouse without accessibility permissions may cause unwanted errors", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "ミュート | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Origin Story", "link_2": "Discord", "link_3": "バグを報告" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "BAN", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "フォローしていて、非公開ルームには参加していないユーザー", "currentRoom": "参加中:", "startPrivateRoom": "非公開ルームを開始", "title": "People" }, "followList": { "followHim": "follow", "followingHim": "following", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "ルーム作成", "refresh": "更新", "editRoom": "Edit Room", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "ルームが削除されました。前のページに戻ります", "shareRoomLink": "リンクを共有", "inviteFollowers": "オンラインのユーザーを招待:", "whenFollowersOnline": "フォロワーがオンラインになるとここに表示されます" }, "login": { "headerText": "月を目指して会話しよう! 🚀", "featureText_1": "ダークテーマ", "featureText_2": "参加自由", "featureText_3": "クロス プラットフォーム", "featureText_4": "オープンソース", "featureText_5": "テキストチャット", "featureText_6": "提供: Doge", "loginGithub": "GitHub でログイン", "loginTwitter": "Twitter でログイン", "createTestUser": "テストユーザーを作成", "loginDiscord": "Login with Discord" }, "myProfile": { "logout": "ログアウト", "probablyLoading": "きっと読込中...", "voiceSettings": "マイク設定", "soundSettings": "スピーカー設定", "deleteAccount": "アカウント削除", "overlaySettings": "go to overlay settings", "couldNotFindUser": "Sorry, we could not find that user", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "おっと!? このページは会話に紛れてしまいました。", "goHomeMessage": "ご心配なく。", "goHomeLinkText": "ホームに戻りましょう。" }, "room": { "speakers": "スピーカー", "requestingToSpeak": "発言をリクエスト", "listeners": "リスナー", "allowAll": "Allow all", "allowAllConfirm": "Are you sure? This will allow all {{count}} requesting users to speak" }, "searchUser": { "search": "検索..." }, "soundEffectSettings": { "header": "音声設定", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "プロフィールを編集", "followsYou": "フォローされています", "followers": "フォロワー", "following": "フォロー", "followHim": "follow", "followingHim": "following", "copyProfileUrl": "copy profile url", "urlCopied": "URL copied to clipboard", "unfollow": "Unfollow", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "マイク設定", "mic": "マイク:", "permissionError": "マイクが見つかりませんでした。 マイクが接続されていることを確認し、アクセスを許可してください。", "refresh": "更新", "volume": "ボリューム:", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "Invalid app title", "label": "Enter App Title" }, "header": "Overlay Settings" }, "download": { "starting": "Starting download...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "Click on the button below to start download", "download_now": "Download Now", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "BANされたユーザー", "unban": "BANを解除", "noBans": "BANされたユーザーはいません" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "ルームから退出する", "confirmLeaveRoom": "ルームから退出しますか?", "leave": "退出", "inviteUsersToRoomBtn": "ユーザーを招待する", "invite": "招待", "toggleMuteMicBtn": "ミュート切り替え", "mute": "ミュート", "unmute": "ミュート解除", "makeRoomPublicBtn": "ルームを公開", "settings": "設定", "speaker": "スピーカー", "listener": "リスナー", "chat": "チャット", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "デバイスはサポートされていません。", "linkText": "GitHubでissueを作成", "addSupport": "するとサポートを受けられます。" }, "inviteButton": { "invited": "招待", "inviteToRoom": "ルームに招待" }, "micPermissionBanner": { "permissionDenied": "マイクへのアクセスが許可されていません(ブラウザーの設定を変更して、ページを再読み込みする必要があるかもしれません)", "dismiss": "無視", "tryAgain": "リトライ" }, "keyboardShortcuts": { "setKeybind": "ショートカットキーを設定", "listening": "聞いています", "toggleMuteKeybind": "ミュート切り替え", "togglePushToTalkKeybind": "プッシュトゥートーク切り替え", "toggleOverlayKeybind": "toggle overlay keybind", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "何らかの原因で音声が出ません" }, "addToCalendar": { "add": "カレンダーに追加" }, "wsKilled": { "description": "WebSocketがサーバーによって強制終了されました。 これは通常、別のタブで開いたときに発生します。", "reconnect": "再接続" }, "modals": { "createRoomModal": { "public": "公開", "private": "非公開", "roomName": "名前", "roomDescription": "説明", "descriptionError": "500文字以内", "nameError": "2文字から60文字で設定してください", "subtitle": "Fill the following fields to start a new room" }, "invitedToJoinRoomModal": { "newRoomCreated": "ルームが作成されました", "roomInviteFrom": "ルームに招待されました", "justStarted": "作成者:", "likeToJoin": " | 参加しますか?", "inviteReceived": "招待者:" }, "editProfileModal": { "usernameTaken": "ユーザーネームトークン", "avatarUrlError": "画像が正しくありません", "avatarUrlLabel": "Github/Twitter/Discord 画像URL", "displayNameError": "2~50文字で設定してください", "displayNameLabel": "表示名", "usernameError": "4~15文字で設定してください(英数字・アンダーバーのみ)", "usernameLabel": "ユーザー名", "bioError": "160文字以内にしてください", "bioLabel": "自己紹介", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "このユーザーがあなたの作成したすべてのルームに参加するのを禁止しても良いですか?", "blockUser": "ブロック", "makeMod": "モデレーターに設定", "unmod": "モデレーターを解除", "addAsSpeaker": "スピーカーとして追加", "moveToListener": "リスナーに変更", "banFromChat": "チャットからBAN", "banFromRoom": "ルームからBAN", "goBackToListener": "リスナーに戻る", "deleteMessage": "メッセージを削除", "makeRoomCreator": "make room admin", "unBanFromChat": "Unban from Chat", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "発言を許可制にする", "makePublic": "ルームを公開に変更", "makePrivate": "ルームを非公開に変更", "renamePublic": "Set public room name", "renamePrivate": "Set private room name", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "People", "online": "ONLINE", "noOnline": "You have 0 friends online right now", "showMore": "Show more" }, "upcomingRoomsCard": { "upcomingRooms": "Upcoming rooms", "exploreMoreRooms": "Explore More Rooms" }, "search": { "placeholder": "Search for rooms, users or categories", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profile", "language": "Language", "reportABug": "Report A Bug", "useOldVersion": "Use Old Version", "logOut": { "button": "Log out", "modalSubtitle": "Are you sure you want to logout?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "開催予定のルーム", "noneFound": "見つかりませんでした", "allRooms": "すべて", "myRooms": "自分が作成したルーム", "scheduleRoomHeader": "開催予定を追加", "startRoom": "ルームを開始", "modal": { "needsFuture": "現在より後の日時を指定してください", "roomName": "名前", "minLength": "2文字以上の名前を指定してください", "roomDescription": "説明" }, "tommorow": "TOMMOROW", "today": "TODAY", "deleteModal": { "areYouSure": "Are you sure you want to delete this scheduled room?" } }, "roomChat": { "title": "チャット", "emotesSoon": "[絵文字がまもなく設定可能に]", "bannedAlert": "チャットからBANされました", "waitAlert": "次のメッセージを送る前に少しお待ちください", "search": "検索", "searchResults": "検索結果", "recent": "最近", "sendMessage": "メッセージを送信", "whisper": "ささやく", "welcomeMessage": "チャットへようこそ!", "roomDescription": "ルームの説明", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "燃料補給中", "takingOff": "発射", "inSpace": "現在、宇宙空間", "approachingMoon": "まもなく月", "lunarDoge": "月犬 / Lunar Doge", "approachingSun": "まもなく太陽", "solarDoge": "太陽犬 / Solar Doge", "approachingGalaxy": "まもなく銀河系", "galacticDoge": "銀河系犬 / Galactic Doge", "spottedLife": "新たな生命を発見" }, "feed": { "yourFeed": "Your Feed" } } } ================================================ FILE: kibbeh/public/locales/kk/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "тағы да жүктеу", "loading": "жүктелуде...", "noUsersFound": "қолданушылар табылмады", "ok": "ОК", "yes": "иә", "no": "жоқ", "cancel": "артқа", "save": "сақтау", "edit": "өзгерту", "delete": "жою", "joinRoom": "Бөлмеге қосылу", "copyLink": "Сілтемені көшіру", "copied": "Көшірілді", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Қол жетімділік рұқсатынсыз DogeHouseты қолдану керексіз қателіктер тудыруы мүмкін екенін ескеріңіз", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Үнсіз | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Жасалу оқиғасы", "link_2": "Discord", "link_3": "Қателер туралы хабарлау" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "бан", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Жабық бөлмеде емес сіз жазылған қолданушылар тізімі", "currentRoom": "қазір :", "startPrivateRoom": "Олармен жабық бөлме ашу", "title": "People" }, "followList": { "followHim": "жазылу", "followingHim": "Сіз жазылдыңыз", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Бөлме ашу", "refresh": "Жаңарту", "editRoom": "Edit Room", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "Бөлме жойылып кетті, артқа қайтыңыз", "shareRoomLink": "Бөлменің сілтемесімен бөлісу", "inviteFollowers": "Дәл қазір желідегі жазылмандарыңызды шақыра аласыз:", "whenFollowersOnline": "Жазылмандарыңыз желіде болғанда осы жерде пайда болады" }, "login": { "headerText": "Дауыстық байланысты айға дейін жеткіземіз 🚀", "featureText_1": "Қараңғы режим", "featureText_2": "Ашық тіркелі", "featureText_3": "Кроссплатформалылық", "featureText_4": "Open Source", "featureText_5": "Текстілік чат", "featureText_6": "Doge арқылы жұмыс істейді", "loginGithub": "GitHub арқылы кіру", "loginTwitter": "Twitter арқылы кіру", "createTestUser": "Текстілік қолданушыны жасау", "loginDiscord": "Login with Discord" }, "myProfile": { "logout": "шығу", "probablyLoading": "Сірә, жүктелуде...", "voiceSettings": "дауыс баптауларына өту", "soundSettings": "дыбыс баптауларына өту", "deleteAccount": "аккаунтты жою", "overlaySettings": "Қабаттасу (overlay) баптауларына өту", "couldNotFindUser": "Sorry, we could not find that user", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "Қап! Бұл бет сөйлесіп жатқанда жойылып кетіпті.", "goHomeMessage": "Тек алаңдамаңыз! Сіз келесі қадамды істей аласыз", "goHomeLinkText": "Басты бетке қайту" }, "room": { "speakers": "Спикерлер", "requestingToSpeak": "Сөйлегісі келетіндер", "listeners": "Тыңдармандар", "allowAll": "Барлығына рұқсат беру", "allowAllConfirm": "Бұл барлық рұқсат сұраған {{count}} қолданушыға, сөйлеуге мүмкіндік береді.Сіз сенімдісіз бе?" }, "searchUser": { "search": "іздеу..." }, "soundEffectSettings": { "header": "дыбыстар", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "Профайлды өңдеу", "followsYou": "сізге жазылған", "followers": "жазылмандар", "following": "қолданушысына жазылған", "followHim": "жазылу", "followingHim": "Сіз жазылғансыз", "copyProfileUrl": "Профайл сілтемесімен көшіру", "urlCopied": "Сілтеме көшірілді", "unfollow": "Жазылуды доғару", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Дауыс баптамалары", "mic": "микрофон:", "permissionError": "микрофоныз таба алмадық, ол қосылмаған немесе браузеріңізге қажетті рұқсат берілмеген.", "refresh": "микрофондар тізімін жаңарту", "volume": "Қаттылығы:", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "Қолданба тақырыбы жарамсыз", "label": "Қолданба тақырыбын еңгізіңіз" }, "header": "Қабаттасу (Overlay) баптамалары" }, "download": { "starting": "Starting download...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "Click on the button below to start download", "download_now": "Download Now", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Бұғатталған қолданушылар", "unban": "Бұғаттауды доғару", "noBans": "Ешкім бұғатталмаған" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Қазіргу бөлмеден шығып кету", "confirmLeaveRoom": "Шығып кететіңізге сенімдісіз бе?", "leave": "Шығу", "inviteUsersToRoomBtn": "Бөлмеге қолданушыларды шақыру", "invite": "Шақыру", "toggleMuteMicBtn": "Микрофон режимін ауыстыру", "mute": "Дыбысты өшіру", "unmute": "Дыбысты қосу", "makeRoomPublicBtn": "Бөлмені ашық бөлмегу айналдыру!", "settings": "Баптамалар", "speaker": "Спикер", "listener": "Тыңдармандар", "chat": "Чат", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "Өкінішке орай, сіздің құрылғыға қолдау көрсетілмейді. Сіз келесіні жасай аласыз", "linkText": "GitHub арқылы сұраныс жасауығызға болады", "addSupport": "сонда сіздің құрылғыңызға қолдау көрсетумен айналысіға тырысамыз." }, "inviteButton": { "invited": "шақырылған", "inviteToRoom": "бөлмеге шақыру" }, "micPermissionBanner": { "permissionDenied": "Микрофоныңызды қолдану мүмкін емес (сіз браузердің баптамаларын өзгертуіңіз керек немесе жай ғана бетті қайта жүктеп көріңіз)", "dismiss": "бетін қайтарып тастау", "tryAgain": "қайта көріңіз" }, "keyboardShortcuts": { "setKeybind": "пернені атау", "listening": "тыңдалуда", "toggleMuteKeybind": "Микрофонды осы пернені басқанда қосу", "togglePushToTalkKeybind": "Осы пернені басып сөйлеулң қосу", "toggleOverlayKeybind": "Қабаттасуды осы перне арқылы өшіріп/қосу", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "белгісіз себептермен дыбыс жоқ" }, "addToCalendar": { "add": "Күнтізбеге қосу" }, "wsKilled": { "description": "Вебсокетті сервер жойды. Бұл әдетте сайтты басқа бетте ашқан кезде болады.", "reconnect": "қайтадан қосылу" }, "modals": { "createRoomModal": { "public": "жариялы", "private": "жеке", "roomName": "бөлме атауы", "roomDescription": "бөлменің сипаттамасы", "descriptionError": "ең көп дегенде 500 символ", "nameError": "ұзындығы 2-ден 60 символға дейін болуы тиіс", "subtitle": "Fill the following fields to start a new room" }, "invitedToJoinRoomModal": { "newRoomCreated": "Жаңа бөлме жасалды", "roomInviteFrom": "Бөлмеге шақыртуды келесі қолданушыдан алдыңыз", "justStarted": "Олар жаңа ғана бастады", "likeToJoin": ", қосылғығыз келе ме?", "inviteReceived": "Сіз келесі бөлмеге шақырту алдыңыз" }, "editProfileModal": { "usernameTaken": "Бұл ат бос емес", "avatarUrlError": "Суретіңіз жарамайды", "avatarUrlLabel": "GitHub не Twitter аватарларының сілтемелері", "displayNameError": "ұзындығы 2-ден 50 символға дейін", "displayNameLabel": "Бұқаралық есім", "usernameError": "ұзындығы 4-тен 15 символ болуы керек және олар тек әріптік/сандық символ немес төменгі сызық (_) бола алады", "usernameLabel": "Қолданушы аты", "bioError": "Тек 160 символға дейін ғана", "bioLabel": "Мен туралы", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "Бұл қолданушыға сіздің барлық бөлмелеріңізге кіруіне жол бермеуге сенімдісіз бе?", "blockUser": "қолданушыны бұғаттау", "makeMod": "модератор қылдыру", "unmod": "модератор дәрежесінен айыру", "addAsSpeaker": "Спикер ретінде қосу", "moveToListener": "тыңдарман қылдыру", "banFromChat": "осы чаттан бұғаттау", "banFromRoom": "осы бөлмеден бұғаттау", "goBackToListener": "тыңдарман болу", "deleteMessage": "осы хабарламаны жою", "makeRoomCreator": "бөлме админы қылдыру", "unBanFromChat": "Unban from Chat", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "Мұнда сөйлеу үшін рұқсат алу қажет", "makePublic": "бөлмені жариялы ету", "makePrivate": "бөлмені жеке қылдыру", "renamePublic": "Set public room name", "renamePrivate": "Set private room name", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "People", "online": "ONLINE", "noOnline": "You have 0 friends online right now", "showMore": "Show more" }, "upcomingRoomsCard": { "upcomingRooms": "Upcoming rooms", "exploreMoreRooms": "Explore More Rooms" }, "search": { "placeholder": "Search for rooms, users or categories", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profile", "language": "Language", "reportABug": "Report A Bug", "useOldVersion": "Use Old Version", "logOut": { "button": "Log out", "modalSubtitle": "Are you sure you want to logout?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Жоспарланған бөлмелер", "noneFound": "табылмады", "allRooms": "барлық жоспарланған бөлмелер тізімі", "myRooms": "мен жоспарлған бөлмелер", "scheduleRoomHeader": "Жоспарланған бөлмелер", "startRoom": "бөлмені бастау", "modal": { "needsFuture": "кейін пайда болуы керек", "roomName": "бөлменің атауы", "roomDescription": "сипаттамасы", "minLength": "Ең кем дегенде 2 символ" }, "tommorow": "TOMMOROW", "today": "TODAY", "deleteModal": { "areYouSure": "Are you sure you want to delete this scheduled room?" } }, "roomChat": { "title": "Чат", "emotesSoon": "[эмодзилер жуырда]", "bannedAlert": "Сіз бұл чаттан бұғатталдыңыз", "waitAlert": "Келесі хабарлама жібергенше, сәл күтіңіз", "search": "Іздеу", "searchResults": "Іздеу нәтижесі", "recent": "Жиі қолданатындарыңыз", "sendMessage": "хабарламаны жіберу", "whisper": "Сыбырлау", "welcomeMessage": "Чатқа қош келдіңіз!", "roomDescription": "Бөлме сипаттамасы", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Зымыранға жанармай құйылуда", "takingOff": "Ұшырылуда", "inSpace": "Ғарышта", "approachingMoon": "Айға сәл қалуда", "lunarDoge": "Айлық doge", "approachingSun": "Күнге жетіп қалды", "solarDoge": "Күндік doge", "approachingGalaxy": "Галактика шегіне сәл қалды", "galacticDoge": "Галакалық doge", "spottedLife": "Өмірі бар планета анықталды" }, "feed": { "yourFeed": "Your Feed" } } } ================================================ FILE: kibbeh/public/locales/ko/translation.json ================================================ { "common": { "loadMore": "더 로드하기", "loading": "로딩중...", "noUsersFound": "사용자를 찾지 못했습니다", "ok": "확인", "yes": "예", "no": "아니오", "cancel": "취소", "save": "저장", "edit": "편집", "delete": "삭제", "joinRoom": "방 들어가기", "copyLink": "링크 복사", "copied": "복사됨", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "적절한 권한이 부여되지 않은 채로 Dogehouse를 실행하면 오류가 발생할 수 있습니다.", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "음소거 | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "사이트 역사", "link_2": "Discord", "link_3": "버그 보고" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "유저 차단", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "비공개 채팅방에 있지 않은 팔로우하는 사람들.", "currentRoom": "채팅방:", "startPrivateRoom": "비공개 채팅방에 입장하기.", "title": "People" }, "followList": { "followHim": "follow", "followingHim": "following", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "방 만들기", "refresh": "새로고침", "editRoom": "방 수정하기", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "채팅방이 삭제됨. 이전 페이지로 돌아가기.", "shareRoomLink": "채팅방 링크 공유", "inviteFollowers": "현재 온라인인 팔로워 초대하기:", "whenFollowersOnline": "팔로워가 온라인 상태이면 여기에 표시됩니다." }, "login": { "headerText": "음성 채팅으로 달 까지 가봅시다!🚀", "featureText_1": "어두운 테마", "featureText_2": "등록 하기", "featureText_3": "크로스 플랫폼 지원", "featureText_4": "오픈 소스", "featureText_5": "문자 채팅", "featureText_6": "멍멍이의 힘으로 구동됨 ", "loginGithub": "깃허브로 로그인", "loginTwitter": "트위터로 로그인", "createTestUser": "테스트 계정 만들기", "loginDiscord": "Login with Discord" }, "myProfile": { "logout": "로그아웃", "probablyLoading": "아마도 로딩 중...", "voiceSettings": "음성 설정 들어가기", "soundSettings": "소리 설정 들어가기", "deleteAccount": "계정 삭제", "overlaySettings": "go to overlay settings", "couldNotFindUser": "Sorry, we could not find that user", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "아이고! 페이지가 사라졌습니다", "goHomeMessage": "걱정할 필요 없습니다,", "goHomeLinkText": "홈페이지로 돌아 가기 " }, "room": { "speakers": "스피커", "requestingToSpeak": "발언권 요청", "listeners": "청취자", "allowAll": "Allow all", "allowAllConfirm": "Are you sure? This will allow all {{count}} requesting users to speak" }, "searchUser": { "search": "검색..." }, "soundEffectSettings": { "header": "소리", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "프로필 변경", "followsYou": "나를 팔로우하는 사람들", "followers": "팔로워들", "following": "팔로우하는 사람들", "followHim": "follow", "followingHim": "following", "copyProfileUrl": "프로필 URL 복사", "urlCopied": "URL이 클립보드에 복사 되었습니다.", "unfollow": "팔로우 취소", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "음성 설정", "mic": "마이크:", "permissionError": "마이크를 찾을 수 없거나, 연결되지 않았거나, 이 페이지에서 마이크를 사용할 수있는 권한이 없습니다.", "refresh": "마이크 목록 새로코침", "volume": "음량:", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "유효하지 않은 앱 타이틀 입니다.", "label": "앱 타이틀 입력하기" }, "header": "오버레이 설정" }, "download": { "starting": "Starting download...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "Click on the button below to start download", "download_now": "Download Now", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "차단된 사용자들", "unban": "차단해제", "noBans": "아직 아무도 차단되지 않았습니다." }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "채팅방 나가기", "confirmLeaveRoom": "정말 방에서 나가시겠습니까?", "leave": "나가기", "inviteUsersToRoomBtn": "채팅방에 유저 초대", "invite": "초대", "toggleMuteMicBtn": "마이크 음소거 토글", "mute": "음소거", "unmute": "음소거 취소", "makeRoomPublicBtn": "채팅방 공개 하기!", "settings": "설정", "speaker": "스피커", "listener": "청취자", "chat": "Chat", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "현재 기기는 지원되지 않습니다, ", "linkText": "깃허브에 이슈를 생성하시면", "addSupport": "빠른 시일 내에 기기에 대한 지원을 추가하겠습니다" }, "inviteButton": { "invited": "초대됨", "inviteToRoom": "초대하기" }, "micPermissionBanner": { "permissionDenied": "마이크 액세스가 거부되었습니다 (설정을 변경하고 페이지를 새로 고침해야 할 수도 있음)", "dismiss": "무시하기", "tryAgain": "다시 시도하기" }, "keyboardShortcuts": { "setKeybind": "키바인드 설정", "listening": "듣는중", "toggleMuteKeybind": "음소거 키 토글", "togglePushToTalkKeybind": "푸시 투 토크 키 토글", "toggleOverlayKeybind": "toggle overlay keybind", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "오디오 컨수머를 찾을수 없었습니다" }, "addToCalendar": { "add": "달력에 추가" }, "wsKilled": { "description": "웹 소켓 연결이 해제되었습니다. 주로 다른 탭에서 웹사이트를 여는 경우에 발생하는 오류 입니다.", "reconnect": "다시 연결" }, "modals": { "createRoomModal": { "public": "공개", "private": "비공개", "roomName": "채팅방 이름", "roomDescription": "채팅방 설명", "descriptionError": "최대 길이 500자", "nameError": "2자에서 60자 사이로 설정해주세요", "subtitle": "Fill the following fields to start a new room" }, "invitedToJoinRoomModal": { "newRoomCreated": "새로운 채팅방이 생성 되었습니다", "roomInviteFrom": "채팅방에서 초대", "justStarted": "채팅방이 생성되었습니다", "likeToJoin": ",들어가시겠습니까 ?", "inviteReceived": "초대된 방 이름" }, "editProfileModal": { "usernameTaken": "사용자 이름이 이미 채택되었습니다", "avatarUrlError": "사진이 잘몼되었습니다", "avatarUrlLabel": "깃허브/트위터 아바타 url", "displayNameError": "2자에서 50자 사이", "displayNameLabel": "표시된 이름", "usernameError": "길이는 4 ~ 15 자 이내 여야하며 문자, 숫자 또는 밑줄 만 허용됩니다.", "usernameLabel": "사용자 이름", "bioError": "최대 길이는 160 자입니다.", "bioLabel": "개인 프로필", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "이 사람을 블랙리스트에 추가 하시겠습니까? (다시는 당신이 생성 ​​한 채팅방에 참여할 수 없습니다).", "blockUser": "유저 차단", "makeMod": "관리자로 설정", "unmod": "관리자 자격 박탈", "addAsSpeaker": "스피커로 추가", "moveToListener": "청취자로 이동", "banFromChat": "채팅 차단", "banFromRoom": "채팅방 에서 차단", "goBackToListener": "청취자로 돌아가기", "deleteMessage": "이 메세지 삭제", "makeRoomCreator": "make room admin", "unBanFromChat": "Unban from Chat", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "발언권이 필요합니다", "makePublic": "채팅방 공개화", "makePrivate": "채팅방 비공개화", "renamePublic": "Set public room name", "renamePrivate": "Set private room name", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "People", "online": "ONLINE", "noOnline": "You have 0 friends online right now", "showMore": "Show more" }, "upcomingRoomsCard": { "upcomingRooms": "Upcoming rooms", "exploreMoreRooms": "Explore More Rooms" }, "search": { "placeholder": "Search for rooms, users or categories", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profile", "language": "Language", "reportABug": "Report A Bug", "useOldVersion": "Use Old Version", "logOut": { "button": "Log out", "modalSubtitle": "Are you sure you want to logout?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "예약 된 채팅방", "noneFound": "찾지 못함", "allRooms": "예약 된 채팅방 전부", "myRooms": "내가 예약한 채팅방", "scheduleRoomHeader": "채팅방 예약", "startRoom": "채팅방 시작", "modal": { "needsFuture": "시간을 미래로 설정하세요", "roomName": "채팅방 이름", "minLength": "최소 2자", "roomDescription": "설명" }, "tommorow": "내일", "today": "오늘", "deleteModal": { "areYouSure": "정말 예약 된 방을 제거하시겠습니까?" } }, "roomChat": { "title": "문자 채팅", "emotesSoon": "[이모티콘 업데이트중]", "bannedAlert": "문자 채팅에서 금지되었습니다.", "waitAlert": "다음 메시지를 보내기 전에 잠시 기다려야합니다.", "search": "검색", "searchResults": "검색 결과", "recent": "자주 사용됨", "sendMessage": "메세지 보내기", "whisper": "속삭이기", "welcomeMessage": "챗에 오신걸 환영합니다!", "roomDescription": "방 설명", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "로켓 연료 주입중..", "takingOff": "이륙!", "inSpace": "우주 속..", "approachingMoon": "달에 근접하는 중..", "lunarDoge": "Lunar doge", "approachingSun": "태양에 근접하는 중..", "solarDoge": "Solar doge", "approachingGalaxy": "은하계에 근접하는 중..", "galacticDoge": "Galactic Doge", "spottedLife": "생명체가 있는 새로운 행성에 도착" }, "feed": { "yourFeed": "Your Feed" } } } ================================================ FILE: kibbeh/public/locales/ku/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "زیاتر ببینە", "loading": "دابەزاندن...", "noUsersFound": "هیچ کەسێك نەدۆزرایەوە", "ok": "ئۆکەی", "yes": "بەڵێ", "no": "نەخێر", "cancel": "رەتکردنەوە", "save": "پاراستن", "edit": "هەموارکردن", "delete": "سڕینەوە", "joinRoom": "پەیوەندیکردن بە ژوورەوە", "copyLink": "کۆپیکردنی لینك", "copied": "کۆپیکرا!", "copy": "کۆپی", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "تکایە ئاگاداربە، کارکردن بە دۆجهاوس بێ مۆڵەتی چونەناوەوە دەکرێت هەڵەی نەخوازراوی بەدوادابێت", "error": "هەڵە" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "دۆجهاوس", "dashboard": "داشبۆرد", "connectionTaken": "پەیوەندی راییکرا", "mutedTitle": "بێ ئاخاوتن | دۆجهاوس", "deafenedTitle": "بێدەنگکردن | دۆجهاوس" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "چیرۆکی دەستپێك", "link_2": "دیسکۆرد", "link_3": "هۆشداری کێشەی تەکنیکی" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" }, "admin": { "ban": "Ban", "userStaffandContrib": "ستافی بەکارهێنەر و بەشداران", "staff": "ستاف: ", "contributions": "بەشداران", "username": "ناوی بەکارهێنەر", "usrStaff": "ستافی بەکارهێنەران", "usrContributions": "بەشداریی بەکارهێنەر", "reason": "هۆکار", "usernamePlaceholder": "بەکارهێنەر کار لەم بوارەدا دەکات" }, "download": { "prompt": "بەرنامەی کۆمپیوتەری دۆجهاوس داببەزێنە", "download_for": "Download for %platform% (%ext%)", "failed": "Unable to detect platform, please try again later or visit GitHub Releases", "visit_gh": "Visit GitHub Releases" }, "followingOnlineList": { "title": "کەس", "listHeader": "لیستی ئەو بەکارهێنەرانەی لە ژوورێکی تایبەتدا نین و تۆ ئاشنای پێیان.", "currentRoom": "Currently in:", "startPrivateRoom": "لە ژوورێکی تایبەتدا ئاخاوتن بکەن" }, "followList": { "title": "کەس", "followHim": "ئاشنایەتی", "followingHim": "ئاشنای بە", "followingNone": "ئاشنای کەس نیە", "noFollowers": "کەس ئاشنای نیە" }, "home": { "createRoom": "ژووری نوێ", "editRoom": "هەمواری ژوورەکە بکە", "refresh": "نوێکردنەوە", "desktopAlert": "ئەمڕۆ بەرنامەی کۆمپیوتەری دۆجهاوس داببەزێنە!" }, "inviteList": { "roomGone": "ژوورەکە نەماوە؛ بگەڕێرەوە", "shareRoomLink": "لینکی ژوورەکە شەیر بکە", "inviteFollowers": "دەتوانی بانگێشتی ئەو ئاشنایانەت بکەیت کە لەسەر هێڵن:", "whenFollowersOnline": "کاتێك ئاشنایانت لەسەر هێڵن، لێرە دەردەکەون: " }, "login": { "headerText": "ئاخاوتنی دەنگی تا سەر مانگ 🚀", "featureText_1": "Dark Theme", "featureText_2": "Open Sign-Ups", "featureText_3": "Cross-Platform Support", "featureText_4": "Open Source", "featureText_5": "Text Chat", "featureText_6": "Powered by Doge", "loginGithub": "Login with GitHub", "loginTwitter": "Login with Twitter", "loginDiscord": "Login with Discord", "createTestUser": "Create Test User" }, "myProfile": { "logout": "Logout", "probablyLoading": "probably loading...", "voiceSettings": "Voice Settings", "overlaySettings": "Overlay Settings", "soundSettings": "Sound Settings", "deleteAccount": "Delete Account", "couldNotFindUser": "Sorry, we could not find that user", "privacySettings": "Privacy Settings" }, "notFound": { "whoopsError": "Whoops! This page got lost in conversation.", "goHomeMessage": "Not to worry. You can", "goHomeLinkText": "go home" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "room": { "speakers": "Speakers", "requestingToSpeak": "Requesting to Speak", "listeners": "Listeners", "allowAll": "Allow all", "allowAllConfirm": "Are you sure? This will allow all {{count}} requesting users to speak" }, "searchUser": { "search": "search..." }, "soundEffectSettings": { "title": "Sound Settings", "header": "Sounds", "playSound": "Play Sound" }, "viewUser": { "editProfile": "Edit Profile", "followsYou": "Follows you", "followers": "followers", "following": "following", "followHim": "Follow", "unfollow": "Unfollow", "followingHim": "Following", "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "copyProfileUrl": "Copy Profile URL", "urlCopied": "URL copied to clipboard", "about": "About", "aboutSuffix": "", "bot": "Bot", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." }, "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" } }, "voiceSettings": { "title": "Voice Settings", "header": "Voice Settings", "mic": "Mic:", "permissionError": "No mics found, you either have none plugged in or haven't given this website permission.", "refresh": "Refresh Mic List", "volume": "Volume:" }, "overlaySettings": { "header": "Overlay Settings", "input": { "errorMsg": "Please enter a valid app title", "label": "App title" } } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Banned Users", "unban": "Unban", "noBans": "No one has been banned yet" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Leave Current Room", "confirmLeaveRoom": "Are you sure you want to leave?", "leave": "Leave", "inviteUsersToRoomBtn": "Invite Users to Room", "invite": "Invite", "toggleMuteMicBtn": "Toggle Mute", "toggleDeafMicBtn": "Toggle Deafen", "mute": "Mute", "unmute": "Unmute", "deafen": "Deafen", "undeafen": "Undeafen", "makeRoomPublicBtn": "Make Room Public!", "settings": "Settings", "speaker": "Speaker", "listener": "Listener", "chat": "Chat" }, "deviceNotSupported": { "notSupported": "Your device is currently not supported. You can create an", "linkText": "issue on GitHub", "addSupport": "and I will try adding support for your device." }, "followingOnline": { "people": "People", "online": "ONLINE", "noOnline": "You have 0 friends online right now", "showMore": "Show more" }, "inviteButton": { "invited": "Invited!", "inviteToRoom": "Invite to room" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" }, "micPermissionBanner": { "permissionDenied": "Permission denied trying to access your mic (you may need to go into browser settings and reload the page)", "dismiss": "Dismiss", "tryAgain": "Try Again" }, "keyboardShortcuts": { "setKeybind": "Set Keybind", "listening": "Listening...", "toggleMuteKeybind": "Toggle mute keybind", "toggleDeafKeybind": "Toggle deafen keybind", "toggleOverlayKeybind": "Toggle overlay keybind", "togglePushToTalkKeybind": "Toggle push-to-talk keybind" }, "userVolumeSlider": { "noAudioMessage": "No audio consumer for some reason" }, "upcomingRoomsCard": { "upcomingRooms": "Upcoming rooms", "exploreMoreRooms": "Explore more rooms" }, "addToCalendar": { "add": "Add to Calendar" }, "wsKilled": { "description": "WebSocket was killed by the server. This usually happens when you open the website in another tab.", "reconnect": "Reconnect" }, "search": { "placeholder": "Search for rooms, users or categories", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profile", "language": "Language", "reportABug": "Report A Bug", "useOldVersion": "Use Old Version", "logOut": { "button": "Log out", "modalSubtitle": "Are you sure you want to logout?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "modals": { "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" }, "createRoomModal": { "subtitle": "Fill the following fields to start a new room", "public": "Public", "private": "Private", "roomName": "Room name", "roomDescription": "Room description", "descriptionError": "Max length 500", "nameError": "Must be between 2 to 60 characters long" }, "invitedToJoinRoomModal": { "newRoomCreated": "New Room Created", "roomInviteFrom": "Room Invite from", "justStarted": "They just started", "likeToJoin": ", would you like to join?", "inviteReceived": "you've been invited to" }, "editProfileModal": { "usernameTaken": "Username taken", "avatarUrlError": "Invalid image", "avatarUrlLabel": "Github/Twitter/Discord avatar URL", "bannerUrlLabel": "Twitter banner URL", "displayNameError": "Length 2 to 50 characters", "displayNameLabel": "Display Name", "usernameError": "Length 4 to 15 characters and only alphanumeric/underscore", "usernameLabel": "Username", "bioError": "Max length of 160 characters", "bioLabel": "Bio" }, "profileModal": { "blockUserConfirm": "Are you sure you want to block this user from joining any room you ever create?", "blockUser": "Block user", "makeMod": "Promote to Mod", "unmod": "Demote from Mod", "addAsSpeaker": "Add as Speaker", "moveToListener": "Move to Listener", "unBanFromChat": "Unban from Chat", "banFromChat": "Ban from Chat", "banFromRoom": "Ban from Room", "banIPFromRoom": "Ban IP from Room", "goBackToListener": "Go Back to Listener", "deleteMessage": "Delete this Message", "makeRoomCreator": "Promote to Admin" }, "roomSettingsModal": { "requirePermission": "require permission to speak", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" }, "makePublic": "make room public", "makePrivate": "make room private", "renamePublic": "Set public room name", "renamePrivate": "Set private room name" } } }, "modules": { "_comment": "Modules UI Internationalization Strings", "feed": { "yourFeed": "Your feed" }, "scheduledRooms": { "title": "Scheduled Rooms", "noneFound": "none found", "allRooms": "all scheduled rooms", "myRooms": "my scheduled rooms", "scheduleRoomHeader": "Schedule Room", "startRoom": "start room", "tommorow": "TOMMOROW", "today": "TODAY", "modal": { "needsFuture": "needs to be in the future", "roomName": "room name", "roomDescription": "Description", "minLength": "min length 2" }, "deleteModal": { "areYouSure": "Are you sure you want to delete this scheduled room?" } }, "roomChat": { "title": "Chat", "emotesSoon": "[emotes soon]", "bannedAlert": "You have been banned from chat", "waitAlert": "You have to wait a second before sending another message", "search": "Search", "searchResults": "Search Results", "recent": "Frequently Used", "sendMessage": "Send a Message", "whisper": "Whisper", "welcomeMessage": "Welcome to chat!", "roomDescription": "Room description", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Fueling rocket", "takingOff": "Taking off", "inSpace": "In space", "approachingMoon": "Approaching moon", "lunarDoge": "Lunar Doge", "approachingSun": "Approaching sun", "solarDoge": "Solar Doge", "approachingGalaxy": "Approaching galaxy", "galacticDoge": "Galactic Doge", "spottedLife": "Planet with life spotted" } } } ================================================ FILE: kibbeh/public/locales/li/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "Mieer laaje", "loading": "Laaje...", "noUsersFound": "Gein gebroekers gevonge", "ok": "Ok", "yes": "Joa", "no": "Nhee", "cancel": "Annulere", "save": "Opsjloan", "edit": "Bewirke", "delete": "Verwijdere", "joinRoom": "Kamer ingoan", "copyLink": "Link kopieeren", "copied": "Gekopieerd", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Please note running DogeHouse without accessibility permissions may cause unwanted errors", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Gemute | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Ontstoan", "link_2": "Discord", "link_3": "Probleem melde" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "Banne", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Liest van gebroekers die dich volgst mèr niet in inge perseunlijke kamer zitten.", "currentRoom": "Op t moment in:", "startPrivateRoom": "Sjtart inge perseunlijke kamer mit disè persoon", "title": "People" }, "followList": { "followHim": "follow", "followingHim": "following", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Kamer make", "refresh": "Verviesje", "editRoom": "Edit Room", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "Kamer besjteed niet, gank teruk", "shareRoomLink": "Link van disè kamer deijle", "inviteFollowers": "Du kins dinge volgers die online sind oetneudigen", "whenFollowersOnline": "Wannier dinge volgens online sind, komme ze hie te sjtoan." }, "login": { "headerText": "Veer bringe gesjprekke noa de moan 🚀", "featureText_1": "Donkere Thema", "featureText_2": "Open Registraties", "featureText_3": "Cross-Platform Ondersjteuning", "featureText_4": "Open Source", "featureText_5": "Tekst Chat", "featureText_6": "Mögelik gemak durch Doge", "loginGithub": "Log in mit GitHub", "loginTwitter": "Log in mit Twitter", "createTestUser": "Maak inge test gebroeker", "loginDiscord": "Login with Discord" }, "myProfile": { "logout": "Oetlogge", "probablyLoading": "Waarschinlik aan t laaje...", "voiceSettings": "Gank noa spraakinsjtellinge", "soundSettings": "Gank noa geluidsinstjtellinge", "deleteAccount": "Account verwijdere", "overlaySettings": "go to overlay settings", "couldNotFindUser": "Sorry, we could not find that user", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "Och nhee! Disè pagina is verlore gegange in t gesjprek.", "goHomeMessage": "Mak niks oet. Du kins", "goHomeLinkText": "teruk noa de homepagina" }, "room": { "speakers": "Sjprekers", "requestingToSpeak": "Aanvroage om te sjpreke", "listeners": "Loestereers", "allowAll": "Allow all", "allowAllConfirm": "Are you sure? This will allow all {{count}} requesting users to speak" }, "searchUser": { "search": "Zeucke..." }, "soundEffectSettings": { "header": "Geluide", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "Profiel bewirke", "followsYou": "Volgt dich", "followers": "Volgers", "following": "Volgend", "followHim": "follow", "followingHim": "following", "copyProfileUrl": "copy profile url", "urlCopied": "URL copied to clipboard", "unfollow": "Unfollow", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Sjpraak", "mic": "Microfoon:", "permissionError": "Ging microfoon gevonge, du hubs waarschinlik ging microfoon aangesjloate of ging toesjtimming gegive.", "refresh": "Verviesj microfoonliest", "volume": "Volume:", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "Invalid app title", "label": "Enter App Title" }, "header": "Overlay Settings" }, "download": { "starting": "Starting download...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "Click on the button below to start download", "download_now": "Download Now", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Gebanne Gebroekers", "unban": "Unbanne", "noBans": "Ginge is noch geband" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Verloat huidige kamer", "confirmLeaveRoom": "Wit se zeker dat ze weg wils goan?", "leave": "Verloate", "inviteUsersToRoomBtn": "Nudig gebroekers oet veur disè kamer", "invite": "Oetneudigen", "toggleMuteMicBtn": "Microfoon aan- of oetzitte", "mute": "Mute", "unmute": "Unmute", "makeRoomPublicBtn": "Maak kamer veur ideringe!", "settings": "Insjtellinge", "speaker": "Sjpreker", "listener": "Loestereer", "chat": "Chat", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "Ding apparaat weurt neet ondersjteund. Du kins inge", "linkText": "issue op GitHub", "addSupport": "maken en ich zal ondersjteuning veur ding apparaat probeere toe te voegen." }, "inviteButton": { "invited": "Oetgeneudigd", "inviteToRoom": "Oetneudigen veur kamer" }, "micPermissionBanner": { "permissionDenied": "Du hubs ging toesjtimming gegive veur ding microfoon (du mos missjien in de insjtellinge van de browser goan en de pagina herlaaje)", "dismiss": "Negeere", "tryAgain": "Opnuj probere" }, "keyboardShortcuts": { "setKeybind": "Sjneltoets insjtelle", "listening": "Aan t loestere", "toggleMuteKeybind": "Sjakel mute sjneltoets", "togglePushToTalkKeybind": "Sjakel push-to-talk sjneltoets", "toggleOverlayKeybind": "toggle overlay keybind", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "Ging audioapparaat veur ing of andere reje" }, "addToCalendar": { "add": "Voeg toe aan agenda" }, "wsKilled": { "description": "WebSocket is gejstopt durch de server. Dit gebeurt vaak wannier de site opensjteet in inge andere tabblad.", "reconnect": "Opnuj verbinge" }, "modals": { "createRoomModal": { "public": "Veur ideringe", "private": "Perseunlijk", "roomName": "Kamer naam", "roomDescription": "Kamer umsjrieving", "descriptionError": "Maximale lingte van 500", "nameError": "Moet tusje de 2 en 60 karakters lang seen", "subtitle": "Fill the following fields to start a new room" }, "invitedToJoinRoomModal": { "newRoomCreated": "Neuje Kamer Gemak", "roomInviteFrom": "Kamer Oetneudiging van", "justStarted": "Ze sind net begonne", "likeToJoin": ", wils ze mit doan?", "inviteReceived": "Du bis oetgeneudigd veur" }, "editProfileModal": { "usernameTaken": "Gebroekersnaam al in gebroek", "avatarUrlError": "Ongeldig plétje", "avatarUrlLabel": "Github/Twitter/Discord avatar url", "displayNameError": "2 tot 50 karakters", "displayNameLabel": "Waargavenaam", "usernameError": "4 tot 15 karakters en alling mer litters, ciefers en underscore", "usernameLabel": "Gebroekersnaam", "bioError": "Maximaal 160 karakters", "bioLabel": "Bio", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "Wit ze zeker dat du disè gebroeker wills blokkere van alle kamers die du ooit noch gees maken?", "blockUser": "Gebroeker blokkere", "makeMod": "Beheerde make", "unmod": "Beheerder verwijdere", "addAsSpeaker": "Às spjreker toevoege", "moveToListener": "Verplaatsj noa sjpreker", "banFromChat": "Banne van de chat", "banFromRoom": "Banne van de kamer", "goBackToListener": "Gank terug noa loestereer", "deleteMessage": "Disè bericht verwijdere", "makeRoomCreator": "make room admin", "unBanFromChat": "Unban from Chat", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "Toesjtimming neudig om te sjpreke", "makePublic": "Maak kamer veur ideringe", "makePrivate": "Maak kamer perseunlijke", "renamePublic": "Set public room name", "renamePrivate": "Set private room name", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "People", "online": "ONLINE", "noOnline": "You have 0 friends online right now", "showMore": "Show more" }, "upcomingRoomsCard": { "upcomingRooms": "Upcoming rooms", "exploreMoreRooms": "Explore More Rooms" }, "search": { "placeholder": "Search for rooms, users or categories", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profile", "language": "Language", "reportABug": "Report A Bug", "useOldVersion": "Use Old Version", "logOut": { "button": "Log out", "modalSubtitle": "Are you sure you want to logout?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Geplende kamers", "noneFound": "Ginge gevonge", "allRooms": "Alle geplende kamers", "myRooms": "Minge geplende kamers", "scheduleRoomHeader": "Kamer plenne", "startRoom": "Kamer sjtarte", "modal": { "needsFuture": "Mot in de toekomst seen", "roomName": "Kamer naam", "roomDescription": "Umsjrieving", "minLength": "Minimale lingte van 2 karakters" }, "tommorow": "TOMMOROW", "today": "TODAY", "deleteModal": { "areYouSure": "Are you sure you want to delete this scheduled room?" } }, "roomChat": { "title": "Chat", "emotesSoon": "[Emotes binnekort]", "bannedAlert": "Du bis van de chat geband", "waitAlert": "Du mos ing seconde wachtte veurdat du wir ing bericht kins sjture.", "search": "Zeucke", "searchResults": "Zeukresultate", "recent": "Vaak Gebroek", "sendMessage": "Sjtuur ing bericht", "whisper": "Floestere", "welcomeMessage": "Welkom in de chat!", "roomDescription": "Kamer umsjrieving", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Raket tanken", "takingOff": "Opsjtiege", "inSpace": "In de ruimte", "approachingMoon": "Moan benajere", "lunarDoge": "Moan hond", "approachingSun": "Zon benajere", "solarDoge": "Zonne hond", "approachingGalaxy": "Heelal benajere", "galacticDoge": "Galactische hond", "spottedLife": "Planeet mit leefe gesjpot" }, "feed": { "yourFeed": "Your Feed" } } } ================================================ FILE: kibbeh/public/locales/lld/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "Ciaria de plü", "loading": "Ciariamënt...", "noUsersFound": "Degun utënt ciafé", "ok": "Ok", "yes": "Ê", "no": "No", "cancel": "Anulëia", "save": "Salva", "edit": "Modifichëia", "delete": "Eliminëia", "joinRoom": "Partezipëia alla ciamena", "copyLink": "Copiëia link", "copied": "Copié", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "An ve prëia de notè che le utilise de DogeHouse zënza autorisaziuns de azes pudess gaujé fai", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Microfon dejabilité | DogeHouse", "deafenedTitle": "Audio dejabilité | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Conesciun stabilida" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Origines", "link_2": "Discord", "link_3": "Segnalëia n bug" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "Banëia", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Lista de utënc che te stas do y che ne é nia te na ciamena privata.", "currentRoom": "Te chësc mumënt este colié a:", "startPrivateRoom": "Scomëncia na ciamena privata cun ël", "title": "People" }, "followList": { "followHim": "Stá do", "followingHim": "Bele sté do", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Cheriëia na ciamena", "refresh": "Ciaria danü", "editRoom": "Modifichëia la ciamena", "desktopAlert": "Desciaria la app desktop de DogeHouse incö!" }, "inviteList": { "roomGone": "La ciamena ne esist nia, va zoruch", "shareRoomLink": "Partësca le link dla ciamena", "inviteFollowers": "Porsones che te vas do online che pos invié:", "whenFollowersOnline": "Canche les porsones che te vas do é online, gnarai sö chiló." }, "login": { "headerText": "Portun les conversaziuns a usc cina ala löna 🚀", "featureText_1": "Tema scür", "featureText_2": "Registraziuns davertes", "featureText_3": "Suport sön plü plataformes", "featureText_4": "Open source", "featureText_5": "Discusciuns de test", "featureText_6": "Ofrí da Doge", "loginGithub": "Vá ite cun Github", "loginTwitter": "Vá ite cun Twitter", "loginDiscord": "Vá ite cun Discord", "createTestUser": "Area utënt por proes" }, "myProfile": { "logout": "Dejcoleghé", "probablyLoading": "Plü dessigü sunsi bele tl laur da ciarié...", "voiceSettings": "Modifichëia impostaziuns dla usc", "soundSettings": "Modifichëia impostaziuns di sonns", "deleteAccount": "Eliminëia account", "overlaySettings": "Vá ales impostaziuns dl overlay", "couldNotFindUser": "Al se desplej, ne un nia ciafé chël utënt", "privacySettings": "Privacy Settings" }, "notFound": { "whoopsError": "Ostia! Chësta plata é jüda pordüda tla conversaziun.", "goHomeMessage": "Nia te preocupé. Te pos", "goHomeLinkText": "va zoruch ala plata prinzipala" }, "room": { "speakers": "Anunziadus", "requestingToSpeak": "I ó baié", "listeners": "Ascutadus", "allowAll": "Conzedi a düc", "allowAllConfirm": "Es sigü? Chësc conzedará a {{count}} utënc che ó baié de pudëi ciacolè" }, "searchUser": { "search": "Chirida..." }, "soundEffectSettings": { "header": "Sonns", "title": "Impostaziuns dl sonn", "playSound": "Play Sound" }, "viewUser": { "editProfile": "Modifichëia profil", "followsYou": "Te stá do", "followers": "Chi che te stá do", "following": "Chi che tö stas do", "followHim": "Státi do", "followingHim": "Ti stas bele do", "copyProfileUrl": "Copiëia link dl profil", "urlCopied": "Link copié tles anotaziuns", "unfollow": "Lascia da sté do", "about": "About", "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Impostaziuns dla usc", "mic": "Microfon:", "permissionError": "Degun microfon ciafé, plü dessigü ne as nia dé les autorisaziuns nezesciaries a DogeHouse por podëi l'adoré o ne as nia un taché ite.", "refresh": "Ciaria da nü la lista di microfons", "volume": "Volum:", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "Titul aplicaziun invalid", "label": "Inserësca titul aplicaziun" }, "header": "Impostaziuns dl overlay" }, "download": { "starting": "Scomencé a desciarié...", "failed": "Al ne é nia sté poscibl desciarié automaticamënter, prëibel proa indô n iade plü tert", "visit_gh": "Vijitëia les emisciuns sön Github", "prompt": "Clichëia söl buttun dessot por mët man la desciariada", "download_now": "Desciaria sëgn", "download_for": "Desciaria por %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Utënc bandis", "unban": "Tol demez la bandida", "noBans": "Degun utënt é sté ciamó bandí" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Lascia chësta ciamena", "confirmLeaveRoom": "Es zigü de urëi lascié chësta ciamena?", "leave": "Lascia", "inviteUsersToRoomBtn": "Inviëia utënc tla ciamena", "invite": "Inviëia", "toggleMuteMicBtn": "Abilitëia/dejabilitëia microfon", "mute": "Dejabilitëia microfon", "unmute": "Abilitëia microfon", "makeRoomPublicBtn": "Fá deventé chësta ciamena publica!", "settings": "Impostaziuns", "speaker": "Anunziadú", "listener": "Ascutadú", "chat": "Discusciun", "toggleDeafMicBtn": "Abilitëia/dejabilitëia le audio", "deafen": "Dejabilité le audio", "undeafen": "Abilité le audio" }, "deviceNotSupported": { "notSupported": "Le tü despositif ne é nia suporté. Te pos segnalé chësc problem", "linkText": "sön Github", "addSupport": "y porvaran da le mët a jí por le tü despositif." }, "inviteButton": { "invited": "Invié", "inviteToRoom": "Inviëia ala ciamena" }, "micPermissionBanner": { "permissionDenied": "Imposcibl ciarié le microfon: autorisaziun negada (plü dessigü mësses modifiché les impostaziuns dl browser e/o ciarié la plata danü)", "dismiss": "Ignorëia", "tryAgain": "Proa ciamó n iade" }, "keyboardShortcuts": { "setKeybind": "Modifichëia keybinds", "listening": "Drüca val' botun!", "toggleMuteKeybind": "Keybind por abilité/dejabilité l microfon", "togglePushToTalkKeybind": "Keybind por l push-to-talk", "toggleOverlayKeybind": "Keybind por abilité/dejabilité la schermata dles keybinds", "toggleDeafKeybind": "Keybind por dejabilité le audio" }, "userVolumeSlider": { "noAudioMessage": "Degun audio é desponibl por val' rajun" }, "addToCalendar": { "add": "Ajunta al calënder" }, "wsKilled": { "description": "Le websocket é fora funziun dal server. Chësc sozed scialdi canche deures na plata danü te n'atra scheda.", "reconnect": "Ciaria danü" }, "modals": { "createRoomModal": { "public": "Publica", "private": "Privata", "roomName": "Inom dla ciamena", "roomDescription": "Descriziun dla ciamena", "descriptionError": "La lunghëza mascima è de 500 caratri", "nameError": "Le inom mëss ester dai 2 ai 60 caratri", "subtitle": "Implenësca les scatores dessot por cherié na nöia ciamena" }, "invitedToJoinRoomModal": { "newRoomCreated": "Nöia ciamena cheriada", "roomInviteFrom": "Te as ciafé n'invit da", "justStarted": "Ë á apëna scomencé", "likeToJoin": ", oresses jí ite?", "inviteReceived": "T'es sté invié" }, "editProfileModal": { "usernameTaken": "Inom utënt bele adoré", "avatarUrlError": "Imaja invalida", "avatarUrlLabel": "URL dl avatar de Github/Twitter", "displayNameError": "Mëss ester dai 2 ai 50 caratri", "displayNameLabel": "Inom mustré ai atri utënc", "usernameError": "Le inom utënt mëss ester dai 4 ai 15 caratteri, pó madër contigní caratri alfanumerics y righes basses", "usernameLabel": "Inom utënt", "bioError": "La lunghëza mascima dla biografia é de 160 caratri", "bioLabel": "Biografia", "bannerUrlLabel": "URL dl banner sön Twitter" }, "profileModal": { "blockUserConfirm": "Es zigü che te os bloché chësc utënt? Ël ne puderá nia plö gní ite tles ciamenes cheriades da te.", "blockUser": "Blochëia utënt", "makeMod": "Fá deventé n aministradú", "unmod": "Tola demez les autorisaziuns da aministradú", "addAsSpeaker": "Fá deventé n anunziadú", "moveToListener": "Fá deventé n ascutadú", "banFromChat": "Bandësca dala discusciun", "banFromRoom": "Bandësca dala ciamena", "goBackToListener": "Va zoruch ad ester n ascutadú", "deleteMessage": "Eliminëia chësc messaje", "makeRoomCreator": "Fá deventé n aministradú tla ciamena", "unBanFromChat": "Tola demez l ban por la discusciun", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "Damana l autorisaziun por baié", "makePublic": "Publichëia la ciamena", "makePrivate": "Privatisëia la ciamena", "renamePublic": "Modifichëia l inom dla ciamena publica", "renamePrivate": "Modifichëia l inom dla ciamena privata", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "Jënt", "online": "ONLINE", "noOnline": "Te as 0 amisc online sëgn", "showMore": "Mostra de plü" }, "upcomingRoomsCard": { "upcomingRooms": "Ciamenes che á da gní", "exploreMoreRooms": "Esplorëia plü ciamenes" }, "search": { "placeholder": "Chira ciamenes, utënc o categories", "placeholderShort": "Chirí" }, "settingsDropdown": { "profile": "Profil", "language": "Lingaz", "reportABug": "Segnalëia n bug", "useOldVersion": "Adora la verjiun vedla", "logOut": { "button": "Vá fora", "modalSubtitle": "Es zigü che te os jí fora dal account?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Archita Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Ciamenes planificades", "noneFound": "Degüna ciamena é stada ciafada", "allRooms": "Dütes les ciamenes planificades", "myRooms": "Les tües ciamenes planificades", "scheduleRoomHeader": "Planifichëia na ciamena", "startRoom": "Mët a jí la ciamena", "modal": { "needsFuture": "Mëss ester tl futur", "roomName": "Inom dla ciamena", "minLength": "La lunghëza minima è de 2 caratri", "roomDescription": "Descriziun" }, "tommorow": "INDOMAN", "today": "INCÖ", "deleteModal": { "areYouSure": "Es zigü che te os eliminé chësta ciamenta planificada?" } }, "roomChat": { "title": "Discusciun", "emotesSoon": "[les emoticon sará a desposiziun tl futur]", "bannedAlert": "Te es sté bandí dala discusciun", "waitAlert": "Mësses aspeté n secunt denant de mené n ater messaje tla discusciun", "search": "Chirí", "searchResults": "Resultac dla chirida", "recent": "Adorá gonot", "sendMessage": "Mené n messaje", "whisper": "Mormorëia", "welcomeMessage": "Benvenuto nella chat!", "roomDescription": "Descriziun dla ciamena", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Refornimënt racheta", "takingOff": "Aviada", "inSpace": "Tl cosmos", "approachingMoon": "Dlungia la lüna", "lunarDoge": "Doge sön la löna", "approachingSun": "Dlungia al sorëdl", "solarDoge": "Doge dl sorëdl", "approachingGalaxy": "Dlungia ala galassia", "galacticDoge": "Doge dla galassia", "spottedLife": "Afustié planët cun formes de vita" }, "feed": { "yourFeed": "Tó feed" } } } ================================================ FILE: kibbeh/public/locales/lt/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "Pakrauti daugiau", "loading": "Kraunasi...", "noUsersFound": "Vartotojų nerasta!", "ok": "Gerai", "yes": "Taip", "no": "Ne", "cancel": "Atšaukti", "save": "Išsaugoti", "edit": "Redaguoti", "delete": "Ištrinti", "joinRoom": "Prisijungti prie kambario", "copyLink": "Nukopijuoti nuorodą", "copied": "Nukopijuota", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Please note running DogeHouse without accessibility permissions may cause unwanted errors", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Nutildyta | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Kilmės istorija", "link_2": "Discord", "link_3": "Pranešti apie klaidą" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "Užblokuoti", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Sąrašas žmonių kurie nėra tavo privačiame kambaryje, tačiau tave seka", "currentRoom": "Šiuo metu yra:", "startPrivateRoom": "Sukurti privatų kambarį su jais", "title": "People" }, "followList": { "followHim": "follow", "followingHim": "following", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Sukurti kambarį", "refresh": "Refresh", "editRoom": "Edit Room", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "Kambario nebėra, grįžkite atgal", "shareRoomLink": "Pasidalinkite nuoroda į kambarį", "inviteFollowers": "Galite pakviesti savo sekėjus kurie yra prisijungę:", "whenFollowersOnline": "Kada tavo sekėjai yra prisijungę, jie pasirodys čia." }, "login": { "headerText": "Balso pokalbių nukėlimas į mėnulį 🚀", "featureText_1": "Tamsi tema", "featureText_2": "Atidarykite registraciją", "featureText_3": "Kelių platformų palaikymas", "featureText_4": "Atviro kodo", "featureText_5": "Pokalbių kambarys", "featureText_6": "Tvarkomas Doge", "loginGithub": "Prisijunkite su GitHub", "loginTwitter": "Prisijunkite su Twitter", "createTestUser": "Sukurkite testavimo naudotoją", "loginDiscord": "Login with Discord" }, "myProfile": { "logout": "Atsijungti", "probablyLoading": "Tikriausiai kraunasi...", "voiceSettings": "Eiti į balso nustatymus", "soundSettings": "Eiti į garso nustatymus", "deleteAccount": "Ištrinti vartotoją", "overlaySettings": "go to overlay settings", "couldNotFindUser": "Sorry, we could not find that user", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "Uppss! Šis puslapis buvo prarastas pokalbyje", "goHomeMessage": "Nesijaudink. Tu gali", "goHomeLinkText": "grįžti namo" }, "room": { "speakers": "Kalbėtojai", "requestingToSpeak": "Prašo kalbėti", "listeners": "Klausytojai", "allowAll": "Allow all", "allowAllConfirm": "Are you sure? This will allow all {{count}} requesting users to speak" }, "searchUser": { "search": "Ieškoma..." }, "soundEffectSettings": { "header": "Garsai", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "Redaguoti profilį", "followsYou": "Seka tave", "followers": "Sekėjai", "following": "Tu seki", "followHim": "follow", "followingHim": "following", "copyProfileUrl": "copy profile url", "urlCopied": "URL copied to clipboard", "unfollow": "Unfollow", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Garso nustatymai", "mic": "mikrofonas:", "permissionError": "nerasta mikrofonų, jūs arba neprijungėte tinklo, arba nedavėte šiai svetainei leidimo.", "refresh": "Atnaujinti mikrofonų sąrašą", "volume": "Garsas:", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "Invalid app title", "label": "Enter App Title" }, "header": "Overlay Settings" }, "download": { "starting": "Starting download...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "Click on the button below to start download", "download_now": "Download Now", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Užblokuoti vartotojai", "unban": "Atblokuoti", "noBans": "Niekas nebuvo užblokuotas kol kas" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Išeiti iš dabartinio kambario", "confirmLeaveRoom": "Ar tikrai norite išeiti?", "leave": "Išeiti", "inviteUsersToRoomBtn": "Pakviesti vartotojus į kambarį", "invite": "Pakviesti", "toggleMuteMicBtn": "Perjungti nutildytą mikrofoną", "mute": "Nutildyti", "unmute": "įjungti garsą", "makeRoomPublicBtn": "Padaryk kambarį viešu!", "settings": "Nustatymai", "speaker": "Kalbėtojas", "listener": "Klausytojai", "chat": "Chat", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "Jūsų įrenginys šiuo metu nepalaikomas.", "linkText": "Problema su GitHub", "addSupport": "Pasistengsiu suteikti galimybę Jūsų įrenginiui" }, "inviteButton": { "invited": "Pakviestas", "inviteToRoom": "Pakviesti į kambarį" }, "micPermissionBanner": { "permissionDenied": "Leidimas atmestas bandant pasiekti jūsų mikrofoną (gali tekti pereiti į naršyklės nustatymus ir atnaujinti puslapį)", "dismiss": "atmesti", "tryAgain": "Bandykite iš naujo" }, "keyboardShortcuts": { "setKeybind": "nustatyti klavišą", "listening": "Klausomasi", "toggleMuteKeybind": "perjungti nutildytą klavišą", "togglePushToTalkKeybind": "perjungti tiesioginio ryšio klavišą", "toggleOverlayKeybind": "toggle overlay keybind", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "dėl kokių nors priežasčių nėra garso vartotojo" }, "addToCalendar": { "add": "Pridėti į kalendorių" }, "wsKilled": { "description": "„Websocket“ užlaužtas serveris. Paprastai tai atsitinka, kai atidarote svetainę kitame skirtuke.", "reconnect": "Prisijungti iš naujo" }, "modals": { "createRoomModal": { "public": "Viešas", "private": "Privatus", "roomName": "Kambario pavadinimas", "roomDescription": "Kambario aprašymas", "descriptionError": "Didžiausias teksto ilgis yra 500 raidžių", "nameError": "Turi būti nuo 2 iki 60 raidžių ilgio", "subtitle": "Kad pradėtumėte kambarį, užpildykite formą" }, "invitedToJoinRoomModal": { "newRoomCreated": "Naujas kambarys sukurtas", "roomInviteFrom": "Pakvietimas į kambarį nuo", "justStarted": "Jie ką tik pradėjo", "likeToJoin": ", Ar norėtum prisijungti?", "inviteReceived": "Tu buvai pakviestas į" }, "editProfileModal": { "usernameTaken": "Vardas užimtas, panaudotas", "avatarUrlError": "Negalima nuotrauka", "avatarUrlLabel": "Github/Twitter/Discord avataro nuoroda", "displayNameError": "Ilgis nuo 2 iki 50 simbolių", "displayNameLabel": "Rodyti vardą", "usernameError": "Ilgis nuo 4 iki 15 simbolių ir tik raidinis(arba skaitmeninis)/apatinis pabraukimas", "usernameLabel": "Slapyvardis", "bioError": "Didžiausias ilgis - 160 simbolių", "bioLabel": "Bio", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "Ar tikrai norite užblokuoti šį vartotoją prisijungti prie bet kurio jūsų ateityje sukurto kambario?", "blockUser": "Užblokuoti vartotoją", "makeMod": "make mod", "unmod": "unmod", "addAsSpeaker": "Pridėti, kaip kalbėtoją", "moveToListener": "Perkelti į klausytojus", "banFromChat": "Užblokuoti iš pokalbio", "banFromRoom": "Užblokuoti iš kambario", "goBackToListener": "Gražinti atgal į klausytojus", "deleteMessage": "Ištrinti šią žinutę", "makeRoomCreator": "make room admin", "unBanFromChat": "Unban from Chat", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "Reikalingas patvirtinimas kalbėti", "makePublic": "Padaryti kambarį viešą", "makePrivate": "Padaryti kambarį privatų", "renamePublic": "Set public room name", "renamePrivate": "Set private room name", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "Žmonės", "online": "PRISIJUNGĘ", "noOnline": "Nėra prisijungusių draugų", "showMore": "Rodyti daugiau" }, "upcomingRoomsCard": { "upcomingRooms": "Būsimi kambariai", "exploreMoreRooms": "Rodyti daugiau kambarių" }, "search": { "placeholder": "Ieškoti kambarių, vartotojų ar kategorijų", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profilis", "language": "Kalba", "reportABug": "Pranešti apie klaidą", "useOldVersion": "Naudoti seną versiją", "logOut": { "button": "Atsijungti", "modalSubtitle": "Ar tikrai norite atsijungti?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Suplanuoti kambariai", "noneFound": "Nieko nerasta", "allRooms": "Visi suplanuoti kambariai", "myRooms": "Mano suplanuoti kambariai", "scheduleRoomHeader": "Suplanuoti kambarį", "startRoom": "Pradėti kambarį", "modal": { "needsFuture": "Turi būti ateityje", "roomName": "Kambario pavadinimas", "minLength": "Mažiausias ilgis 2", "roomDescription": "Kambario aprašymas" }, "tommorow": "TOMMOROW", "today": "TODAY", "deleteModal": { "areYouSure": "Are you sure you want to delete this scheduled room?" } }, "roomChat": { "title": "Pokalbis", "emotesSoon": "[emotes soon]", "bannedAlert": "Buvai užblokuotas šiame kambaryje", "waitAlert": "Prieš išsiųsdami kitą pranešimą, turite palaukti sekundę", "search": "Ieškoti", "searchResults": "Paieškos rezultatai", "recent": "Dažniausiai naudojami", "sendMessage": "Siųsti žinutę", "whisper": "Pašnibšdėti", "welcomeMessage": "Sveikas atvykęs į kambarį", "roomDescription": "Kambario aprašymas", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Fueling rocket", "takingOff": "Taking off", "inSpace": "In space", "approachingMoon": "Approaching moon", "lunarDoge": "Lunar doge", "approachingSun": "Approaching sun", "solarDoge": "Solar doge", "approachingGalaxy": "Approaching galaxy", "galacticDoge": "Galactic Doge", "spottedLife": "Planet with life spotted" }, "feed": { "yourFeed": "Your Feed" } } } ================================================ FILE: kibbeh/public/locales/lv/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "Ielādēt vairāk", "loading": "Ielāde...", "noUsersFound": "Lietotāji nav atrasti", "ok": "labi", "yes": "jā", "no": "nē", "cancel": "atcelt", "save": "saglabāt", "edit": "rediģēt", "delete": "dzēst", "joinRoom": "Pieslēgties istabai", "copyLink": "Kopēt saiti", "copied": "Nokopēts", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Please note running DogeHouse without accessibility permissions may cause unwanted errors", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Skaņa izslēgta | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Izstrādes vēsture", "link_2": "Discord", "link_3": "Ziņot par kļūdu" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "bloķēšana", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Lietotāju saraksts, kuri ir publiskā istabā un kuriem Jūs sekojat.", "currentRoom": "Pašlaik istabā:", "startPrivateRoom": "Izveidot privātu istabu ar viņiem", "title": "People" }, "followList": { "followHim": "follow", "followingHim": "following", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Izveidot istabu", "refresh": "Atjaunot", "editRoom": "Edit Room", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "Istaba pazuda, atgriezieties atpakaļ", "shareRoomLink": "Dalīties ar saiti uz istabu", "inviteFollowers": "Jūs varat uzaicināt savus sekotājus, kuri pašlaik ir tiešsaistē :", "whenFollowersOnline": "Kad jūsu sekotāji ir tiešsaistē, viņi tiek parādīti šeit." }, "login": { "headerText": "Paceļam balss sarunas līdz mēnesim 🚀", "featureText_1": "Tumšais motīvs", "featureText_2": "Atvērtā reģistrācija", "featureText_3": "Starpplatformu", "featureText_4": "Atvērtais pirmkods", "featureText_5": "Teksta čats", "featureText_6": "Darbojas ar Doge", "loginGithub": "Ieiet caur GitHub", "loginTwitter": "Ieiet caur Twitter", "createTestUser": "Izveidot izmēģinājuma lietotāju", "loginDiscord": "Login with Discord" }, "myProfile": { "logout": "Iziet", "probablyLoading": "visticamāk, notiek ielāde...", "voiceSettings": "salss ziņu iestatījumi", "soundSettings": "skaņas iestatījumi", "deleteAccount": "dzēst kontu", "overlaySettings": "go to overlay settings", "couldNotFindUser": "Sorry, we could not find that user", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "Ups! Šī lapa tika pazaudēta sarunā.", "goHomeMessage": "Nepārdzīvojiet. Jūs varat", "goHomeLinkText": "doties mājās" }, "room": { "speakers": "Runātāji", "requestingToSpeak": "Vēlas runāt", "listeners": "Klausītāji", "allowAll": "Allow all", "allowAllConfirm": "Are you sure? This will allow all {{count}} requesting users to speak" }, "searchUser": { "search": "meklēšana..." }, "soundEffectSettings": { "header": "skaņas", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "rediģēt profilu", "followsYou": "seko jums", "followers": "sekotāji", "following": "seko", "followHim": "follow", "followingHim": "following", "copyProfileUrl": "copy profile url", "urlCopied": "URL copied to clipboard", "unfollow": "Unfollow", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Mikrofona iestatījumi", "mic": "mikrofons:", "permissionError": "mikrofons nav atrasts, tas nav pieslēgts vai pārlūkam nav atbilstošās atļaujas.", "refresh": "atjaunināt mikrofonu sarakstu", "volume": "skaļums:", "title": "Voice Settings" }, "overlaySettings": { "header": "Overlay Settings", "input": { "errorMsg": "Please enter valid app title", "label": "Enter app title" } }, "download": { "starting": "Starting download...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "Click on the button below to start download", "download_now": "Download Now", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Bloķētie lietotāji", "unban": "atbloķēt", "noBans": "nav bloķētu lietotāju" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Pamest istabu", "confirmLeaveRoom": "Vai esat pārliecināts?", "leave": "Iziet", "inviteUsersToRoomBtn": "Uzaicināt lietotājus uz istabu", "invite": "Uzaicināt", "toggleMuteMicBtn": "Ieslēgt/izslēgt mikrofonu", "mute": "Izslēgt skaņu", "unmute": "Ieslēgt skaņu", "makeRoomPublicBtn": "Atvērt istabu!", "settings": "Iestatījumi", "speaker": "Runātājs", "listener": "Klausītāji", "chat": "Čats", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "Jūsu ierīce nav atbalstīta. Jūs varat izveidot", "linkText": "pieprasījumu caur GitHub", "addSupport": "un es centīšos pievienot atbalstu jūsu ierīcei." }, "inviteButton": { "invited": "uzaicināts", "inviteToRoom": "uzaicināt uz istabu" }, "micPermissionBanner": { "permissionDenied": "Nevar piekļūt jūsu mikrofonam (iespējams, jums vajag pārbaudīt pārluka iestatījumus, vai atsvaidzināt lapu)", "dismiss": "noraidīt", "tryAgain": "mēģināt vēlreiz" }, "keyboardShortcuts": { "setKeybind": "uzlikt aktivācijas taustiņu", "listening": "klausās", "toggleMuteKeybind": "Skaņas izslēgšanas taustiņš", "togglePushToTalkKeybind": ":Īslaicīgās mikrofona ieslēgšanas taustiņš", "toggleOverlayKeybind": "toggle overlay keybind", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "nezināmu iemeslu dēļ, nav pieejama audiosaziņa" }, "addToCalendar": { "add": "Pievienot kalendārā" }, "wsKilled": { "description": "Serveris iznīcināja WebSocket. Parasti tas notiek, kad jūs atverat mājaslapu citā logā.", "reconnect": "atkārtoti pievienoties" }, "modals": { "createRoomModal": { "public": "publiska", "private": "privāta", "roomName": "istabas nosaukums", "roomDescription": "istabas apraksts", "descriptionError": "maksimālais garums 500", "nameError": "garumam jābūt no 2 līdz 60 simboliem", "subtitle": "Fill the following fields to start a new room" }, "invitedToJoinRoomModal": { "newRoomCreated": "Izveidota jauna istaba", "roomInviteFrom": "Uzaicinājums uz istabu no", "justStarted": "Viņi tikko sāka", "likeToJoin": ", vēlaties pievienoties?", "inviteReceived": "jūs tikāt uzaicināti uz" }, "editProfileModal": { "usernameTaken": "lietotājvārds aizņemts", "avatarUrlError": "Nederīgs attēls", "avatarUrlLabel": "Attēli URL no Github/Twitter/Discord", "displayNameError": "garums no 2 līdz 50 simboliem", "displayNameLabel": "Publiskais vārds", "usernameError": "garums no 4 līdz 15 simboliem, tikai burtciparu simboli un pasvītra", "usernameLabel": "Lietotājvārds", "bioError": "maksimālais garums 160 simboli", "bioLabel": "Par mani", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "Vai esat pārliecināti, ka vēlaties nobloķēt šo lietotāju no visām jūsu telpām?", "blockUser": "nobloķēt lietotāju", "makeMod": "iestatīt par moderatoru", "unmod": "noņemt moderātoru", "addAsSpeaker": "pievienot runātāju", "moveToListener": "pārvietot uz klausītājiem", "banFromChat": "bloķet no čata", "banFromRoom": "bloķēt no šis istabas", "goBackToListener": "kļūt par klausītāju", "deleteMessage": "izdzēst šo ziņu", "makeRoomCreator": "iestatīt par šis istabas administrātoru", "unBanFromChat": "Unban from Chat", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "pieprasīt runāšanas atļauju", "makePublic": "padarīt istabu publisku", "makePrivate": "padarīt istabu privātu", "renamePublic": "Set public room name", "renamePrivate": "Set private room name", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "People", "online": "ONLINE", "noOnline": "You have 0 friends online right now", "showMore": "Show more" }, "upcomingRoomsCard": { "upcomingRooms": "Upcoming rooms", "exploreMoreRooms": "Explore More Rooms" }, "search": { "placeholder": "Search for rooms, users or categories", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profile", "language": "Language", "reportABug": "Report A Bug", "useOldVersion": "Use Old Version", "logOut": { "button": "Log out", "modalSubtitle": "Are you sure you want to logout?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Ieplānotās istabas", "noneFound": "nav atrastas", "allRooms": "visas ieplānotās istabas", "myRooms": "manas ieplānotās istabas", "scheduleRoomHeader": "Ieplānot istabu", "startRoom": "izveidot istabu", "modal": { "needsFuture": "vajag būt nākotnē", "roomName": "istabas nosaukums", "minLength": "minimālais garums 2", "roomDescription": "apraksts" }, "tommorow": "TOMMOROW", "today": "TODAY", "deleteModal": { "areYouSure": "Are you sure you want to delete this scheduled room?" } }, "roomChat": { "title": "čats", "emotesSoon": "[emocijas drīz]", "bannedAlert": "Jūs tikāt nobloķēti čatā", "waitAlert": "Ir jauzgaida sekunde, pirms nosūtīt nākamo ziņu", "search": "Meklēšana", "searchResults": "Meklēšanas rezultāti", "recent": "Bieži izmantotie ", "sendMessage": "Nosūtīt ziņu", "whisper": "Čukstēt", "welcomeMessage": "Laipni lūgti čatā!", "roomDescription": "istabas apraksts", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Raķetes uzpilde", "takingOff": "Palaišana", "inSpace": "Esam gaisā", "approachingMoon": "Tuvojas mēnesim", "lunarDoge": "Mēness doge", "approachingSun": "Tuvojas saulei", "solarDoge": "Saulainais doge", "approachingGalaxy": "Tuvojas galaktikai", "galacticDoge": "Galaktiskais doge", "spottedLife": "Pamanīta planēta ar dzīvību radību" }, "feed": { "yourFeed": "Your Feed" } } } ================================================ FILE: kibbeh/public/locales/nb/translation.json ================================================ { "common": { "loadMore": "Last inn flere", "loading": "Laster inn...", "noUsersFound": "Ingen brukere funnet", "ok": "Ok", "yes": "Ja", "no": "Nei", "cancel": "Avbryt", "save": "Lagre", "edit": "Rediger", "delete": "Slett", "joinRoom": "Bli med i rommet", "copyLink": "Kopiér lenke", "copied": "Kopiert", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Vær oppmerksom på at bruk av DogeHouse uten å gi nettleseren nødvendige tillatelser kan føre til uønskede feil", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Dempet | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Opprinnelse", "link_2": "Discord", "link_3": "Rapporter en feil" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "utesteng", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Liste over brukere som ikke er i et privat rom, og som du følger.", "currentRoom": "For tiden i:", "startPrivateRoom": "Start et privat rom med dem", "title": "People" }, "followList": { "followHim": "følg", "followingHim": "følger", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Lag et rom", "refresh": "Last inn på nytt", "editRoom": "Edit Room", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "Rommet finnes ikke lengre, gå tilbake", "shareRoomLink": "Del lenken til rommet", "inviteFollowers": "Du kan invitere følgerne dine som er pålogget:", "whenFollowersOnline": "Når følgerne dine er pålogget, vil de dukke opp her." }, "login": { "headerText": "Tar talesamtaler til månen 🚀", "featureText_1": "Mørkt tema", "featureText_2": "Åpne registreringer", "featureText_3": "Støtte på tvers av plattformer", "featureText_4": "Åpene kildekoden", "featureText_5": "Tekstchat", "featureText_6": "Drevet av Doge", "loginGithub": "Logg inn med GitHub", "loginTwitter": "Logg inn med Twitter", "createTestUser": "Opprett en test-bruker", "loginDiscord": "Login with Discord" }, "myProfile": { "logout": "Logg ut", "probablyLoading": "Lastes sikkert inn...", "voiceSettings": "Gå til taleinnstillinger", "soundSettings": "Gå til lydinnstillinger", "deleteAccount": "Slett konto", "overlaySettings": "Gå til overleggsinnstillinger", "couldNotFindUser": "Beklager, vi kunne ikke finne denne brukeren..", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "Oi sann! Denne siden ble tapt i samtalen.", "goHomeMessage": "Ikke vær redd. Du kan", "goHomeLinkText": "gå hjem" }, "room": { "speakers": "Talere", "requestingToSpeak": "Ber om å få snakke", "listeners": "Lyttere", "allowAll": "Tillat alle", "allowAllConfirm": "Er du sikker? Dette vil tillate alle {{count}} spørrende brukere til å snakke" }, "searchUser": { "search": "søk..." }, "soundEffectSettings": { "header": "Lyder", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "Rediger profil", "followsYou": "Følger deg", "followers": "følgere", "following": "følger", "followHim": "Følg", "followingHim": "Følger", "copyProfileUrl": "Kopiér profil URL", "urlCopied": "URL kopiert til utklippstavlen", "unfollow": "Slutt å følge", "about": "Om bruker", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Taleinnstillinger", "mic": "Mikrofon:", "permissionError": "Ingen mikrofoner er funnet, du har enten ingen enheter tilgjenngelig, eller så har du ikke gitt tillatelse til å bruke den.", "refresh": "Oppdater mikrofon-listen", "volume": "Volum:", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "Ugyldig tittel", "label": "Angi tittel" }, "header": "Innstillinger for overlegg" }, "download": { "starting": "Starter nedlastning...", "failed": "Kunne ikke gjøre automatisk nedlastning, prøv igjen senere", "visit_gh": "Besøk Github lanseringer", "prompt": "Klikk på knappen nedenfor, for å starte nedlastningen", "download_now": "Last ned nå", "download_for": "Nedlastning for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Utestengte brukere", "unban": "Opphev utestengelsen", "noBans": "Ingen har blitt utestengt ennå" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Forlat dette rommet", "confirmLeaveRoom": "Er du sikker på at du vil forlate rommet?", "leave": "Forlat", "inviteUsersToRoomBtn": "Inviter brukere til rommet", "invite": "Inviter", "toggleMuteMicBtn": "Veksle demping av mikrofon", "mute": "Demp", "unmute": "Opphev demping", "makeRoomPublicBtn": "Gjør rommet offentlig!", "settings": "Innstillinger", "speaker": "Taler", "listener": "Lytter", "chat": "Chat", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "Enheten din støttes foreløpig ikke. Du kan opprette ett", "linkText": "problem på GitHub", "addSupport": "så skal jeg prøve å legge til støtte for enheten din." }, "inviteButton": { "invited": "Invitert", "inviteToRoom": "Inviter til rom" }, "micPermissionBanner": { "permissionDenied": "Tillatelse nektet når vi prøvde å få tilgang til mikrofonen din (du må kanskje gå til nettleserinnstillingene og laste inn siden på nytt)", "dismiss": "Avvis", "tryAgain": "Prøv igjen" }, "keyboardShortcuts": { "setKeybind": "Angi hurtigtast", "listening": "Lytter", "toggleMuteKeybind": "Veksle demping av hurtigtast", "togglePushToTalkKeybind": "Veksle trykk for å snakke hurtigtast", "toggleOverlayKeybind": "Overlay hurtigtast", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "Ingen lydmottaker av en eller annen grunn" }, "addToCalendar": { "add": "Legg til i Kalender" }, "wsKilled": { "description": "Tilkoblingen din ble avsluttet av serveren. Dette skjer vanligvis når du åpner nettsiden i en annen fane.", "reconnect": "Koble til igjen" }, "modals": { "createRoomModal": { "public": "Offentlig", "private": "Privat", "roomName": "Romnavn", "roomDescription": "Rombeskrivelse", "descriptionError": "Maksimal lengde er 500 tegn", "nameError": "Må være mellom 2 og 60 tegn", "subtitle": "Fill the following fields to start a new room" }, "invitedToJoinRoomModal": { "newRoomCreated": "Nytt rom er opprettet", "roomInviteFrom": "Rominvitasjon fra", "justStarted": "De startet nettopp", "likeToJoin": ", vil du bli med?", "inviteReceived": "du har blitt invitert til" }, "editProfileModal": { "usernameTaken": "Brukernavnet er allerede i bruk", "avatarUrlError": "Ugyldig bilde", "avatarUrlLabel": "Github/Twitter/Discord profilbilde URL", "displayNameError": "Lengden må være mellom 2 og 50 tegn", "displayNameLabel": "Visningsnavn", "usernameError": "Lengden må være mellom 4 og 15 tegn og kan kun inneholde alfanumerisk/understrek", "usernameLabel": "Brukernavn", "bioError": "Maksimal lengde er 160 tegn", "bioLabel": "Bio", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "Er du sikker på at du vil blokkere brukeren fra å bli med i alle nye rom du lager?", "blockUser": "Blokkér bruker", "makeMod": "Gjør til moderator", "unmod": "Fjern som moderator", "addAsSpeaker": "Legg til som taler", "moveToListener": "Flytt til lytter", "banFromChat": "Utesteng fra chatten", "banFromRoom": "Utesteng fra rommet", "goBackToListener": "Gå tilbake til lytter", "deleteMessage": "Slett denne meldingen", "makeRoomCreator": "Opprett rom-administrator", "unBanFromChat": "Unban from Chat", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "Krev tillatelse for å snakke", "makePublic": "Gjør rommet offentlig", "makePrivate": "Gjør rommet privat", "renamePublic": "Set public room name", "renamePrivate": "Set private room name", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "Mennesker", "online": "Pålogget", "noOnline": "Du har ingen venner pålogget", "showMore": "Vis flere" }, "upcomingRoomsCard": { "upcomingRooms": "Kommende rom", "exploreMoreRooms": "Utforsk flere rom" }, "search": { "placeholder": "Søk etter rom, brukere eller kategorier", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profil", "language": "Språk", "reportABug": "Rapporter en feil", "useOldVersion": "Bruk den gamle versjonen", "logOut": { "button": "Logg ut", "modalSubtitle": "Er du sikker på at du vil logge ut?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Planlagte rom", "noneFound": "Ingen funnet", "allRooms": "Alle planlagte rom", "myRooms": "Mine planlagte rom", "scheduleRoomHeader": "Planlegg et rom", "startRoom": "Opprett et rom", "modal": { "needsFuture": "Må være i fremtiden", "roomName": "Romnavn", "minLength": "Minimum lengde er 2 tegn", "roomDescription": "Beskrivelse" }, "tommorow": "I MORGEN", "today": "I DAG", "deleteModal": { "areYouSure": "Er du sikker på at du vil slette det planlagte rommet?" } }, "roomChat": { "title": "Chat", "emotesSoon": "[emotes snart]", "bannedAlert": "Du ble utestengt fra chatten", "waitAlert": "Du må vente ett sekund før du kan sende en ny melding", "search": "Søk", "searchResults": "Søkeresultater", "recent": "Ofte brukt", "sendMessage": "Send en melding", "whisper": "Hviske", "welcomeMessage": "Velkommen til chatten!", "roomDescription": "Rombeskrivelse", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Fyller på rakkett med drivstoff", "takingOff": "Tar av", "inSpace": "I verdensrommet", "approachingMoon": "Nærmer seg månen", "lunarDoge": "Måne-doge", "approachingSun": "Nærmer seg solen", "solarDoge": "Sol-doge", "approachingGalaxy": "Nærmer seg galaksen", "galacticDoge": "Galakse-doge", "spottedLife": "Planet med liv oppdaget" }, "feed": { "yourFeed": "Din Feed" } } } ================================================ FILE: kibbeh/public/locales/ne/translation.json ================================================ { "common": { "loadMore": "थप लोड गर्नुहोस्", "loading": "लोड हुदैछ ...", "noUsersFound": "कुनै प्रयोगकर्ता भेटिएन", "ok": "ठिक छ", "yes": "हो", "no": "होईन", "cancel": "रद्द गर्नुहोस्", "save": "save", "edit": "सम्पादन गर्नुहोस्", "delete": "मेटाउन", "joinRoom": "कोठामा सामेल हुनुहोस्", "copyLink": "लिंक प्रतिलिपि गर्नुहोस्", "copied": "copied", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Please note running DogeHouse without accessibility permissions may cause unwanted errors", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Muted | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "हाम्रो कथा", "link_2": "Discord", "link_3": "गल्ती रिपोर्ट गर्नुहोस्" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "प्रतिबन्ध", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "प्रयोगकर्ताहरूको सूची जो प्राइवेट रूम छैनन् र तपाइँ फॉलो गर्नुहुन्छा।", "currentRoom": "अहिले हुनुहुन्छ:", "startPrivateRoom": "यीनीहरू संग एक प्राइवेट रूम शुरू गर्नुहोस्", "title": "People" }, "followList": { "followHim": "follow", "followingHim": "following", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "रूम बनाउनुहोस", "refresh": "Refresh", "editRoom": "Edit Room", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "रूम गयो, पछाडि जानुहोस्", "shareRoomLink": "रूमको लिंक शेयर गर्नुहोस्", "inviteFollowers": "तपाईं आफ्नो अनलाइन फॉलोअर्स आमन्त्रित पठाउन सक्नुहुनेछ:", "whenFollowersOnline": "जब तपाइँका अनुयायीहरू अनलाइन हुन्छन, तिनीहरू यहाँ देखा पर्नेछन।" }, "login": { "headerText": "Taking voice conversations to the moon 🚀", "featureText_1": "Dark Theme", "featureText_2": "Open Sign-Ups", "featureText_3": "Cross-Platform Support", "featureText_4": "Open Source", "featureText_5": "Text Chat", "featureText_6": "Powered by Doge", "loginGithub": "log in with GitHub", "loginTwitter": "log in with Twitter", "createTestUser": "create test user", "loginDiscord": "Login with Discord" }, "myProfile": { "logout": "logout", "probablyLoading": "सायद लोड हुँदैछ ...", "voiceSettings": "वॉइस सेटिंग्समा जानुहोस्", "soundSettings": "साउंड सेटिंग्समा जानुहोस्", "deleteAccount": "खाता मेटाउनुहोस्", "overlaySettings": "go to overlay settings", "couldNotFindUser": "Sorry, we could not find that user", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "ओहो ! यो पृष्ठ त कुराकानीमै हरायो।.", "goHomeMessage": "चिन्ता नलिनुहोस्। तपाईं गर्न सक्नुहुन्छ। ", "goHomeLinkText": "मुख्य पृष्ठमा जानुहोस" }, "room": { "speakers": "स्पिकरहरू", "requestingToSpeak": "बोल्न अनुरोध गर्दै", "listeners": "श्रोताहरु", "allowAll": "Allow all", "allowAllConfirm": "Are you sure? This will allow all {{count}} requesting users to speak" }, "searchUser": { "search": "खोजी गर्नुहोस्..." }, "soundEffectSettings": { "header": "साउंड", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "प्रोफाइल सम्पादन गर्नुहोस", "followsYou": "follows you", "followers": "फॉलोअर्स", "following": "फॉलोइंग", "followHim": "follow", "followingHim": "following", "copyProfileUrl": "copy profile url", "urlCopied": "URL copied to clipboard", "unfollow": "Unfollow", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "वॉइस सेटिंग्स", "mic": "माइक", "permissionError": "कुनै माईक फेला परेन, तपाईंले या त यस वेबसाइटलाई अनुमति दिनुभएन वा माइकमा प्लग इन गर्न बिर्सनुभयो।", "refresh": "रिफ्रेश माइक लिस्ट", "volume": "भोल्युम:", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "Invalid app title", "label": "Enter App Title" }, "header": "Overlay Settings" }, "download": { "starting": "Starting download...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "Click on the button below to start download", "download_now": "Download Now", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "प्रतिबन्धित प्रयोगकर्ताहरू", "unban": "unban", "noBans": "कसैलाई प्रतिबन्ध लगाइएको छैन" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "हाल भएको रूम छोड्नुहोस", "confirmLeaveRoom": "के तपाई साँच्चै छोड्न चाहानुहुन्छ? ", "leave": "छोड्नुहोस", "inviteUsersToRoomBtn": "रूममा प्रयोगकर्ताहरूलाई आमन्त्रित गर्नुहोस्", "invite": "आमंत्रण", "toggleMuteMicBtn": "म्यूट माइक्रोफोन टॉगल गर्नुहोस", "mute": "म्यूट गर्नुहोस्", "unmute": "अनम्यूट गर्नुहोस्", "makeRoomPublicBtn": "रूम सार्वजनिक बनाउनुहोस!", "settings": "सेटिंग्स", "speaker": "स्पिकर", "listener": "श्रोता", "chat": "Chat", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "तपाईंको उपकरण हाल समर्थित छैन। तपाईं ", "linkText": "GitHub issue", "addSupport": "बनाउन सक्नुहुन्छ र म तपाईंको उपकरणको लागि समर्थन थप्न प्रयास गर्दछु।" }, "inviteButton": { "invited": "आमन्त्रित", "inviteToRoom": "रूममा आमन्त्रित गर्नुहोस्" }, "micPermissionBanner": { "permissionDenied": "तपाइँको माइक पहुँच गर्न अनुमति अस्वीकृत गरिएको छ((तपाइँ ब्राउजर सेटिंग्समा गएर र पृष्ठ पुन: लोड गर्न आवश्यक पर्दछ))", "dismiss": "खारेज गर्नुहोस", "tryAgain": "फेरि प्रयास गर्नुहोस्" }, "keyboardShortcuts": { "setKeybind": "कीबाइंड सेट गर्नुहोस्", "listening": "सुन्दै", "toggleMuteKeybind": "टॉगल म्यूट कीबाइंड", "togglePushToTalkKeybind": "टॉगल push-to-talk कीबाइंड", "toggleOverlayKeybind": "toggle overlay keybind", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "कुनै कारणका लागि कुनै अडियो उपभोक्ता छैन" }, "addToCalendar": { "add": "क्यालेन्डरमा थप्नुहोस" }, "wsKilled": { "description": "Websocket was killed by the server. This usually happens when you open the website in another tab.", "reconnect": "पुनः जडान गर्नुहोस्" }, "modals": { "createRoomModal": { "public": "सार्वजनिक", "private": "प्राइवेट", "roomName": "रूमको नाम", "roomDescription": "रूमको बारेमा", "descriptionError": "अधिकतम लम्बाई 500 अक्षर", "nameError": "२ देखि ६० अक्षरसम्म लामो हुनुपर्दछ", "subtitle": "Fill the following fields to start a new room" }, "invitedToJoinRoomModal": { "newRoomCreated": "नयाँ रूम बनेको छ", "roomInviteFrom": "रूम बाट आमन्त्रित", "justStarted": "उनिहरूले भर्खर सुरू गरे", "likeToJoin": ", के तपाईं सामेल हुन चाहानुहुन्छ?", "inviteReceived": "तपाईंलाई यहाँ आमन्त्रित गरिएको छ" }, "editProfileModal": { "usernameTaken": "username taken", "avatarUrlError": "Invalid image", "avatarUrlLabel": "Github/Twitter/Discord avatar url", "displayNameError": "length 2 to 50 characters", "displayNameLabel": "Display Name", "usernameError": "length 4 to 15 characters and only alphanumeric/underscore", "usernameLabel": "Username", "bioError": "max length of 160 characters", "bioLabel": "Bio", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "के तपाई पक्का यस उपयोगकर्तालाई तपाईले बनाउनु भएको कुनै रूममा सामेल हुनबाट रोक्न चाहानुहुन्छ?", "blockUser": "ब्लक प्रयोगकर्ता", "makeMod": "make mod", "unmod": "unmod", "addAsSpeaker": "स्पिकरको रूपमा थप्नुहोस्", "moveToListener": "श्रोताको रूपमा सार्नुहोस्", "banFromChat": "ban from chat", "banFromRoom": "रूमबाट प्रतिबन्ध", "goBackToListener": "श्रोताको लागि पछाडि जानुहोस", "deleteMessage": "यो मेसेज मेटाउनुहोस", "makeRoomCreator": "make room admin", "unBanFromChat": "Unban from Chat", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "बोल्नको लागि अनुमति चाहिन्छ", "makePublic": "रूम सार्वजनिक बनाउनुहोस", "makePrivate": "रूम प्राइवेट बनाउनुहोस", "renamePublic": "Set public room name", "renamePrivate": "Set private room name", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "People", "online": "ONLINE", "noOnline": "You have 0 friends online right now", "showMore": "Show more" }, "upcomingRoomsCard": { "upcomingRooms": "Upcoming rooms", "exploreMoreRooms": "Explore More Rooms" }, "search": { "placeholder": "Search for rooms, users or categories", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profile", "language": "Language", "reportABug": "Report A Bug", "useOldVersion": "Use Old Version", "logOut": { "button": "Log out", "modalSubtitle": "Are you sure you want to logout?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "निर्धारित रूम", "noneFound": "कुनै फेला परेन", "allRooms": "सबै अनुसूचित रूम", "myRooms": "मेरो अनुसूचित रूम", "scheduleRoomHeader": "अनुसूचित रूम", "startRoom": "नयाँ रूम", "modal": { "needsFuture": "भविष्यमा हुनुपर्छ", "roomName": "रूमको नाम", "minLength": "न्यूनतम लम्बाई २", "roomDescription": "Description" }, "tommorow": "TOMMOROW", "today": "TODAY", "deleteModal": { "areYouSure": "Are you sure you want to delete this scheduled room?" } }, "roomChat": { "title": "Chat", "emotesSoon": "[emotes soon]", "bannedAlert": "तपाइँ च्याट गर्न प्रतिबन्धित गर्नुभयो", "waitAlert": "तपाईंले अर्को मेसेज पठाउनु अघि एक सेकेन्ड पर्खनु पर्छ", "search": "खोजी गर्नुहोस्", "searchResults": "खोजी परिणामहरू", "recent": "प्राय: प्रयोग हुने", "sendMessage": "एक मेसेज पठाउनुहोस्", "whisper": "कानेखुसि", "welcomeMessage": "च्याटमा स्वागत छ!", "roomDescription": "रुमको बारेमा", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Fueling rocket", "takingOff": "Taking off", "inSpace": "In space", "approachingMoon": "Approaching moon", "lunarDoge": "Lunar doge", "approachingSun": "Approaching sun", "solarDoge": "Solar doge", "approachingGalaxy": "Approaching galaxy", "galacticDoge": "Galactic Doge", "spottedLife": "Planet with life spotted" }, "feed": { "yourFeed": "Your Feed" } } } ================================================ FILE: kibbeh/public/locales/nl/translation.json ================================================ { "common": { "loadMore": "Meer laden", "loading": "Aan het laden...", "noUsersFound": "Geen gebruikers gevonden", "ok": "Oké", "yes": "Ja", "no": "Nee", "cancel": "Annuleren", "save": "Opslaan", "edit": "Bewerken", "delete": "Verwijderen", "joinRoom": "Kamer betreden", "copyLink": "Kopieer link", "copied": "Gekopieerd", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Houd er rekening mee dat het uitvoeren van DogeHouse zonder de benodigde permissies ongewenste fouten kan veroorzaken", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Gedempt | DogeHouse", "deafenedTitle": "Niet hoorbaar | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Verbonden" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Ontstaan", "link_2": "Discord", "link_3": "Probleem melden" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "Verban", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Lijst van gebruikers die je volgt en niet in een privékamer zijn.", "currentRoom": "Momenteel in:", "startPrivateRoom": "Start een privékamer met deze persoon", "title": "People" }, "followList": { "followHim": "Volg", "followingHim": "Volgend", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Kamer maken", "refresh": "Verversen", "editRoom": "Kamer aanpassen", "desktopAlert": "Download de DogeHouse Bureaublad-app vandaag!" }, "inviteList": { "roomGone": "Kamer bestaat niet, ga terug", "shareRoomLink": "Link van deze kamer delen", "inviteFollowers": "Je kunt je volgers die online zijn uitnodigen:", "whenFollowersOnline": "Als je volgers online zijn zullen ze hier verschijnen." }, "login": { "headerText": "Wij brengen gesprekken naar de maan! 🚀", "featureText_1": "Donkere modus", "featureText_2": "Open registraties", "featureText_3": "Platformoverschrijdend", "featureText_4": "Open Source", "featureText_5": "Tekstchat", "featureText_6": "Mogelijk gemaakt door Doge", "loginGithub": "Log in met GitHub", "loginTwitter": "Log in met Twitter", "createTestUser": "Maak een testgebruiker", "loginDiscord": "Log in met Discord" }, "myProfile": { "logout": "Afmelden", "probablyLoading": "Waarschijnlijk aan het laden...", "voiceSettings": "Ga naar spraakinstellingen", "soundSettings": "Ga naar geluidsinstellingen", "deleteAccount": "Verwijder account", "overlaySettings": "Ga naar overlay-instellingen", "couldNotFindUser": "Sorry, die gebruiker kon niet gevonden worden", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "Oeps! Deze pagina is verloren gegaan tijdens het gesprek.", "goHomeMessage": "Maak je geen zorgen. Je kan", "goHomeLinkText": "terug naar de homepagina" }, "room": { "speakers": "Sprekers", "requestingToSpeak": "Aanvragen om te spreken", "listeners": "Luisteraars", "allowAll": "Iedereen toestaan", "allowAllConfirm": "Weet je het zeker? Dit geeft toestemming aan {{count}} verzoekende gebruikers om te spreken" }, "searchUser": { "search": "Zoeken..." }, "soundEffectSettings": { "header": "Geluiden", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "Profiel bewerken", "followsYou": "Volgt jou", "followers": "Volgers", "following": "Volgend", "followHim": "Volg", "followingHim": "Volgend", "copyProfileUrl": "kopieer link naar profiel", "urlCopied": "Link gekopieerd naar klembord", "unfollow": "Ontvolgen", "about": "Over", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Spraakinstellingen", "mic": "Microfoon:", "permissionError": "Geen microfoon gevonden, waarschijnlijk is er geen microfoon aangesloten of heb je geen toestemming gegeven.", "refresh": "Microfoonlijst verversen", "volume": "Volume:", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "Ongeldige applicatietitel", "label": "Voer applicatietitel in" }, "header": "Overlay-instellingen" }, "download": { "starting": "Aan het downloaden...", "failed": "De automatische download is mislukt, probeer het later nog een keer", "visit_gh": "Bezoek Github Releases", "prompt": "Klik op de onderstaande knop om te downloaden", "download_now": "Nu downloaden", "download_for": "Download voor %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Verbannen Gebruikers", "unban": "Ontban", "noBans": "Er is nog niemand verbannen" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Verlaat huidige kamer", "confirmLeaveRoom": "Weet je zeker dat je weg wilt gaan?", "leave": "Verlaat", "inviteUsersToRoomBtn": "Nodig gebruikers uit voor deze kamer", "invite": "Uitnodigen", "toggleMuteMicBtn": "Microfoon aan- of uitzetten", "mute": "Dempen", "unmute": "Dempen opheffen", "makeRoomPublicBtn": "Maak kamer openbaar!", "settings": "Instellingen", "speaker": "Spreker", "listener": "Luisteraar", "chat": "Chat", "toggleDeafMicBtn": "Schakel hoorbaarheid", "deafen": "Onhoorbaar maken", "undeafen": "Hoorbaar maken" }, "deviceNotSupported": { "notSupported": "Je apparaat wordt momenteel niet ondersteund. Je kunt een", "linkText": "issue op GitHub", "addSupport": "maken en we zullen ondersteuning voor je apparaat proberen toe te voegen." }, "inviteButton": { "invited": "Uitgenodigd", "inviteToRoom": "Nodig uit voor kamer" }, "micPermissionBanner": { "permissionDenied": "Geen microfoon gevonden, waarschijnlijk is er geen microfoon aangesloten of heb je geen toestemming gegeven.", "dismiss": "Negeer", "tryAgain": "Probeer opnieuw" }, "keyboardShortcuts": { "setKeybind": "Stel sneltoets in", "listening": "Aan het luisteren", "toggleMuteKeybind": "Schakel demp sneltoets", "togglePushToTalkKeybind": "Schakel push-to-talk sneltoets", "toggleOverlayKeybind": "Schakel overlay sneltoets", "toggleDeafKeybind": "Schakel hoorbaarheid sneltoets" }, "userVolumeSlider": { "noAudioMessage": "Geen audioapparaat (om een of andere reden)" }, "addToCalendar": { "add": "Voeg toe aan agenda" }, "wsKilled": { "description": "WebSocket is gestopt door de server. Dit gebeurt meestal als je de site open hebt staan in een ander tabblad.", "reconnect": "Opnieuw verbinden" }, "modals": { "createRoomModal": { "public": "Openbaar", "private": "Privé", "roomName": "Kamernaam", "roomDescription": "Kameromschrijving", "descriptionError": "Maximale lengte van 500 karakters", "nameError": "Moet tussen de 2 en 60 karakters lang zijn", "subtitle": "Vul de volgende velden in om een kamer te starten" }, "invitedToJoinRoomModal": { "newRoomCreated": "Nieuwe kamer gemaakt", "roomInviteFrom": "Kameruitnodiging van", "justStarted": "Ze zijn zojuist begonnen", "likeToJoin": ", wil je meedoen?", "inviteReceived": "Je bent uitgenodigd voor" }, "editProfileModal": { "usernameTaken": "Gebruikersnaam bezet", "avatarUrlError": "Ongeldige afbeelding", "avatarUrlLabel": "Github/Twitter/Discord avatar url", "displayNameError": "2 tot 50 karakters", "displayNameLabel": "Weergavenaam", "usernameError": "4 tot 15 karakters en alleen letters, cijfers en underscore", "usernameLabel": "Gebruikersnaam", "bioError": "Maximaal 160 karakters", "bioLabel": "Bio", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "Weet je zeker dat je deze gebruiker wilt blokkeren van al je toekomstige kamers?", "blockUser": "Blokkeer gebruiker", "makeMod": "Maak beheerder", "unmod": "Verwijder beheerder", "addAsSpeaker": "Voeg toe als spreker", "moveToListener": "Verplaats naar luisteraar", "banFromChat": "Verban uit de chat", "banFromRoom": "Verban uit de kamer", "goBackToListener": "Ga terug naar luisteraar", "deleteMessage": "Verwijder dit bericht", "makeRoomCreator": "kamerbeheerder maken", "unBanFromChat": "Ontban van chat", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "Toestemming nodig om te spreken", "makePublic": "Maak kamer openbaar", "makePrivate": "Maak kamer privé", "renamePublic": "Stel openbare kamernaam in", "renamePrivate": "Stel privékamernaam in", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "Mensen", "online": "ONLINE", "noOnline": "Er zijn momenteel geen vrienden online", "showMore": "Toon meer" }, "upcomingRoomsCard": { "upcomingRooms": "Geplande kamers", "exploreMoreRooms": "Ontdek meer kamers" }, "search": { "placeholder": "Zoek naar kamers, gebruikers of categorieën", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profiel", "language": "Taal", "reportABug": "Rapporteer een bug", "useOldVersion": "Gebruik de oude versie", "logOut": { "button": "Uitloggen", "modalSubtitle": "Weet je zeker dat je wilt uitloggen?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Debugger stoppen" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Geplande kamers", "noneFound": "Geen gevonden", "allRooms": "Alle geplande kamers", "myRooms": "Mijn geplande kamers", "scheduleRoomHeader": "Kamer inplannen", "startRoom": "Kamer starten", "modal": { "needsFuture": "Moet in de toekomst zijn", "roomName": "Kamer naam", "minLength": "Naam moet minimaal 2 karakters zijn", "roomDescription": "Beschrijving" }, "tommorow": "MORGEN", "today": "VANDAAG", "deleteModal": { "areYouSure": "Weet je zeker dat je deze geplande kamer wilt verwijderen?" } }, "roomChat": { "title": "Chat", "emotesSoon": "[Emotes binnenkort]", "bannedAlert": "Je bent uit deze chat verbannen", "waitAlert": "Je moet een seconde wachten voordat je weer een bericht kan sturen.", "search": "Zoeken", "searchResults": "Zoekresultaten", "recent": "Vaak Gebruikt", "sendMessage": "Stuur een Bericht", "whisper": "Fluister", "welcomeMessage": "Welkom in de chat!", "roomDescription": "Kamer omschrijving", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Raket aan het tanken", "takingOff": "Aan het opstijgen", "inSpace": "In de ruimte", "approachingMoon": "Maan aan het benaderen", "lunarDoge": "Maan-hond", "approachingSun": "Zon aan het benaderen", "solarDoge": "Zonne-hond", "approachingGalaxy": "Heelal aan het benaderen", "galacticDoge": "Galactische Doge", "spottedLife": "Planeet met leven gespot" }, "feed": { "yourFeed": "Je Feed" } } } ================================================ FILE: kibbeh/public/locales/pl/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "Załaduj więcej", "loading": "Ładowanie...", "noUsersFound": "Nie znaleziono użytkowników!", "ok": "Ok", "yes": "Tak", "no": "Nie", "cancel": "Anuluj", "save": "Zapisz", "edit": "Edytuj", "delete": "Usuń", "joinRoom": "Dołącz do pokoju", "copyLink": "Skopiuj link", "copied": "Skopiowano!", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Korzystanie z DogeHouse bez uprawnień dostępu może powodować niechciane błędy", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "dashboard": "Tablica", "connectionTaken": "Połączenie zostało podjęte", "mutedTitle": "Wyciszony mikrofon | DogeHouse", "deafenedTitle": "Wyciszony dźwięk | DogeHouse" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Historia pochodzenia", "link_2": "Discord", "link_3": "Zgłoś błąd" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "Zablokuj", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Lista użytkowników którzy nie są w prywatnym pokoju i których obserwujesz.", "currentRoom": "Obecnie w:", "startPrivateRoom": "Załóż z nim prywatny pokój", "title": "Osoby" }, "followList": { "followHim": "Obserwuj", "followingHim": "Obserwujący", "title": "Osoby", "followingNone": "Nie obserwuje nikogo", "noFollowers": "Brak obserwujących" }, "home": { "createRoom": "Nowy pokój", "editRoom": "Edytuj pokój", "refresh": "Odśwież", "desktopAlert": "Pobierz aplikację DogeHouse na komputer już dzisiaj!" }, "inviteList": { "roomGone": "Pokój usunięty, wróć", "shareRoomLink": "Udostępnij link do pokoju", "inviteFollowers": "Możesz zaprosić swoich obserwujących którzy są online:", "whenFollowersOnline": "Kiedy twoi obserwujący są online, pokażą się oni tutaj." }, "login": { "headerText": "Zabieramy rozmowy głosowe na księżyc 🚀", "featureText_1": "Tryb ciemny", "featureText_2": "Otwarte Zapisy", "featureText_3": "Wsparcie międzyplatformowe", "featureText_4": "Open Source", "featureText_5": "Czat tekstowy", "featureText_6": "Zasilany przez Doge", "loginGithub": "Zaloguj się przy użyciu GitHub", "loginTwitter": "Zaloguj się przy użyciu Twitter", "loginDiscord": "Zaloguj się przy użyciu Discord", "createTestUser": "Stwórz testowego użytkownika" }, "myProfile": { "logout": "Wyloguj się", "probablyLoading": "prawdobodobnie ładowanie...", "voiceSettings": "Ustawienia głosu", "overlaySettings": "Ustawienia nakładki", "soundSettings": "Ustawienia dźwięku", "deleteAccount": "Usuń konto", "couldNotFindUser": "Przepraszamy, nie udało się znaleźć tego użytkownika", "privacySettings": "Ustawienia prywatności" }, "notFound": { "whoopsError": "Ups! Ta strona zagubiła się w konwersacji.", "goHomeMessage": "Nie martw się. Możesz", "goHomeLinkText": "przejść na stronę domową" }, "room": { "speakers": "Mówiący", "requestingToSpeak": "Prośba o pozwolenie na mówienie", "listeners": "Słuchacze", "allowAll": "Dopuść wszystkich", "allowAllConfirm": "Czy na pewno? To dopuści {{count}} użytkowników do mówienia" }, "searchUser": { "search": "szukaj..." }, "soundEffectSettings": { "header": "Dźwięk", "title": "Ustawienia dźwięku", "playSound": "Odtwórz dźwięk" }, "viewUser": { "editProfile": "Edytuj profil", "followsYou": "Obserwuje Cię", "followers": "Obserwujący", "following": "Obserwujesz", "followHim": "Obserwuj", "unfollow": "Przestań obserwować", "followingHim": "Obserwujesz", "copyProfileUrl": "Skopiuj URL profilu", "urlCopied": "URL zostało skopiowane do schowka", "about": "O profilu", "bot": "Bot", "profileTabs": { "about": "O profilu", "rooms": "Pokoje", "scheduled": "Zaplanowane", "recorded": "Nagrane", "clips": "Klipy", "admin": "Admin" }, "block": "Zablokuj", "unblock": "Odblokuj", "sendDM": "Wyślij prywatną wiadomość", "aboutSuffix": "", "errors": { "blocked": "Ten użytkownik cię zablokował!", "default": "Ups! Nie udało się załadować profilu użytkownika." } }, "voiceSettings": { "header": "Ustawienia Głosu", "mic": "Mikrofon:", "permissionError": "Nie znaleziono mikrofonów. Sprawdź podłączenie oraz pozwolenia tej stronie.", "refresh": "Odśwież listę mikrofonów", "volume": "Głośność:", "title": "Ustawienia głosu" }, "overlaySettings": { "header": "Ustawienia nakładki", "input": { "errorMsg": "Wpisz poprawną nazwę aplikacji", "label": "Nazwa aplikacji" } }, "download": { "starting": "Rozpoczynanie pobierania...", "failed": "Nie można było rozpocząć automatycznego pobierania, spróbuj ponownie później", "visit_gh": "Odwiedź Github Releases", "prompt": "Naciśnij przycisk poniżej aby rozpocząć pobieranie", "download_now": "Pobierz teraz", "download_for": "Pobierz dla %platform% (%ext%)" }, "privacySettings": { "title": "Ustawienia prywatności", "header": "Ustawienia prywatności", "whispers": { "label": "Szepty", "on": "Włączone", "off": "Wyłączone" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Zablokowani użytkownicy", "unban": "Odblokuj", "noBans": "Nikt nie został zablokowany" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Opuść aktualny pokój", "confirmLeaveRoom": "Na pewno chcesz wyjść?", "leave": "Wyjdź", "inviteUsersToRoomBtn": "Zaproś użytkowników do pokoju", "invite": "Zaproś", "toggleMuteMicBtn": "Przełącz wyciszenie mikrofonu", "mute": "Wycisz", "unmute": "Odcisz", "makeRoomPublicBtn": "Upublicznij pokój!", "settings": "Ustawienia", "speaker": "Mówiący", "listener": "Słuchacz", "chat": "Czat", "toggleDeafMicBtn": "Przełącz wyciszenie mikrofonu", "deafen": "Wycisz dźwięk", "undeafen": "Odcisz dźwięk" }, "deviceNotSupported": { "notSupported": "Twoje urządzenie nie jest obecnie wspierane. Możesz zgłosić to", "linkText": "na GitHub", "addSupport": "a ja spróbuję dodać obsługę twojego urządzenia." }, "followingOnline": { "people": "Użytkownicy", "online": "ONLINE", "noOnline": "Masz 0 dostępnych znajomych", "showMore": "Pokaż więcej" }, "inviteButton": { "invited": "Zaproś!", "inviteToRoom": "Zaproś do pokoju" }, "micPermissionBanner": { "permissionDenied": "Nie zezwolono na dostęp do mikrofonu (spróbuj zmienić ustawienia twojej przeglądarki i odświeżyć stronę)", "dismiss": "Odrzuć", "tryAgain": "Spróbuj ponownie" }, "keyboardShortcuts": { "setKeybind": "Skrót klawiszowy", "listening": "Słuchanie...", "toggleMuteKeybind": "Wyciszanie", "toggleDeafKeybind": "Skrót klawiszowy przełącznika wyciszenia", "toggleOverlayKeybind": "Nakładka", "togglePushToTalkKeybind": "Naciśnij i mów" }, "userVolumeSlider": { "noAudioMessage": "Brak urządzenia audio" }, "upcomingRoomsCard": { "upcomingRooms": "Nadchodzące spotkania w pokojach", "exploreMoreRooms": "Odkrywaj pokoje" }, "addToCalendar": { "add": "Dodaj do kalendarza" }, "wsKilled": { "description": "WebSocket został zabity przez serwer. Dzieje się tak kiedy otwierasz stronę w nowej karcie.", "reconnect": "Połącz ponownie" }, "search": { "placeholder": "Znajdź pokój, użytkowników lub kategorie", "placeholderShort": "Szukaj" }, "settingsDropdown": { "profile": "Twój profil", "language": "Język", "reportABug": "Zgłoś problem", "useOldVersion": "Użyj starszej wersji", "logOut": { "button": "Wyloguj się", "modalSubtitle": "Na pewno chcesz się wylogować?" }, "debugAudio": { "debugAudio": "Debuguj audio", "stopDebugger": "Wyłącz debugger" }, "downloadApp": "Pobierz aplikację", "developer": "Developer Settings" }, "modals": { "createRoomModal": { "subtitle": "Wypełnij poniższe pola aby utworzyć pokój", "public": "Publiczne", "private": "Prywatne", "roomName": "Nazwa pokoju", "roomDescription": "Opis pokoju", "descriptionError": "Maksymalna długość 500", "nameError": "Musi być pomiędzy 2 a 60 znakami" }, "invitedToJoinRoomModal": { "newRoomCreated": "Stworzono nowy pokój", "roomInviteFrom": "Zaproszenie do pokoju od", "justStarted": "Właśnie rozpoczeli", "likeToJoin": ", czy chciałbyś dołączyć?", "inviteReceived": "zostałeś zaproszony do" }, "editProfileModal": { "usernameTaken": "Nazwa użytkownika jest już zajęta", "avatarUrlError": "Nieprawidłowy obraz", "avatarUrlLabel": "URL do awatara Github/Twitter/Discord", "displayNameError": "Długość od 2 do 50 znaków", "displayNameLabel": "Nazwa wyświetlana", "usernameError": "Długość od 4 do 15 znaków oraz jedynie alphanumeryczna oraz podkreślnik", "usernameLabel": "Nazwa użytkownika", "bioError": "Maksymalna długość to 160 znaków", "bioLabel": "Bio", "bannerUrlLabel": "URL baneru na Twitterze" }, "profileModal": { "blockUserConfirm": "Czy jesteś pewny, że chcesz zablokować użytkownikowi możliwość dołączania do każdego stworzonego przez Ciebie pokoju?", "blockUser": "Zablokuj użytkownika", "makeMod": "Dodaj moderatora", "unmod": "Usuń moderatora", "addAsSpeaker": "Dodaj jako mówiący", "moveToListener": "Zmień na słuchacza", "unBanFromChat": "Odblokuj z czatu", "banFromChat": "Zablokuj z czatu", "banFromRoom": "Zablokuj z pokoju", "goBackToListener": "Powróć do słuchacza", "deleteMessage": "Usuń tą wiadomość", "makeRoomCreator": "Awansuj na administratora pokoju", "banIPFromRoom": "Zablokuj IP z pokoju" }, "roomSettingsModal": { "requirePermission": "wymaga pozwolenia na mówienie", "makePublic": "upublicznij pokój", "makePrivate": "uczyń pokój prywatnym", "renamePublic": "Ustaw publiczną nazwę pokoju", "renamePrivate": "Ustaw prywatną nazwę pokoju", "chatDisabled": "wyłącz czat", "chatCooldown": "Odnowienie pisania na czacie (milisekundy)", "chat": { "label": "Czat", "enabled": "Włączony", "disabled": "Wyłączony", "followerOnly": "Tylko dla obserwujących" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Wiadomości", "showMore": "Pokaż więcej", "noMessages": "Brak nowych wiadomości" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "feed": { "yourFeed": "Twoje pokoje" }, "scheduledRooms": { "title": "Zaplanowane pokoje", "noneFound": "nie znaleziono", "allRooms": "wszystkie zaplanowane pokoje", "myRooms": "moje zaplanowane pokoje", "scheduleRoomHeader": "Zaplanuj pokój", "startRoom": "Stwórz pokój", "tommorow": "JUTRO", "today": "DZISIAJ", "modal": { "needsFuture": "musi być w przyszłości", "roomName": "Nazwa pokoju", "roomDescription": "Opis", "minLength": "Minimalna długość 2" }, "deleteModal": { "areYouSure": "Na pewno chcesz usunąć ten zaplanowany pokój??" } }, "roomChat": { "title": "Czat", "emotesSoon": "[emotki wkrótce]", "bannedAlert": "Zostałeś zablokowany na tym czacie", "waitAlert": "Musisz poczekać chwilę żeby wysłać kolejną wiadomość", "search": "Szukaj", "searchResults": "Wyniki wyszukiwania", "recent": "Często używany", "sendMessage": "Wyślij wiadomość", "whisper": "Szept", "welcomeMessage": "Witamy na czacie!", "roomDescription": "Opis pokoju", "disabled": "czat pokoju został wyłączony", "messageDeletion": { "message": "wiadomość", "retracted": "wycofana", "deleted": "usunięta" } }, "roomStatus": { "fuelingRocket": "Tankowanie rakiety", "takingOff": "Startowanie", "inSpace": "W kosmosie", "approachingMoon": "Zbliża się do Księżyca", "lunarDoge": "Księżycowy Doge", "approachingSun": "Zbliża się do słońca", "solarDoge": "Słoneczny Doge", "approachingGalaxy": "Zbliża się do galaktyki", "galacticDoge": "Galaktyczny Doge", "spottedLife": "Znaleziono planetę z życiem" } } } ================================================ FILE: kibbeh/public/locales/pt-BR/translation.json ================================================ { "_TODO": "PRECISA TRADUZIR", "common": { "loadMore": "carregar mais", "loading": "carregando...", "noUsersFound": "nenhum usuário encontrado", "ok": "ok", "yes": "sim", "no": "não", "cancel": "cancelar", "save": "salvar", "edit": "editar", "delete": "deletar", "joinRoom": "entrar na sala", "copyLink": "copiar link", "copied": "copiado", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Esteja ciente que executar o DogeHouse sem as permissões corretas pode causar erros indesejados", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Cabeçalho da interface principal para traduções", "title": "DogeHouse", "mutedTitle": "Silenciado | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Conexão tomada" }, "footer": { "link_1": "História da Origem", "link_2": "Discord", "link_3": "Reportar um Erro" }, "pages": { "_comment": "Interface respectiva da página para tradução", "admin": { "ban": "expulsar", "userStaffandContrib": "Equipe do usuário & Contribuições", "staff": "Equipe: ", "contributions": "Contribuições", "username": "Username", "usrStaff": "Equipe do usuário", "usrContributions": "Contribuições do usuário", "reason": "razão", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Lista de usuários que você segue que não estão em uma sala privada.", "currentRoom": "atualmente em:", "startPrivateRoom": "iniciar uma sala privada com ele", "title": "Pessoas" }, "followList": { "followHim": "seguir", "followingHim": "seguindo", "title": "Pessoas", "followingNone": "Não seguindo ninguém", "noFollowers": "Sem seguidores" }, "home": { "createRoom": "Criar Sala", "refresh": "Atualizar", "editRoom": "Editar sala", "desktopAlert": "Baixe o app desktop DogeHouse hoje mesmo!" }, "inviteList": { "roomGone": "acabou a sala, volte", "shareRoomLink": "compartilhar link para sala", "inviteFollowers": "Você pode convidar os seguidores que estão disponíveis:", "whenFollowersOnline": "Quando seus seguidores estiverem disponíveis eles aparecerão aqui." }, "login": { "headerText": "Levando as conversas de áudio para a lua 🚀", "featureText_1": "Tema Escuro", "featureText_2": "Registros abertos", "featureText_3": "Suporte entre plataformas", "featureText_4": "Código Aberto", "featureText_5": "Conversa de Texto", "featureText_6": "Distribuído por Doge", "loginGithub": "entrar com GitHub", "loginTwitter": "entrar com Twitter", "createTestUser": "criar usuário teste", "loginDiscord": "Login with Discord" }, "myProfile": { "logout": "sair", "probablyLoading": "possívelmente carregando...", "voiceSettings": "ir para configurações de voz", "soundSettings": "ir para configurações de áudio", "deleteAccount": "excluir conta", "overlaySettings": "vá para as configurações de sobreposição", "couldNotFindUser": "Desculpa, não foi possível encontrar esse usuário", "privacySettings": "Configurações de Privacidades" }, "notFound": { "whoopsError": "Ops! Essa página se perdeu na conversa.", "goHomeMessage": "Não esquenta. Você consegue", "goHomeLinkText": "vá para o início" }, "room": { "speakers": "Apresentadores", "requestingToSpeak": "Solicitando para falar", "listeners": "Ouvintes", "allowAll": "Permitir todos", "allowAllConfirm": "Você tem certeza? Isso permitirá que todos os {{count}} usuários solicitantes falem" }, "searchUser": { "search": "buscar..." }, "soundEffectSettings": { "header": "Sons", "title": "Configurações de áudio", "playSound": "Tocar som" }, "viewUser": { "editProfile": "editar perfil", "followsYou": "segue você", "followers": "seguidores", "following": "seguindo", "followHim": "seguir", "unfollow": "deixar de seguir", "followingHim": "seguindo", "copyProfileUrl": "copiar url do perfil", "urlCopied": "URL copiado para a área de transferência", "about": "Sobre", "bot": "Bot", "profileTabs": { "about": "Sobre", "rooms": "Salas", "scheduled": "Agendado", "recorded": "Gravado", "clips": "Clips", "admin": "Admin" }, "block": "Bloquear", "unblock": "Desbloquear", "sendDM": "Enviar DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Configurações do microfone", "mic": "microfone:", "permissionError": "não foram encontrados microfones, você não conectou um ou você não deu permissão para este website.", "refresh": "recarregar lista de microfones", "volume": "volume:", "title": "Configurações de voz" }, "overlaySettings": { "input": { "errorMsg": "Título de aplicativo inválido", "label": "Insira o título do aplicativo" }, "header": "Configurações de sobreposição" }, "download": { "starting": "Começando o download...", "failed": "Não foi possível iniciar o download automático, por favor tente novamente mais tarde", "visit_gh": "Visite o Github Releases", "prompt": "Clique no botão abaixo para começar a baixar", "download_now": "Baixe agora", "download_for": "Baixe para %platform% (%ext%)" }, "privacySettings": { "title": "Configurações de Privacidade", "header": "Configurações de Privacidade", "whispers": { "label": "Sussurros", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Interface de componente para tradução", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Usuários expulsos", "unban": "desbanir", "noBans": "ninguém foi expulso ainda" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Deixar a sala atual", "confirmLeaveRoom": "Você quer mesmo sair?", "leave": "Sair", "inviteUsersToRoomBtn": "Convide usuários para a sala", "invite": "Convidar", "toggleMuteMicBtn": "Ativar o mudo do microfone", "mute": "Mutar", "unmute": "Desmutar", "makeRoomPublicBtn": "Deixe a sala pública!", "settings": "Configurações", "speaker": "Apresentador", "listener": "Ouvintes", "chat": "Chat", "toggleDeafMicBtn": "Alternar modo Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "micPermissionBanner": { "permissionDenied": "Permissão negada ao tentar acessar o seu microfone (talvez você tenha que ir nas configurações de seu navegador e recarregar a página)", "dismiss": "fechar", "tryAgain": "tente novamente" }, "modals": { "createRoomModal": { "public": "público", "private": "privado", "roomName": "nome da sala", "roomDescription": "descrição da sala", "descriptionError": "comprimento máximo 500", "nameError": "deve ter entre 2 a 60 caracteres", "subtitle": "Preencha os campos para iniciar uma nova sala" }, "invitedToJoinRoomModal": { "newRoomCreated": "Nova sala criada", "roomInviteFrom": "Convite para sala de", "justStarted": "Acabaram de começar", "likeToJoin": ", você quer entrar?", "inviteReceived": "você foi convidado para" }, "editProfileModal": { "usernameTaken": "nome de usuário já existente", "avatarUrlError": "Imagem inválida", "avatarUrlLabel": "url da foto do Github/Twitter/Discord", "displayNameError": "de 2 até 50 caracteres", "displayNameLabel": "Nome de exibição", "usernameError": "de 4 até 15 caracteres alfanuméricos/sublinhados", "usernameLabel": "Usuário", "bioError": "máximo de até 160 caractéres", "bioLabel": "Biografia", "bannerUrlLabel": "url do banner do Twitter" }, "profileModal": { "blockUserConfirm": "Você tem certeza que quer bloquear esse usuário de entrar em qualquer sala que você criar?", "blockUser": "bloquear usuário", "makeMod": "promover para moderador", "unmod": "remover moderador", "addAsSpeaker": "adicionar como apresentador", "moveToListener": "mover para ouvinte", "banFromChat": "expulsar do chat", "banFromRoom": "expulsar da sala", "goBackToListener": "voltar para ouvinte", "deleteMessage": "excluir essa mensagem", "makeRoomCreator": "criar sala de administração", "unBanFromChat": "Desbanir do chat", "banIPFromRoom": "Banir IP da Sala" }, "roomSettingsModal": { "requirePermission": "precisar de permissão para falar", "makePublic": "fazer a sala pública", "makePrivate": "fazer a sala privada", "renamePublic": "Definir nome da sala pública", "renamePrivate": "Definir nome da sala privada", "chatDisabled": "Chat desabilitado", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Ativado", "disabled": "Desativado", "followerOnly": "Somente seguidores" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "userVolumeSlider": { "noAudioMessage": "não tem áudio por algum motivo" }, "addToCalendar": { "add": "Adicionar ao Calendário" }, "keyboardShortcuts": { "setKeybind": "definir atalho no teclado", "listening": "ouvindo", "toggleMuteKeybind": "ativar/desativar atalho para mutar", "togglePushToTalkKeybind": "ativar/desativar pressione para falar", "toggleOverlayKeybind": "alternar o atalho de teclado de sobreposição", "toggleDeafKeybind": "Ative atalho no teclado de deafen" }, "wsKilled": { "description": "O Websocket foi finalizado pelo servidor. Isso geralmente acontece quando você abre o site em outra guia.", "reconnect": "reconectar" }, "deviceNotSupported": { "notSupported": "Seu dispositivo não é compatível no momento. Você pode criar uma", "linkText": "issue no GitHub", "addSupport": "e vou tentar adicionar suporte para o seu dispositivo." }, "inviteButton": { "invited": "convidado", "inviteToRoom": "convidar para sala" }, "followingOnline": { "people": "Pessoas", "online": "ONLINE", "noOnline": "Você tem 0 amigos online agora", "showMore": "Mostrar mais" }, "upcomingRoomsCard": { "upcomingRooms": "Próximas salas", "exploreMoreRooms": "Explore mais salas" }, "search": { "placeholder": "Procure por salas, usuários ou categorias", "placeholderShort": "Procurar" }, "settingsDropdown": { "profile": "Perfil", "language": "Idioma", "reportABug": "Reportar um bug", "useOldVersion": "Usar uma versão antiga", "logOut": { "button": "Sair", "modalSubtitle": "Você tem certeza que deseja sair?" }, "debugAudio": { "debugAudio": "Debugar áudio", "stopDebugger": "Parar debug" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "Equipe do DogeHouse", "dhContributor": "Contribuidores do DogeHouse" }, "messagesDropdown": { "title": "Mensagem", "showMore": "Mostrar mais", "noMessages": "Não existem novas mensagens" } }, "modules": { "scheduledRooms": { "title": "Salas agendadas", "noneFound": "nenhuma encontrada", "allRooms": "todas as salas agendadas", "myRooms": "minhas salas agendadas", "scheduleRoomHeader": "Agendar Sala", "startRoom": "iniciar sala", "modal": { "needsFuture": "precisa estar no futuro", "roomName": "nome da sala", "minLength": "tamanho mínimo: 2", "roomDescription": "descrição da sala" }, "tommorow": "AMANHÃ", "today": "HOJE", "deleteModal": { "areYouSure": "Você tem certeza que deseja deletar essa sala agendada?" } }, "roomChat": { "title": "Chat", "emotesSoon": "[emotes em breve]", "bannedAlert": "Você foi banido do chat", "waitAlert": "Você tem que esperar um segundo antes de enviar outra mensagem", "search": "Procurar", "searchResults": "Procurar Resultados", "recent": "Usado frequentemente", "sendMessage": "Envie uma mensagem", "whisper": "Sussurrar", "welcomeMessage": "Bem vindo ao chat!", "roomDescription": "descrição da sala", "disabled": "O chat da sala foi desabilitado", "messageDeletion": { "message": "mensagem", "retracted": "retraído", "deleted": "deletado" } }, "roomStatus": { "fuelingRocket": "Abastecendo foguete", "takingOff": "Decolando", "inSpace": "No espaço", "approachingMoon": "Chegando na Lua", "lunarDoge": "Doge lunar", "approachingSun": "Chegando no Sol", "solarDoge": "Doge solar", "approachingGalaxy": "Chegando na galáxia", "galacticDoge": "Doge galático", "spottedLife": "Encontrado planeta com vida" }, "feed": { "yourFeed": "Seu Feed" } } } ================================================ FILE: kibbeh/public/locales/pt-PT/translation.json ================================================ { "common": { "loadMore": "Carregar mais", "loading": "A carregar...", "noUsersFound": "Não foram encontrados utilizadores", "ok": "Ok", "yes": "Sim", "no": "Não", "cancel": "Cancelar", "save": "Guardar", "edit": "Editar", "delete": "Apagar", "joinRoom": "entrar na sala", "copyLink": "copiar link", "copied": "copiado", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Por favor, nota que correr o DogeHouse sem permissões de acesso pode causar erros indesejados", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Silenciado | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "História", "link_2": "Discord", "link_3": "Reportar um Erro" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "Banir", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Lista de utilizadores que segues e que não se encontram numa sala privada.", "currentRoom": "Atualmente em:", "startPrivateRoom": "Iniciar uma sala privada com eles", "title": "People" }, "followList": { "followHim": "seguir", "followingHim": "a seguir", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Criar sala", "refresh": "Atualizar", "editRoom": "Editar sala", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "A sala não existe, voltar atrás", "shareRoomLink": "Partilhar link da sala", "inviteFollowers": "Podes convidar os teus seguidores que se encontram online:", "whenFollowersOnline": "Os teus seguidores que se encontram online irão aparecer aqui." }, "login": { "headerText": "A levar conversas de voz até à lua 🚀", "featureText_1": "Tema escuro", "featureText_2": "Registo sem restrições", "featureText_3": "Suporte multiplataforma", "featureText_4": "Open Source", "featureText_5": "Mensagens de texto", "featureText_6": "Powered by Doge", "loginGithub": "Entrar com GitHub", "loginTwitter": "Entrar com Twitter", "createTestUser": "Criar utilizador de teste", "loginDiscord": "Entrar com Discord" }, "myProfile": { "logout": "Sair", "probablyLoading": "Provavlemente a carregar...", "voiceSettings": "Definições de voz", "soundSettings": "Definições de som", "deleteAccount": "Apagar conta", "overlaySettings": "Ir para definições de Overlay", "couldNotFindUser": "Desculpa, não conseguimos encontrar esse utilizador", "privacySettings": "Configurações de Privacidade" }, "notFound": { "whoopsError": "Ups! Esta página perdeu-se na conversa.", "goHomeMessage": "Não te preocupes, podes", "goHomeLinkText": "Voltar ao início" }, "room": { "speakers": "Oradores", "requestingToSpeak": "A pedir para falar", "listeners": "Ouvintes", "allowAll": "Permitir todos", "allowAllConfirm": "De certeza? Isto permitirá todos os {{count}} utilizadores a pedir, falar" }, "searchUser": { "search": "Procurar..." }, "soundEffectSettings": { "header": "Sons", "title": "Configuração de Som", "playSound": "Tocar Som" }, "viewUser": { "editProfile": "Editar perfil", "followsYou": "Seguem-te", "followers": "Seguidores", "following": "A seguir", "followHim": "Seguir", "followingHim": "Seguindo", "copyProfileUrl": "copiar URL do perfil", "urlCopied": "URL copiado", "unfollow": "Deixar de Seguir", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Programado", "recorded": "Gravado", "clips": "Clips", "admin": "Admin" }, "block": "Bloquear", "unblock": "Desbloquear", "sendDM": "Mensagem", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Definições de voz", "mic": "Microfone:", "permissionError": "Não foram encontrados microfones; ou não foram dadas permissões, ou não estão corretamente ligados.", "refresh": "Atualizar lista de microfones", "volume": "Volume:", "title": "Configurações de Voz" }, "overlaySettings": { "input": { "errorMsg": "Título de aplicação inválido", "label": "Introduza o título da aplicação" }, "header": "Definições de Overlay" }, "download": { "starting": "Starting download...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "Click on the button below to start download", "download_now": "Download Now", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Configurações de Privacidade", "header": "Configurações de Privacidade", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Utilizadores banidos", "unban": "Remover ban", "noBans": "Sem utilizadores banidos" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Sair da sala atual", "confirmLeaveRoom": "Pretendes sair da sala?", "leave": "Sair", "inviteUsersToRoomBtn": "Convidar utilizadores para a sala", "invite": "Convidar", "toggleMuteMicBtn": "Silenciar microfone", "mute": "Silenciar", "unmute": "Ativar", "makeRoomPublicBtn": "Tornar a sala pública!", "settings": "Definições", "speaker": "Orador", "listener": "Ouvinte", "chat": "Chat", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Desativar áudio", "undeafen": "Reativar áudio" }, "micPermissionBanner": { "permissionDenied": "Sem permissão para aceder ao microfone (poderás ter que de ir às configurações do teu navegador e atualizar a página)", "dismiss": "Ignorar", "tryAgain": "Tentar novamente" }, "modals": { "createRoomModal": { "public": "Público", "private": "Privado", "roomName": "nome da sala", "roomDescription": "descrição da sala", "descriptionError": "máximo 500 caracteres", "nameError": "deverá ter entre 2 e 60 caracteres", "subtitle": "Preenche os campos seguintes para iniciar uma nova sala" }, "invitedToJoinRoomModal": { "newRoomCreated": "Nova sala criada", "roomInviteFrom": "Convite para a sala de", "justStarted": "Foi iniciado agora", "likeToJoin": ", gostarias de te juntar?", "inviteReceived": "Foste convidado para" }, "editProfileModal": { "usernameTaken": "O utilizador já existe", "avatarUrlError": "Imagem inválida", "avatarUrlLabel": "URL da foto de perfil (Github/Twitter/Discord)", "displayNameError": "Deverá ter entre 2 e 50 caracteres", "displayNameLabel": "Nome de apresentação", "usernameError": "Deverá ter entre 4 e 15 caracteres alfanuméricos e com letra minúscula", "usernameLabel": "Nome de utilizador", "bioError": "Tamanho máximo de 160 caracteres", "bioLabel": "Biografia", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "Pretendes bloquear este utlizador de se juntar às salas que criares?", "blockUser": "Bloquear utilizador", "makeMod": "Tornar moderador", "unmod": "Remover de moderador", "addAsSpeaker": "Adicionar como orador", "moveToListener": "Tornar ouvinte", "banFromChat": "Banir do chat", "banFromRoom": "Banir da sala", "goBackToListener": "voltar a ouvinte", "deleteMessage": "Apagar mensagem", "makeRoomCreator": "Tornar administrador da sala", "unBanFromChat": "Desbanir do Chat", "banIPFromRoom": "Banir IP da Sala" }, "roomSettingsModal": { "requirePermission": "Pedir permissão para falar", "makePublic": "Tornar a sala pública", "makePrivate": "Tornar a sala privada", "renamePublic": "Definir o nome da sala pública", "renamePrivate": "Definir o nome da sala privada", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "userVolumeSlider": { "noAudioMessage": "Sem consumidor de áudio devido a um erro desconhecido" }, "addToCalendar": { "add": "Adicionar ao calendário" }, "keyboardShortcuts": { "setKeybind": "definir atalho", "listening": "a ouvir", "toggleMuteKeybind": "teclas de atalho para silenciar", "togglePushToTalkKeybind": "teclas de atalho para ativar o premir-para-falar", "toggleOverlayKeybind": "teclas de atalho para mostrar/esconder o Overlay", "toggleDeafKeybind": "teclas de atalho para desativar o áudio" }, "wsKilled": { "description": "O WebSocket foi quebrado pelo servidor. Isto geralmente acontece quando abres o site noutro separador.", "reconnect": "restablecer a ligação" }, "deviceNotSupported": { "notSupported": "Neste momento o teu dispositivo não é suportado. Podes criar um", "linkText": "issue no GitHub", "addSupport": "e tentarei adicionar suporte para o mesmo." }, "inviteButton": { "invited": "convidado", "inviteToRoom": "convidar para a sala" }, "followingOnline": { "people": "Pessoas", "online": "ONLINE", "noOnline": "Neste momento tens 0 amigos online", "showMore": "Mostrar mais" }, "upcomingRoomsCard": { "upcomingRooms": "Próximas salas", "exploreMoreRooms": "Explorar mais salas" }, "search": { "placeholder": "Pesquisar salas, utilizadores ou categorias", "placeholderShort": "Pesquisa" }, "settingsDropdown": { "profile": "Perfil", "language": "Linguagem", "reportABug": "Reportar um erro", "useOldVersion": "Usar versão antiga", "logOut": { "button": "Sair", "modalSubtitle": "De certeza que pretendes sair?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Mensagens", "showMore": "Mostre Mais", "noMessages": "No new messages" } }, "modules": { "scheduledRooms": { "title": "Salas agendadas", "noneFound": "nenhuma encontrada", "allRooms": "todas as salas agendadas", "myRooms": "salas agendadas por mim", "scheduleRoomHeader": "Agendar Sala", "startRoom": "iniciar sala", "modal": { "needsFuture": "a data tem de ser posterior", "roomName": "nome da sala", "minLength": "mínimo de 2 caracteres", "roomDescription": "descrição da sala" }, "tommorow": "AMANHÃ", "today": "HOJE", "deleteModal": { "areYouSure": "Are you sure you want to delete this scheduled room?" } }, "roomChat": { "title": "Chat", "emotesSoon": "[emoticons brevemente]", "bannedAlert": "Foste banido do chat", "waitAlert": "Tens de esperar 1 segundo para escrever uma nova mensagem", "search": "Pesquisar", "searchResults": "Resultados da pesquisa", "recent": "Usados Frequentemente", "sendMessage": "Enviar mensagem", "whisper": "Sussurro", "welcomeMessage": "Bem-vindo ao chat!", "roomDescription": "descrição da sala", "disabled": "chat foi desativado", "messageDeletion": { "message": "mensagem", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "A abastecer o foguetão", "takingOff": "A descolar", "inSpace": "No espaço", "approachingMoon": "A aproximar-se da lua", "lunarDoge": "Doge lunar", "approachingSun": "A aproximar-se do sol", "solarDoge": "Doge solar", "approachingGalaxy": "A aproximar-se da galáxia", "galacticDoge": "Doge galático", "spottedLife": "Encontrado planeta com vida" }, "feed": { "yourFeed": "O teu Feed" } } } ================================================ FILE: kibbeh/public/locales/ro/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "Încarcă mai multe", "loading": "Se încarcă...", "noUsersFound": "Nu s-au găsit utilizatori", "ok": "ok", "yes": "da", "no": "nu", "cancel": "anulează", "save": "salvează", "edit": "editează", "delete": "șterge", "joinRoom": "intră în cameră", "copyLink": "copiază link-ul", "copied": "copiat", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Vă rugăm să rețineți că rularea DogeHouse fără permisiuni de accesibilitate poate cauza erori nedorite", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Microfon dezactivat | DogeHouse", "deafenedTitle": "Sunet dezactivat | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Conexiune Luată" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Poveste de origine", "link_2": "Discord", "link_3": "Raportează o eroare" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "blochează", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Lista utilizatorilor care nu se află într-o cameră privată și pe care o urmăriți.", "currentRoom": "Deocamdată în:", "startPrivateRoom": "Începe o cameră privată cu ei", "title": "Persoane" }, "followList": { "followHim": "Urmărește", "followingHim": "Urmărind", "title": "Persoane", "followingNone": "Nu urmărești pe nimeni", "noFollowers": "Nu ai urmăritorii" }, "home": { "createRoom": "Creează cameră", "refresh": "Refresh", "editRoom": "Editeaza cameră", "desktopAlert": "Descarcă aplicația DogeHouse pentru desktop!" }, "inviteList": { "roomGone": "Camera a dispărut, du-te înapoi", "shareRoomLink": "Distribuie link-ul camerei", "inviteFollowers": "Poți invita urmăritorii tăi care sunt online:", "whenFollowersOnline": "Cănd urmăritorii tăi sunt online, o să apară aici." }, "login": { "headerText": "Ducând conversații vocale către lună 🚀", "featureText_1": "Temă întunecată", "featureText_2": "Deschide Sign-Upuri", "featureText_3": "Suport pe mai multe platformeorm", "featureText_4": "Sursa deschisa", "featureText_5": "Conversație Text", "featureText_6": "Alimentat de Doge", "loginGithub": "Autentificare cu GitHub", "loginTwitter": "Autentificare cu Twitter", "createTestUser": "Creare utilizatori de test", "loginDiscord": "Autentificare cu Discord" }, "myProfile": { "logout": "Deconectați-vă", "probablyLoading": "Probabil se încarcă...", "voiceSettings": "Mergi la setările de voce", "soundSettings": "Mergi la setările de sunet", "deleteAccount": "Şterge cont", "overlaySettings": "Accesați setările de suprapunere", "couldNotFindUser": "Scuze, noi nu am putut gasi acel utilizatori", "privacySettings": "Setări de Confidențialitate" }, "notFound": { "whoopsError": "Ups! Această pagină a fost pierdută în conversație.", "goHomeMessage": "Nici o grijă. Poți să", "goHomeLinkText": "te duci acasă" }, "room": { "speakers": "Vorbitori", "requestingToSpeak": "Cere să vorbească", "listeners": "Ascultători", "allowAll": "Permiteți-le pe toate", "allowAllConfirm": "Esti sigur? Asta ar lăsa toti {{count}} utilizatori sa vorbeasca" }, "searchUser": { "search": "caută..." }, "soundEffectSettings": { "header": "Sunete", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "Editează profil", "followsYou": "Te urmărește", "followers": "Urmăritori", "following": "Urmărind", "followHim": "Urmărește", "followingHim": "Urmărind", "copyProfileUrl": "copiați adresa profilului", "urlCopied": "adresă copiată", "unfollow": "Oprește urmărirea", "about": "Despre", "bot": "Bot", "profileTabs": { "about": "Despre", "rooms": "Camere", "scheduled": "Programate", "recorded": "Înregistrate", "clips": "Clipuri", "admin": "Admin" }, "block": "Blochează", "unblock": "Deblochează", "sendDM": "Trimite mesaj privat", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Sunete Voce", "mic": "mic:", "permissionError": "Nu au fost găsite microfoane - ori nu ai unul conectat ori pagina aceasta nu are permisiune.", "refresh": "Reîmprospătează lista de microfoane", "volume": "Volum:", "title": "Setări Voce" }, "overlaySettings": { "input": { "errorMsg": "Titlul de aplicație nu este valid", "label": "Introduceți Titlul Aplicației" }, "header": "Setări de suprapunere" }, "download": { "starting": "Începere descărcarea...", "failed": "Nu s-a putut descărca automat, încercați mai târziu", "visit_gh": "Vizitați Github", "prompt": "Apăsați pe butonul de mai jos pentru a începe descărcarea", "download_now": "Descărcați Acum", "download_for": "Descărcați pentru %platform% (%ext%)" }, "privacySettings": { "title": "Setări de Confidențialitate", "header": "Setări de Confidențialitate", "whispers": { "label": "Mesaje Private", "on": "Pornite", "off": "Oprite" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Utilizatori Blocaţi", "unban": "Elimină restricţie", "noBans": "Nimeni nu a fost blocat deocamdată" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Părăsește camera curentă", "confirmLeaveRoom": "Ești sigur că vrei să ieși?", "leave": "Ieși", "inviteUsersToRoomBtn": "Invită utilizatori în cameră", "invite": "Invită", "toggleMuteMicBtn": "Comutați microfonul", "mute": "Dezactivare sunet", "unmute": "Activare sunet", "makeRoomPublicBtn": "Fă camera publică!", "settings": "Setări", "speaker": "Difuzor", "listener": "Ascultător", "chat": "Chat", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "Dispozitivul tău momentan nu este suportat. Poți crea un", "linkText": "tichet pe GitHub", "addSupport": "și am să încerc să adaug suport pentru dispozitivul tău." }, "inviteButton": { "invited": "Invitat", "inviteToRoom": "Invită în cameră" }, "micPermissionBanner": { "permissionDenied": "Permisiunea refuzată pentru încercarea de a vă accesa microfonul (poate fi necesar să accesați setările browserului și să reîncărcați pagina)", "dismiss": "Renunță", "tryAgain": "Încearcă din nou" }, "keyboardShortcuts": { "setKeybind": "Setează keybind", "listening": "Ascultare", "toggleMuteKeybind": "Keybind comută microfon", "togglePushToTalkKeybind": "Keybind comută push-to-talk", "toggleOverlayKeybind": "keybind comută suprapunere", "toggleDeafKeybind": "Keybind comută sunet" }, "userVolumeSlider": { "noAudioMessage": "niciun consumator audio dintr-un motiv oarecare" }, "addToCalendar": { "add": "Adaugă în Calendar" }, "wsKilled": { "description": "Conexiunea a fost oprită de server. Asta se întamplă de obicei cănd website-ul este deschis în altă filă.", "reconnect": "Reconectează-te" }, "modals": { "createRoomModal": { "public": "Publică", "private": "Privată", "roomName": "Nume Cameră", "roomDescription": "Descriere cameră", "descriptionError": "Lungime maximă de 500", "nameError": "Trebuie să fie între 2 și 60 caractere", "subtitle": "Completați următoarele informații pentru a creea o cameră nouă" }, "invitedToJoinRoomModal": { "newRoomCreated": "Cameră Nouă Creată", "roomInviteFrom": "Invitație Cameră de la", "justStarted": "Tocmai au început", "likeToJoin": ", Vrei să te alături?", "inviteReceived": "Ai fost invitat să" }, "editProfileModal": { "usernameTaken": "Nume deja folosit", "avatarUrlError": "Imagine invalidă", "avatarUrlLabel": "URL avatar Github/Twitter/Discord", "displayNameError": "Lungime între 2 și 50 caractere", "displayNameLabel": "Nume de ecran", "usernameError": "Lungime între 4 și 15 caractere și numai alphanumerice/underscore", "usernameLabel": "Username", "bioError": "Lungime maximă de 160 de caractere", "bioLabel": "Bio", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "Ești sigur că dorești să restrictionezi acest utilizator să intre în orice cameră pe care o creezi?", "blockUser": "Interzice utilizator", "makeMod": "Fă mod", "unmod": "Scoate mod", "addAsSpeaker": "Adaugă ca vorbitor", "moveToListener": "Mută la ascultători", "banFromChat": "Interzice din chat", "banFromRoom": "Interzice din cameră", "goBackToListener": "Du-te înapoi la ascultător", "deleteMessage": "Şterge acest mesaj", "makeRoomCreator": "make room admin", "unBanFromChat": "Permite în chat", "banIPFromRoom": "Interzice IP-ul din Cameră" }, "roomSettingsModal": { "requirePermission": "Necesită permisiunea de a vorbi", "makePublic": "Fă camera publică", "makePrivate": "Fă camera privată", "renamePublic": "Setează numele camerei publice", "renamePrivate": "Setează numele camerei private", "chatDisabled": "dezactivează chat", "chatCooldown": "Întârziere Chat (milliseconds)", "chat": { "label": "Conversație", "enabled": "Activat", "disabled": "Dezactivat", "followerOnly": "Doar urmăritori" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "Persoane", "online": "ONLINE", "noOnline": "Ai 0 prieteni online momentan", "showMore": "Afișati mai multe" }, "upcomingRoomsCard": { "upcomingRooms": "Camere viitoare", "exploreMoreRooms": "Explorează Mai Multe Camere" }, "search": { "placeholder": "Caută camere, utilizatori sau categorii", "placeholderShort": "Caută" }, "settingsDropdown": { "profile": "Pprofil", "language": "Limbă", "reportABug": "Raportează o Problemă", "useOldVersion": "Folosește Versiunea Veche", "logOut": { "button": "Deconectare", "modalSubtitle": "Sunteți sigur(ă) că vreți să vă deconectați?" }, "debugAudio": { "debugAudio": "Testare Audio", "stopDebugger": "Oprește Testul" }, "downloadApp": "Descarcă Aplicația", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Mesaje", "showMore": "Afișează mai multe", "noMessages": "Niciun mesaj nou" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Camere Programate", "noneFound": "niciunul nu a fost găsit", "allRooms": "toate camerele programate", "myRooms": "camerele mele programate", "scheduleRoomHeader": "Programează Cameră", "startRoom": "Începe o cameră", "modal": { "needsFuture": "Trebuie să fie în viitor", "roomName": "Numele camerei", "minLength": "De minim 2 caractere", "roomDescription": "Descriere" }, "tommorow": "MÂINE", "today": "AZI", "deleteModal": { "areYouSure": "Sigur vreți să ștergeți această cameră programată?" } }, "roomChat": { "title": "Conversație", "emotesSoon": "[emote-uri în curând]", "bannedAlert": "Ai fost interzis din conversație", "waitAlert": "Trebuie să aștepți o secundă până sa mai trimiți un mesaj.", "search": "Caută", "searchResults": "Rezultate Căutare", "recent": "Frecvent Utilizat", "sendMessage": "Trimite un mesaj", "whisper": "Șoptește", "welcomeMessage": "Bine ai venit în conversație!", "roomDescription": "Descriere cameră", "disabled": "conversația a fost dezactivată", "messageDeletion": { "message": "mesaj", "retracted": "retras", "deleted": "șters" } }, "roomStatus": { "fuelingRocket": "Alimentâm racheta", "takingOff": "Decolăm", "inSpace": "În spațiu", "approachingMoon": "Ne apropiem de lună", "lunarDoge": "Doge lunar", "approachingSun": "Ne apropiem de soare", "solarDoge": "Doge solar", "approachingGalaxy": "Ne apropiem de galaxie", "galacticDoge": "Doge galactic", "spottedLife": "Planetă cu viață găsită" }, "feed": { "yourFeed": "Fluxul tău" } } } ================================================ FILE: kibbeh/public/locales/ru/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "Загрузить еще", "loading": "Загрузка...", "noUsersFound": "Пользователи не найдены", "ok": "ОК", "yes": "Да", "no": "Нет", "cancel": "Отмена", "save": "Сохранить", "edit": "Редактировать", "delete": "Удалить", "joinRoom": "Присоединиться к комнате", "copyLink": "Скопировать ссылку", "copied": "Скопировано", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Работа в DogeHouse без разрешений доступа может привести к непредвиденным ошибкам", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Приглушено | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Соединение установлено" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "История создания", "link_2": "Discord", "link_3": "Сообщить об ошибке" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "бан", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Список пользователей, которые не в закрытой комнате и на которых вы подписаны.", "currentRoom": "Текущая комната", "startPrivateRoom": "Создать приватную комнату", "title": "People" }, "followList": { "followHim": "Подписаться", "followingHim": "Вы подписаны", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Создать комнату", "refresh": "Обновить", "editRoom": "Редактировать комнату", "desktopAlert": "Скачайте приложение DogeHouse сегодня!" }, "inviteList": { "roomGone": "Комната исчезла, вернитесь назад", "shareRoomLink": "Поделиться ссылкой на комнату", "inviteFollowers": "Вы можете пригласить ваших подписчиков, которые сейчас онлайн:", "whenFollowersOnline": "Когда ваши подписчики онлайн, они отображаются здесь." }, "login": { "headerText": "Возводим голосовое общение до луны 🚀", "featureText_1": "Темная тема", "featureText_2": "Открытая регистрация", "featureText_3": "Кроссплатформенность", "featureText_4": "Открытый исходный код", "featureText_5": "Текстовый чат", "featureText_6": "Работает благодаря Doge", "loginGithub": "Войти через GitHub", "loginTwitter": "Войти через Twitter", "createTestUser": "Создать тестового пользователя", "loginDiscord": "Войти через Discord" }, "myProfile": { "logout": "Выйти", "probablyLoading": "Вероятно загружается...", "voiceSettings": "Голосовые настройки", "soundSettings": "Настройки звука", "deleteAccount": "Удалить аккаунт", "overlaySettings": "Настройки оверлея", "couldNotFindUser": "К сожалению, мы не можем найти этого пользователя", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "Упс! Эта страница была потеряна.", "goHomeMessage": "Не переживайте. Вы можете ", "goHomeLinkText": "вернуться домой" }, "room": { "speakers": "Ораторы", "requestingToSpeak": "Желающие говорить", "listeners": "Слушатели", "allowAll": "Разрешить всем", "allowAllConfirm": "Вы уверены? Это позволит всем {{count}} пользователям, запрашивающих разрешение, говорить" }, "searchUser": { "search": "Поиск..." }, "soundEffectSettings": { "header": "Звуки", "title": "Настройки звука", "playSound": "Play Sound" }, "viewUser": { "editProfile": "редактировать профиль", "followsYou": "подписаны на вас", "followers": "подписчиков", "following": "подписок", "followHim": "подписаться", "followingHim": "Вы подписаны", "copyProfileUrl": "скопировать URL профиля", "urlCopied": "URL профиля скопирован", "unfollow": "Отписаться", "about": "About", "bot": "Бот", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Голосовые настройки", "mic": "микрофон:", "permissionError": "микрофон не найден, он не подключен или браузеру не дано соответствующее разрешение.", "refresh": "обновить список микрофонов", "volume": "громкость:", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "Неправильное название приложения", "label": "Введите название приложения" }, "header": "Настройки оверлея" }, "download": { "starting": "Начало загрузки...", "failed": "Не удалось выполнить автоматическую загрузку, повторите попытку позже", "visit_gh": "Посетите Github Releases", "prompt": "Нажмите на кнопку ниже, чтобы начать загрузку", "download_now": "Скачать сейчас", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Заблокированные пользователи", "unban": "разбанить", "noBans": "еще никто не был забанен" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Покинуть данную комнату", "confirmLeaveRoom": "Вы уверены, что хотите выйти?", "leave": "Выйти", "inviteUsersToRoomBtn": "Пригласить пользователей в комнату", "invite": "Пригласить", "toggleMuteMicBtn": "Переключить состояние микрофона", "mute": "Выключить звук", "unmute": "Включить звук", "makeRoomPublicBtn": "Сделать комнату открытой!", "settings": "настройки", "speaker": "оратор", "listener": "слушатель", "chat": "Чат", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Заглушить", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "Ваше устройство не поддерживается. Вы можете создать", "linkText": "запрос через GitHub", "addSupport": "и мы попробуем добавить поддержку для вашего устройства." }, "inviteButton": { "invited": "приглашен", "inviteToRoom": "пригласить в комнату" }, "micPermissionBanner": { "permissionDenied": "Не удается получить доступ к вашему микрофону (возможно, вам следует зайти в настройки браузера или перезагрузить страницу)", "dismiss": "отклонить", "tryAgain": "попробовать еще раз" }, "keyboardShortcuts": { "setKeybind": "назначить клавишу", "listening": "слушает", "toggleMuteKeybind": "Активация микрофона при нажатии", "togglePushToTalkKeybind": "Включить режим рации", "toggleOverlayKeybind": "переключить привязку клавиши оверлея", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "нет аудиосвязи" }, "addToCalendar": { "add": "Добавить в Календарь" }, "wsKilled": { "description": "Вебсокет был удален сервером. Обычно это происходит когда вы открываете сайт в другой вкладке.", "reconnect": "Переподключиться" }, "modals": { "createRoomModal": { "public": "публичная", "private": "приватная", "roomName": "название комнаты", "roomDescription": "описание комнаты", "descriptionError": "максимальная длина 500", "nameError": "длина должна быть от 2 до 60 символов", "subtitle": "Заполните следующие поля чтобы создать новую комнату" }, "invitedToJoinRoomModal": { "newRoomCreated": "Новая комната создана", "roomInviteFrom": "Приглашение в комнату от", "justStarted": "Они только что начали", "likeToJoin": ", хотите присоединиться?", "inviteReceived": "вы были приглашены в" }, "editProfileModal": { "usernameTaken": "имя пользователя занято", "avatarUrlError": "Некорректное изображение", "avatarUrlLabel": "URL аватара из Github/Twitter/Discord", "displayNameError": "длина от 2 до 50 символов", "displayNameLabel": "Публичное имя", "usernameError": "длина от 4 до 15 символов, только буквенно-цифровые символы и нижнее подчеркивание", "usernameLabel": "Имя пользователя", "bioError": "максимальная длина 160 символов", "bioLabel": "Обо мне", "bannerUrlLabel": "URL баннера Twitter" }, "profileModal": { "blockUserConfirm": "Вы уверены, что хотите закрыть этому пользователя доступ в любую из ваших комнат?", "blockUser": "заблокировать пользователя", "makeMod": "назначить модератором", "unmod": "забрать модератора", "addAsSpeaker": "добавить оратора", "moveToListener": "переместить в слушатели", "banFromChat": "забанить из этого чата", "banFromRoom": "забанить из этой комнаты", "goBackToListener": "стать слушателем", "deleteMessage": "удалить это сообщение", "makeRoomCreator": "назначить админом комнаты", "unBanFromChat": "Разбанить в чате", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "чтобы разговаривать здесь требуется разрешение", "makePublic": "сделать комнату публичной", "makePrivate": "сделать комнату приватной", "renamePublic": "Установить название общей комнаты", "renamePrivate": "Установить название приватной комнаты", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "Люди", "online": "Онлайн", "noOnline": "В данный момент 0 ваших друзей онлайн", "showMore": "Показать больше" }, "upcomingRoomsCard": { "upcomingRooms": "Ожидаемые комнаты", "exploreMoreRooms": "Найти больше комнат" }, "search": { "placeholder": "Поиск комнат, пользователей или категорий", "placeholderShort": "Поиск" }, "settingsDropdown": { "profile": "Профиль", "language": "Язык", "reportABug": "Сообщить о проблеме", "useOldVersion": "Использовать старую версию", "logOut": { "button": "Выход", "modalSubtitle": "Вы уверены что хотите выйти?" }, "debugAudio": { "debugAudio": "Отладка звука", "stopDebugger": "Остановить отладчик" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Запланированные комнаты", "noneFound": "не найдено", "allRooms": "все запланированные комнаты", "myRooms": "мои запланированные комнаты", "scheduleRoomHeader": "Запланированные комнаты", "startRoom": "создать комнату", "modal": { "needsFuture": "должно появится в будущем", "roomName": "название комнаты", "roomDescription": "Описание", "minLength": "минимальная длина 2" }, "tommorow": "Завтра", "today": "Сегодня", "deleteModal": { "areYouSure": "Вы действительно хотите удалить эту запланированную комнату?" } }, "roomChat": { "title": "Чат", "emotesSoon": "[эмодзи скоро]", "bannedAlert": "Вы были заблокированы в этом чате", "waitAlert": "Подождите еще секунду, прежде чем отправить следующее сообщение", "search": "Поиск", "searchResults": "Результаты поиска", "recent": "Часто используемые", "sendMessage": "Отправить сообщение", "whisper": "Шепнуть", "welcomeMessage": "Добро пожаловать в чат!", "roomDescription": "описание комнаты", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "заправляем ракету", "takingOff": "старт двигателей", "inSpace": "В космосе", "approachingMoon": "приближаемся к луне", "lunarDoge": "лунный Doge", "approachingSun": "приближаемся к солнцу", "solarDoge": "солнечный Doge", "approachingGalaxy": "приближаемся к галактике", "galacticDoge": "галактический Doge", "spottedLife": "замечена планета с жизнью" }, "feed": { "yourFeed": "Ваша лента" } } } ================================================ FILE: kibbeh/public/locales/sa/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "भार मोरे", "loading": "लॉदिङ्ग्...", "noUsersFound": "नो उसेर्स फ़ोउन्द्!", "ok": "ओक", "yes": "येस", "no": "नो", "cancel": "चान्च्ले", "save": "सवे", "edit": "एदित", "delete": "देलेते", "joinRoom": "जोइन् रूम", "copyLink": "चोप्य लिनक्", "copied": "चोप्पिएद्!", "copy": "चोप्य", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "फ्लेअसे नोते रुन्निन्ग डोगेहोउसे विथोउत अच्छेस्सिबिलित्य पेर्मिस्सिओन्स् मय चौसे उन्वन्तेद एर्रोर्स्", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "डोगेःओउसे", "dashboard": "डश्बॉर्द्", "connectionTaken": "ओन्नेच्तिओन् तकेन", "mutedTitle": "मुतेद | डोगेःओउसे", "deafenedTitle": "डेअफ़ेनेद् | डोगेःओउसे" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Origin Story", "link_2": "Discord", "link_3": "Report a Bug" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" }, "admin": { "ban": "Ban", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "download": { "prompt": "Download the DogeHouse Desktop app", "download_for": "Download for %platform% (%ext%)", "failed": "Unable to detect platform, please try again later or visit GitHub Releases", "visit_gh": "Visit GitHub Releases" }, "followingOnlineList": { "title": "People", "listHeader": "List of users that are not in a private room and you follow.", "currentRoom": "Currently in:", "startPrivateRoom": "Start a private room with them" }, "followList": { "title": "People", "followHim": "Follow", "followingHim": "Following", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "New room", "editRoom": "Edit Room", "refresh": "Refresh", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "Room gone; go back", "shareRoomLink": "Share Room Link", "inviteFollowers": "You can invite your followers that are online:", "whenFollowersOnline": "When your followers are online, they will show up here." }, "login": { "headerText": "Taking voice conversations to the moon 🚀", "featureText_1": "Dark Theme", "featureText_2": "Open Sign-Ups", "featureText_3": "Cross-Platform Support", "featureText_4": "Open Source", "featureText_5": "Text Chat", "featureText_6": "Powered by Doge", "loginGithub": "Login with GitHub", "loginTwitter": "Login with Twitter", "loginDiscord": "Login with Discord", "createTestUser": "Create Test User" }, "myProfile": { "logout": "Logout", "probablyLoading": "probably loading...", "voiceSettings": "Voice Settings", "overlaySettings": "Overlay Settings", "soundSettings": "Sound Settings", "deleteAccount": "Delete Account", "couldNotFindUser": "Sorry, we could not find that user", "privacySettings": "Privacy Settings" }, "notFound": { "whoopsError": "Whoops! This page got lost in conversation.", "goHomeMessage": "Not to worry. You can", "goHomeLinkText": "go home" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "room": { "speakers": "Speakers", "requestingToSpeak": "Requesting to Speak", "listeners": "Listeners", "allowAll": "Allow all", "allowAllConfirm": "Are you sure? This will allow all {{count}} requesting users to speak" }, "searchUser": { "search": "search..." }, "soundEffectSettings": { "title": "Sound Settings", "header": "Sounds", "playSound": "Play Sound" }, "viewUser": { "editProfile": "Edit Profile", "followsYou": "Follows you", "followers": "followers", "following": "following", "followHim": "Follow", "unfollow": "Unfollow", "followingHim": "Following", "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "copyProfileUrl": "Copy Profile URL", "urlCopied": "URL copied to clipboard", "about": "About", "aboutSuffix": "", "bot": "Bot", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." }, "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" } }, "voiceSettings": { "title": "Voice Settings", "header": "Voice Settings", "mic": "Mic:", "permissionError": "No mics found, you either have none plugged in or haven't given this website permission.", "refresh": "Refresh Mic List", "volume": "Volume:" }, "overlaySettings": { "header": "Overlay Settings", "input": { "errorMsg": "Please enter a valid app title", "label": "App title" } } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Banned Users", "unban": "Unban", "noBans": "No one has been banned yet" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Leave Current Room", "confirmLeaveRoom": "Are you sure you want to leave?", "leave": "Leave", "inviteUsersToRoomBtn": "Invite Users to Room", "invite": "Invite", "toggleMuteMicBtn": "Toggle Mute", "toggleDeafMicBtn": "Toggle Deafen", "mute": "Mute", "unmute": "Unmute", "deafen": "Deafen", "undeafen": "Undeafen", "makeRoomPublicBtn": "Make Room Public!", "settings": "Settings", "speaker": "Speaker", "listener": "Listener", "chat": "Chat" }, "deviceNotSupported": { "notSupported": "Your device is currently not supported. You can create an", "linkText": "issue on GitHub", "addSupport": "and I will try adding support for your device." }, "followingOnline": { "people": "People", "online": "ONLINE", "noOnline": "You have 0 friends online right now", "showMore": "Show more" }, "inviteButton": { "invited": "Invited!", "inviteToRoom": "Invite to room" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" }, "micPermissionBanner": { "permissionDenied": "Permission denied trying to access your mic (you may need to go into browser settings and reload the page)", "dismiss": "Dismiss", "tryAgain": "Try Again" }, "keyboardShortcuts": { "setKeybind": "Set Keybind", "listening": "Listening...", "toggleMuteKeybind": "Toggle mute keybind", "toggleDeafKeybind": "Toggle deafen keybind", "toggleOverlayKeybind": "Toggle overlay keybind", "togglePushToTalkKeybind": "Toggle push-to-talk keybind" }, "userVolumeSlider": { "noAudioMessage": "No audio consumer for some reason" }, "upcomingRoomsCard": { "upcomingRooms": "Upcoming rooms", "exploreMoreRooms": "Explore more rooms" }, "addToCalendar": { "add": "Add to Calendar" }, "wsKilled": { "description": "WebSocket was killed by the server. This usually happens when you open the website in another tab.", "reconnect": "Reconnect" }, "search": { "placeholder": "Search for rooms, users or categories", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profile", "language": "Language", "reportABug": "Report A Bug", "useOldVersion": "Use Old Version", "logOut": { "button": "Log out", "modalSubtitle": "Are you sure you want to logout?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "modals": { "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" }, "createRoomModal": { "subtitle": "Fill the following fields to start a new room", "public": "Public", "private": "Private", "roomName": "Room name", "roomDescription": "Room description", "descriptionError": "Max length 500", "nameError": "Must be between 2 to 60 characters long" }, "invitedToJoinRoomModal": { "newRoomCreated": "New Room Created", "roomInviteFrom": "Room Invite from", "justStarted": "They just started", "likeToJoin": ", would you like to join?", "inviteReceived": "you've been invited to" }, "editProfileModal": { "usernameTaken": "Username taken", "avatarUrlError": "Invalid image", "avatarUrlLabel": "Github/Twitter/Discord avatar URL", "bannerUrlLabel": "Twitter banner URL", "displayNameError": "Length 2 to 50 characters", "displayNameLabel": "Display Name", "usernameError": "Length 4 to 15 characters and only alphanumeric/underscore", "usernameLabel": "Username", "bioError": "Max length of 160 characters", "bioLabel": "Bio" }, "profileModal": { "blockUserConfirm": "Are you sure you want to block this user from joining any room you ever create?", "blockUser": "Block user", "makeMod": "Promote to Mod", "unmod": "Demote from Mod", "addAsSpeaker": "Add as Speaker", "moveToListener": "Move to Listener", "unBanFromChat": "Unban from Chat", "banFromChat": "Ban from Chat", "banFromRoom": "Ban from Room", "banIPFromRoom": "Ban IP from Room", "goBackToListener": "Go Back to Listener", "deleteMessage": "Delete this Message", "makeRoomCreator": "Promote to Admin" }, "roomSettingsModal": { "requirePermission": "require permission to speak", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" }, "makePublic": "make room public", "makePrivate": "make room private", "renamePublic": "Set public room name", "renamePrivate": "Set private room name" } } }, "modules": { "_comment": "Modules UI Internationalization Strings", "feed": { "yourFeed": "Your feed" }, "scheduledRooms": { "title": "Scheduled Rooms", "noneFound": "none found", "allRooms": "all scheduled rooms", "myRooms": "my scheduled rooms", "scheduleRoomHeader": "Schedule Room", "startRoom": "start room", "tommorow": "TOMMOROW", "today": "TODAY", "modal": { "needsFuture": "needs to be in the future", "roomName": "room name", "roomDescription": "Description", "minLength": "min length 2" }, "deleteModal": { "areYouSure": "Are you sure you want to delete this scheduled room?" } }, "roomChat": { "title": "Chat", "emotesSoon": "[emotes soon]", "bannedAlert": "You have been banned from chat", "waitAlert": "You have to wait a second before sending another message", "search": "Search", "searchResults": "Search Results", "recent": "Frequently Used", "sendMessage": "Send a Message", "whisper": "Whisper", "welcomeMessage": "Welcome to chat!", "roomDescription": "Room description", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Fueling rocket", "takingOff": "Taking off", "inSpace": "In space", "approachingMoon": "Approaching moon", "lunarDoge": "Lunar Doge", "approachingSun": "Approaching sun", "solarDoge": "Solar Doge", "approachingGalaxy": "Approaching galaxy", "galacticDoge": "Galactic Doge", "spottedLife": "Planet with life spotted" } } } ================================================ FILE: kibbeh/public/locales/si/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "තවත් පෙන්නන්න", "loading": "ලබා ගනිමින් පවතී...", "noUsersFound": "පරිශීලකයින් හමුවූයේ නැත", "ok": "හරි", "yes": "ඔව්", "no": "නැත", "cancel": "අවලංගු කරන්න", "save": "සුරකින්න", "edit": "සංස්කරණය කරන්න", "delete": "මකන්න", "joinRoom": "සමූහයට එක්වන්න", "copyLink": "සබැඳිය පිටපත් කරන්න", "copied": "පිටපත් කරගත්තා", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Please note running DogeHouse without accessibility permissions may cause unwanted errors", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Muted | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "මූලාරම්භක කතාව", "link_2": "Discord", "link_3": "ගැටලුවක් පැමිණිලි කරන්න" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "ඉවත් කරන්න", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "පෞද්ගලික සමූහයක නොමැති ඔබ හඹායන පරිශීලකයින්", "currentRoom": "දැනට සිටින්නේ:", "startPrivateRoom": "ඔවුන් සමග පෞද්ගලික සමූහයක් අරඹන්න", "title": "People" }, "followList": { "followHim": "හඹා යන්න", "followingHim": "හඹා යන්නන්", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "සමූහයක් අරඹන්න", "refresh": "Refresh", "editRoom": "Edit Room", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "සමූහය නොමැත,ආපසු යන්න", "shareRoomLink": "සමූහයේ සබැඳිය බෙදාගන්න", "inviteFollowers": "ඔබට සක්‍රීයව සිටින ඔබව හඹායන්නන්ට ඇරයුම් කල හැක:", "whenFollowersOnline": "ඔබව හඹායන්නන් සක්‍රීයව සිටින විට,ඔවුන්ව මෙතන පෙන්වයි." }, "login": { "headerText": "ඔබගේ හඬ සංවාද හඳ දක්වා ගෙනියන්න 🚀", "featureText_1": "අඳුරු ප්‍රකාරය", "featureText_2": "විවෘත සම්බන්ධ වීම්", "featureText_3": "සියලු පද්ධති වලට සහය", "featureText_4": "විවෘත කේත", "featureText_5": "පණිවුඩ", "featureText_6": "බලගැන්වෙන්නේ Doge මගින්", "loginGithub": " GitHub මගින් සම්බන්ධ වන්න", "loginTwitter": "Twitter මගින් සම්බන්ධ වන්න", "createTestUser": "පරිශීලක පරීක්ෂකයෙක් සාදන්න", "loginDiscord": "Login with Discord" }, "myProfile": { "logout": "ඉවත් වන්න", "probablyLoading": "බොහෝවිට ලබා ගනිමින් පවතී...", "voiceSettings": "හඬ සැකසුම් වලට යන්න", "soundSettings": "ශබ්ද සැකසුම් වලට යන්න", "deleteAccount": "ගිණුම ඉවත් කරන්න", "overlaySettings": "go to overlay settings", "couldNotFindUser": "Sorry, we could not find that user", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "Whoops! සංවාදයේදී මෙම පිටුව මඟහැරී ඇත.", "goHomeMessage": "කරදර වෙන්න දෙයක් නොමැත.ඔබට", "goHomeLinkText": "මුල් පිටුවට යන්න" }, "room": { "speakers": "Speakers", "requestingToSpeak": "කතා කිරීමට අවසර ලබා ගන්න", "listeners": "Listeners", "allowAll": "Allow all", "allowAllConfirm": "Are you sure? This will allow all {{count}} requesting users to speak" }, "searchUser": { "search": "සොයන්න..." }, "soundEffectSettings": { "header": "ශබ්ද", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "profile එක සංස්කරණය කරන්න", "followsYou": "ඔබව හඹා යයි", "followers": "ඔබව හඹා යන්නන්", "following": "ඔබ හඹා යන්නන්", "followHim": "හඹා යන්න", "followingHim": "හඹා යන්නන්", "copyProfileUrl": "copy profile url", "urlCopied": "URL copied to clipboard", "unfollow": "Unfollow", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "හඬ සැකසුම්", "mic": "mic:", "permissionError": "mics එකක් හමුවූයේ නැත.ඔබ එකක් සම්බන්ධ නොමැත හෝ මෙම වෙබ් අඩවියට අවසර දී නොමැත", "refresh": "mic ලැයිස්තුව refresh කරන්න", "volume": "පරිමාව:", "title": "Voice Settings" }, "overlaySettings": { "header": "Overlay Settings", "input": { "errorMsg": "Please enter valid app title", "label": "Enter app title" } }, "download": { "starting": "Starting download...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "Click on the button below to start download", "download_now": "Download Now", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "අවහිර කල පරිශීලකයින්", "unban": "අවහිර නොකරන්න", "noBans": "දැනට කිසිවෙක් අවහිර කර නොමැත" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "දැනට සිටින සමූහයෙන් ඉවත් වන්න", "confirmLeaveRoom": "ඔබට ඉවත් වන්න අවශ්‍යමද?", "leave": "ඉවත් වන්න", "inviteUsersToRoomBtn": "පරිශීලකයින්ට සමූහයට ඇරයුම් කරන්න", "invite": "ඇරයුම්", "toggleMuteMicBtn": "microphone එකේ තත්වය වෙනස් කරන්න", "mute": "නිශ්ශබ්ද කරන්න", "unmute": "නිශ්ශබ්ද නොකරන්න", "makeRoomPublicBtn": "පොදු සමූහයක් කරන්න!", "settings": "සැකසුම්", "speaker": "Speaker", "listener": "Listener", "chat": "Chat", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "ඔබගේ උපාංගය සහාය නොදක්වයි.ඔබට සැකසිය හැක", "linkText": "issue on GitHub", "addSupport": "මම ඔබගේ උපාංගයට සහය දැක්වීමට උත්සහ කරන්නම්" }, "inviteButton": { "invited": "ඇරයුම් කළා", "inviteToRoom": "සමූහයට ඇරයුම් කරන්න" }, "micPermissionBanner": { "permissionDenied": "ඔබගේ mic එකට අවසර ලබාගැනීමේදී ප්‍රතික්ෂේප විය (ඔබගේ browser සැකසුම් වෙනස් කර පිටුව reload කරන්න)", "dismiss": "මඟ හරින්න", "tryAgain": "නැවත උත්සහ කරන්න" }, "keyboardShortcuts": { "setKeybind": "set keybind", "listening": "listening", "toggleMuteKeybind": "keybind වල තත්වය වෙනස් කරන්න", "togglePushToTalkKeybind": "push-to-talk keybind වල තත්වය වෙනස් කරන්න", "toggleOverlayKeybind": "toggle overlay keybind", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "no audio consumer for some reason" }, "addToCalendar": { "add": "දින දර්ශනයට එක් කරන්න" }, "wsKilled": { "description": "WebSocket was killed by the server. This usually happens when you open the website in another tab.", "reconnect": "නැවත සම්බන්ධ වෙන්න" }, "modals": { "createRoomModal": { "public": "පොදු", "private": "පෞද්ගලික", "roomName": "සමූහයේ නම", "roomDescription": "සමූහයේ විස්තර", "descriptionError": "උපරිම දිග 500", "nameError": "අකුරු 2 හා 60 අතර විය යුතුය", "subtitle": "Fill the following fields to start a new room" }, "invitedToJoinRoomModal": { "newRoomCreated": "නව සමූහයක් සෑදුවා", "roomInviteFrom": "සමූහ ඇරයුම් පත", "justStarted": "ඇරඹුනා පමණි", "likeToJoin": ", ඔබ සම්බන්ධ වන්න කැමතිද?", "inviteReceived": "ඔබට ඇරයුම් කර ඇත" }, "editProfileModal": { "usernameTaken": "පරිශීලක නම භාවිතා කර ඇත", "avatarUrlError": "අවලංගු පිංතූරයකි", "avatarUrlLabel": "Github/Twitter/Discord පිංතූරයේ සබැඳිය", "displayNameError": "අකුරු 2 හා 50 අතර ", "displayNameLabel": "පෙන්විය යුතු නම", "usernameError": "අකුරු 4 හා 15 අතර විය යුතු අතර alphanumeric/underscore පමණක් භාවිත කල යුතුය", "usernameLabel": "පරිශීලක නම", "bioError": "උපරිම දිග අකුරු 160 විය යුතුය", "bioLabel": "වතගොත", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "ඔබට මෙම පරිශීලකයා ඔබ ඉදිරියට සාදන සමූහවලට සම්බන්ධ වීම නැවැත්විය යුතුද?", "blockUser": "පරිශීලකයා අවහිර කරන්න", "makeMod": "උපපරිපාලක කෙනෙක් කරන්න", "unmod": "උපපරිපාලක කෙනෙක් නොකරන්න", "addAsSpeaker": "කතා කරන්නෙක් ලෙස ඇතුලත් කරන්න", "moveToListener": "අසන්නෙක් ලෙස ඇතුල් කරන්න", "banFromChat": "chat එකෙන් ඉවත් කරන්න", "banFromRoom": "සමූහයෙන් ඉවත් කරන්න", "goBackToListener": "අසන්නෙක් ලෙසට යන්න", "deleteMessage": "පිළිතුර ඉවත් කරන්න", "makeRoomCreator": "පරිපාලක කරන්න", "unBanFromChat": "Unban from Chat", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "කතා කරන්න අවසර ගන්න", "makePublic": "සමූහය පොදු කරන්න", "makePrivate": "සමූහය පෞද්ගලික කරන්න", "renamePublic": "Set public room name", "renamePrivate": "Set private room name", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "People", "online": "ONLINE", "noOnline": "You have 0 friends online right now", "showMore": "Show more" }, "upcomingRoomsCard": { "upcomingRooms": "Upcoming rooms", "exploreMoreRooms": "Explore More Rooms" }, "search": { "placeholder": "Search for rooms, users or categories", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profile", "language": "Language", "reportABug": "Report A Bug", "useOldVersion": "Use Old Version", "logOut": { "button": "Log out", "modalSubtitle": "Are you sure you want to logout?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "වෙන්කර ඇති සමූහ", "noneFound": "හමුවූයේ නැත", "allRooms": "සියලු වෙන්කර ඇති සමූහයන්", "myRooms": "මම වෙන්කර ඇති සමූහයන්", "scheduleRoomHeader": "සමූහයක් වෙන් කරන්න", "startRoom": "සමූහය පටන්ගන්න", "modal": { "needsFuture": "ඉදිරියේදී තිබිය යුතුය", "roomName": "සමූහයේ නම", "roomDescription": "විස්‌තර", "minLength": "අඩුම දිග 2" }, "tommorow": "TOMMOROW", "today": "TODAY", "deleteModal": { "areYouSure": "Are you sure you want to delete this scheduled room?" } }, "roomChat": { "title": "Chat", "emotesSoon": "[emotes soon]", "bannedAlert": "ඔබව සමූහයෙන් ඉවත්කර ඇත", "waitAlert": "තවත් පිළිතුරක් ලබාදීමට තත්පරයක් සිටිය යුතුය", "search": "සොයන්න", "searchResults": "සොයන ලද ප්‍රතිඵල", "recent": "නිතර භාවිතා කල", "sendMessage": "පිළිතුරක් යවන්න", "whisper": "කොඳුරන්න", "welcomeMessage": "chat එකට පිළිගන්නවා!", "roomDescription": "සමූහයේ විස්තර", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Fueling rocket", "takingOff": "Taking off", "inSpace": "In space", "approachingMoon": "Approaching moon", "lunarDoge": "Lunar Doge", "approachingSun": "Approaching sun", "solarDoge": "Solar Doge", "approachingGalaxy": "Approaching galaxy", "galacticDoge": "Galactic Doge", "spottedLife": "Planet with life spotted" }, "feed": { "yourFeed": "Your Feed" } } } ================================================ FILE: kibbeh/public/locales/sk/translation.json ================================================ { "common": { "loadMore": "načítať viac", "loading": "načítam...", "noUsersFound": "nenájdený žiadny používatelia", "ok": "ok", "yes": "áno", "no": "nie", "cancel": "zrušiť", "save": "uložiť", "edit": "upraviť", "delete": "zmazať", "joinRoom": "pripojiť sa do miestnosti", "copyLink": "skopírovať odkaz", "copied": "skopírováné", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Spúštanie DogeHose-u bez prístupových oprávnení môže spôsobovať nečakané chyby", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Stíšený | DogeHouse", "deafenedTitle": "Vypnutý zvuk | DogeHouse", "dashboard": "Nástenka", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Pôvod", "link_2": "Discord", "link_3": "Nahlásiť chybu" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "zabanovať", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Zoznam používateľov ktorých sleduješ a niesú v súkromnej miestnosti", "currentRoom": "aktuálne v:", "startPrivateRoom": "začať s nimi súkromnú miestnosť", "title": "People" }, "followList": { "followHim": "Sledovať", "followingHim": "Sledovaný", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Vytvoriť miestnosť", "refresh": "Obnoviť", "editRoom": "Upraviť miestnosť", "desktopAlert": "Stiahni si DogeHouse aplikáciu už dnes!" }, "inviteList": { "roomGone": "miestnosť je fuč, vráť sa", "shareRoomLink": "zdieľať odkaz miestnosti", "inviteFollowers": "Môžeš pozvať svojich sledovateľov ktorí sú online:", "whenFollowersOnline": "Tu sa zobrazia tvoji sledovatelia ak budú online" }, "login": { "headerText": "Vynášame hlasové konverzácie až na mesiac 🚀", "featureText_1": "Tmavý mód", "featureText_2": "Voľné príhlásenie", "featureText_3": "Cross-Platformová podpora", "featureText_4": "Open Source", "featureText_5": "Textový chat", "featureText_6": "Powered by Doge", "loginGithub": "Prihlásiť sa cez GitHub", "loginTwitter": "Prihlásiť sa cez Twitter", "createTestUser": "Vytvoriť testovacieho používateľa", "loginDiscord": "Prihlásiť sa cez Discord" }, "myProfile": { "logout": "Odhlásiť sa", "probablyLoading": "zrejme načítam...", "voiceSettings": "otvoriť nastavenia hlasu", "soundSettings": "otvoriť nastavenia zvuku", "deleteAccount": "odstrániť účet", "overlaySettings": "otvoriť nastavenia prekresľovania", "couldNotFindUser": "Užívateľ nenájdený", "privacySettings": "Nastavenia súkromia" }, "notFound": { "whoopsError": "Uups! Táto stránka sa stratila v konverzácii.", "goHomeMessage": "Žiadny strach. Môžeš sa", "goHomeLinkText": "vrátiť domov" }, "room": { "speakers": "Rozprávači", "requestingToSpeak": "Chce povolenie rozprávať", "listeners": "Poslucháči", "allowAll": "Povoliť rozprávať všetkým", "allowAllConfirm": "Si si istý? Povolíš rozprávať všetkým {{count}} žiadateľom" }, "searchUser": { "search": "hľadať..." }, "soundEffectSettings": { "header": "Zvuky", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "upraviť profil", "followsYou": "sleduje ťa", "followers": "sledovateľov", "following": "sledovaných", "followHim": "sledovať", "followingHim": "sledovaný", "copyProfileUrl": "skopírovať url profilu", "urlCopied": "URL skopírované do schránky", "unfollow": "Prestať sledovať", "about": "O používateľovi", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Nastavenia hlasu", "mic": "mikrofón:", "permissionError": "žiadne mikrofóny nenájdené, buď žiaden nie je zapojený alebo si neudelil stránke oprávnenie.", "refresh": "obnoviť zoznam mikrofónov", "volume": "hlasitosť:", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "Nesprávny názov aplikácie", "label": "Vlož názov aplikácie" }, "header": "Nastavenia prekresľovania" }, "download": { "starting": "Začínam sťahovať...", "failed": "Automatické stihnutie zlyhalo, skús znova neskôr", "visit_gh": "Pozrieť vydania na Githube", "prompt": "Pre začatie sťahovania klikni na tlačidlo", "download_now": "Stiahnuť teraz", "download_for": "Stiahnuť pre %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Zabanovaný používatelia", "unban": "odbanovať", "noBans": "nikto zatiaľ nebol zabanovaný" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Opustiť aktuálnu miestnosť", "confirmLeaveRoom": "Skutočne chceš opustiť miestnosť?", "leave": "Opustiť", "inviteUsersToRoomBtn": "Pozvať používateľov do miestnosti", "invite": "Pozvať", "toggleMuteMicBtn": "Prepnúť stíšenie mikrofónu", "mute": "Stíšiť", "unmute": "Hovoriť", "makeRoomPublicBtn": "Zverejniť miestnosť!", "settings": "Nastavenia", "speaker": "Rozprávač", "listener": "Poslúchač", "chat": "Chat", "toggleDeafMicBtn": "Prepnúť stíšenie zvuku", "deafen": "Vypnúť zvuk", "undeafen": "Zapnúť zvuk" }, "deviceNotSupported": { "notSupported": "Tvoje zariadenie nie je podporované. Môžeš vytvoriť:", "linkText": "Issue na GitHube", "addSupport": "a my se pre tvoje zariadenie pokusíme pridať podporu." }, "inviteButton": { "invited": "pozvaný", "inviteToRoom": "pozvať do miestnosti" }, "micPermissionBanner": { "permissionDenied": "Prístup k mikrofónu zamietnutý (budeš musieť zmeniť nastavenia prehliadača a obnoviť stránku)", "dismiss": "zavrieť", "tryAgain": "skúsiť znovu" }, "keyboardShortcuts": { "setKeybind": "nastaviť klávesovú skratku", "listening": "počúvam", "toggleMuteKeybind": "prepínač stíšenia", "togglePushToTalkKeybind": "prepínač push-to-talk", "toggleOverlayKeybind": "prepínač prekreslenia", "toggleDeafKeybind": "prepinač stíšenia zvuku" }, "userVolumeSlider": { "noAudioMessage": "z nejakého dôvodu nemáme žiadny zvuk" }, "addToCalendar": { "add": "Pridať do kalendára" }, "wsKilled": { "description": "Websocket ukončený zo strany serveru. To sa väčšinou stáva ak máš stránku otvorenú v ďalšej záložke.", "reconnect": "obnoviť pripojenie" }, "modals": { "createRoomModal": { "public": "verejná", "private": "súkromá", "roomName": "názov miestnosti", "roomDescription": "popis miestnosti", "descriptionError": "maximálna dĺžka je 500 znakov", "nameError": "počet znakov musí byť medzi 2-60", "subtitle": "Vyplň nasledovné polia pre vytvorenie novej miestnosti" }, "invitedToJoinRoomModal": { "newRoomCreated": "Vytvorená nová miestnosť", "roomInviteFrom": "Pozvánka do miestnosti od", "justStarted": "Práve začali", "likeToJoin": ", chceš sa pripojiť?", "inviteReceived": "bol si pozvaný do" }, "editProfileModal": { "usernameTaken": "používatelské meno je obsadené", "avatarUrlError": "Nesprávny obrázok", "avatarUrlLabel": "odkaz na Github/Twitter/Discord obrázok", "displayNameError": "počet znakov musí byť medzi 2-50", "displayNameLabel": "Verejná prezývka", "usernameError": "počet znakov musí byť medzi 4-15, povolené sú len písmená, čísla a podčiarkovník", "usernameLabel": "Používatelské meno", "bioError": "maximálna dĺžka je 160 znakov", "bioLabel": "O mne", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "Si si istý, že chceš zabanovať tohto používateľa zo všetkých tvojich miestností?", "blockUser": "zabanovať používateľa", "makeMod": "udeliť moderátora", "unmod": "odobrať moderátora", "addAsSpeaker": "pridať ako rozprávača", "moveToListener": "presunúť na poslucháča", "banFromChat": "zabanovať z chatu", "banFromRoom": "zabanovat z miestnosti", "goBackToListener": "vrátiť sa k poslucháčovi", "deleteMessage": "zmazať túto správu", "makeRoomCreator": "udeliť správcu miestnosti", "unBanFromChat": "odbanovať z chatu", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "Poslucháči musia požiadať o povolenie rozprávať", "makePublic": "zverejniť miestnosť", "makePrivate": "zosúkromniť miestnosť", "renamePublic": "Nastaviť názov verejnej miestnosti", "renamePrivate": "Nastaviť názov súkromnej miestnosti", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "Ľudia", "online": "ONLINE", "noOnline": "Aktuálne niesú online žiadny tvoji priatelia", "showMore": "Ukázať viac" }, "upcomingRoomsCard": { "upcomingRooms": "Nadchádzajúce miestnosti", "exploreMoreRooms": "Preskúmať viac miestností" }, "search": { "placeholder": "Vyhľadaj miestnosti, užívateľov alebo kategórie", "placeholderShort": "Hľadať" }, "settingsDropdown": { "profile": "Profil", "language": "Jazyk", "reportABug": "Nahlásiť chybu", "useOldVersion": "Prepnúť na starú verziu", "logOut": { "button": "Odhlásiť sa", "modalSubtitle": "Si si istý, že sa chceš odhlásiť?" }, "debugAudio": { "debugAudio": "Debugovať Audio", "stopDebugger": "Zastaviť Debugger" }, "downloadApp": "Stiahnuť aplikáciu", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Naplánované miestnosti", "noneFound": "žiadne nenájdené", "allRooms": "všetky naplánované miestnosti", "myRooms": "moje naplánované miestnosti", "scheduleRoomHeader": "Naplánovať miestnosť", "startRoom": "začať miestnosť", "modal": { "needsFuture": "musí byť v budúcnosti", "roomName": "názov miestnosti", "minLength": "minimálne 2 znaky", "roomDescription": "Popis" }, "tommorow": "ZAJTRA", "today": "DNES", "deleteModal": { "areYouSure": "Si si istý, že chceš zmazať túto naplánovanú miestnosť?" } }, "roomChat": { "title": "Chat", "emotesSoon": "[emotikony už čoskoro]", "bannedAlert": "Bol si zabanovaný z chatu", "waitAlert": "Pre poslanie ďalšej správy musíš počkať sekundu", "search": "Hľadať", "searchResults": "Výsledky vyhľadávania", "recent": "Často používané", "sendMessage": "Odoslať správu", "whisper": "Pošepkať", "welcomeMessage": "Vitaj v chate!", "roomDescription": "popis miestnosti", "disabled": "chat miestnosti bol vypnutý", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Tankujeme raketu", "takingOff": "Vzlietame", "inSpace": "Vo vesmíre", "approachingMoon": "Blížime sa k mesiacu", "lunarDoge": "Lunárny doge", "approachingSun": "Blížime sa k slnku", "solarDoge": "Solárny doge", "approachingGalaxy": "Blížime sa ku galaxii", "galacticDoge": "Galaktický Doge", "spottedLife": "Zahliadnutá planéta so životom" }, "feed": { "yourFeed": "Tvoj feed" } } } ================================================ FILE: kibbeh/public/locales/sl/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "Prikažite več", "loading": "Nalaganje...", "noUsersFound": "Noben uporabnik ni bil najden", "ok": "Ok", "yes": "Da", "no": "Ne", "cancel": "Prekličite", "save": "Shranite", "edit": "Uredite", "delete": "Izbrišite", "joinRoom": "Pridružite se sobi", "copyLink": "Kopirajte povezavo", "copied": "Kopirano", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Zagon DogeHouse brez dovoljenja za dostopnost lahko povzroči nezaželene napake", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Utišano | DogeHouse", "deafenedTitle": "Utišano | DogeHouse", "dashboard": "Nadzorna plošča", "connectionTaken": "Povezava je prekinjena" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Začetek", "link_2": "Discord", "link_3": "Prijavite napako" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "Blokirajte", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Seznam uporabnikov, ki jim sledite in niso v zasebni sobi.", "currentRoom": "Trenutno v:", "startPrivateRoom": "Začnite zasebno sobo s tem uporabnikom", "title": "People" }, "followList": { "followHim": "sledi", "followingHim": "sledijo", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Ustvarite sobo", "refresh": "Osvežite", "editRoom": "Uredite sobo", "desktopAlert": "Prenesite DogeHouse namizno aplikacijo danes!" }, "inviteList": { "roomGone": "Sobe ni bilo mogoče najti! Nazaj", "shareRoomLink": "Delite povezavo do sobe", "inviteFollowers": "Povabite lahko svoje sledilce, ki so trenutno prijavljeni:", "whenFollowersOnline": "Ko bodo vaši sledilci prijavljeni, bodo prikazani tukaj." }, "login": { "headerText": "Z glasovnimi pogovori na luno 🚀", "featureText_1": "Temna Tema", "featureText_2": "Neomejena prijava", "featureText_3": "Večplatformska podpora", "featureText_4": "Odprtokoden projekt", "featureText_5": "Besedilni klepet", "featureText_6": "Poganja ga Doge", "loginGithub": "Prijava z GitHub računom", "loginTwitter": "Prijava z Twitter računom", "createTestUser": "Ustvari testnega uporabnika", "loginDiscord": "Prijava z Discord računom" }, "myProfile": { "logout": "Odjava", "probablyLoading": "Verjetno se nalaga...", "voiceSettings": "Nastavitve glasu", "soundSettings": "Nastavitve zvoka", "deleteAccount": "Izbrišite račun", "overlaySettings": "odprite nastavitve za okna", "couldNotFindUser": "Tega uporabnika žal ni bilo mogoče najti", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "Ups! Ta stran se je v pogovoru izgubila.", "goHomeMessage": "Ne skrbte. Lahko greste", "goHomeLinkText": "Domov" }, "room": { "speakers": "Govorci", "requestingToSpeak": "Zahtevajo dovoljenje za vklop zvoka", "listeners": "Poslušalci", "allowAll": "Dovoli vsem", "allowAllConfirm": "Ste prepričani? To bo omogočilo vsem {{count}}, ki zahtevajo, da govorijo" }, "searchUser": { "search": "Iskanje..." }, "soundEffectSettings": { "header": "Zvoki", "title": "Nastavitve zvoka", "playSound": "Play Sound" }, "viewUser": { "editProfile": "Uredite profil", "followsYou": "ti sledijo", "followers": "Sledilci", "following": "Sledene osebe", "followHim": "Sledite tej osebi", "followingHim": "Sledite tej osebi", "copyProfileUrl": "kopirajte povezavo profile", "urlCopied": "povezava kopirana v odložišče", "unfollow": "Prenehajte slediti", "about": "O", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Nastavitve zvoka", "mic": "Mikrofon:", "permissionError": "Mikrofona ni bilo mogoče najti. Morda ni priključen ali pa stran nima potrebnih pravic.", "refresh": "Osvežite seznam mikrofonov", "volume": "Glasnost:", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "Neveljaven naslov aplikacije", "label": "Vnesite naslov aplikacije" }, "header": "Nastavitve Okna" }, "download": { "starting": "Pričenjamo prenos...", "failed": "Ni bilo mogoče samodejno prenesti, poskusite znova pozneje", "visit_gh": "Obiščite Github Releases", "prompt": "Za začetek prenosa kliknite spodnji gumb", "download_now": "Prenesite zdaj", "download_for": "Prenesite za %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Blokirani Uporabniki", "unban": "Odblokirajte", "noBans": "Blokirali (še) niste nobenega uporabnika" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Zapustite trenutno sobo", "confirmLeaveRoom": "Ali si prepričani, da želite oditi?", "leave": "Zapustite", "inviteUsersToRoomBtn": "Povabite uporabnike v sobo", "invite": "Povabite", "toggleMuteMicBtn": "Vklop/Izklop mikrofona", "mute": "Izklopite zvok", "unmute": "Vklopite zvok", "makeRoomPublicBtn": "Naredite sobo javno!", "settings": "Nastavitve", "speaker": "Govorec", "listener": "Poslušalec", "chat": "Klepet", "toggleDeafMicBtn": "Vklop/Izklop zvoka", "deafen": "Utišajte", "undeafen": "Vklopite" }, "deviceNotSupported": { "notSupported": "Vaša naprava trenutno ni podprta. Težavo lahko prijavite na", "linkText": "GitHub", "addSupport": "in poskusili bomo dodati podporo za vašo napravo." }, "inviteButton": { "invited": "povabljeni", "inviteToRoom": "povabite v sobo" }, "micPermissionBanner": { "permissionDenied": "Nimamo pravic za uporabo vašega mikrofona. Odprite nastavitve brskalnika, omogočite dostop do mikrofona in nato osvežite stran.", "dismiss": "Opustite", "tryAgain": "Poskusite ponovno" }, "keyboardShortcuts": { "setKeybind": "Nastavite bljižnico", "listening": "Poslušajte", "toggleMuteKeybind": "Preklopite bližnjico za vklop/izklop mikrofona", "togglePushToTalkKeybind": "Preklopite bližnjico za pritisni-za-govor", "toggleOverlayKeybind": "Preklopite bljižnjico za okno", "toggleDeafKeybind": "Preklopite bljižnjico za izklop zvoka" }, "userVolumeSlider": { "noAudioMessage": "Iz nekega razloga ni odjemalca zvoka" }, "addToCalendar": { "add": "Dodajte v koledar" }, "wsKilled": { "description": "Povezava s spletno vtičnico je bila prekinjena. To se ponavadi zgodi, ko se ta spletna stran odpre v novem zavihku.", "reconnect": "Ponovno se povežite" }, "modals": { "createRoomModal": { "public": "Javno", "private": "Zasebno", "roomName": "Ime sobe", "roomDescription": "Opis sobe", "descriptionError": "največ 500 znakov", "nameError": "mora biti dolžine 2 do 60 znakov", "subtitle": "Izpolnite naslednja polja, da začneš novo sobo" }, "invitedToJoinRoomModal": { "newRoomCreated": "Nova soba ustvarjena", "roomInviteFrom": "Povabilo od", "justStarted": "So pravkar začeli", "likeToJoin": ", se želite pridružiti?", "inviteReceived": "Povabljeni ste bili k" }, "editProfileModal": { "usernameTaken": "Uporabniško ime zasedeno", "avatarUrlError": "Neveljavna slika", "avatarUrlLabel": "povezava do Github/Twitter/Discord slike", "displayNameError": "Dolžina: 2 do 50 znakov", "displayNameLabel": "Prikazno ime", "usernameError": "Dolžina: 4 do 15 alfanumeričnih znakov ali podčrtaj", "usernameLabel": "Uporabniško ime", "bioError": "Največ 160 znakov", "bioLabel": "Bio", "bannerUrlLabel": "povezava do Twitter naslovne slike" }, "profileModal": { "blockUserConfirm": "Ste prepričani, da želite temu uporabniku onemogočiti dostop do vseh sob, ki jih boste ustvarili?", "blockUser": "Blokirajte uporabnika", "makeMod": "Dodajte kot moderatorja", "unmod": "Odstranite moderatorja", "addAsSpeaker": "Dodajte kot govorca", "moveToListener": "Premaknite k poslušalcem", "banFromChat": "Odstranite iz klepeta", "banFromRoom": "Odstranite iz sobe", "goBackToListener": "Nazaj k poslušalcem", "deleteMessage": "Izbrišite sporočilo ", "makeRoomCreator": "Nastavite kot administratorja sobe", "unBanFromChat": "Prekličite odstranitev iz klepeta", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "Potrebno dovoljenje za govor", "makePublic": "Naredite sobo javno", "makePrivate": "Naredite sobo zasebno", "renamePublic": "Nastavite javno ime sobe", "renamePrivate": "Nastavite zasebno ime sobe", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "Ljudje", "online": "AKTIVNI", "noOnline": "Trenutno ni noben prijatelj aktiven", "showMore": "Pokažite več" }, "upcomingRoomsCard": { "upcomingRooms": "Prihajajoče", "exploreMoreRooms": "Raziščite več sob" }, "search": { "placeholder": "Poiščite sobe, uporabnike ali kategorije", "placeholderShort": "Iščite" }, "settingsDropdown": { "profile": "Profil", "language": "Jezik", "reportABug": "Prijavite napako", "useOldVersion": "Uporabite staro različico", "logOut": { "button": "Odjava", "modalSubtitle": "Ali si prepričani, da se želiš odjaviti?" }, "debugAudio": { "debugAudio": "Odpravite napake zvoka", "stopDebugger": "Ustavite razhroščevalec" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Načrtovane sobe", "noneFound": "Ni zadetkov", "allRooms": "Vse načrtovane sobe", "myRooms": "Moje načrtovane sobe", "scheduleRoomHeader": "Načrtujte sobo", "startRoom": "Začnite sobo", "modal": { "needsFuture": "Mora biti v prihodnosti", "roomName": "Ime sobe", "roomDescription": "Opis", "minLength": "Minimalno 2 znaka" }, "tommorow": "JUTRI", "today": "DANES", "deleteModal": { "areYouSure": "Ali ste prepričani, da želite izbrisati načrtovano sobo?" } }, "roomChat": { "title": "Pogovor", "emotesSoon": "[čustveni simboli - kmalu]", "bannedAlert": "Bil ste odstranjeni iz klepeta", "waitAlert": "Pred pošiljanjem novega sporočila morate počakati sekundo.", "search": "Iskanje", "searchResults": "Rezultati iskanja", "recent": "Nedavno uporabljeno", "sendMessage": "Pošljite sporočilo", "whisper": "Šepetajte", "welcomeMessage": "Pozdravljeni v klepetu!", "roomDescription": "Opis sobe", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Natakanje goriva v raketo", "takingOff": "Vzlet", "inSpace": "V vesolju", "approachingMoon": "Bližanje luni", "lunarDoge": "Lunar doge", "approachingSun": "Bližanje soncu", "solarDoge": "Solar doge", "approachingGalaxy": "Bližanje galaksiji", "galacticDoge": "Galactic Doge", "spottedLife": "Najden planet z življenjem" }, "feed": { "yourFeed": "Vaši Kanali" } } } ================================================ FILE: kibbeh/public/locales/so/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "load more", "loading": "loading...", "noUsersFound": "lama helin isticmaaleyaal", "ok": "hagaag", "yes": "haa", "no": "maya", "cancel": "baaji", "save": "kaydi", "edit": "wax ka beddel", "delete": "tirtir", "joinRoom": "qolka ku biir", "copyLink": "naqli xiriiriyaha", "copied": "naqlay", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Please note running DogeHouse without accessibility permissions may cause unwanted errors", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Muted | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Asalka Sheekada", "link_2": "Discord", "link_3": "Soo gudbi cillad" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "mamnuuc", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Liiska isticmaaleyaasha aan ku jirin qol gaar ah oo aad raacday.", "currentRoom": "hadda ku jira:", "startPrivateRoom": "qol gaar ah la bilow", "title": "People" }, "followList": { "followHim": "follow", "followingHim": "following", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Abuur qol", "refresh": "Cusbooneysii", "editRoom": "Waxka bedel qolka", "desktopAlert": "Dajiso desktop appka DogeHouse maanta?!" }, "inviteList": { "roomGone": "Qolka wuu dhamaday, dib u noqo", "shareRoomLink": "Lawadaag xiriiriyaha qolkan", "inviteFollowers": "Waad ku martiqaadi kartaa kuwa ku raacsan ee ku jira khadka:", "whenFollowersOnline": "Markay kuwa ku raacsan ku jiraan khadka, halkan ayey kasoo muuqadaan." }, "login": { "headerText": "Taking voice conversations to the moon 🚀", "featureText_1": "Dark Theme", "featureText_2": "Open Sign-Ups", "featureText_3": "Cross-Platform Support", "featureText_4": "Open Source", "featureText_5": "Text Chat", "featureText_6": "Powered by Doge", "loginGithub": "ku gal GitHub", "loginTwitter": "ku gal Twitter", "createTestUser": "Samee koonto tijaabo ah", "loginDiscord": "Login with Discord" }, "myProfile": { "logout": "ka bax", "probablyLoading": "probably loading...", "voiceSettings": "tag goobta cod hagaajinta", "overlaySettings": "go to overlay settings", "soundSettings": "tag goobta dhawaq hagaajinta", "deleteAccount": "tirtir koontada", "couldNotFindUser": "Sorry, we could not find that user", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "Whoops! This page got lost in conversation.", "goHomeMessage": "Ha walwalin. Waad awoodaa", "goHomeLinkText": "go home" }, "room": { "speakers": "Hadleyaal", "requestingToSpeak": "Requesting to speak", "listeners": "Dhageystayaal", "allowAll": "Dhammaan oggolow", "allowAllConfirm": "Ma hubtaa? Tani waxay u oggolaan doontaa dhammaan {{count}} Isticmaalayaasha inay codsadaan inay hadlaan" }, "searchUser": { "search": "raadi..." }, "soundEffectSettings": { "header": "Codka", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "wax ka beddel koontada", "followsYou": "adiga kuraacay", "followers": "raacsan", "following": "raacay", "followHim": "raac", "followingHim": "following", "copyProfileUrl": "naqli xiriiriyaha kontada", "urlCopied": "URL copied to clipboard", "unfollow": "Unfollow", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "hagaajinta codka", "mic": "codbaahiye:", "permissionError": "Codbaahiye lama helin, kuugu ma xirno codbaahiye ama ogolasho umaaad siin websitka codbaahin.", "refresh": "Cusbooneysii liiska cod baahiyeyaasha", "volume": "volume:", "title": "Voice Settings" }, "overlaySettings": { "header": "Overlay Settings", "input": { "errorMsg": "Please enter valid app title", "label": "Enter app title" } }, "download": { "starting": "Starting download...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "Click on the button below to start download", "download_now": "Download Now", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Isticmaalayaasha la Mamnuucay", "unban": "Ka qaad mamnuucida", "noBans": "cidina wali lama mamnuucin" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Ka bax qolkaan ", "confirmLeaveRoom": "Ma hubtaa inaad rabtid inaad kabaxdo?", "leave": "ka Bax", "inviteUsersToRoomBtn": "Ku martiqaad isticmaalayaal qolka", "invite": "Martiqaad", "toggleMuteMicBtn": "Toggle mute microphone", "mute": "Aamusi", "unmute": "Codka u fur", "makeRoomPublicBtn": "Qolka ka dhig qol guud!", "settings": "Settings", "speaker": "Hadle", "listener": "Dhageyste", "chat": "Wadahadal", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "Ma taagerayo devicekaga. Waad abuuri kartaa", "linkText": "issue on GitHub", "addSupport": "waxaan isku dayi doonaa inaan ku daro taageerida devicekaga." }, "inviteButton": { "invited": "casuumay", "inviteToRoom": "qolka ku casuum" }, "micPermissionBanner": { "permissionDenied": "Oggolaanshaha waa ladiiday isku day inaad gaarikarto mikrafoonkaaga (Waxaa laga yaabaa inaad u baahato inaad gasho settinka biraawsarkaaga oo aad dib u cusboonaysiiso bogga)", "dismiss": "Diid", "tryAgain": "mar kale isku day" }, "keyboardShortcuts": { "setKeybind": "set keybind", "listening": "dhagaysi", "toggleMuteKeybind": "toggle mute keybind", "toggleOverlayKeybind": "toggle overlay keybind", "togglePushToTalkKeybind": "toggle push-to-talk keybind", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "no audio consumer for some reason" }, "addToCalendar": { "add": "Ku dar Kalendarkaga" }, "wsKilled": { "description": "WebSocket was killed by the server. This usually happens when you open the website in another tab.", "reconnect": "dib ugu xirmo" }, "modals": { "createRoomModal": { "public": "Guud", "private": "gaar ", "roomName": "Magaca qolka", "roomDescription": "Qeexitaanka qolka", "descriptionError": "Ugu badanaan 500", "nameError": "waa inuu u dhexeeyaa 2 ilaa 60 xarfo", "subtitle": "Fill the following fields to start a new room" }, "invitedToJoinRoomModal": { "newRoomCreated": "Qol Cusub Ayaa La abuuray", "roomInviteFrom": "Waxaad laga casuumay qolka", "justStarted": "Hada ayey bilaabeen", "likeToJoin": ", ma jeceshahay inaad ku soo biirto?", "inviteReceived": "waa lagugu casuumay" }, "editProfileModal": { "usernameTaken": "magaca isticmaalahan waa la qaatay", "avatarUrlError": "Sawir Khaldan", "avatarUrlLabel": "Github/Twitter/Discord avatar url", "displayNameError": "2 ilaa 50 xaraf", "displayNameLabel": "magaca bandhigmaya", "usernameError": "4 ilaa 15 xaraf oo ah alphanumeric/underscore kaliya", "usernameLabel": "Magaca isticmaalaha", "bioError": "ugu badnaan 160 xaraf", "bioLabel": "Bio", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "Mahubtaa inaad ka mamnuucdo isticmaalaha qolkasta oo aad abuurtid?", "blockUser": "xanib isticmaalaha", "makeMod": "make mod", "unmod": "unmod", "addAsSpeaker": "Ku dar hadleyaasha", "moveToListener": "ku celi Dhageystayaasha", "banFromChat": "ka mamnuuc hadalka", "banFromRoom": "ka mamnuuc qolka", "goBackToListener": "Ku laabo Dhageystayaasha", "deleteMessage": "tirtir fariintan", "makeRoomCreator": "samee maamulaha qolka", "unBanFromChat": "Ka qaad mamnuucida hadalka", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "Waxay u baahnaan doonaan ogolaansho si ay uhadlaan", "makePublic": "qolka ka dhig qol guud", "makePrivate": "qolka ka dhig qol gaar", "renamePublic": "Set public room name", "renamePrivate": "Set private room name", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "People", "online": "ONLINE", "noOnline": "You have 0 friends online right now", "showMore": "Show more" }, "upcomingRoomsCard": { "upcomingRooms": "qolalka soo socda", "exploreMoreRooms": "Sahmi qolal badan" }, "search": { "placeholder": "Raadi qolal, isticmaalayaal ama qeybo", "placeholderShort": "Raadi" }, "settingsDropdown": { "profile": "Profile", "language": "luuqadda", "reportABug": "Soo gudbi cillad", "useOldVersion": "Isticmaal Version hore", "logOut": { "button": "Ka bax", "modalSubtitle": "Ma hubtaa inaad ka baxayso?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Dajiso Appka", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Jadwalka qolalka", "noneFound": "midna lama helin", "allRooms": "Dhamaan jadwalka qolalka", "myRooms": "Jadwalka qolalkayga", "scheduleRoomHeader": "usame jadwal qol", "startRoom": "Bilaaw qol", "modal": { "needsFuture": "needs to be in the future", "roomName": "magaca qolka", "roomDescription": "qeexitaan", "minLength": "ugu yaraan 2" }, "tommorow": "BERRI", "today": "MAANTA", "deleteModal": { "areYouSure": "Ma hubtaa inaad tirtid jadwalka qolkaan?" } }, "roomChat": { "title": "Chat", "emotesSoon": "[emotes soon]", "bannedAlert": "Waxaa lagaa mamnuucay wada hadalka", "waitAlert": "Waa inaad sugto ilbiriqsi kahor intaadan dirin fariin kale", "search": "Raadi", "searchResults": "Raadi natiijooyin", "recent": "badanaa la isticmaalo", "sendMessage": "Dir Fariin", "whisper": "fariin gaar ah", "welcomeMessage": "Ku soo dhawow wada hadalka!", "roomDescription": "qeexida qolka", "disabled": "qolka sheekaysigiisa waa la joojiyay", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Fueling rocket", "takingOff": "Taking off", "inSpace": "In space", "approachingMoon": "Ku dhowaanshaha dayaxa", "lunarDoge": "Lunar Doge", "approachingSun": "Ku dhowaanshaha cadceeda", "solarDoge": "Solar Doge", "approachingGalaxy": "Approaching galaxy", "galacticDoge": "Galactic Doge", "spottedLife": "meeraha laga helay nolasha" }, "feed": { "yourFeed": "Your Feed" } } } ================================================ FILE: kibbeh/public/locales/sq/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "ngarko më tepër", "loading": "duke ngarkuar...", "noUsersFound": "no users found", "ok": "ok", "yes": "po", "no": "jo", "cancel": "anullo", "save": "shpëto", "edit": "redakto", "delete": "fshij", "joinRoom": "bashkohu dhomës", "copyLink": "kopjo linkun", "copied": "u kopjua", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Please note running DogeHouse without accessibility permissions may cause unwanted errors", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "I heshtur | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Historia e origjinës", "link_2": "Discord", "link_3": "Raporto problem" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "përjashto", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Lista e përdoruesve që nuk janë në një dhomë private dhe ti i ndjek.", "currentRoom": "për momentin në:", "startPrivateRoom": "fillo një dhomë private me ta", "title": "People" }, "followList": { "followHim": "follow", "followingHim": "following", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Krijo dhomë", "refresh": "Refresh", "editRoom": "Edit Room", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "dhoma u zhduk, kthehu", "shareRoomLink": "nda një link për te dhoma", "inviteFollowers": "Mund të ftosh ndjekësit e tu që janë online:", "whenFollowersOnline": "Kur ndjekësit e tu janë online, ata do të shaqen këtu lartë." }, "login": { "headerText": "Sjellim bisedat me zë në hënë 🚀", "featureText_1": "Tema e errët", "featureText_2": "Hap regjistrimet", "featureText_3": "Mështetje Cross-Platform", "featureText_4": "Open Source", "featureText_5": "Chat me tekst", "featureText_6": "Mundësuar nga Doge", "loginGithub": "hyrje me GitHub", "loginTwitter": "hyrje me Twitter", "createTestUser": "krijo pëdorues testi", "loginDiscord": "Login with Discord" }, "myProfile": { "logout": "dil", "probablyLoading": "ndoshta duke u ngarkuar...", "voiceSettings": "shko te cilësimet e zërit", "soundSettings": "shko te cilësimet e tingullit", "deleteAccount": "fshije llogarinë", "overlaySettings": "go to overlay settings", "couldNotFindUser": "Sorry, we could not find that user", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "Whoops! Kjo faqja humbi në bisedë.", "goHomeMessage": "Mos ki merak. Ti mundesh", "goHomeLinkText": "për në shtëpi" }, "room": { "speakers": "Folësit", "requestingToSpeak": "Duke kërkuar leje për të folur", "listeners": "Dëgjuesit", "allowAll": "Allow all", "allowAllConfirm": "Are you sure? This will allow all {{count}} requesting users to speak" }, "searchUser": { "search": "kerko..." }, "soundEffectSettings": { "header": "Tingujt", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "redakto profilin", "followsYou": "ju ndjek", "followers": "ndjekës", "following": "ju ndjekin", "followHim": "follow", "followingHim": "following", "copyProfileUrl": "copy profile url", "urlCopied": "URL copied to clipboard", "unfollow": "Unfollow", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Cilësime e zërit", "mic": "mikrofoni:", "permissionError": "nuk u gjend asnjë mikrofon, ju ndoshta nuk e keni lidhur ose nuk i keni dhënë leje kesaj faqeje.", "refresh": "rifresko listën e mikrofonëve", "volume": "volumi:", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "Invalid app title", "label": "Enter App Title" }, "header": "Overlay Settings" }, "download": { "starting": "Starting download...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "Click on the button below to start download", "download_now": "Download Now", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Përdoruesit e përjashtuar", "unban": "ç'përjashto", "noBans": "askush nuk është përjashtuar derimë tani" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Largohu nga dhoma e tanishme", "confirmLeaveRoom": "A jeni i sigurt që do të largohesh?", "leave": "Largohu", "inviteUsersToRoomBtn": "Fto përdorues në dhomë", "invite": "Fto", "toggleMuteMicBtn": "Hesht/ç'hesht mikrofonin", "mute": "Hesht", "unmute": "Ç'hesht", "makeRoomPublicBtn": "Bëje dhomën publike!", "settings": "Cilësimet", "speaker": "Folësit", "listener": "Dëgjuesit", "chat": "Chat", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "Paisja juaj nuk është e mbështetur. Ju mund të krijoni një", "linkText": "çështje në GitHub", "addSupport": "dhe unë do të mundohem të shtoj mbështetje për paisjen tuaj." }, "inviteButton": { "invited": "ftuar", "inviteToRoom": "fto në dhomë" }, "micPermissionBanner": { "permissionDenied": "Leja për akses te mikrofoni nuk u dha (ju mund të shkoni në cilësimet e shfletuesit dhe ringarkoni faqen)", "dismiss": "largo", "tryAgain": "provo persëri" }, "keyboardShortcuts": { "setKeybind": "vendos keybind", "listening": "duke dëgjuar", "toggleMuteKeybind": "Keybind hesht/ç'hesht", "togglePushToTalkKeybind": "Keybind ndiz/fik shtyp-për-të-folur", "toggleOverlayKeybind": "toggle overlay keybind", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "për ndonjë arsye nuk ka asnje konsumator audio" }, "addToCalendar": { "add": "Shto në kalendar" }, "wsKilled": { "description": "WebSocketi u ndalua nga serveri. Kjo ndodh zakonisht kur hap një faqe të re në skedinë tjetër.", "reconnect": "ri-lidhu" }, "modals": { "createRoomModal": { "public": "publike", "private": "private", "roomName": "emri dhomës", "roomDescription": "përshkrimi i dhomës", "descriptionError": "gjatësia maks. 500", "nameError": "duhet të jetë midis 2 dhe 60 shkronjash", "subtitle": "Fill the following fields to start a new room" }, "invitedToJoinRoomModal": { "newRoomCreated": "Dhoma e re u krijua", "roomInviteFrom": "Ftes dhome nga", "justStarted": "Ata sapo filluan", "likeToJoin": ", a dëshironi të bashkoheni?", "inviteReceived": "ju jeni ftuar në" }, "editProfileModal": { "usernameTaken": "emri i përdoruesit është i zënë", "avatarUrlError": "Fotografi e pavlefshme", "avatarUrlLabel": "url i avatarit të Github/Twitter/Discord", "displayNameError": "gjatësia 2 deri 50 shkronja", "displayNameLabel": "Emri i Shfaqur", "usernameError": "gjatësia 4 deri 15 shkronja dhe vetëm alphanumerik/nevizim", "usernameLabel": "Emri i përdoruesit", "bioError": "gjatesia maks 160 shkronja", "bioLabel": "Bio", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "A jeni të sigurt që doni të bllokoni këtë perdoruest për t'iu bashkuar dhomave qe ju krijoni?", "blockUser": "blloko përdorues", "makeMod": "krijo mod", "unmod": "ç'modo", "addAsSpeaker": "shto si folës", "moveToListener": "lëvize si dëgjues", "banFromChat": "ndalo prej chatit", "banFromRoom": "ndalo prej dhomës", "goBackToListener": "kthenu në dëgjues", "deleteMessage": "fshije këtë mesazh", "makeRoomCreator": "make room admin", "unBanFromChat": "Unban from Chat", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "kërko leje për të folur", "makePublic": "bëje dhomën publike", "makePrivate": "bëje dhomën private", "renamePublic": "Set public room name", "renamePrivate": "Set private room name", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "People", "online": "ONLINE", "noOnline": "You have 0 friends online right now", "showMore": "Show more" }, "upcomingRoomsCard": { "upcomingRooms": "Upcoming rooms", "exploreMoreRooms": "Explore More Rooms" }, "search": { "placeholder": "Search for rooms, users or categories", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profile", "language": "Language", "reportABug": "Report A Bug", "useOldVersion": "Use Old Version", "logOut": { "button": "Log out", "modalSubtitle": "Are you sure you want to logout?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Dhomat e planifikuara", "noneFound": "asnjë s'u gjend", "allRooms": "të gjitha dhomat e planifikuara", "myRooms": "dhomat e mija", "scheduleRoomHeader": "Planifiko dhomë", "startRoom": "fillo dhomën", "modal": { "needsFuture": "duhet të jetë në të ardhmen", "roomName": "emri i dhomës", "minLength": "gjatesia minimale 2", "roomDescription": "Description" }, "tommorow": "TOMMOROW", "today": "TODAY", "deleteModal": { "areYouSure": "Are you sure you want to delete this scheduled room?" } }, "roomChat": { "title": "Chat", "emotesSoon": "[emotes së shpejti]", "bannedAlert": "Ju jeni ndaluar prej chatit", "waitAlert": "Duhet të prisni një sekondë para se të dergoni një mesazh tjetër.", "search": "Kërko", "searchResults": "Kërko Rezultate", "recent": "Përdorur shpesh", "sendMessage": "Dërgo një mesazh", "whisper": "Përshpërit", "welcomeMessage": "Mirë se erdhët në chat!", "roomDescription": "përshkrimi i dhomës", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Fueling rocket", "takingOff": "Taking off", "inSpace": "In space", "approachingMoon": "Approaching moon", "lunarDoge": "Lunar doge", "approachingSun": "Approaching sun", "solarDoge": "Solar doge", "approachingGalaxy": "Approaching galaxy", "galacticDoge": "Galactic Doge", "spottedLife": "Planet with life spotted" }, "feed": { "yourFeed": "Your Feed" } } } ================================================ FILE: kibbeh/public/locales/sr/translation.json ================================================ { "common": { "loadMore": "Учитајте још", "loading": "Учитавање...", "noUsersFound": "Нема пронађених корисника", "ok": "ok", "yes": "да", "no": "не", "cancel": "откажи", "save": "сачувајте", "edit": "уредите", "delete": "обришите", "joinRoom": "придружите се соби", "copyLink": "копирајте link", "copied": "копирано", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Please note running DogeHouse without accessibility permissions may cause unwanted errors", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Пригушен | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Прича о пореклу", "link_2": "Discord", "link_3": "Пријавите проблем" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "забраните", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Корисници који нису у приватној соби и које пратите.", "currentRoom": "тренутно у:", "startPrivateRoom": "Започните приватну собу", "title": "People" }, "followList": { "followHim": "follow", "followingHim": "following", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Направите собу", "refresh": "Refresh", "editRoom": "Edit Room", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "Соба је нестала, вратите се назад", "shareRoomLink": "Поделите везу до собе", "inviteFollowers": "Можете позвати своје пратиоце који су активни:", "whenFollowersOnline": "Када су Ваши пратиоци активни, они ће се појавити овде." }, "login": { "headerText": "Доводимо гласовне конверзације до Месеца 🚀", "featureText_1": "Тамна тема", "featureText_2": "Отворене пријаве", "featureText_3": "Подршка за више платформи", "featureText_4": "Отвореног кода", "featureText_5": "Текстуално ћаскање", "featureText_6": "Покреће Doge", "loginGithub": "Пријавите се путем GitHub-a", "loginTwitter": "Пријавите се путем Twitter-a", "createTestUser": "Креирајте тест корисника", "loginDiscord": "Login with Discord" }, "myProfile": { "logout": "Одјавите се", "probablyLoading": "вјероватно учитава...", "voiceSettings": "идите на подешавања гласа", "soundSettings": "идите на подешавања звука", "deleteAccount": "Обришите налог", "overlaySettings": "go to overlay settings", "couldNotFindUser": "Sorry, we could not find that user", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "Упс! Ова страница се изгубила у разговору.", "goHomeMessage": "Без бриге. Можете да идете", "goHomeLinkText": "на почетак" }, "room": { "speakers": "Говорници", "requestingToSpeak": "Молим за говор", "listeners": "Слушаоци", "allowAll": "Allow all", "allowAllConfirm": "Are you sure? This will allow all {{count}} requesting users to speak" }, "searchUser": { "search": "Претражите..." }, "soundEffectSettings": { "header": "Звукови", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "Уредите профил", "followsYou": "Прати вас", "followers": "Пратиоци", "following": "Праћења", "followHim": "follow", "followingHim": "following", "copyProfileUrl": "copy profile url", "urlCopied": "URL copied to clipboard", "unfollow": "Unfollow", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Подешавања гласа", "mic": "микрофон:", "permissionError": "Није пронађен ниједан микрофон, или га нисте прикључили, или нисте дали дозволу овој веб локацији.", "refresh": "Освежи листу микрофона", "volume": "гласноћа:", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "Invalid app title", "label": "Enter App Title" }, "header": "Overlay Settings" }, "download": { "starting": "Starting download...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "Click on the button below to start download", "download_now": "Download Now", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Забрањени корисници", "unban": "Поништите забрану", "noBans": "Још нико није забрањен" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Напустите тренутну собу", "confirmLeaveRoom": "Да ли сте сигурни да желите да напустите?", "leave": "Напусти", "inviteUsersToRoomBtn": "Позовите кориснике у собу", "invite": "Позови", "toggleMuteMicBtn": "Укључи / искључи микрофон", "mute": "Искључите звук", "unmute": "Укључите звук", "makeRoomPublicBtn": "Учините собу јавном!", "settings": "Подешавања", "speaker": "Говорник", "listener": "Слушалац", "chat": "Ћаскање", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "Ваш уређај тренутно није подржан. Можете направити", "linkText": "пријаву на GitHub-у", "addSupport": "и покушаћу да додам подршку за Ваш уређај." }, "inviteButton": { "invited": "Позван", "inviteToRoom": "Позван у собу" }, "micPermissionBanner": { "permissionDenied": "Дозвола одбијена за покушај приступа микрофону (можда ћете морати да уђете у подешавања прегледача и поново учитате страницу)", "dismiss": "Одбаците", "tryAgain": "Покушајте поново" }, "keyboardShortcuts": { "setKeybind": "Подесите пречицу на тастатури", "listening": "Слушање", "toggleMuteKeybind": "Укључите/искључите пречицу на тастатури за мутирање", "togglePushToTalkKeybind": "Укључите/искључите пречицу на тастатури за говор на притисак", "toggleOverlayKeybind": "toggle overlay keybind", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "Из неког разлога нема потрошача звука" }, "addToCalendar": { "add": "Додајте у календар" }, "wsKilled": { "description": "Websocket је убио сервер. То се обично дешава када отворите веб локацију на другој картици.", "reconnect": "Поново повежите" }, "modals": { "createRoomModal": { "public": "јавно", "private": "приватно", "roomName": "назив собе", "roomDescription": "опис собе", "descriptionError": "максимална дужина 500", "nameError": "мора бити између 2 до 60 карактера дужине", "subtitle": "Fill the following fields to start a new room" }, "invitedToJoinRoomModal": { "newRoomCreated": "Нова соба је направљена", "roomInviteFrom": "Позив у собу од", "justStarted": "Управо су почели", "likeToJoin": ", желите ли се придружити?", "inviteReceived": "Позвани сте у" }, "editProfileModal": { "usernameTaken": "Корисничко име је заузето", "avatarUrlError": "Неважећа слика", "avatarUrlLabel": "Github/Twitter/Discord аватар url", "displayNameError": "дужина између 2 до 50 карактера", "displayNameLabel": "Приказано име", "usernameError": "дужина између 4 до 15 карактера и само слова, бројеви и доња црта", "usernameLabel": "Корисничко име", "bioError": "максимална дужина 160 карактера", "bioLabel": "Опис", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "Да ли сте сигурни да желите да блокирате овог корисника да се придружи било којој соби коју сте икада створили?", "blockUser": "Блокирајте корисника", "makeMod": "Додајте модератора", "unmod": "Уклоните модератора", "addAsSpeaker": "Додати као говорника", "moveToListener": "Пређите на слушаоца", "banFromChat": "Забраните приступ ћаскању", "banFromRoom": "Забраните приступ соби", "goBackToListener": "Вратите се слушаоцу", "deleteMessage": "Обришите ову поруку", "makeRoomCreator": "make room admin", "unBanFromChat": "Unban from Chat", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "Затражи дозволу за причање", "makePublic": "Учините собу јавном", "makePrivate": "Учините собу приватном", "renamePublic": "Set public room name", "renamePrivate": "Set private room name", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "People", "online": "ONLINE", "noOnline": "You have 0 friends online right now", "showMore": "Show more" }, "upcomingRoomsCard": { "upcomingRooms": "Upcoming rooms", "exploreMoreRooms": "Explore More Rooms" }, "search": { "placeholder": "Search for rooms, users or categories", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profile", "language": "Language", "reportABug": "Report A Bug", "useOldVersion": "Use Old Version", "logOut": { "button": "Log out", "modalSubtitle": "Are you sure you want to logout?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Заказане собе", "noneFound": "Ниједна није пронађена", "allRooms": "Све заказане собе", "myRooms": "Моје заказане собе", "scheduleRoomHeader": "Закажите собу", "startRoom": "Започните собу", "modal": { "needsFuture": "Треба да буде у будућности", "roomName": "Назив собе", "minLength": "Минимална дужина 2", "roomDescription": "Description" }, "tommorow": "TOMMOROW", "today": "TODAY", "deleteModal": { "areYouSure": "Are you sure you want to delete this scheduled room?" } }, "roomChat": { "title": "Ћаскање", "emotesSoon": "[емотикони ускоро]", "bannedAlert": "Забрањено вам је ћаскање", "waitAlert": "Пре слања нове поруке морате сачекати секунду", "search": "Претражите", "searchResults": "Резултати претраге", "recent": "Често коришћено", "sendMessage": "Пошаљите поруку", "whisper": "Шапћите", "welcomeMessage": "Добро дошли у ћаскање!", "roomDescription": "Опис собе", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Fueling rocket", "takingOff": "Taking off", "inSpace": "In space", "approachingMoon": "Approaching moon", "lunarDoge": "Lunar doge", "approachingSun": "Approaching sun", "solarDoge": "Solar doge", "approachingGalaxy": "Approaching galaxy", "galacticDoge": "Galactic Doge", "spottedLife": "Planet with life spotted" }, "feed": { "yourFeed": "Your Feed" } } } ================================================ FILE: kibbeh/public/locales/sr-LATIN/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "učitaj još", "loading": "učitavanje...", "noUsersFound": "nema pronađenih korisnika", "ok": "ok", "yes": "da", "no": "ne", "cancel": "otkaži", "save": "sačuvaj", "edit": "uredi", "delete": "obriši", "joinRoom": "pridruži se sobi", "copyLink": "kopiraj link", "copied": "kopirano", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Please note running DogeHouse without accessibility permissions may cause unwanted errors", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Prigušen | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Priča o poreklu", "link_2": "Discord", "link_3": "Prijavi problem" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "zabrani", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Spisak korisnika koji nisu u privatnoj sobi i koje pratite.", "currentRoom": "trenutno u:", "startPrivateRoom": "započni privatnu sobu sa njima", "title": "People" }, "followList": { "followHim": "follow", "followingHim": "following", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Napraviti sobu", "refresh": "Osvježi", "editRoom": "Urediti Sobu", "desktopAlert": "Skinuti Dogehouse za desktop danas!" }, "inviteList": { "roomGone": "soba je nestala, vrati me nazad", "shareRoomLink": "podeli vezu do sobe", "inviteFollowers": "Možete pozvati svoje pratioce koji su aktivni:", "whenFollowersOnline": "Kada su vaši pratioci aktivni, oni će se pojaviti ovde." }, "login": { "headerText": "Dovodimo glasovne konverzacije do Meseca 🚀", "featureText_1": "Tamna tema", "featureText_2": "Otvorene prijave", "featureText_3": "Podrška za više platformi", "featureText_4": "Otvorenog koda", "featureText_5": "Tekstualno ćaskanje", "featureText_6": "Pokreće Doge", "loginGithub": "prijavi se preko GitHub-a", "loginTwitter": "prijavi se preko Twitter-a", "createTestUser": "Napraviti test korisnika", "loginDiscord": "Prijavite se preko Discord-a" }, "myProfile": { "logout": "odjavi me", "probablyLoading": "verovatno učitava...", "voiceSettings": "idi na podešavanje glasa", "soundSettings": "idi na podešavanje zvuka", "deleteAccount": "obriši nalog", "overlaySettings": "go to overlay settings", "couldNotFindUser": "Izvini, nismo pronašli ovog korisnika", "privacySettings": "Podešavanja privatnosti" }, "notFound": { "whoopsError": "Ups! Ova stranica se izgubila u razgovoru.", "goHomeMessage": "Bez brige. Možete.", "goHomeLinkText": "idi na početnu" }, "room": { "speakers": "Govornici", "requestingToSpeak": "Molim za reč", "listeners": "Slušaoci", "allowAll": "Prihvati sve", "allowAllConfirm": "Jesili siguran? Ovo če dopusti svi {{count}} pitajući useri de pričau" }, "searchUser": { "search": "pretraži..." }, "soundEffectSettings": { "header": "Zvukovi", "title": "Zvukovi Podešavanja", "playSound": "Zazvoni Zvuk" }, "viewUser": { "editProfile": "uredi profil", "followsYou": "prati vas", "followers": "pratioci", "following": "praćenja", "followHim": "prati", "followingHim": "prateći", "copyProfileUrl": "kopiraj profil url", "urlCopied": "URL je kopiran na clipboard", "unfollow": "Zapusti prateci", "about": "Opis", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Sobe", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Poslaj DM", "aboutSuffix": "", "errors": { "blocked": "Ovaj korisnik je blokirao tebe", "default": "Ups! Nismo mogli da učitamo ovog korisnik" } }, "voiceSettings": { "header": "Podešavanja glasa", "mic": "mikrofon:", "permissionError": "nije pronađen nijedan mikrofon, ili ga niste priključili ili niste dali dozvolu ovoj web lokaciji.", "refresh": "osveži listu mikrofona", "volume": "jačina zvuka:", "title": "Zvukovi Podešavanja" }, "overlaySettings": { "input": { "errorMsg": "Invalid app title", "label": "Enter App Title" }, "header": "Overlay Settings" }, "download": { "starting": "Počinje skinu...", "failed": "Could not auto-download, please try again later", "visit_gh": "Vidi GitHub-a izdanja", "prompt": "Klikni na ovaj drugme da počnes da skineš", "download_now": "Skinuti Sad!", "download_for": "Skinuti za %platform% (%ext%)" }, "privacySettings": { "title": "Podešavanja privatnosti", "header": "Podešavanja privatnosti", "whispers": { "label": "Whispers", "uključite": "Uključite", "isključi": "Isključi" } }, "botEdit": { "yourBots": "Vaši Botovi", "bots": "Botovi", "title": "Bot informacije", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Klikni da vidiš ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Blokirani korisnici", "unban": "Poništi blokadu", "noBans": "još niko nije blokiran" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Napusti trenutnu sobu", "confirmLeaveRoom": "Da li ste sigurni da želite da napustite sobu?", "leave": "Napusti", "inviteUsersToRoomBtn": "Pozovi korisnike u sobu", "invite": "Pozovi", "toggleMuteMicBtn": "Uključi / isključi mikrofon", "mute": "Isključi zvug", "unmute": "Uključi zvuk", "makeRoomPublicBtn": "Učini sobu javnom!", "settings": "Podešavanja", "speaker": "Govornik", "listener": "Slušalac", "chat": "Ćaskanje", "toggleDeafMicBtn": "Mutiraj se", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "Vaš uređaj ternutno nije podržan. Možete stvoriti", "linkText": "greška na GitHub-u", "addSupport": "i pokušaću da dodam podršku za Vaš uređaj." }, "inviteButton": { "invited": "pozvan", "inviteToRoom": "pozvan u sobu" }, "micPermissionBanner": { "permissionDenied": "Dozvola odbijena za pokušaj pristupa mikrofonu (možda ćete morati da uđete u podešavanja pregledača i ponovo učitate stranicu)", "dismiss": "odbaci", "tryAgain": "pokušaj ponovo" }, "keyboardShortcuts": { "setKeybind": "podesi prečicu na tastaturi", "listening": "slušanje", "toggleMuteKeybind": "uključi/isključi prečicu na tastaturi za mutiranje", "togglePushToTalkKeybind": "uključi/isključi prečicu na tastaturi za govor na pritisak", "toggleOverlayKeybind": "toggle overlay keybind", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "nema audio konzumera iz nekog razloga" }, "addToCalendar": { "add": "Dodaj u kalendar" }, "wsKilled": { "description": "Websocket je ubio server. To se obično dešava kada otvorite web lokaciju na drugoj kartici.", "reconnect": "ponovo poveži" }, "modals": { "createRoomModal": { "public": "javno", "private": "privatno", "roomName": "naziv sobe", "roomDescription": "opis sobe", "descriptionError": "maksimalna dužina 500", "nameError": "mora biti od 2 do 60 karaktera dužine", "subtitle": "Popuni sledeća polja da započneš novu sobu" }, "invitedToJoinRoomModal": { "newRoomCreated": "Kreirana nova soba", "roomInviteFrom": "Poziv u novu sobu od", "justStarted": "Upravo su počeli", "likeToJoin": ", želite li da se pridružite?", "inviteReceived": "pozvani ste u" }, "editProfileModal": { "usernameTaken": "korisničko ime je zauzetno", "avatarUrlError": "Nevažeća slika", "avatarUrlLabel": "Github/Twitter/Discord avatar url", "displayNameError": "dužina od 2 do 50 karaktera", "displayNameLabel": "Prikazano ime", "usernameError": "dužina od 4 do 15 karaktera i samo alfanumerički znakovi/donja crta", "usernameLabel": "Korisničko ime", "bioError": "maksimalna dužina 160 karaktera", "bioLabel": "Opis", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "Da li ste sigurni da želite da blokirate ovog korisnika da se pridruži bilo kojoj sobi koju ste ikada stvorili?", "blockUser": "blokiraj korisnika", "makeMod": "dodaj moderatora", "unmod": "skloni moderatora", "addAsSpeaker": "dodaj kao govornika", "moveToListener": "pređi na slušaoca", "banFromChat": "zabrani pristup ćaskanju", "banFromRoom": "zabrani pristup sobi", "goBackToListener": "vrati se slušaocu", "deleteMessage": "obriši ovu poruku", "makeRoomCreator": "make room admin", "unBanFromChat": "Unban from Chat", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "zatraži dozvolu za govor", "makePublic": "učini sobu javnom", "makePrivate": "učini sobu privatnom", "renamePublic": "zameni sobu ime", "renamePrivate": "zameni privatnom sobu ime", "chatDisabled": "Isključite govor u chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Uključen", "disabled": "Isključen", "followerOnly": "Samo sledbenici" } }, "createBotModal": { "usernameTaken": "Ime je preuzeto", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "Ljudi", "online": "ONLINE", "noOnline": "Nemaš ni jednog prijatelja online", "showMore": "Prikaži više" }, "upcomingRoomsCard": { "upcomingRooms": "Nadolazeće sobe", "exploreMoreRooms": "Pogledaj za više soba" }, "search": { "placeholder": "Pretraži sobe, korisnike ili kategorije", "placeholderShort": "Pogledaj" }, "settingsDropdown": { "profile": "Profil", "language": "Jezik", "reportABug": "Prijavi grešku", "useOldVersion": "Korsiti staru verziju", "logOut": { "button": "Odjavi se", "modalSubtitle": "Da li si siguran da želiš da se odjaviš?" }, "debugAudio": { "debugAudio": "Debaguj Audio", "stopDebugger": "Zaustavi Debager" }, "downloadApp": "Skinuti App", "developer": "Programar podešavanja" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Poruke", "showMore": "Prikaži više", "noMessages": "Nema nove poruke" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Zakazane sobe", "noneFound": "nijedna nije pronađena", "allRooms": "sve zakazane sobe", "myRooms": "moje zakazane sobe", "scheduleRoomHeader": "Zakaži sobu", "startRoom": "započni sobu", "modal": { "needsFuture": "treba da bude u budućnosti", "roomName": "naziv sobe", "minLength": "minimalna dužina 2", "roomDescription": "opis" }, "tommorow": "SUTRA", "today": "DANAS", "deleteModal": { "areYouSure": "Jeseli ti sigurni da želite da izbrišete ovu zakazanu sobu?" } }, "roomChat": { "title": "Ćaskanje", "emotesSoon": "[emotikoni uskoro]", "bannedAlert": "Zabranjeno Vam je ćaskanje", "waitAlert": "Pre slanja nove poruke morate da sačekate sekundu", "search": "Pretraži", "searchResults": "Rezultati pretrage", "recent": "Često korišćeno", "sendMessage": "Pošalji poruku", "whisper": "šapći", "welcomeMessage": "Dobrodošli u ćaskanje!", "roomDescription": "opis sobe", "disabled": "room chat has been disabled", "messageDeletion": { "message": "poruku", "retracted": "uvučen", "deleted": "izbrisan" } }, "roomStatus": { "fuelingRocket": "Stavi se gorivo", "takingOff": "Taking off", "inSpace": "U svemir", "approachingMoon": "Približavanje meseca", "lunarDoge": "Lunari doge", "approachingSun": "Približavanje sunce", "solarDoge": "Solarni doge", "approachingGalaxy": "Približavanje galaksija", "galacticDoge": "Galaktički Doge", "spottedLife": "Uočena planeta sa životom" }, "feed": { "yourFeed": "Tvoj Feed" } } } ================================================ FILE: kibbeh/public/locales/sv/translation.json ================================================ { "common": { "loadMore": "Visa fler", "loading": "Laddar in...", "noUsersFound": "Inga användare hittades", "ok": "Okej", "yes": "Ja", "no": "Nej", "cancel": "Avbryt", "save": "Spara", "edit": "Ändra", "delete": "Radera", "joinRoom": "Anslut till rummet", "copyLink": "Kopiera länk", "copied": "Kopierad", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Att använda DogeHouse utan att ha tillåtit webbläsaren att få åtkomst till vissa behörigheter kan orsaka oönskade fel.", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Tystad | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Bakgrund", "link_2": "Discord", "link_3": "Rapportera ett fel" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "bannlys", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Personer du följer", "currentRoom": "Ansluten till:", "startPrivateRoom": "Skapa ett privat rum med dem", "title": "People" }, "followList": { "followHim": "Följ", "followingHim": "Följer", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Skapa ett rum", "refresh": "Uppdatera", "editRoom": "Redigera rummet", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "Rummet försvann under månförmörkelsen, gå tillbaka", "shareRoomLink": "Dela länk till rummet", "inviteFollowers": "Du kan bjuda in dina följare:", "whenFollowersOnline": "När dina följare är uppkopplade kommer de att visas här." }, "login": { "headerText": "Tar röstsamtal till månen 🚀", "featureText_1": "Mörkt läge", "featureText_2": "Öppna registreringar", "featureText_3": "Plattformsoberoende", "featureText_4": "Öppen källkod", "featureText_5": "Textchatt", "featureText_6": "Drivs av Doge", "loginGithub": "Logga in med GitHub", "loginTwitter": "Logga in med Twitter", "createTestUser": "Skapa testanvändare", "loginDiscord": "Logga in med Discord" }, "myProfile": { "logout": "Logga ut", "probablyLoading": "Laddar...", "voiceSettings": "Röstinställningar", "soundSettings": "Ljudinställningar", "deleteAccount": "Radera konto", "overlaySettings": "Overlayinställningar", "couldNotFindUser": "Förlåt, vi kunde inte hitta den användaren", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "Whoops! Denna sida blev förlorad i konversationen.", "goHomeMessage": "Ingen fara. Du kan", "goHomeLinkText": "gå hem" }, "room": { "speakers": "Talare", "requestingToSpeak": "Begär att få tala", "listeners": "Lyssnare", "allowAll": "Tillåt alla", "allowAllConfirm": "Är du säker på detta sergeant? Detta kommer tillåta {{count}} användare att få tala. Det kan utplåna månen! 🚀☢️" }, "searchUser": { "search": "Sök..." }, "soundEffectSettings": { "header": "Ljud", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "Redigera profil", "followsYou": "Följer dig", "followers": "Följare", "following": "Följer", "followHim": "Följ", "followingHim": "Följer", "copyProfileUrl": "Kopiera profillänk", "urlCopied": "Länken har kopierats", "unfollow": "Sluta följa", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Röstinställningar", "mic": "Mikrofon:", "permissionError": "Ingen mikrofon hittades, du har antingen ingen inkopplad eller så har du inte gett hemsidan tillåtelse.", "refresh": "Uppdatera mikrofonlistan", "volume": "Volym:", "title": "Voice Settings" }, "overlaySettings": { "header": "Overlayinställningar", "input": { "errorMsg": "Ogiltlig fönstertitel", "label": "Ange fönstertitel" } }, "download": { "starting": "Påbörjar nedladdning...", "failed": "Det gick inte att ladda ner automatiskt, försök igen senare", "visit_gh": "Visit Github Releases", "prompt": "Klicka på knappen nedan för att starta nedladdningen", "download_now": "Ladda ner nu", "download_for": "Ladda ner för %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Bannlys användare", "unban": "Ta bort bannlysning", "noBans": "Ingen har blivit bannlyst ännu" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Lämna rummet", "confirmLeaveRoom": "Är du säker på att du vill lämna?", "leave": "Lämna", "inviteUsersToRoomBtn": "Bjud in användare till rummet", "invite": "Bjud in", "toggleMuteMicBtn": "Stäng av mikrofonen", "mute": "Tysta", "unmute": "Slå på ljud", "makeRoomPublicBtn": "Gör rum offentligt", "settings": "Inställningar", "speaker": "Talare", "listener": "Lyssnare", "chat": "Chatt", "toggleDeafMicBtn": "Växla ljud", "deafen": "Ljud av", "undeafen": "Ljud på" }, "micPermissionBanner": { "permissionDenied": "Åtkomst nekad när vi försökte att ansluta till din mikrofon (du kan behöva gå till webbläsarinställningarna, tillåta att webläsaren tillåter din mikrofon och sedan ladda om sidan)", "dismiss": "Avfärda", "tryAgain": "Försök igen" }, "modals": { "createRoomModal": { "public": "Offentligt", "private": "Privat", "roomName": "Rumsnamn", "roomDescription": "Rumsbeskrivning", "descriptionError": "Max längden är 500 karaktärer", "nameError": "Längden på namnet måste vara mellan 2 och 60 karaktärer", "subtitle": "Fyll i dessa fält för att skapa ett rum" }, "invitedToJoinRoomModal": { "newRoomCreated": "Ett nytt rum har skapats", "roomInviteFrom": "Inbjudan från", "justStarted": "De har precis börjat", "likeToJoin": ", skulle du vilja ansluta?", "inviteReceived": "Du har blivit inbjuden till" }, "editProfileModal": { "usernameTaken": "Användarnamn är redan taget", "avatarUrlError": "Ogiltig bild", "avatarUrlLabel": "Github/Twitter/Discord profilbild länk", "displayNameError": "Maximum 2 till 50 karaktärer", "displayNameLabel": "Visningsnamn", "usernameError": "Maximum 4 till 15 karaktärer med bara alfanumerisk/understräck", "usernameLabel": "Användarnamn", "bioError": "Maximum längd på 160 karaktärer", "bioLabel": "Biografi", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "Är du säker på att du vill blockera denna användare från att ansluta till dina rum?", "blockUser": "Blockera användare", "makeMod": "Gör moderator", "unmod": "Ta bort moderator", "addAsSpeaker": "Lägg till som talare", "moveToListener": "Flytta till lyssnare", "banFromChat": "Bannlys från chatt", "banFromRoom": "Bannlys från rum", "goBackToListener": "Gå tillbaka till lyssnare", "deleteMessage": "Ta bort meddelande", "makeRoomCreator": "Gör till rumsadministratör", "unBanFromChat": "Ta bort avstängning från chatt", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "Be om tillåtelse att prata", "makePublic": "Gör rum offentligt", "makePrivate": "Gör rum privat", "renamePublic": "Ange ett offentligt rumsnamn", "renamePrivate": "Ange ett privat rumsnamn", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "userVolumeSlider": { "noAudioMessage": "Ingen ljudanvändare av någon anledning" }, "addToCalendar": { "add": "Spara i kalender" }, "deviceNotSupported": { "notSupported": "Din enhet stöds inte. Du kan skapa ett", "linkText": "issue på GitHub", "addSupport": ", så kommer jag försöka lägga till stöd för din enhet." }, "inviteButton": { "invited": "Inbjuden", "inviteToRoom": "Bjud in till rum" }, "keyboardShortcuts": { "setKeybind": "Ställ in kortkommando", "listening": "Lyssnar", "toggleMuteKeybind": "Växla tystad kortkommando", "togglePushToTalkKeybind": "Växla tryck-för-tal kortkommando", "toggleOverlayKeybind": "Växla overlay kortkommando", "toggleDeafKeybind": "Växla tyst kortkommando" }, "wsKilled": { "description": "WebSocket anslutningen blev nerstängd av servern. Detta händer oftast när du öppnar hemsidan i en annan flik.", "reconnect": "Återanslut" }, "followingOnline": { "people": "Personer", "online": "ONLINE", "noOnline": "Du har 0 vänner som är uppkopplade just nu", "showMore": "Visa fler" }, "upcomingRoomsCard": { "upcomingRooms": "Kommande rum", "exploreMoreRooms": "Utforska Fler Rum" }, "search": { "placeholder": "Sök efter rum, användare eller kategorier", "placeholderShort": "Sök" }, "settingsDropdown": { "profile": "Profil", "language": "Språk", "reportABug": "Rapportera ett fel", "useOldVersion": "Använd förra versionen", "logOut": { "button": "Logga ut", "modalSubtitle": "Är du säker på att du vill logga ut?" }, "debugAudio": { "debugAudio": "Felsök ljud", "stopDebugger": "Stoppa felsökaren" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Schemalagda rum", "noneFound": "Inga hittades", "allRooms": "Alla schemalagda rum", "myRooms": "Mina schemalagda rum", "scheduleRoomHeader": "Schemalagda Rum", "startRoom": "Påbörja rum", "modal": { "needsFuture": "Behöver vara i framtiden", "roomName": "Namn", "roomDescription": "Beskrivning", "minLength": "Lägsta längden: 2" }, "tommorow": "IMORGON", "today": "IDAG", "deleteModal": { "areYouSure": "är du säker på att du vill ta bort det här schemalagda rummet?" } }, "roomChat": { "title": "Chatt", "emotesSoon": "[emotes kommer snart]", "bannedAlert": "Du blev bannlyst från chatten", "waitAlert": "Du behöver vänta en sekund innan du kan skicka fler meddelanden", "search": "Sök", "searchResults": "Sökresultat", "recent": "Ofta använda", "sendMessage": "Skicka ett meddelande", "whisper": "Direktmeddelande", "welcomeMessage": "Välkommen till chatten!", "roomDescription": "Rumbeskrivning", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Tankar raket", "takingOff": "Lyfter", "inSpace": "I rymden", "approachingMoon": "Närmar sig månen", "lunarDoge": "Måndoge", "approachingSun": "Närmar sig solen", "solarDoge": "Soldoge", "approachingGalaxy": "Närmar sig en galax", "galacticDoge": "Galaktiskdoge", "spottedLife": "Planet med liv upptäckt" }, "feed": { "yourFeed": "Ditt flöde" } } } ================================================ FILE: kibbeh/public/locales/ta/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "மேலும் காட்டு", "loading": "பதிவேறுகிறது, காத்திருக்கவும்...", "noUsersFound": "பயனர்கள் இல்லை", "ok": "சரி", "yes": "ஆம்", "no": "இல்லை", "cancel": "ரத்துசெய்", "save": "சேமி", "edit": "திருத்து", "delete": "அழி", "joinRoom": "அறையில் சேர்", "copyLink": "இணைப்பை நகலெடு", "copied": "நகலெடுக்கப்பட்டது", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Please note running DogeHouse without accessibility permissions may cause unwanted errors", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "குரல் முடக்கப்பட்டது | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "மூல கதை", "link_2": "Discord", "link_3": "ஒரு bug'ஐ புகாரளிக்கவும்" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "தடை செய்", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "ஒரு தனியார் அறையில் இல்லாத, நீங்கள் பின்பற்றும் பயனர்களின்.", "currentRoom": "தற்போது இருப்பவர்கள்:", "startPrivateRoom": "அவர்களுடன் ஒரு தனியார் அறையைத் தொடங்குங்கள்", "title": "People" }, "followList": { "followHim": "பின்தொடரவும்", "followingHim": "இவர்களை பின்தொடர்கிறீர்கள்", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "அறையை உருவாக்குங்கள்", "refresh": "புதுப்பிக்கவும்", "editRoom": "Edit Room", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "அறை இல்லை, திரும்பிச் செல்லுங்கள்", "shareRoomLink": "அறைக்கு இணைப்பைப் பகிரவும்", "inviteFollowers": "ஆன்லைனில் இருக்கும் உங்களைப் பின்தொடர்பவர்களை அழைக்கலாம்:", "whenFollowersOnline": "உங்களைப் பின்தொடர்பவர்கள் ஆன்லைனில் இருக்கும்போது, இங்கே காண்பிக்கப்படுவார்கள்." }, "login": { "headerText": "உங்கள் குரலை நிலாவுக்கு பேக் செய்கிறோம் 🚀", "featureText_1": "Dark Theme", "featureText_2": "Open Sign-Ups", "featureText_3": "Cross-Platform Support", "featureText_4": "Open Source", "featureText_5": "எழுத்து அரட்டை", "featureText_6": "இது Doge ஆல் பவர் செய்யப்பட்டது ", "loginGithub": "GitHub மூலமாக உள்நுழை", "loginTwitter": "Twitter மூலமாக உள்நுழை", "createTestUser": "சோதனை பயனரை உருவாக்கவும்", "loginDiscord": "Login with Discord" }, "myProfile": { "logout": "லாக் அவுட் செய்", "probablyLoading": "பதிவேறுகிறது என்று நினைக்கிறன்...", "voiceSettings": "குரல் அமைப்பிற்குச் செல்லவும்", "soundSettings": "ஒலி அமைப்பிற்குச் செல்லவும்", "deleteAccount": "கணக்கை நீக்கு", "overlaySettings": "go to overlay settings", "couldNotFindUser": "Sorry, we could not find that user", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "அய்யகோ! இந்த பக்கத்தை காணவில்லை", "goHomeMessage": "கவலை படாதே, ", "goHomeLinkText": "Home'இற்கு செல் " }, "room": { "speakers": "பேசுகின்றவர்கள்", "requestingToSpeak": "பேசுவதற்கு கோரிக்கை வைக்கின்றேன்", "listeners": "கவனிக்கின்றவர்கள்", "allowAll": "Allow all", "allowAllConfirm": "Are you sure? This will allow all {{count}} requesting users to speak" }, "searchUser": { "search": "தேடு..." }, "soundEffectSettings": { "header": "ஒலிகள்", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "சுயவிவரத்தைத் திருத்து", "followsYou": "உங்களைப் பின்தொடர்கிறார்", "followers": "உங்களைப் பின்தொடர்பவர்கள்", "following": "நீங்கள் பின்தொடர்பவர்கள் ", "followHim": "இவரை பின்தொடர்", "followingHim": "இவரை பிந்தொடர்கிறீர்கள்", "copyProfileUrl": "copy profile url", "urlCopied": "URL copied to clipboard", "unfollow": "Unfollow", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "குரல் அமைப்பு", "mic": "ஒலிவாங்கி:", "permissionError": "ஒலிவாங்கிகள் எதுவும் கிடைக்கவில்லை, நீங்கள் எதுவும் செருகவில்லை அல்லது இந்த வலைத்தளத்திற்கு அனுமதி வழங்கவில்லை.", "refresh": "ஒலிவாங்கி பட்டியலைப் புதுப்பிக்கவும்", "volume": "ஒலி அளவு:", "title": "Voice Settings" }, "overlaySettings": { "header": "Overlay Settings", "input": { "errorMsg": "Please enter valid app title", "label": "Enter app title" } }, "download": { "starting": "Starting download...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "Click on the button below to start download", "download_now": "Download Now", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "தடைசெய்யப்பட்ட பயனர்கள்", "unban": "தடையை நீக்கு", "noBans": "யாரும் இதுவரை தடை செய்யப்படவில்லை" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "தற்போதைய அறையை விட்டு விடுங்கள்", "confirmLeaveRoom": "நீங்கள் நிச்சயமாக வெளியேற விரும்புகிறீர்களா?", "leave": "வெளியேறு ", "inviteUsersToRoomBtn": "பயனர்களை அறைக்கு அழைக்கவும்", "invite": "அழை", "toggleMuteMicBtn": "முடங்கிய மைக்ரோஃபோனை நிலைமாற்று", "mute": "Mute", "unmute": "Unmute", "makeRoomPublicBtn": "அறையை பொதுவாக்கு!", "settings": "அமைப்புகள்", "speaker": "பேச்சாளர்", "listener": "கேட்பவர்", "chat": "அரட்டை", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "உங்கள் சாதனம் தற்போது ஆதரிக்கப்படவில்லை. நீங்கள்", "linkText": "GitHub'ல் issue உருவாக்கவும்.", "addSupport": "உங்கள் சாதனத்தில் ஆதரவைச் சேர்க்க முயற்சிக்கிறேன்" }, "inviteButton": { "invited": "அழைக்கப்பட்டார்", "inviteToRoom": "அறைக்கு அழைக்கவும்" }, "micPermissionBanner": { "permissionDenied": "உங்கள் மைக்கை அணுக முயற்சிக்க அனுமதி மறுக்கப்பட்டது (நீங்கள் browser அமைப்புகளுக்குச் சென்று பக்கத்தை மீண்டும் ஏற்ற வேண்டியிருக்கும்)", "dismiss": "புறக்கணி", "tryAgain": "மீண்டும் முயற்சி செய்" }, "keyboardShortcuts": { "setKeybind": "விசைப்பலகையை அமைக்கவும்", "listening": "கேட்கிறேன்", "toggleMuteKeybind": "toggle mute keybind", "togglePushToTalkKeybind": "toggle push-to-talk keybind", "toggleOverlayKeybind": "toggle overlay keybind", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "சில காரணங்களால் ஆடியோ நுகர்வோர் இல்லை" }, "addToCalendar": { "add": "காலெண்டரில் சேர்" }, "wsKilled": { "description": "WebSocket server'ஆல் கொல்லப்பட்டது . நீங்கள் மற்றொரு தாவலில் வலைத்தளத்தைத் திறக்கும்போது இது வழக்கமாக நிகழ்கிறது.", "reconnect": "மீண்டும் இணைக்கவும்" }, "modals": { "createRoomModal": { "public": "பொது", "private": "தனியார் அறை", "roomName": "அறையின் பெயர்", "roomDescription": "அறையின் விளக்கம்", "descriptionError": "அதிகபட்ச நீளம் 500", "nameError": "2 முதல் 60 எழுத்துக்கள் வரை நீளமாக இருக்க வேண்டும்", "subtitle": "Fill the following fields to start a new room" }, "invitedToJoinRoomModal": { "newRoomCreated": "புதிய அறை உருவாக்கப்பட்டது", "roomInviteFrom": "இவர் உங்களை அறைக்கு அழைக்கிறார் ", "justStarted": "அறை சற்று நேரம் முன்னர் ஆரம்பிக்கப்பட்டது ", "likeToJoin": ", நீங்கள் சேர விரும்புகிறீர்களா?", "inviteReceived": "நீங்கள் அழைக்கப்பட்டுள்ளீர்கள்" }, "editProfileModal": { "usernameTaken": "பயனர்பெயர் கிடைக்கவில்லை", "avatarUrlError": "இந்த படத்தைப் பயன்படுத்த முடியாது", "avatarUrlLabel": "Github/Twitter/Discord பட url", "displayNameError": "நீளம் 2 முதல் 50 எழுத்துக்கள்", "displayNameLabel": "காட்டவேண்டிய பெயர் ", "usernameError": "நீளம் 4 முதல் 15 எழுத்துக்கள் மற்றும் எண்ணெழுத்து / அடிக்கோடும்", "usernameLabel": "பயனர்பெயர்", "bioError": "அதிகபட்சம் 160 எழுத்துகள்", "bioLabel": "சுயசரிதை", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "நீங்கள் உருவாக்கிய எந்த அறையிலும் இந்த பயனரைச் சேர்ப்பதைத் தடுக்க விரும்புகிறீர்களா?", "blockUser": "பயனரை தடை செய்", "makeMod": "mod ஆக்குங்கள்", "unmod": "unmod செய்யுங்கள்", "addAsSpeaker": "பேச்சாளராக சேர்க்கவும்", "moveToListener": "கேட்பவராக நகர்த்தவும்", "banFromChat": "அரட்டையிலிருந்து தடைசெய்க", "banFromRoom": "அறையில் இருந்து தடைசெய்க", "goBackToListener": "கேட்பவராக திரும்பிச் செல்லுங்கள்", "deleteMessage": "இந்த செய்தியை நீக்கு", "makeRoomCreator": "அவரை அறையின் நிர்வாகியாக ஆக்கு", "unBanFromChat": "Unban from Chat", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "பேச அனுமதி தேவை", "makePublic": "அறையை பொதுவாக்குங்கள்", "makePrivate": "அறையை தனிப்பட்டதாக்குங்கள்", "renamePublic": "Set public room name", "renamePrivate": "Set private room name", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "People", "online": "ONLINE", "noOnline": "You have 0 friends online right now", "showMore": "Show more" }, "upcomingRoomsCard": { "upcomingRooms": "Upcoming rooms", "exploreMoreRooms": "Explore More Rooms" }, "search": { "placeholder": "Search for rooms, users or categories", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profile", "language": "Language", "reportABug": "Report A Bug", "useOldVersion": "Use Old Version", "logOut": { "button": "Log out", "modalSubtitle": "Are you sure you want to logout?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "திட்டமிடப்பட்ட அறைகள்", "noneFound": "எதுவும் கிடைக்கவில்லை", "allRooms": "அனைத்து திட்டமிடப்பட்ட அறைகள்", "myRooms": "எனது திட்டமிடப்பட்ட அறைகள்", "scheduleRoomHeader": "அறையை பிற்காலத்துக்கு திட்டமிட்டு ", "startRoom": "அறையைத் தொடங்கு", "modal": { "needsFuture": "எதிர்காலத்தில் இருக்க வேண்டும்", "roomName": "அறை பெயர்", "roomDescription": "விளக்கம்", "minLength": "குறைந்தபட்ச நீளம் 2" }, "tommorow": "TOMMOROW", "today": "TODAY", "deleteModal": { "areYouSure": "Are you sure you want to delete this scheduled room?" } }, "roomChat": { "title": "அரட்டை", "emotesSoon": "[emotes soon]", "bannedAlert": "நீங்கள் அரட்டையிலிருந்து தடைசெய்யப்பட்டீர்கள்", "waitAlert": "மற்றொரு செய்தியை அனுப்புவதற்கு முன்பு நீங்கள் ஒரு நொடி காத்திருக்க வேண்டும்", "search": "தேடு", "searchResults": "தேடல் முடிவுகள்", "recent": "அடிக்கடி பயன்படுத்தப்படுபவை", "sendMessage": "ஒரு செய்தியை அனுப்புங்கள்", "whisper": "கிசுகிசுக்கவும்", "welcomeMessage": "அரட்டைக்கு வரவேற்கிறோம்!", "roomDescription": "அறை விளக்கம்", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Rocket'க்கு petrol போடுகிறோம் ", "takingOff": "இப்போது புறப்படுகிறது", "inSpace": "வானத்தில் இருக்கிறோம்", "approachingMoon": "இன்னும் சற்று நேரத்தில் நிலவை அடைந்து விடுவோம்", "lunarDoge": "நிலவில் Doge", "approachingSun": "சூரியனை நெருங்குகிறோம்", "solarDoge": "சூரிய Doge", "approachingGalaxy": "இதோ, விண்மீன்களை நெருங்கி வந்துவிட்டோம்", "galacticDoge": "Galactic Doge", "spottedLife": "வாழ்க்கையுடன் ஒரு கிரகத்தைக் கண்டுபிடித்துவிட்டோம்" }, "feed": { "yourFeed": "Your Feed" } } } ================================================ FILE: kibbeh/public/locales/te/translation.json ================================================ { "common": { "loadMore": "మరింత లోడ్ చేయండి", "loading": "లోడ్ అవుతోంది...", "noUsersFound": "వినియోగదారులు లేరు", "ok": "సరే", "yes": "అవును", "no": "లేదు", "cancel": "రద్దు చేయండి", "save": "save", "edit": "edit", "delete": "delete", "joinRoom": "join room", "copyLink": "copy link", "copied": "copied", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Please note running DogeHouse without accessibility permissions may cause unwanted errors", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Muted | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "మూలం కథ", "link_2": "Discord", "link_3": "Report a Bug" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "ban", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "ప్రైవేట్ గదిలో లేని మరియు మీరు అనుసరించే వినియోగదారుల జాబితా.", "currentRoom": "ప్రస్తుతం:", "startPrivateRoom": "వారితో ఒక ప్రైవేట్ గదిని ప్రారంభించండి", "title": "People" }, "followList": { "followHim": "follow", "followingHim": "following", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "గదిని సృష్టించండి", "refresh": "Refresh", "editRoom": "Edit Room", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "గది పోయింది, తిరిగి వెళ్ళు", "shareRoomLink": "గదికి లింక్‌ను భాగస్వామ్యం చేయండి", "inviteFollowers": "ఆన్‌లైన్‌లో ఉన్న మీ అనుచరులను మీరు ఆహ్వానించవచ్చు:", "whenFollowersOnline": "మీ అనుచరులు ఆన్‌లైన్‌లో ఉన్నప్పుడు, వారు ఇక్కడ కనిపిస్తారు." }, "login": { "headerText": "వాయిస్ సంభాషణలను చంద్రుడికి తీసుకువెళుతున్నాము 🚀", "featureText_1": "Dark Theme", "featureText_2": "Open Sign-Ups", "featureText_3": "Cross-Platform Support", "featureText_4": "Open Source", "featureText_5": "Text Chat", "featureText_6": "Powered by Doge", "loginGithub": "GitHub తో లాగిన్ అవ్వండి", "loginTwitter": "Twitter తో లాగిన్ అవ్వండి", "createTestUser": "create test user", "loginDiscord": "Login with Discord" }, "myProfile": { "logout": "logout", "probablyLoading": "బహుశా లోడ్ అవుతోంది...", "voiceSettings": "వాయిస్ సెట్టింగ్‌లకు వెళ్లండి", "overlaySettings": "go to overlay settings", "soundSettings": "సౌండ్ సెట్టింగ్‌లకు వెళ్లండి", "deleteAccount": "delete account", "couldNotFindUser": "Sorry, we could not find that user", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "Whoops! This page got lost in conversation.", "goHomeMessage": "చింతించకండి. నువ్వు చేయగలవు", "goHomeLinkText": "go home" }, "room": { "speakers": "స్పీకర్లు", "requestingToSpeak": "మాట్లాడటానికి అభ్యర్థిస్తోంది", "listeners": "Listeners", "allowAll": "Allow all", "allowAllConfirm": "Are you sure? This will allow all {{count}} requesting users to speak" }, "searchUser": { "search": "అన్వేషించు..." }, "soundEffectSettings": { "header": "సౌండ్స్", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "edit profile", "followsYou": "Follows you", "followers": "అనుచరులు", "following": "మీ క్రింది వ్యక్తులు", "followHim": "వ్యక్తిని అనుసరించండి", "unfollow": "వ్యక్తిని అనుసరించవద్దు", "followingHim": "following", "copyProfileUrl": "copy profile url", "urlCopied": "URL copied to clipboard", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "వాయిస్ సెట్టింగ్‌లు", "mic": "మైక్:", "permissionError": "మైక్స్ కనుగొనబడలేదు, మీరు ఏదీ ప్లగ్ ఇన్ చేయలేదు లేదా ఈ వెబ్‌సైట్ అనుమతి ఇవ్వలేదు.", "refresh": "మైక్ లిస్ట్ రిఫ్రెష్ చేయండి", "volume": "volume:", "title": "Voice Settings" }, "overlaySettings": { "header": "Overlay Settings", "input": { "errorMsg": "Please enter valid app title", "label": "Enter app title" } }, "download": { "starting": "Starting download...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "Click on the button below to start download", "download_now": "Download Now", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Banned Users", "unban": "unban", "noBans": "no one has been banned yet" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Leave current room", "confirmLeaveRoom": "మీరు ఖచ్చితంగా నిష్క్రమించాలనుకుంటున్నారా?", "leave": "Leave", "inviteUsersToRoomBtn": "గదికి వినియోగదారులను ఆహ్వానించండి", "invite": "ఆహ్వానించండి", "toggleMuteMicBtn": "మ్యూట్ మైక్రోఫోన్‌ను టోగుల్ చేయండి", "mute": "Mute", "unmute": "Unmute", "makeRoomPublicBtn": "గదిని పబ్లిక్‌గా చేయండి!", "settings": "సెట్టింగులు", "speaker": "స్పీకర్", "listener": "వినేవారు", "chat": "Chat", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "మీ పరికరానికి ప్రస్తుతం మద్దతు లేదు. మీరు ", "linkText": "ఫిర్యాదు సృష్టించవచ్చు", "addSupport": "మరియు నేను మీ పరికరానికి మద్దతును జోడించడానికి ప్రయత్నిస్తాను." }, "inviteButton": { "invited": "invited", "inviteToRoom": "invite to room" }, "micPermissionBanner": { "permissionDenied": "మీ మైక్‌ను యాక్సెస్ చేయడానికి అనుమతి నిరాకరించబడింది (మీరు బ్రౌజర్ సెట్టింగ్‌ల్లోకి వెళ్లి పేజీని మళ్లీ లోడ్ చేయాల్సి ఉంటుంది)", "dismiss": "దీన్ని కొట్టివేయాలా", "tryAgain": "మళ్ళీ ప్రయత్నించండి" }, "keyboardShortcuts": { "setKeybind": "కీబైండ్ సెట్ చేయండి", "listening": "నేను వింటున్నాను", "toggleMuteKeybind": "మ్యూట్ కీబైండ్‌ను టోగుల్ చేయండి", "toggleOverlayKeybind": "toggle overlay keybind", "togglePushToTalkKeybind": "టోగుల్ push-to-talk కీబైండ్", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "కొన్ని కారణాల వల్ల ఆడియో వినియోగదారుడు లేరు" }, "addToCalendar": { "add": "క్యాలెండర్‌కు జోడించండి" }, "wsKilled": { "description": "WebSocket was killed by the server. This usually happens when you open the website in another tab.", "reconnect": "తిరిగి కనెక్ట్ చేయండి" }, "modals": { "createRoomModal": { "public": "పబ్లిక్ ", "private": "ప్రైవేట్ ", "roomName": "గది పేరు", "roomDescription": "గది వివరణ", "descriptionError": "గరిష్ట పొడవు 500", "nameError": "2 నుండి 60 అక్షరాల పొడవు ఉండాలి", "subtitle": "Fill the following fields to start a new room" }, "invitedToJoinRoomModal": { "newRoomCreated": "కొత్త గది సృష్టించబడింది", "roomInviteFrom": "గది నుండి ఆహ్వానించండి", "justStarted": "వారు ఇప్పుడే ప్రారంభించారు", "likeToJoin": ", మీరు చేరాలనుకుంటున్నారా?", "inviteReceived": "మీరు ఆహ్వానించబడ్డారు" }, "editProfileModal": { "usernameTaken": "username taken", "avatarUrlError": "Invalid image", "avatarUrlLabel": "Github/Twitter/Discord avatar url", "displayNameError": "length 2 to 50 characters", "displayNameLabel": "Display Name", "usernameError": "length 4 to 15 characters and only alphanumeric/underscore", "usernameLabel": "Username", "bioError": "max length of 160 characters", "bioLabel": "Bio", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "మీరు ఎప్పుడైనా సృష్టించిన ఏ గదిలోనైనా ఈ వినియోగదారుని నిరోధించాలనుకుంటున్నారా?", "blockUser": "block user", "makeMod": "make mod", "unmod": "unmod", "addAsSpeaker": "స్పీకర్‌గా జోడించండి", "moveToListener": "move to listener", "banFromChat": "ban from chat", "banFromRoom": "ban from room", "goBackToListener": "go back to listener", "deleteMessage": "ఈ సందేశాన్ని తొలగించండి", "makeRoomCreator": "make room admin", "unBanFromChat": "Unban from Chat", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "నాకు మాట్లాడటానికి అనుమతి కావాలి", "makePublic": "గదిని బహిరంగపరచండి", "makePrivate": "గదిని ప్రైవేట్‌గా చేయండి", "renamePublic": "Set public room name", "renamePrivate": "Set private room name", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "People", "online": "ONLINE", "noOnline": "You have 0 friends online right now", "showMore": "Show more" }, "upcomingRoomsCard": { "upcomingRooms": "Upcoming rooms", "exploreMoreRooms": "Explore More Rooms" }, "search": { "placeholder": "Search for rooms, users or categories", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profile", "language": "Language", "reportABug": "Report A Bug", "useOldVersion": "Use Old Version", "logOut": { "button": "Log out", "modalSubtitle": "Are you sure you want to logout?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "షెడ్యూల్డ్ రూములు", "noneFound": "ఏదీ కనుగొనబడలేదు", "allRooms": "అన్ని షెడ్యూల్ గదులు", "myRooms": "నా షెడ్యూల్ గదులు", "scheduleRoomHeader": "షెడ్యూల్ గది", "startRoom": "కొత్త గది", "modal": { "needsFuture": "భవిష్యత్తులో ఉండాలి", "roomName": "గది పేరు", "roomDescription": "వివరణ", "minLength": "కనిష్ట పొడవు 2" }, "tommorow": "TOMMOROW", "today": "TODAY", "deleteModal": { "areYouSure": "Are you sure you want to delete this scheduled room?" } }, "roomChat": { "title": "Chat", "emotesSoon": "[emotes soon]", "bannedAlert": "మీరు చాట్ నుండి నిషేధించబడ్డారు", "waitAlert": "మరొక సందేశం పంపే ముందు మీరు ఒక్క క్షణం వేచి ఉండాలి", "search": "వెతకండి", "searchResults": "సెర్చ్ రిజల్ట్స్ ", "recent": "తరచుగా ఉపయోగించే అంశాలు", "sendMessage": "సందేశం పంపండి", "whisper": "Whisper", "welcomeMessage": "చాట్‌కు స్వాగతం!", "roomDescription": "గది వివరణ", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Fueling rocket", "takingOff": "టేకాఫ్", "inSpace": "In space", "approachingMoon": "Approaching moon", "lunarDoge": "Lunar Doge", "approachingSun": "Approaching sun", "solarDoge": "Solar Doge", "approachingGalaxy": "Approaching galaxy", "galacticDoge": "Galactic Doge", "spottedLife": "Planet with life spotted" }, "feed": { "yourFeed": "Your Feed" } } } ================================================ FILE: kibbeh/public/locales/th/translation.json ================================================ { "common": { "loadMore": "โหลดเพิ่มเติม", "loading": "กำลังโหลด...", "noUsersFound": "ไม่พบผู้ใช้", "ok": "โอเค", "yes": "ใช่", "no": "ไม่", "cancel": "ยกเลิก", "save": "บันทึก", "edit": "แก้ไข", "delete": "ลบ", "joinRoom": "เข้าห้อง", "copyLink": "คัดลอกลิงก์", "copied": "คัดลอกเรียบร้อย", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "โปรดระวัง การปิดการเข้าถึงต่าง ๆ ของ Dogehouse อาจทำให้ไม่สามารถใช้งานฟังก์ชั่นต่าง ๆ ได้", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "ปิดไมค์ | DogeHouse", "deafenedTitle": "ปิดเสียง | DogeHouse", "dashboard": "แดชบอร์ด", "connectionTaken": "เชื่อมต่อแล้ว" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "จุดกำเนิด", "link_2": "Discord", "link_3": "แจ้งปัญหา" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "แบน", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "ห้องสาธารณะที่ผู้คนที่คุณกำลังติดตามใช้งานอยู่", "currentRoom": "ขณะนี้อยู่ใน:", "startPrivateRoom": "สร้างห้องส่วนตัว", "title": "People" }, "followList": { "followHim": "ติดตาม", "followingHim": "กำลังติดตาม", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "สร้างห้อง", "refresh": "รีเฟรช", "editRoom": "แก้ไขห้อง", "desktopAlert": "ดาวน์โหลด Dogehouse เวอร์ชั่นเดสก์ท็อป ได้แล้ววันนี้!" }, "inviteList": { "roomGone": "ไม่พบห้อง, กรุณากลับไปที่หน้าหลัก", "shareRoomLink": "แชร์ลิงก์ของห้อง", "inviteFollowers": "คุณสามารถเชิญผู้ติดตามของคุณที่กำลังใช้งานอยู่:", "whenFollowersOnline": "เมื่อผู้ติดตามของคุณออนไลน์, พวกเขาจะปรากฎที่นี่" }, "login": { "headerText": "ทำให้แชทเสียงเป็นเรื่องง่าย 🚀", "featureText_1": "ธีมสีดำ", "featureText_2": "สมัครและใช้ได้ทุกคน", "featureText_3": "สนับสนุนหลายแพลตฟอร์ม", "featureText_4": "โอเพนซอร์ส", "featureText_5": "แชทข้อความ", "featureText_6": "ขับเคลื่อนโดย Doge", "loginGithub": "เข้าสู่ระบบด้วย GitHub", "loginTwitter": "เข้าสู่ระบบด้วย Twitter", "createTestUser": "สร้างผู้ใช้ทดลอง", "loginDiscord": "เข้าสู่ระบบด้วย Discord" }, "myProfile": { "logout": "ออกจากระบบ", "probablyLoading": "กำลังโหลด...", "voiceSettings": "การตั้งค่าเสียง", "soundSettings": "การตั้งค่าการแจ้งเตือนเสียง", "deleteAccount": "ลบบัญชี", "overlaySettings": "การตั้งค่าโอเวอร์เลย์", "couldNotFindUser": "ขออภัย ไม่สามารถหาผู้ใช้คนนั้นได้", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "โอ๊ะ! ไม่พบหน้าที่คุณค้นหา.", "goHomeMessage": "ไม่ต้องกังวลไป คุณสามารถกลับไปที่", "goHomeLinkText": "หน้าหลัก" }, "room": { "speakers": "ผู้พูด", "requestingToSpeak": "กำลังขอขึ้นเป็นผู้พูด", "listeners": "ผู้ฟัง", "allowAll": "อนุญาตทั้งหมด", "allowAllConfirm": "แน่ใจหรือไม่? คุณกำลังอนุมัติให้ผู้ใช้ {{count}} คน ขึ้นมาเป็นผู้พูด" }, "searchUser": { "search": "ค้นหา..." }, "soundEffectSettings": { "header": "การแจ้งเตือนเสียง", "title": "การตั้งค่าเสียง", "playSound": "Play Sound" }, "viewUser": { "editProfile": "แก้ไขโปรไฟล์", "followsYou": "กำลังติดตามคุณ", "followers": "ผู้ติดตาม", "following": "กำลังติดตาม", "followHim": "ติดตาม", "followingHim": "กำลังติดตาม", "copyProfileUrl": "คัดลอกลิงก์โปรไฟล์", "urlCopied": "คัดลอกลิงก์เรียบร้อย", "unfollow": "เลิกติดตาม", "about": "เกี่ยวกับ", "bot": "บอท", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "การตั้งค่าเสียง", "mic": "ไมโครโฟน:", "permissionError": "ไม่พบไมโครโฟน, คุณอาจจะลืมเสียบไมโครโฟน หรือ ลืมที่จะให้สิทธิ์ไมโครโฟนแก่เว็บไซต์.", "refresh": "รีเฟรชไมโครโฟน", "volume": "ระดับเสียง:", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "App Title ไม่ถูกต้อง", "label": "ใส่ App Title" }, "header": "การตั้งค่าโอเวอร์เลย์" }, "download": { "starting": "กำลังดาวน์โหลด...", "failed": "ไม่สามารถดาวน์โหลดได้, โปรดลองใหม่ในภายหลัง.", "visit_gh": "เยี่ยมชมใน Github", "prompt": "คลิ๊กที่ปุ่มด้านล่างเพื่อเริ่มการดาวน์โหลด.", "download_now": "ดาวน์โหลดตอนนี้", "download_for": "ดาวน์โหลดสำหรับ %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "ผู้ใช้ที่ถูกแบน", "unban": "ปลดแบน", "noBans": "ขณะนี้ยังไม่มีคนที่ถูกแบน" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "ออกจากห้อง", "confirmLeaveRoom": "คุณแน่ใจหรือไม่ที่จะออกจากห้อง?", "leave": "ออก", "inviteUsersToRoomBtn": "เชิญผู้ใช้เข้าห้อง", "invite": "เชิญ", "toggleMuteMicBtn": "เปิด/ปิด ไมโครโฟน", "mute": "ปิดไมโครโฟน", "unmute": "เปิดไมโครโฟน", "makeRoomPublicBtn": "ทำให้ห้องเป็นสาธารณะ!", "settings": "การตั้งค่า", "speaker": "ผู้พูด", "listener": "ผู้ฟัง", "chat": "แชท", "toggleDeafMicBtn": "เปิด/ปิด เสียง", "deafen": "ปิดเสียง", "undeafen": "เปิดเสียง" }, "deviceNotSupported": { "notSupported": "ขณะนี้เรายังไม่รองรับอุปกรณ์ของคุณ คุณสามารถแจ้งปัญหาได้ที่", "linkText": " GitHub ", "addSupport": "และเรา จะพยายามแก้ไขให้รองรับอุปกรณ์ของคุณ." }, "inviteButton": { "invited": "เชิญเรียบร้อย", "inviteToRoom": "เชิญเข้าห้อง" }, "micPermissionBanner": { "permissionDenied": "การเข้าถึงไมโครโฟนถูกปฏิเสธ (คุณอาจจะต้องเปลี่ยนการตั้งค่าเบราว์เซอร์ และรีโหลดหน้านี้อีกครั้ง)", "dismiss": "ปิด", "tryAgain": "ลองใหม่อีกครั้ง" }, "keyboardShortcuts": { "setKeybind": "ตั้งค่าคีย์ลัด", "listening": "กำลังตรวจจับ คีย์ลัด", "toggleMuteKeybind": "คีย์ลัด เปิด/ปิด ไมโครโฟน", "togglePushToTalkKeybind": "คีย์ลัด เปิด/ปิด Push to Talk", "toggleOverlayKeybind": "คีย์ลัด เปิด/ปิด โอเวอร์เลย์", "toggleDeafKeybind": "คีย์ลัด เปิด/ปิด เสียง" }, "userVolumeSlider": { "noAudioMessage": "ไม่พบลำโพง" }, "addToCalendar": { "add": "เพิ่มไปยังปฏิทิน" }, "wsKilled": { "description": "ตัดการเชื่อมต่อโดยเซิร์ฟเวอร์ อาจจะเป็นเพราะการเปิดเว็บไซต์หลายหน้าจอ", "reconnect": "เชื่อมต่อใหม่อีกครั้ง" }, "modals": { "createRoomModal": { "public": "สาธารณะ", "private": "ส่วนตัว", "roomName": "ชื่อห้อง", "roomDescription": "คำอธิบายห้อง", "descriptionError": "สูงสุด 500 ตัวอักษร", "nameError": "ต้องมีความยาวระหว่าง 2 ถึง 60 ตัวอักษร", "subtitle": "กรอกข้อมูลในช่องต่อไปนี้เพื่อสร้างห้องใหม่" }, "invitedToJoinRoomModal": { "newRoomCreated": "สร้างห้องเรียบร้อยแล้ว", "roomInviteFrom": "คำเชิญจาก", "justStarted": "พึ่งถูกสร้าง", "likeToJoin": ", คุณต้องการที่จะเข้าไปหรือไม่?", "inviteReceived": "คุณถูกเชิญเข้าสู่" }, "editProfileModal": { "usernameTaken": "มีชื่อผู้ใช้นี้อยู่แล้ว", "avatarUrlError": "รูปผิดพลาด", "avatarUrlLabel": "URL โปรไฟล์จาก Github/Twitter/Discord", "displayNameError": "ต้องมีความยาวระหว่าง 2 ถึง 50 ตัวอักษร", "displayNameLabel": "ชื่อที่แสดง", "usernameError": "ต้องมีความยาวระหว่าง 4 ถึง 15 ตัวอักษร และสามารถใส่ได้แค่ ตัวอักษรอังกฤษ, เลข และ Underscore เท่านั้น.", "usernameLabel": "ชื่อผู้ใช้", "bioError": "ความยาวสูงสุด 160 ตัวอักษร", "bioLabel": "คำอธิบาย", "bannerUrlLabel": "URL รูปหน้าปกทวิตเตอร์" }, "profileModal": { "blockUserConfirm": "คุณแน่ใจหรือไม่ที่จะบล็อกผู้ใช้นี้จากทุกห้องที่คุณสร้าง?", "blockUser": "บล็อกผู้ใช้", "makeMod": "ตั้งให้เป็นผู้ควบคุม", "unmod": "ลบสิทธิ์ผู้ควบคุม", "addAsSpeaker": "ตั้งให้เป็นผู้พูด", "moveToListener": "ย้ายกลับไปเป็นผู้ฟัง", "banFromChat": "แบนจากแชท", "banFromRoom": "แบนจากห้อง", "goBackToListener": "กลับไปเป็นผู้ฟัง", "deleteMessage": "ลบข้อความ", "makeRoomCreator": "แต่งตั้งเป็นแอดมินห้อง", "unBanFromChat": "ปลดแบนจากแชท", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "ต้องใช้สิทธิ์ในการพูด", "makePublic": "ตั้งให้เป็นห้องสาธารณะ", "makePrivate": "ตั้งให้เป็นห้องส่วนตัว", "renamePublic": "ตั้งชื่อห้องสาธารณะ", "renamePrivate": "ตั้งชื่อห้องส่วนตัว", "chatDisabled": "ปิดแชท", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "ผู้คน", "online": "ออนไลน์", "noOnline": "คุณมีเพื่อน 0 คนออนไลน์อยู่ขณะนี้", "showMore": "ดูเพิ่มเติม" }, "upcomingRoomsCard": { "upcomingRooms": "ห้องที่ใกล้จะมาถึง", "exploreMoreRooms": "ค้นหาห้องเพิ่มเติม" }, "search": { "placeholder": "ค้นหาห้อง ผู้ใช้ หรือหมวดหมู่", "placeholderShort": "ค้นหา" }, "settingsDropdown": { "profile": "โปรไฟล์", "language": "ภาษา", "reportABug": "แจ้งปัญหา", "useOldVersion": "ใช้เวอร์ชั่นเก่า", "logOut": { "button": "ออกจากระบบ", "modalSubtitle": "คุณแน่ใจหรือไม่ที่จะออกจากระบบ" }, "debugAudio": { "debugAudio": "แก้ไขข้อบกพร่องเสียง", "stopDebugger": "ปิดการแก้ไขข้อบกพร่อง" }, "downloadApp": "ดาวน์โหลดแอป", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "กำหนดการห้อง", "noneFound": "ไม่พบ", "allRooms": "ห้องที่กำหนดการไว้", "myRooms": "ห้องที่กำหนดการไว้ของฉัน", "scheduleRoomHeader": "กำหนดการห้อง", "startRoom": "สร้างห้อง", "modal": { "needsFuture": "จะต้องมีในอนาคต", "roomName": "ชื่อห้อง", "minLength": "ขั้นต่ำ 2 ตัวอักษร", "roomDescription": "รายละเอียด" }, "tommorow": "พรุ่งนี้", "today": "วันนี้", "deleteModal": { "areYouSure": "แน่ใจหรือไม่ที่จะลบกำหนดการนี้?" } }, "roomChat": { "title": "แชท", "emotesSoon": "[อิโมทจะมาในเร็ว ๆ นี้]", "bannedAlert": "คุณถูกแบนจากแชท", "waitAlert": "คุณต้องรอก่อนที่จะส่งข้อความต่อไป", "search": "ค้นหา", "searchResults": "ผลการค้นหา", "recent": "ที่ใช้ล่าสุด", "sendMessage": "ส่งข้อความ", "whisper": "กระซิบ", "welcomeMessage": "ยินดีต้อนรับสู่ห้องแชท!", "roomDescription": "คำอธิบายห้อง", "disabled": "แชทถูกปิดสำหรับห้องนี้", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "กำลังเติมเชื้อเพลิงยาน", "takingOff": "กำลังออกตัว", "inSpace": "ถึงอวกาศแล้ว", "approachingMoon": "กำลังมุ่งหน้าสู่ดวงจันทร์", "lunarDoge": "ถึงดวงจันทร์แล้ว", "approachingSun": "กำลังมุ่งหน้าสู่ดวงอาทิตย์", "solarDoge": "ถึงดวงอาทิตย์แล้ว", "approachingGalaxy": "กำลังงมุ่งหน้าสู่กาแลคซี่", "galacticDoge": "ถึงกาแลคซี่แล้ว", "spottedLife": "พบดาวเอเลี่ยนแล้ว!" }, "feed": { "yourFeed": "ฟีดของคุณ" } } } ================================================ FILE: kibbeh/public/locales/tl/translation.json ================================================ { "common": { "loadMore": "mag-load pa", "loading": "naglo-load...", "noUsersFound": "Walang nahanap na user", "ok": "ok", "yes": "oo", "no": "hindi", "cancel": "Kanselahin", "save": "i-save", "edit": "i-edit", "delete": "tanggalin", "joinRoom": "sumali", "copyLink": "kopyahin", "copied": "kinopya", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Laging tandaan maaring magkaroon ng di inaasahang problema ang DogeHouse kapag walang accessibility permissions", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Muted | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Pinagmulang Kwento", "link_2": "Discord", "link_3": "Mag-ulat ng isang Bug" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "Ban", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Listahan nang mga tao na hindi pribado at iyong sinundan", "currentRoom": "kasalukuyan nasa:", "startPrivateRoom": "magsimula ng isang pribadong silid sa kanila", "title": "People" }, "followList": { "followHim": "I-follow", "followingHim": "sinusubaybayan", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Bagong silid", "editRoom": "Edit Room", "refresh": "Refresh", "desktopAlert": "I-Download ang DogeHouse desktop app ngayon!" }, "inviteList": { "roomGone": "nawala ang room, bumalik ka", "shareRoomLink": "i-share ang link sa room na ito", "inviteFollowers": "Pwede kang mag imbita nang mga taga-subaybay na naka online", "whenFollowersOnline": "Dito mo makikita ang iyong mga taga-subaybay na naka online" }, "login": { "headerText": "Dalhin ang mga paguusap sa boses sa buwan 🚀", "featureText_1": "Itim na tema", "featureText_2": "Buksan ang Pag-sign-Up", "featureText_3": "Suporta sa Cross-Platform", "featureText_4": "Open Source", "featureText_5": "Text Chat", "featureText_6": "Powered by Doge", "loginGithub": "Mag login gamit ang Github", "loginTwitter": "Mag login gamit ang Twitter", "loginDiscord": "Mag login gamit ang Discord", "createTestUser": "Gumawa nang test user" }, "myProfile": { "logout": "Mag-logout", "probablyLoading": "naglo-load pa", "voiceSettings": "pumunta sa voice settings", "overlaySettings": "Overlay Settings", "soundSettings": "pumunta sound settings", "deleteAccount": "I-delete ang iyong account", "couldNotFindUser": "Kinalulungkot namin na hindi matagpuan ang iyong hinahanap", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "Whoops! Ang page na ito ay nawala.", "goHomeMessage": "Wag mag-alala", "goHomeLinkText": "bumalik sa home" }, "room": { "speakers": "Mga nagsasalita", "requestingToSpeak": "Humihiling na magsalita", "listeners": "Mga nakikinig", "allowAll": "Payagan lahat", "allowAllConfirm": "Sigurado? Ang buong bilang {{count}} na tao ay papayagang makapag salita" }, "searchUser": { "search": "maghanap..." }, "soundEffectSettings": { "header": "Tunog", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "I-edit ang profile", "followsYou": "mga sumusunod sayo", "followers": "mga tagasubaybay", "following": "sinusubaybayan", "followHim": "I-follow", "unfollow": "Unfollow", "followingHim": "mga sinusubaybayan", "copyProfileUrl": "Copy Profile URL", "urlCopied": "URL copied to clipboard", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Voice Settings", "mic": "Mic:", "permissionError": " Walang makitang mikropono, maaring ito ay hindi nakaplug o hindi nabigyang permiso ang website na ito", "refresh": "I-refresh and listahan ng mikropono", "volume": "Volume:", "title": "Voice Settings" }, "overlaySettings": { "header": "Overlay Settings", "input": { "errorMsg": "Please enter a valid app title", "label": "App title" } }, "download": { "starting": "Starting download...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "Click on the button below to start download", "download_now": "Download Now", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Users na naka-ban", "unban": "I-unban", "noBans": "Wala pang naka ban" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Umalis sa room nato", "confirmLeaveRoom": "Sigurado ka ba na aalis ka?", "leave": "Umalis", "inviteUsersToRoomBtn": "Mag imbita nang user sa room", "invite": "imbitahan", "toggleMuteMicBtn": "I-mute ang mikropono", "mute": "I-mute", "unmute": "I-unmute", "makeRoomPublicBtn": "I-public ang room!", "settings": "Mga Settings", "speaker": "Nagsasalita", "listener": "Nakikinig", "chat": "Chat", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "Pasensya na hindi pa supportado ang iyong device.", "linkText": "isyu sa GitHub", "addSupport": "at i-try kung lagyan nang supporta ang iyong device" }, "followingOnline": { "people": "People", "online": "ONLINE", "noOnline": "You have 0 friends online right now", "showMore": "Show more" }, "inviteButton": { "invited": "Naimbitahan", "inviteToRoom": "imbitahan sa room" }, "micPermissionBanner": { "permissionDenied": "Tinanggihan ng pahintulot na subukang i-access ang iyong mikropono (pwede ka pumunta sa browser settings at subukang i-reload ang page)", "dismiss": "I-dismiss", "tryAgain": "subukang muli" }, "keyboardShortcuts": { "setKeybind": "Mag set ng keybind", "listening": "nakikinig...", "toggleMuteKeybind": "I-toggle ang mute keybind", "toggleOverlayKeybind": "Toggle overlay keybind", "togglePushToTalkKeybind": "I-toggle ang push-to-talk keybind", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "Walang makitang audio consumer" }, "upcomingRoomsCard": { "upcomingRooms": "Upcoming rooms", "exploreMoreRooms": "Explore more rooms" }, "addToCalendar": { "add": "Idagdag sa kalendaryo" }, "wsKilled": { "description": "Pinatay ng server ang websocket. Karaniwang magyayari ito dahil naka bukas ang website sa ibang tab.", "reconnect": "kumonekta" }, "search": { "placeholder": "Search for rooms, users or categories", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profile", "language": "Language", "reportABug": "Report A Bug", "useOldVersion": "Use Old Version", "logOut": { "button": "Log out", "modalSubtitle": "Are you sure you want to logout?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "modals": { "createRoomModal": { "subtitle": "ulatan ang mga sumusunod para makapag simula ng bagong room", "public": "Publiko", "private": "Pribado", "roomName": "Pangalan ng room", "roomDescription": "Paglalarawan sa silid", "descriptionError": "haba ng 500", "nameError": "dapat ay nasa pagitan ng 2 hanggang 60 na character ang haba" }, "invitedToJoinRoomModal": { "newRoomCreated": "Bagong room ang nalikha", "roomInviteFrom": "Inimbitahang room galing sa", "justStarted": "Nagsimula lang sila sa", "likeToJoin": ", Gusto mo bang sumali?", "inviteReceived": "naiimbitahan ka na" }, "editProfileModal": { "usernameTaken": "username ay nakuha na", "avatarUrlError": "Di-wastong imahe", "avatarUrlLabel": "Github/Twitter/Discord avatar url", "displayNameError": "haba ng 2 hanggang 50 na character", "displayNameLabel": "Pangalan ng Display", "usernameError": "haba ng 4 hanggang 15 na mga character at alphanumeric / underscor lamange", "usernameLabel": "Username", "bioError": "limitado hanggang 160 mga letra lamang", "bioLabel": "Bio", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "Sigurado kaba na i-block mo itong user sa pagsali sa ginawa mong room?", "blockUser": "I-block ang user", "makeMod": "gumawa ng tagapangulo", "unmod": "alisin bilang tagapangulo", "addAsSpeaker": "idagdag bilang tagapagsalita", "moveToListener": "lumipat sa tagapakinig", "unBanFromChat": "Unban from Chat", "banFromChat": "ban sa chat", "banFromRoom": "ban sa room", "goBackToListener": "bumalik sa nakikinig", "deleteMessage": "I-delete ang mensahe", "makeRoomCreator": "gawing room admin", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "kailangan nag pahintulot para magsalita", "makePublic": "gawing publiko ang room", "makePrivate": "gawing pribado ang silid", "renamePublic": "Set public room name", "renamePrivate": "Set private room name", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "feed": { "yourFeed": "Your feed" }, "scheduledRooms": { "title": "Mga Nakaiskedyul na", "noneFound": "walang nakita", "allRooms": "Lahat ng nakaiskedyul na room", "myRooms": "ang aking nakaiskedyul na room", "scheduleRoomHeader": "Iskedyul ng Room", "startRoom": "I-start ang room", "modal": { "needsFuture": "kailangan sa hinaharap", "roomName": "pangalan ng room", "roomDescription": "Deskripsyon", "minLength": "haba ng 2" }, "tommorow": "Susunod na araw", "today": "Ngayong araw", "deleteModal": { "areYouSure": "Sigurado ka ba na gusto mong alisin ang naka-iskedyul na silid?" } }, "roomChat": { "title": "Chat", "emotesSoon": "[emotes soon]", "bannedAlert": "Na ban ka sa chat", "waitAlert": "Kailangan mong maghintay ng isang segundo bago magpadala ng isa pang mensahe", "search": "Maghanap", "searchResults": "Mga Resulta ng Paghahanap", "recent": "Madalas ginagamit", "sendMessage": "Magpadala ng Mensahe", "whisper": "Pabulong", "welcomeMessage": "Maligayang pagdating sa chat!", "roomDescription": "deskripsyon", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Fueling rocket", "takingOff": "Papaalis", "inSpace": "sa kalawakan", "approachingMoon": "Papalapit sa buwan", "lunarDoge": "Lunar Doge", "approachingSun": "Papalapit sa araw", "solarDoge": "Solar Doge", "approachingGalaxy": "Papalapit sa kalawakan", "galacticDoge": "Galactic Doge", "spottedLife": "Planet na may buhay na namataan" } } } ================================================ FILE: kibbeh/public/locales/tp/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "tenpo kama la sin li lon", "loading": "sin li kama...", "noUsersFound": "jan li ala", "ok": "pona a", "yes": "pona", "no": "ike", "cancel": "pini", "save": "sitelen", "edit": "ante", "delete": "weka", "joinRoom": "tawa tawa tomo", "copyLink": "tu e sitelen tawa", "copied": "ni li tu", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "DogeHouse li jo ala e ken la DogeHouse ken pali ala", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "sina ken ala e toki | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "sitelen tenpo pini ni", "link_2": "Discord", "link_3": "toki e ike" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "ken ala", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "jan ni li lon ala e tomo pi jan wan. sina lukin e jan ni.", "currentRoom": "sina lon:", "startPrivateRoom": "pali e tenpo poka ona", "title": "People" }, "followList": { "followHim": "o lukin", "followingHim": "sina lukin e ona", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "pali e tomo", "refresh": "tenpo tu la kama jo e ni", "editRoom": "ante e tomo", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "tomo li weka, tawa monsi", "shareRoomLink": "kulupu e sitelen tawa tomo", "inviteFollowers": "sina ken toki e ni tawa jan lon linja pi lukin e sina:", "whenFollowersOnline": "jan pi lukin e sina li lon linja la ona li lon." }, "login": { "headerText": "Tomo toki li tawa mun 🚀", "featureText_1": "nasin lukin pimeja", "featureText_2": "jan ale li ken e pali e jan", "featureText_3": "pali kepeken ilo nanpa pi nasin ale", "featureText_4": "sitelen kulupu", "featureText_5": "pana e sitelen", "featureText_6": "pali kepeken Doge", "loginGithub": "nanpa e jan kepeken GitHub", "loginTwitter": "nanpa e jan kepeken Twitter", "createTestUser": "pali e jan pi tenpo lili", "loginDiscord": "Login with Discord" }, "myProfile": { "logout": "o sona ala e sina", "probablyLoading": "ken la ni li kama...", "voiceSettings": "open e sitelen lawa pi kalama uta", "overlaySettings": "open e sitelen lawa pi sitelen sewi sitelen sina", "soundSettings": "open e sitelen lawa pi kalama", "deleteAccount": "pakala e jan sina", "couldNotFindUser": "Sorry, we could not find that user", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "Whoops! This page got lost in conversation.", "goHomeMessage": "Not to worry. You can", "goHomeLinkText": "go home" }, "room": { "speakers": "jan pi ken e toki", "requestingToSpeak": "mi wile e toki", "listeners": "jan pi kute", "allowAll": "Ken jan ale e toki", "allowAllConfirm": "sina wile e ni? ni li ken jan ale {{count}} e toki." }, "searchUser": { "search": "o lukin..." }, "soundEffectSettings": { "header": "Kalama", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "ante e jan sina", "followsYou": "li lukin e sina", "followers": "jan ale ni li lukin e jan ni", "following": "jan ni li lukin e jan ale ni", "followHim": "o lukin", "unfollow": "o lukin ala", "followingHim": "sina li lukin e jan ni", "copyProfileUrl": "tu e sitelen tawa pi jan ni", "urlCopied": "ni li tu", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "sitelen lawa pi kalama uta", "mic": "ilo pi lipu e kalama:", "permissionError": "ilo pi lipu e kalama li lon ala, sina jo ala e ni anu lipu len ni ken ala e lipu e kalama.", "refresh": "tenpo tu la kama jo e sitelen pi ilo pi lipu e kalama", "volume": "wawa pi kalama:", "title": "Voice Settings" }, "overlaySettings": { "header": "sitelen lawa pi sitelen sewi sitelen sina", "input": { "errorMsg": "Please enter valid app title", "label": "o sitelen e nimi pi " } }, "download": { "starting": "Starting download...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "Click on the button below to start download", "download_now": "Download Now", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "jan pi ken ala", "unban": "ken ala ala", "noBans": "jan ala li ken ala" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "tawa tan tomo ni", "confirmLeaveRoom": "sina wile e tawa tan ni?", "leave": "tawa tan ni", "inviteUsersToRoomBtn": "toki e tomo ni tawa jan", "invite": "toki e \"kama lon\"", "toggleMuteMicBtn": "ante e ken e toki", "mute": "ken ala e toki", "unmute": "ken ala ala e toki", "makeRoomPublicBtn": "kulupu e tomo ni!", "settings": "sitelen lawa", "speaker": "jan toki", "listener": "jan kute", "chat": "sitelen kulupu", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "Lipu len ni li pali ala kepeken ilo nanpa sina. pali e", "linkText": "sitelen ike lon GitHub la", "addSupport": "mi ken ante e ni,mi ante e ni la ni pali kepeken ilo nanpa sina." }, "inviteButton": { "invited": "sina li toki tawa jan ni e \"kama lon\"", "inviteToRoom": "o toki tawa jan e \"kama lon\"" }, "micPermissionBanner": { "permissionDenied": "Lipu len ni li ken ala e kepeken e ilo pi lipu e kalama sina (open e sitelen lawa pi ilo linluwi sina.tenpo tu la kama jo e lipu len ni.)", "dismiss": "mi pilin ala tawa ni.", "tryAgain": "ken la tenpo tu la ni li pali." }, "keyboardShortcuts": { "setKeybind": "ante e nena", "listening": "kute e nena", "toggleMuteKeybind": "nena pi ante e ken toki", "toggleOverlayKeybind": "nena pi ante e sitelen sewi sitelen sina", "togglePushToTalkKeybind": "nena pi ante e \"utala la toki\"", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "ali li kute e kalama" }, "addToCalendar": { "add": "sitelen e ni lon lipu tenpo suno" }, "wsKilled": { "description": "ilo pi pana sona li moli e linja sona. tenpo tu la sina open e lipu len ni la ni li kama.", "reconnect": "tenpo tu la o pali e linja sona." }, "modals": { "createRoomModal": { "public": "tomo kulupu", "private": "tomo pi kulupu ala", "roomName": "nimi pi tomo", "roomDescription": "sitelen pi tomo", "descriptionError": "anpa sewi pi suli li ale ale ale ale ale", "nameError": "anpa pi suli li tu. anpa sewi pi suli li mute mute mute.", "subtitle": "Fill the following fields to start a new room" }, "invitedToJoinRoomModal": { "newRoomCreated": "ona li pali e tomo.", "roomInviteFrom": "jan li toki e tomo tawa sina. jan li", "justStarted": "ona li open e tomo.", "likeToJoin": ", sina wile ala wile e tawa tawa tomo?", "inviteReceived": "jan li toki tawa ni e " }, "editProfileModal": { "usernameTaken": "jan sin li jo e nimi nanpa ni", "avatarUrlError": "sitelen sina li ike", "avatarUrlLabel": "sitelen tawa pi sitelen sina pi lipu Github/Twitter/Discord", "displayNameError": "anpa pi suli li tu. anpa sewi pi suli li mute mute luka luka.", "displayNameLabel": "nimi", "usernameError": "anpa pi suli li tu tu. anpa sewi pi suli li luka luka luka. wan pi nimi li sitelen Latin anu nanpa anu linja anpa", "usernameLabel": "nimi nanpa", "bioError": "anpa sewi pi suli li ale mute mute mute", "bioLabel": "sitelen sina", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "Sina wile ala wile e ken ala e jan ni pi tomo sina ale?", "blockUser": "ken ala e jan ni pi lukin e sina", "makeMod": "ken e jan ni", "unmod": "ken ala e jan ni", "addAsSpeaker": "ken e jan ni pi toki", "moveToListener": "ken ala e jan ni pi toki", "banFromChat": "ken ala e jan ni pi sitelen", "banFromRoom": "ken ala e jan ni pi tomo", "goBackToListener": "o tawa monsi pi jan kute", "deleteMessage": "weka e sitelen ni", "makeRoomCreator": "ken e jan ni pi ken ale", "unBanFromChat": "Unban from Chat", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "wile e ken pi toki", "makePublic": "kulupu e tomo", "makePrivate": "kulupu ala e tomo", "renamePublic": "ante e nimi tomo kulupu", "renamePrivate": "ante e nimi tomo pi kulupu ala", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "People", "online": "ONLINE", "noOnline": "You have 0 friends online right now", "showMore": "Show more" }, "upcomingRoomsCard": { "upcomingRooms": "Upcoming rooms", "exploreMoreRooms": "Explore More Rooms" }, "search": { "placeholder": "Search for rooms, users or categories", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profile", "language": "Language", "reportABug": "Report A Bug", "useOldVersion": "Use Old Version", "logOut": { "button": "Log out", "modalSubtitle": "Are you sure you want to logout?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "tomo pi tenpo kama", "noneFound": "tomo ala", "allRooms": "tomo ale pi tenpo kama", "myRooms": "tomo mi pi tenpo kama", "scheduleRoomHeader": "pali e tomo pi tenpo kama", "startRoom": "open e tomo", "modal": { "needsFuture": "tomo li wile e tenpo kama", "roomName": "nimi tomo", "roomDescription": "sitelen tomo", "minLength": "anpa pi suli li tu tu." }, "tommorow": "TOMMOROW", "today": "TODAY", "deleteModal": { "areYouSure": "Are you sure you want to delete this scheduled room?" } }, "roomChat": { "title": "Toki sitelen", "emotesSoon": "[tenpo kama la sinpin lili li ni]", "bannedAlert": "ona li ken ala e sina pi toki sitelen", "waitAlert": "o awen lili.", "search": "alasa", "searchResults": "sina alasa. mi sona e ni:", "recent": "tenpo mute la sina kepeken e sinpin lili ni", "sendMessage": "pana e sitelen", "whisper": "Toki pi kalama lili", "welcomeMessage": "Kama pona lon toki sitelen!", "roomDescription": "sitelen tomo", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "telo suli li tawa tawa palisa pi kon pi sewi mute", "takingOff": "ni li tawa tawa kon pi sewi mute", "inSpace": "lon kon pi sewi mute", "approachingMoon": "poka mun", "lunarDoge": "soweli Doge lon mun", "approachingSun": "poka suno", "solarDoge": "soweli Doge lon suno", "approachingGalaxy": "poka e kulupu suno", "galacticDoge": "soweli Doge lon kulupu suno", "spottedLife": "ona li lukin e ma. ma ni li jo e moli ala." }, "feed": { "yourFeed": "Your Feed" } } } ================================================ FILE: kibbeh/public/locales/tr/translation.json ================================================ { "common": { "loadMore": "Daha fazla yükle", "loading": "Yükleniyor...", "noUsersFound": "Hiçbir kullanıcı bulunamadı", "ok": "Tamam", "yes": "Evet", "no": "Hayır", "cancel": "İptal", "save": "Kaydet", "edit": "Düzenle", "delete": "Sil", "joinRoom": "Odaya katıl", "copyLink": "Bağlantıyı kopyala", "copied": "Kopyalandı!", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Erişilebilirlik izinleri olmadan DogeHouse'u çalıştırmanın istenmeyen hatalara neden olabileceğini lütfen unutmayın", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Ana başlık arayüz ulusallaştırma yazıları", "title": "DogeHouse", "mutedTitle": "Susturulmuş | DogeHouse", "deafenedTitle": "Sağırlaştırılmış | DogeHouse", "dashboard": "Panel", "connectionTaken": "Bağlantı Sağlandı" }, "footer": { "_comment": "Ana altbilgi arayüz ulusallaştırma yazıları", "link_1": "DogeHouse Hikayesi", "link_2": "Discord", "link_3": "Hata Bildir" }, "pages": { "_comment": "İlgili sayfa arayüz ulusallaştırma yazıları", "admin": { "ban": "Yasakla", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Senin takip ettiğin ve özel odada olmayan kullanıcıların listesi.", "currentRoom": "Şu anki oda:", "startPrivateRoom": "Onlarla özel bir oda oluştur", "title": "People" }, "followList": { "followHim": "Takip Et", "followingHim": "Takiptesin", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Oda oluştur", "refresh": "Yenile", "editRoom": "Oda Düzenle", "desktopAlert": "Bugün DogeHouse masaüstü uygulamasını indirin!" }, "inviteList": { "roomGone": "Oda gitti, geri dön", "shareRoomLink": "Oda bağlantısını paylaş", "inviteFollowers": "Çevrimiçi olan takipçilerini davet edebilirsin:", "whenFollowersOnline": "Takipçilerin çevrimiçi olduğunda burada gözükecek." }, "login": { "headerText": "Sesli sohbet aya gönderiliyor 🚀", "featureText_1": "Karanlık Tema", "featureText_2": "Açık kayıtlar", "featureText_3": "Çoklu platform desteği", "featureText_4": "Açık kaynak kodu", "featureText_5": "Yazılı sohbet", "featureText_6": "Doge tarafından desteklenmektedir", "loginGithub": "GitHub ile giriş yap", "loginTwitter": "Twitter ile giriş yap", "createTestUser": "Test kullanıcısı oluştur", "loginDiscord": "Discord ile giriş yap" }, "myProfile": { "logout": "Çıkış yap", "probablyLoading": "Muhtemelen yükleniyor...", "voiceSettings": "Konuşma ayarlarına git", "soundSettings": "Ses ayarlarına git", "deleteAccount": "Hesabı sil", "overlaySettings": "Kaplama ayarlarına git", "couldNotFindUser": "Üzgünüz, böyle bir kullanıcı bulamadık", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "Uups! Bu sayfa sohbette kayboldu.", "goHomeMessage": "Endişe etme. Yapabilirsin", "goHomeLinkText": "Ana sayfaya git" }, "room": { "speakers": "Konuşmacılar", "requestingToSpeak": "Konuşmak için izin istiyor", "listeners": "Dinleyiciler", "allowAll": "Herkese izin ver", "allowAllConfirm": "Emin misiniz? Bu, talep eden {{count}} kullanıcının konuşmasına izin verecektir" }, "searchUser": { "search": "Ara..." }, "soundEffectSettings": { "header": "Sesler", "title": "Ses Ayarları", "playSound": "Play Sound" }, "viewUser": { "editProfile": "Profili düzenle", "followsYou": "Seni takip ediyor", "followers": "Takipçi", "following": "Takip", "followHim": "Takip Et", "followingHim": "Takiptesin", "copyProfileUrl": "Profil bağlantısını kopyala", "urlCopied": "Bağlantı kopyalandı", "unfollow": "Takipten çık", "about": "", "bot": "Bot", "profileTabs": { "about": "Hakkında", "rooms": "Odalar", "scheduled": "Planlanmış", "recorded": "Kaydedildi", "clips": "Klipler", "admin": "Admin" }, "block": "Engelle", "unblock": "Engeli kaldır", "sendDM": "Özel mesaj gönder", "aboutSuffix": "Hakkında", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Ses Ayarları", "mic": "Mikrofon:", "permissionError": "Mikrofon bulunamadı. Ya takılı değil ya da bu web sitesine izin vermediniz.", "refesh": "Mikrofon listesini yenile", "volume": "Ses seviyesi:", "refresh": "Mikrofon listesini yenile", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "Geçersiz uygulama başlığı", "label": "Uygulama Başlığı Girin" }, "header": "Kaplama ayarları" }, "download": { "starting": "İndirme başlıyor...", "failed": "Otomatik indirme başarısız oldu, sonra tekrar dene", "visit_gh": "Github Yayınlamalarına git", "prompt": "İndirmeyi başlatmak için aşağıdaki butona bas", "download_now": "Şimdi İndir", "download_for": "%platform% için indir (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Bileşen arayüz ulusallaştırma yazıları", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Yasaklanan kullanıcılar", "unban": "Yasağı kaldır", "noBans": "Henüz kimse yasaklanmadı" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Odadan ayrıl", "confirmLeaveRoom": "Ayrılmak istediğine emin misin?", "leave": "Ayrıl", "inviteUsersToRoomBtn": "Kullanıcıları odaya davet et", "invite": "Davet et", "toggleMuteMicBtn": "Mikrofon sesini aç/kapa", "mute": "Sesi kapa", "unmute": "Sesi aç", "makeRoomPublicBtn": "Odayı herkese açık yap!", "settings": "Ayarlar", "speaker": "Konuşmacı", "listener": "Dinleyici", "chat": "Sohbet", "toggleDeafMicBtn": "Sağırlaştırmayı aç/kapa", "deafen": "Sağırlığı aç", "undeafen": "Sağırlığı kapa" }, "micPermissionBanner": { "permissionDenied": "Mikrofonunuza erişmeye çalışırken izin reddedildi (tarayıcı ayarlarına gitmeniz ve sayfayı yeniden yüklemeniz gerekebilir)", "dismiss": "Reddet", "tryAgain": "Yeniden dene" }, "modals": { "createRoomModal": { "public": "Herkese açık", "private": "Gizli", "roomName": "Oda ismi", "roomDescription": "Oda açıklaması", "descriptionError": "Maksimum uzunluk 500", "nameError": "2 ila 60 karakter uzunluğunda olmalıdır", "subtitle": "Yeni bir oda başlatmak için gerekli alanları doldurun" }, "invitedToJoinRoomModal": { "newRoomCreated": "Yeni oda oluşturuldu", "roomInviteFrom": "Oda daveti, tarafından", "justStarted": "Başladılar", "likeToJoin": ", Katılmak ister misin?", "inviteReceived": "Davet edildin, şuraya" }, "editProfileModal": { "usernameTaken": "Kullanıcı adı alınmış", "avatarUrlError": "Geçersiz resim", "avatarUrlLabel": "Github/Twitter/Discord avatar linki", "displayNameError": "uzunluk 2-50 karakter arası olmalı", "displayNameLabel": "Görünülecek isim", "usernameError": "Uzunluk 4-15 arası olmalı ve sadece alfanümerik/alt_çizgi karakterlerini içermeli", "usernameLabel": "Kullanıcı adı", "bioError": "Maksimum uzunluk 160 karakter", "bioLabel": "Biyo", "bannerUrlLabel": "Twitter kapak bağlantısı" }, "profileModal": { "blockUserConfirm": "Oluşturduğun tüm odalar için bu kullanıcıyı yasaklamak istediğine emin misin?", "blockUser": "Kullanıcıyı Blokla", "makeMod": "Moderatör Yap", "unmod": "Moderatörlükten Çıkar", "addAsSpeaker": "Konuşmacı Olarak Ekle", "moveToListener": "Dinleyiciye taşı", "banFromChat": "Sohbetten Yasakla", "banFromRoom": "Odadan Yasakla", "goBackToListener": "Dinlemeye Geri Dön", "deleteMessage": "Mesajı Sil", "makeRoomCreator": "Oda Yetkilisi Yap", "unBanFromChat": "Sohbetten yasaklanmasını kaldır", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "Konuşmak için izne ihtiyacın var", "makePublic": "Odayı herkese açık yap", "makePrivate": "Odayı gizli yap", "renamePublic": "Herkese açık oda adı seç", "renamePrivate": "Gizli oda adı seç", "chatDisabled": "sohbeti devre dışı bırak", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "userVolumeSlider": { "noAudioMessage": "Nedense ses alıcısı yok" }, "addToCalendar": { "add": "Takvime Ekle" }, "keyboardShortcuts": { "setKeybind": "Tuş Ata", "listening": "Dinleniyor", "toggleMuteKeybind": "susturma aç/kapat tuş ataması", "togglePushToTalkKeybind": "bas-konuş tuş ataması", "toggleOverlayKeybind": "kaplama tuş ataması", "toggleDeafKeybind": "sağırlık aç/kapat tuş ataması" }, "wsKilled": { "description": "WebSocket bağlantısı sunucu tarafından kapatıldı. Bu genellikle websiteyi başka bir sekmede açtığında yaşanır.", "reconnect": "Yeniden Bağlan" }, "deviceNotSupported": { "notSupported": "Cihazınız şu anda desteklenmemektedir.", "linkText": "GitHub ile bir issue (sorun)", "addSupport": "oluşturabilirsiniz ve ben de cihazınıza destek eklemeye çalışırım." }, "inviteButton": { "invited": "Davet Edildi", "inviteToRoom": "Odaya Davet Et" }, "followingOnline": { "people": "Arkadaşlar", "online": "AKTİF", "noOnline": "Şu anda hiçbir arkadaşın aktif değil", "showMore": "Daha fazlasını göster" }, "upcomingRoomsCard": { "upcomingRooms": "Yaklaşan Odalar", "exploreMoreRooms": "Daha Çok Oda Keşfet" }, "search": { "placeholder": "Oda, kullanıcı veya kategori ara...", "placeholderShort": "Ara" }, "settingsDropdown": { "profile": "Profil", "language": "Dil", "reportABug": "Hata Bildir", "useOldVersion": "Eski sürümü kullan", "logOut": { "button": "Çıkış yap", "modalSubtitle": "Çıkış yapmak istediğine emin misin?" }, "debugAudio": { "debugAudio": "Ses Hatalarını Ayıkla", "stopDebugger": "Hata Ayıklamayı Durdur" }, "downloadApp": "Uygulamayı İndir", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "scheduledRooms": { "title": "Planlanmış Odalar", "noneFound": "Oda bulunamadı", "allRooms": "Tüm Planlanmış Odalar", "myRooms": "Benim Planladığım Odalar", "scheduleRoomHeader": "Oda Planla", "startRoom": "Odayı Başlat", "modal": { "needsFuture": "Tarih gelecek bir zamanda olmalı", "roomName": "Oda ismi", "minLength": "Minimum oda ismi uzunluğu 2", "roomDescription": "Açıklama" }, "tommorow": "YARIN", "today": "BUGÜN", "deleteModal": { "areYouSure": "Bu planlanmış odayı silmek istediğinize emin misiniz?" } }, "roomChat": { "title": "Sohbet", "emotesSoon": "[İfadeler yakında gelecek]", "bannedAlert": "Sohbetten yasaklandın", "waitAlert": "Başka bir mesaj göndermek için biraz beklemelisin", "search": "Ara", "searchResults": "Arama Sonuçları", "recent": "Sık Kullanılanlar", "sendMessage": "Mesaj Gönder", "whisper": "Fısılda", "welcomeMessage": "Sohbete hoş geldin!", "roomDescription": "Oda Açıklaması", "disabled": "oda sohbeti devre dışı bırakıldı", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Yakıt dolduruluyor", "takingOff": "Kalkış", "inSpace": "Uzayda", "approachingMoon": "Ay yaklaşıyor", "lunarDoge": "Ay doge'u", "approachingSun": "Güneş yaklaşıyor", "solarDoge": "Güneş doge'u", "approachingGalaxy": "Galaksi yaklaşıyor", "galacticDoge": "Galaktik doge'u", "spottedLife": "Yaşam tespit edilen gezegen" }, "feed": { "yourFeed": "Akışın" } } } ================================================ FILE: kibbeh/public/locales/uk/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "завантажити ще", "loading": "завантажується", "noUsersFound": "користувача не знайдено", "ok": "ОК", "yes": "так", "no": "нi", "cancel": "відмiнити", "save": "зберегти", "edit": "редагувати", "delete": "видалити", "joinRoom": "Приєднатися до кімнати", "copyLink": "Копіювати посилання", "copied": "Скопійовано", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Please note running DogeHouse without accessibility permissions may cause unwanted errors", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Без звуку | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Інформаційна панель", "connectionTaken": "З'єднання встановлено" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Історія створення", "link_2": "Діскорд", "link_3": "Повідомити про помилку" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "заблокувати", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Список користувачів, які не перебувають у приватній кімнаті і за якими ви стежите", "currentRoom": "зараз у:", "startPrivateRoom": "почніть з ними приватну кімнату", "title": "People" }, "followList": { "followHim": "відстежувати", "followingHim": "відстежуєте", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Створити кімнату", "refresh": "Оновити", "editRoom": "Редагувати кімнату", "desktopAlert": "Завантажте додаток DogeHouse сьогодні!" }, "inviteList": { "roomGone": "кімнати вже немає, повернутися", "shareRoomLink": "поділитися посиланням на кімнату", "inviteFollowers": "Ви можете запросити своїх підписників, які є онлайн", "whenFollowersOnline": "Коли ваші підписники будуть в мережі, вони з’являться тут." }, "login": { "headerText": "Піднімаємо голосові розмови до Місяця 🚀", "featureText_1": "Темна тема", "featureText_2": "Відкриті підписки", "featureText_3": "Крос-платформна підтримка", "featureText_4": "Відкритий код", "featureText_5": "Текстовий чат", "featureText_6": "Працює на Doge", "loginGithub": "увійти з GitHub", "loginTwitter": "увійти з Twitter", "createTestUser": "створити тестового користувача", "loginDiscord": "увійти з Discord" }, "myProfile": { "logout": "вийти", "probablyLoading": "ймовірно завантажується...", "voiceSettings": "перейти до голосових налаштувань", "soundSettings": "перейти до звукових налаштувань", "deleteAccount": "видалити аккаунт", "overlaySettings": "перейти до налаштувань накладення", "couldNotFindUser": "Вибачте, ми не змогли знайти даного користувача", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "Упс! Ця сторінка загубилася в розмові.", "goHomeMessage": "Не хвилюйтеся. Ви зможете", "goHomeLinkText": "повернутися додому" }, "room": { "speakers": "Доповідачі", "requestingToSpeak": "Запитую дозвіл говорити", "listeners": "Слухачі", "allowAll": "Дозволити все", "allowAllConfirm": "Ви впевнені? Це дозволить усім {{count}} запитуючим користувачам розмовляти" }, "searchUser": { "search": "шукати..." }, "soundEffectSettings": { "header": "Звуки", "title": "Налаштування звуку", "playSound": "Play Sound" }, "viewUser": { "editProfile": "редагувати профіль", "followsYou": "підписані на вас", "followers": "підписники", "following": "ви підписані", "followHim": "підписатися", "followingHim": "відстежується", "copyProfileUrl": "скопіювати посилання на профіль", "urlCopied": "Посилання скопійовано", "unfollow": "Відписатися", "about": "About", "bot": "Бот", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Голосові налаштування", "mic": "мікрофон:", "permissionError": "мікрофонів не знайдено, ви або немаєте їх увімкнутими, або не дали дозволу цьому веб-сайту.", "refresh": "оновити список мікрофонів", "volume": "гучність:", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "Недійсне ім'я додатку", "label": "Введіть назву додатку" }, "header": "Налаштування накладення" }, "download": { "starting": "Початок завантаження...", "failed": "Не вдалося виконати автоматичне завантаження, спробуйте ще раз пізніше", "visit_gh": "Відвідайте Github Releases", "prompt": "Натисніть на кнопку нижче, щоб розпочати завантаження", "download_now": "Завантажити зараз", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Заборонені користувачі", "unban": "разблокувати", "noBans": "ще ніхто не був заблокованний" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Залишити поточну кімнату", "confirmLeaveRoom": "Ві впевнені, что хочете піти?", "leave": "Залишити", "inviteUsersToRoomBtn": "Запросити користувачів до кімнати", "invite": "Запросити", "toggleMuteMicBtn": "Перемикнути мікрофон", "mute": "Вимкнути звук", "unmute": "Увімкнути звук", "makeRoomPublicBtn": "Зробити кімнату загальнодоступною!", "settings": "Налаштування", "speaker": "Доповідач", "listener": "Слухач", "chat": "Чат", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "Ваш пристрій не підтримується. Ви можете створити", "linkText": "проблему на GitHub", "addSupport": "і я спробую додати підтримку для вашого пристрою." }, "inviteButton": { "invited": "запрошений", "inviteToRoom": "запросити до кімнати" }, "micPermissionBanner": { "permissionDenied": "У доступі до мікрофона відмовлено (можливо, вам доведеться зайти в налаштування браузера та перезавантажити сторінку)", "dismiss": "відхилити", "tryAgain": "спробувати ще раз" }, "keyboardShortcuts": { "setKeybind": "встановити прив'язку клавіши", "listening": "слухає", "toggleMuteKeybind": "Перемикнути прив'язку клавіши", "togglePushToTalkKeybind": "Перемикнути режим рації", "toggleOverlayKeybind": "toggle overlay keybind", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "немає аудіозв'язку" }, "addToCalendar": { "add": "Додати до календаря" }, "wsKilled": { "description": "Вебсокет був видалений сервером. Зазвичай це відбувається, коли ви відкриваєте веб-сайт в іншій вкладці.", "reconnect": "переєднатися" }, "modals": { "createRoomModal": { "public": "публічна", "private": "приватна", "roomName": "назва кімнати", "roomDescription": "опис кімнати", "descriptionError": "має містити до 500 символів", "nameError": "має містити від 2 до 60 символів", "subtitle": "Заповніть наступні поля для того, щоб розпочати нову кімнату" }, "invitedToJoinRoomModal": { "newRoomCreated": "Створено нову кімнату", "roomInviteFrom": "Запрошення до кімнати від", "justStarted": "Вони тільки почали", "likeToJoin": ", ви хотіли б приєднатися?", "inviteReceived": "вас запросили" }, "editProfileModal": { "usernameTaken": "ім'я користувача зайнято", "avatarUrlError": "Недійсне зображення", "avatarUrlLabel": "URL-адреса аватару у GitHub / Twitter", "displayNameError": "має містити від 2 до 60 символів", "displayNameLabel": "Відображуване ім’я", "usernameError": "має містити від 4 до 15 символів і бути лише буквено-цифровим та підкреслення", "usernameLabel": "Ім'я користувача", "bioError": "має містити до 160 символів", "bioLabel": "Біографія", "bannerUrlLabel": "URL-адреса банера Twitter" }, "profileModal": { "blockUserConfirm": "Ви впевнені, що хочете заблокувати цього користувача в будь-якій кімнаті, яку ви коли-небудь створювали?", "blockUser": "заблокувати користувача", "makeMod": "зробити модератором", "unmod": "повернути зі статусу модератора", "addAsSpeaker": "додати як доповідача", "moveToListener": "посунути до слухачів", "banFromChat": "заблокувати в цьому чаті", "banFromRoom": "заблокувати в цій кімнаті", "goBackToListener": "повернутися у статус слухача", "deleteMessage": "видалити це повідомлення", "makeRoomCreator": "зробити адміном кімнати", "unBanFromChat": "Розбанити у цьому чаті", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "запитувати дозвіл говорити", "makePublic": "зробити кімнату загальнодоступною", "makePrivate": "зробити кімнату приватною", "renamePublic": "Встановити ім'я публічної кімнати", "renamePrivate": "Встановити ім'я приватної кімнати", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "Люди", "online": "ОНЛАЙН", "noOnline": "На даний момент у вас 0 друзів онлайн", "showMore": "Показати більше" }, "upcomingRoomsCard": { "upcomingRooms": "Заплановані кімнати", "exploreMoreRooms": "Знайти більше кімнат" }, "search": { "placeholder": "Знайти кімнати, користувачів або категорії", "placeholderShort": "Пошук" }, "settingsDropdown": { "profile": "Профіль", "language": "Мова", "reportABug": "Повідомити про помилку", "useOldVersion": "Використовувати стару версію", "logOut": { "button": "Вийти", "modalSubtitle": "Ви впевнені що хочете вийти?" }, "debugAudio": { "debugAudio": "Налагодження звуку", "stopDebugger": "Зупинити налагодження" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Заплановані Кімнати", "noneFound": "не знайдено", "allRooms": "усі заплановані кімнати", "myRooms": "мої заплановані кімнати", "scheduleRoomHeader": "Запланувати Кімнату", "startRoom": "почати кімнату", "modal": { "needsFuture": "має бути в майбутньому", "roomName": "назва кімнати", "minLength": "має містити від 2 символів", "roomDescription": "Опис" }, "tommorow": "Завтра", "today": "Cьогодні", "deleteModal": { "areYouSure": "Ви дійсно бажаєте видалити цю заплановану кімнату?" } }, "roomChat": { "title": "Чат", "emotesSoon": "[емоції незабаром]", "bannedAlert": "Ви були заблокованні в цьому чаті", "waitAlert": "Вам потрібно почекати, перш ніж надсилати інше повідомлення", "search": "Шукати", "searchResults": "Результати Пошуку", "recent": "Часто використовуванні", "sendMessage": "Надіслати Повідомлення", "whisper": "Шепотіти", "welcomeMessage": "Ласкаво просимо до чату!", "roomDescription": "Опис кімнати", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Заправляємо ракету", "takingOff": "Злітаємо", "inSpace": "У космосі", "approachingMoon": "Досягаємо луни", "lunarDoge": "Місячний doge", "approachingSun": "Досягаємо сонця", "solarDoge": "Сонячний doge", "approachingGalaxy": "Досягаємо галактики", "galacticDoge": "Галактичний Doge", "spottedLife": "Помічена планета з життям" }, "feed": { "yourFeed": "Ваша Стрічка" } } } ================================================ FILE: kibbeh/public/locales/ur/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "مزید لوڈ کریں", "loading": "لوڈ ہو رہا ہے", "noUsersFound": "کوئی صارف نہیں ملا", "ok": "ٹھیک ہے", "yes": "جی ہاں", "no": "نہیں", "cancel": "منسوخ کریں", "save": "محفوظ کریں", "edit": "ترمیم", "delete": "حذف کریں", "joinRoom": "روم میں شامل ہو جائیں ", "copyLink": "لنک کاپی کریں", "copied": "کاپی کریں", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Please note running DogeHouse without accessibility permissions may cause unwanted errors", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Muted | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "اصل کہانی", "link_2": "Discord", "link_3": "بگ کی اطلاع دیں" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "پابندی لگائیں", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "وہ لوگ جنھیں آپ فالو کرتیں ہیں ور وو اس وقت نجی روم میں نہیں ہیں", "currentRoom": "موجودہ روم:", "startPrivateRoom": "ان کے ساتھ ایک نجی روم شروع کریں", "title": "People" }, "followList": { "followHim": "follow", "followingHim": "following", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "روم بنائیں", "refresh": "ریفریش", "editRoom": "Edit Room", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "یہ روم اب موجود نہیں ہے", "shareRoomLink": "روم کی لنک شیئر کریں", "inviteFollowers": "آپ اپنے فولّور کو دعوت دے سکتے ہیں جو آن لائن ہیں:", "whenFollowersOnline": "جب آپ کے فولّور آن لائن ہوں گے تو وہ یہاں دکھائے جائیں گے۔" }, "login": { "headerText": "Taking voice conversations to the moon 🚀", "featureText_1": "Dark Theme", "featureText_2": "Open Sign-Ups", "featureText_3": "Cross-Platform Support", "featureText_4": "Open Source", "featureText_5": "Text Chat", "featureText_6": "Powered by Doge", "loginGithub": "log in with GitHub", "loginTwitter": "log in with Twitter", "createTestUser": "create test user", "loginDiscord": "Login with Discord" }, "myProfile": { "logout": "لاگ آوٹ", "probablyLoading": "شاید لوڈ ہو رہا ہے", "voiceSettings": "اکاؤنٹ کی ترتیبات پر جائیں", "soundSettings": "آواز کی ترتیبات پر جائیں", "deleteAccount": "اکاؤنٹ ہمیشہ کے لئے ڈیلیٹ کریں", "overlaySettings": "go to overlay settings", "couldNotFindUser": "Sorry, we could not find that user", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "افوہ! لگتا ہے کچھ پنگا ہوگیا۔", "goHomeMessage": "پریشانی کی بات نہیں. آپ کر سکتے ہیں", "goHomeLinkText": "گھر جاو" }, "room": { "speakers": "اسپیکر", "requestingToSpeak": "بولنے کی درخواسات", "listeners": "سامعین", "allowAll": "سب کو اجازت دیں", "allowAllConfirm": "Are you sure? This will allow all {{count}} requesting users to speak" }, "searchUser": { "search": "تلاش کریں" }, "soundEffectSettings": { "header": "آواز کی ترتیبات", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "پروفائل میں ترمیم کریں", "followsYou": "آپ کو فالو کیا ہوا ہے", "followers": "فالور", "following": "فالونگ", "followHim": "فالو کریں", "followingHim": "فالونگ", "copyProfileUrl": "کاپی پروفائل یو آر ایل", "urlCopied": "یو آر ایل کو کلپ بورڈ میں کاپی کیا گیا", "unfollow": "ان فالو کریں", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "آواز کی ترتیبات", "mic": "مائک:", "permissionError": "کوئی mics نہیں ملا ، آپ نے یا تو کسی نے پلگ ان نہیں لیا ہے یا اس ویب سائٹ کو اجازت نہیں دی ہے۔", "refresh": "مائک کی فہرست کو تازہ کریں", "volume": "حجم:", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "Invalid app title", "label": "Enter App Title" }, "header": "Overlay Settings" }, "download": { "starting": "Starting download...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "Click on the button below to start download", "download_now": "Download Now", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "ممنوعہ صارفین", "unban": "غیر پابندی", "noBans": "ابھی تک کسی پر پابندی عائد نہیں کی گئی ہے" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "موجودہ کمرہ چھوڑ دو", "confirmLeaveRoom": "کیا آپ واقعی رخصت ہونا چاہتے ہیں؟", "leave": "چھوڑ دو", "inviteUsersToRoomBtn": "صارفین کو کمرے میں مدعو کریں", "invite": "مدعو کریں", "toggleMuteMicBtn": "خاموش مائکروفون ٹوگل کریں", "mute": "گونگا", "unmute": "خاموش کریں", "makeRoomPublicBtn": "کمرے کو عوامی بنائیں!", "settings": "ترتیبات", "speaker": "اسپیکر", "listener": "سننے والا", "chat": "چیٹ", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "آپ کا آلہ فی الحال تعاون یافتہ نہیں ہے۔ آپ ایک تشکیل دے سکتے ہیں", "linkText": "issue on GitHub", "addSupport": "اور میں آپ کے آلے کیلئے تعاون شامل کرنے کی کوشش کروں گا۔" }, "inviteButton": { "invited": "مدعو کیا", "inviteToRoom": "کمرے میں مدعو کریں" }, "micPermissionBanner": { "permissionDenied": "اجازت سے آپ کے مائک تک رسائی حاصل کرنے کی کوشش کرنے سے انکار ہوگیا (آپ کو براؤزر کی ترتیبات میں جانے اور پیج کو دوبارہ لوڈ کرنے کی ضرورت پڑسکتی ہے)", "dismiss": "خارج کریں", "tryAgain": "دوبارہ کوشش کریں" }, "keyboardShortcuts": { "setKeybind": "کی بائنڈ سیٹ کریں", "listening": "سن رہا ہے", "toggleMuteKeybind": "گونگا کی بائنڈ ٹوگل کریں", "togglePushToTalkKeybind": "ٹوگل کریں پش ٹو ٹاک کی بائنڈ", "toggleOverlayKeybind": "toggle overlay keybind", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "کسی وجہ سے آڈیو صارف نہیں ہے" }, "addToCalendar": { "add": "کیلنڈر میں شامل کریں" }, "wsKilled": { "description": "ویبسکیٹ سرور کے ذریعہ ہلاک ہوگئی تھی۔ یہ عام طور پر ہوتا ہے جب آپ کسی دوسرے ٹیب میں ویب سائٹ کھولتے ہیں۔", "reconnect": "دوبارہ جڑنا" }, "modals": { "createRoomModal": { "public": "عوام", "private": "نجی", "roomName": "کمرے کا نام", "roomDescription": "کمرے کی تفصیل", "descriptionError": "زیادہ سے زیادہ لمبائی 500", "nameError": "2 سے 60 حروف کے درمیان لمبا ہونا چاہئے", "subtitle": "Fill the following fields to start a new room" }, "invitedToJoinRoomModal": { "newRoomCreated": "نیا کمرہ تشکیل دیا گیا", "roomInviteFrom": "کمرے سے دعوت نامہ", "justStarted": "انہوں نے ابھی شروع کیا", "likeToJoin": ", کیا آپ اس میں شامل ہونا پسند کریں گے؟", "inviteReceived": "آپ کو مدعو کیا گیا ہے" }, "editProfileModal": { "usernameTaken": "صارف نام پہلے ہی لیا گیا ہے", "avatarUrlError": "غلط تصویر", "avatarUrlLabel": "اوتار یو آر ایل Github / Twitter", "displayNameError": "لمبائی 2 سے 50 حروف", "displayNameLabel": "ڈسپلے نام", "usernameError": "لمبائی 4 سے 15 حروف اور صرف حرفی / انگارے کی", "usernameLabel": "صارف نام", "bioError": "160 حروف کی زیادہ سے زیادہ لمبائی", "bioLabel": "بایو", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "کیا آپ واقعی اس صارف کو اپنے بنائے ہوئے کسی بھی کمرے میں شامل ہونے سے روکنا چاہتے ہیں؟", "blockUser": "بلوک یوزر", "makeMod": "موڈ بنانا", "unmod": "unmod", "addAsSpeaker": "اسپیکر کے طور پر شامل کریں", "moveToListener": "سننے والوں کی طرف بڑھیں", "banFromChat": "چیٹ پر پابندی", "banFromRoom": "کمرے سے پابندی لگانا", "goBackToListener": "سننے والوں کے پاس واپس جائیں", "deleteMessage": "اس پیغام کو حذف کریں", "makeRoomCreator": "روم ایڈمن بنائیں", "unBanFromChat": "Unban from Chat", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "بولنے کی اجازت کی ضرورت ہے", "makePublic": "کمرے کو عوامی بنائیں", "makePrivate": "کمرے کو نجی بنائیں", "renamePublic": "Set public room name", "renamePrivate": "Set private room name", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "People", "online": "ONLINE", "noOnline": "You have 0 friends online right now", "showMore": "Show more" }, "upcomingRoomsCard": { "upcomingRooms": "Upcoming rooms", "exploreMoreRooms": "Explore More Rooms" }, "search": { "placeholder": "Search for rooms, users or categories", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profile", "language": "Language", "reportABug": "Report A Bug", "useOldVersion": "Use Old Version", "logOut": { "button": "Log out", "modalSubtitle": "Are you sure you want to logout?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "شیڈول کمرے", "noneFound": "کچھ نہیں ملا", "allRooms": "تمام طے شدہ کمرے", "myRooms": "میرے طے شدہ کمرے", "scheduleRoomHeader": "شیڈول روم", "startRoom": "کمرہ شروع کریں", "modal": { "needsFuture": "مستقبل میں ہونے کی ضرورت ہے", "roomName": "کمرے کا نام", "minLength": "منٹ لمبائی 2", "roomDescription": "کمرے کی تفصیل" }, "tommorow": "TOMMOROW", "today": "TODAY", "deleteModal": { "areYouSure": "Are you sure you want to delete this scheduled room?" } }, "roomChat": { "title": "Chat", "emotesSoon": "[emotes soon]", "bannedAlert": "آپ کو چیٹ پر پابندی لگ گئی", "waitAlert": "دوسرا پیغام بھیجنے سے پہلے آپ کو ایک سیکنڈ انتظار کرنا ہوگا", "search": "تلاش کریں", "searchResults": "تلاش کے نتائج", "recent": "اکثر استعمال کیا جاتا ہے", "sendMessage": "پیغام بھیجو", "whisper": "سرگوشی", "welcomeMessage": "چیٹ میں خوش آمدید!", "roomDescription": "کمرے کی تفصیل", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "Fueling rocket", "takingOff": "Taking off", "inSpace": "In space", "approachingMoon": "Approaching moon", "lunarDoge": "Lunar doge", "approachingSun": "Approaching sun", "solarDoge": "Solar doge", "approachingGalaxy": "Approaching galaxy", "galacticDoge": "Galactic Doge", "spottedLife": "Planet with life spotted" }, "feed": { "yourFeed": "Your Feed" } } } ================================================ FILE: kibbeh/public/locales/uz/translation.json ================================================ { "_comment": "if you change this file, do: yarn i18", "common": { "loadMore": "Ko'proq yuklash", "loading": "Yuklanmoqda...", "noUsersFound": "Foydalanuvchilar topilmadi", "ok": "ОК", "yes": "Ha", "no": "Yo'q", "cancel": "Bekor qilish", "save": "Saqlash", "edit": "Tahrirlash", "delete": "O'chirish", "joinRoom": "Xonaga qo'shilish", "copyLink": "Havolani nusxalash", "copied": "Nusxalandi", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "DogeHouse da kirish ruxsatisiz ishlash kutilmagan xatolarga olib kelishi mumkin", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Tovushsiz | DogeHouse", "deafenedTitle": "Deafened | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Yaratilish tarixi", "link_2": "Discord", "link_3": "Xato haqida xabar berish" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "taqiqlash", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "Yopiq xonada bo'lmagan va siz obuna bo'lgan foydalanuvchilar ro'yxati.", "currentRoom": "Hozirgi xona", "startPrivateRoom": "Maxsus xona yarating", "title": "People" }, "followList": { "followHim": "Obuna bo'lish", "followingHim": "Obunachisiz ", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "Xona yaratish", "refresh": "Yangilash", "editRoom": "Xonani tahrirlash", "desktopAlert": "Download the DogeHouse desktop app today!" }, "inviteList": { "roomGone": "Xona yo'q, orqaga qayting", "shareRoomLink": "Xona bilan bog'lanishni baham ko'ring", "inviteFollowers": "Siz hozirda onlayn bo'lgan izdoshlaringizni taklif qilishingiz mumkin:", "whenFollowersOnline": "Sizning izdoshlaringiz onlayn bo'lsa, ular bu yerda ko'rsatiladi." }, "login": { "headerText": "Oyga ovozli aloqani ko'taramiz 🚀", "featureText_1": "Qora qoplama", "featureText_2": "Ochiq ro'yxatdan o'tish", "featureText_3": "Krossplatformaviy", "featureText_4": "Ochiq manba", "featureText_5": "Matnli chat", "featureText_6": "Doge tomonidan quvvatlanadi", "loginGithub": "GitHub orqali kirish", "loginTwitter": "Twitter orqali kirish", "createTestUser": "Sinov foydalanuvchisini yarating", "loginDiscord": "Login with Discord" }, "myProfile": { "logout": "Chiqish", "probablyLoading": "Menimcha yuklanmoqda...", "voiceSettings": "Ovoz sozlamalari", "soundSettings": "Tovush sozlamalari", "deleteAccount": "Akkauntni o'chirish", "overlaySettings": "Qoplama sozlamalari", "couldNotFindUser": "Kechirasiz, biz bu foydalanuvchini topa olmadik", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "Afsuski! Ushbu sahifa yo'qolgan.", "goHomeMessage": "Xavotir olmang. Siz ", "goHomeLinkText": "uyga qayta olasiz" }, "room": { "speakers": "Hangomachilar", "requestingToSpeak": "Gapirishni istaganlar", "listeners": "tinglovchilar", "allowAll": "Barchaga ruxsat berish", "allowAllConfirm": "Ishonchingiz komilmi? Bu {{count}} foydalanuvchilariga gapirish uchun ruxsat so'rab murojaat qilganlarga gapirishga imkon beradi" }, "searchUser": { "search": "Qidirish..." }, "soundEffectSettings": { "header": "Tovushlar", "title": "Sound Settings", "playSound": "Play Sound" }, "viewUser": { "editProfile": "Profilni tahrirlash", "followsYou": "Obunachilaringiz", "followers": "Obunachilar", "following": "Obuna", "followHim": "Obuna bo'lish", "followingHim": "Obunachisiz", "copyProfileUrl": "Profil URL manzilini nusxalash", "urlCopied": "Profil URL nusxasi ko'chirildi", "unfollow": "Obunani bekor qilish", "about": "About", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Ovoz Sozlamalari", "mic": "Mikrofon:", "permissionError": "Mikrofon topilmadi, ulanmagan yoki brauzerga tegishli ruxsat berilmagan.", "refresh": "Mikrofonlar ro'yxatini yangilash", "volume": "Tovush:", "title": "Voice Settings" }, "overlaySettings": { "header": "Qoplama Sozlamalari", "input": { "errorMsg": "Ilova nomi noto‘g‘ri", "label": "Ilova nomini kiriting" } }, "download": { "starting": "Starting download...", "failed": "Could not auto-download, please try again later", "visit_gh": "Visit Github Releases", "prompt": "Click on the button below to start download", "download_now": "Download Now", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Bloklangan foydalanuvchilar", "unban": "Unblock qilish", "noBans": "Hali hech kim taqiqlanmagan" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Xonani tark etish", "confirmLeaveRoom": "Haqiqatan ham tizimdan chiqishni xohlaysizmi?", "leave": "Chiqish", "inviteUsersToRoomBtn": "Foydalanuvchilarni xonaga taklif qilish", "invite": "Taklif qilish", "toggleMuteMicBtn": "Mikrofondi yoqish", "mute": "Ovozni o'chirish", "unmute": "Ovozni yoqish", "makeRoomPublicBtn": "Xonani ochiq qiling!", "settings": "sozlamalar", "speaker": "Gapiruvchi", "listener": "Tinglovchi", "chat": "Chat", "toggleDeafMicBtn": "Toggle Deafen", "deafen": "Deafen", "undeafen": "Undeafen" }, "deviceNotSupported": { "notSupported": "Qurilmangiz qo'llab-quvvatlanmaydi. Siz ", "linkText": "GitHub orqali so'rov", "addSupport": " yaratishingiz mumkin va biz sizning qurilmangizni qo'shishga harakat qilamiz." }, "inviteButton": { "invited": "Taklif qilindi!", "inviteToRoom": "Xonaga taklif qilish" }, "micPermissionBanner": { "permissionDenied": "Mikrofoningizga kirish imkonsiz (ehtimol brauzer sozlamalariga o'ting yoki sahifani qayta yuklang)", "dismiss": "Rad etish", "tryAgain": "Qayta urinib ko'rish" }, "keyboardShortcuts": { "setKeybind": "Keybind tayinlash", "listening": "Tinglayabsiz...", "toggleMuteKeybind": "Bosilganda mikrofonni faollashtirish", "togglePushToTalkKeybind": "Raciya rejimini yoqing", "toggleOverlayKeybind": "Keybind almashtirish tugmachasini biriktirish", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "Audio yo'q" }, "addToCalendar": { "add": "Taqvimga qo'shish" }, "wsKilled": { "description": "Veb-server server tomonidan o'chirildi. Bu odatda saytni boshqa yorliqda ochganda yuz beradi.", "reconnect": "Qayta qo'shilish" }, "search": { "placeholder": "Xonalarni, foydalanuvchilarni yoki toifalarni qidirish", "placeholderShort": "Search" }, "settingsDropdown": { "profile": "Profil", "language": "Til", "reportABug": "Xato haqida xabar berish", "useOldVersion": "Eski versiyadan foydalanish", "logOut": { "button": "Chiqish", "modalSubtitle": "Chiqishga ishonchingiz komilmi?" }, "debugAudio": { "debugAudio": "Debug Audio", "stopDebugger": "Stop Debugger" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "modals": { "createRoomModal": { "public": "umumiy", "private": "xususiy", "roomName": "xona nomi", "roomDescription": "xona tavsifi", "descriptionError": "maksimal uzunligi 500", "nameError": "uzunligi 2 dan 60 ta belgidan iborat bo'lishi kerak", "subtitle": "Yangi xonani boshlash uchun quyidagi maydonlarni to'ldiring" }, "invitedToJoinRoomModal": { "newRoomCreated": "Yangi xona yaratildi", "roomInviteFrom": "Taklifnoma tomon", "justStarted": "Ular endi boshladilar", "likeToJoin": ", qo'shilishni xohlaysizmi?", "inviteReceived": "sizni taklif qilishdi" }, "editProfileModal": { "usernameTaken": "foydalanuvchi nomi olingan", "avatarUrlError": "Noto'g'ri rasm", "avatarUrlLabel": "GitHub / Twitter-dan avatar URL-manzili", "displayNameError": "uzunligi 2 dan 50 gacha bo'lgan belgilar", "displayNameLabel": "Ommaviy ism", "usernameError": "Uzunligi 4 dan 15 gacha bo'lgan belgilar, alfasayısal va faqat pastki chiziq bilan belgilanadi", "usernameLabel": "Foydalanuvchi nomi", "bioError": "maksimal uzunligi 160 belgi", "bioLabel": "Men haqimda", "bannerUrlLabel": "Twitter banner URL" }, "profileModal": { "blockUserConfirm": "Haqiqatan ham ushbu foydalanuvchi sizning xonalaringizga kirishiga to'sqinlik qilmoqchimisiz?", "blockUser": "foydalanuvchini bloklash", "makeMod": "moderator sifatida tayinlash", "unmod": "moderatorlikdan mahrum qilish", "addAsSpeaker": "Gapiruvchi sifatida qo'shish", "moveToListener": "tinglovchilarga o'tkazish", "banFromChat": "ushbu suhbatdan taqiqlash", "banFromRoom": "ushbu xonadan taqiqlash", "goBackToListener": "tinglovchiga aylanish", "deleteMessage": "Xatni o'chirish", "makeRoomCreator": "xonani admini qilish", "unBanFromChat": "Unban from Chat", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "bu erda gapirish uchun ruxsat talab qilinadi", "makePublic": "xonani umumiy qilish", "makePrivate": "xonani xususiy qilish", "renamePublic": "Umumiy xonani qayta nomlash", "renamePrivate": "Xususiy xonani qayta nomlash", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "Odamlar", "online": "ONLAYN", "noOnline": "Barcha do'stlaringiz offlayn", "showMore": "Ko'proq ko'rsatish" }, "upcomingRoomsCard": { "upcomingRooms": "Yaqinlashib kelayotgan xonalar", "exploreMoreRooms": "Boshqa xonalarni izlanish" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "feed": { "yourFeed": "Sizning tasmangiz" }, "scheduledRooms": { "title": "Rejalashtirilgan xonalar", "noneFound": "topilmadi", "allRooms": "barcha rejalashtirilgan xonalar", "myRooms": "mening rejalashtirilgan xonalarim", "scheduleRoomHeader": "Rejalashtirilgan xonalar", "startRoom": "xona ochish", "modal": { "needsFuture": "kelajakda paydo bo'lishi kerak", "roomName": "xona nomi", "roomDescription": "Tavsif", "minLength": "minimal uzunlik 2" }, "tommorow": "TOMMOROW", "today": "TODAY", "deleteModal": { "areYouSure": "Are you sure you want to delete this scheduled room?" } }, "roomChat": { "title": "Chat", "emotesSoon": "[yaqinda emoji]", "bannedAlert": "Siz ushbu suhbatdan bloklangansiz", "waitAlert": "Keyingi xabarni yuborishdan oldin yana bir soniya kuting", "search": "Qidirish", "searchResults": "Qidiruv natijalari", "recent": "Yaqindagilar", "sendMessage": "Xat yuborish", "whisper": "Pichirlash", "welcomeMessage": "Suhbatga xush kelibsiz!", "roomDescription": "xona tavsifi", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "raketaga yonilg'i quyilmoqda", "takingOff": "dvigatellar ishga tushirldi", "inSpace": "Fazoda", "approachingMoon": "oyga yaqinlashmoqdamiz", "lunarDoge": "Oyjon Doge", "approachingSun": "quyoshga yaqinlashmoqdamiz", "solarDoge": "Quyoshjon Doge", "approachingGalaxy": "galaktikaga yaqinlashmoqdamiz", "galacticDoge": "Galaktik Doge", "spottedLife": "hayot mavjud bo'lgan sayyora aniqlandi" } } } ================================================ FILE: kibbeh/public/locales/vi/translation.json ================================================ { "_comment": "nếu bạn thay đổi tệp này, chạy lệnh: yarn i18", "common": { "loadMore": "tải thêm", "loading": "đang tải...", "noUsersFound": "không tìm thấy người dùng", "ok": "ok", "yes": "xác nhận", "no": "không", "cancel": "Hủy", "save": "Lưu", "edit": "Chỉnh sửa", "delete": "Xóa", "joinRoom": "Tham gia phòng", "copyLink": "sao chép liên kết", "copied": "đã sao chép liên kết", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "Lưu ý, không cung cấp đủ quyền truy cập cho DogeHouse có thể gây ra những lỗi không mong muốn", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "Tắt âm | DogeHouse", "deafenedTitle": "Tắt tiếng | DogeHouse", "dashboard": "Dashboard", "connectionTaken": "Kết nối đã được thực hiện" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "Câu chuyện Khởi nguồn", "link_2": "Discord", "link_3": "Báo cáo sự cố" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "cấm", "userStaffandContrib": "Nhân viên người dùng và đóng góp", "staff": "Nhân viên: ", "contributions": "Người đóng góp", "username": "Tên người dùng", "usrStaff": "Nhân viên người dùng", "usrContributions": "Đóng góp của người dùng", "reason": "lý do", "usernamePlaceholder": "tên người dùng đễ thực hiện các tác vụ" }, "followingOnlineList": { "listHeader": "Danh sách người dùng bạn theo dõi đang ở trong một phòng nào đó mà không phải là phòng riêng.", "currentRoom": "phòng hiện tại:", "startPrivateRoom": "tạo phòng riêng tư với họ", "title": "Mọi người" }, "followList": { "followHim": "theo dõi", "followingHim": "đang theo dõi", "title": "Mọi người", "followingNone": "Không đang theo dõi ai", "noFollowers": "Không có người theo dõi" }, "home": { "createRoom": "Tạo phòng", "refresh": "Làm mới", "editRoom": "Chỉnh sửa phòng", "desktopAlert": "Tải xuống ứng dụng DogeHouse dành cho desktop ngay hôm nay!" }, "inviteList": { "roomGone": "phòng đã kết thúc, quay lại đi", "shareRoomLink": "Chia sẻ liên kết phòng", "inviteFollowers": "Bạn có thể mời những người theo dõi của bạn khi họ đang trực tuyến:", "whenFollowersOnline": "Khi người theo dõi của bạn trực tuyến, họ sẽ hiện lên ở đây." }, "login": { "headerText": "Đưa trải nghiệm trò chuyện trực tuyến lên mặt trăng🚀", "featureText_1": "Chế độ tối", "featureText_2": "Đăng ký Miễn phí", "featureText_3": "Hỗ trợ Đa nền tảng", "featureText_4": "Mã nguồn mở", "featureText_5": "Trò chuyện bằng tin nhắn", "featureText_6": "Được bảo kê bởi Doge", "loginGithub": "đăng nhập với GitHub", "loginTwitter": "đăng nhập với Twitter", "createTestUser": "tạo người dùng thử", "loginDiscord": "Login with Discord" }, "myProfile": { "logout": "đăng xuất", "probablyLoading": "chắc là đang tải...", "voiceSettings": "cài đặt giọng nói", "overlaySettings": "cài đặt overlay", "soundSettings": "cài đặt âm thanh", "deleteAccount": "xóa tài khoản", "couldNotFindUser": "Xin lỗi, chúng tôi không thể tìm thấy người dùng đó", "privacySettings": "Cài đặt quyền riêng tư" }, "notFound": { "whoopsError": "Á! Đi lạc đâu đây.", "goHomeMessage": "Đừng lo. Bạn có thể", "goHomeLinkText": "quay về trang chủ" }, "room": { "speakers": "Diễn giả", "requestingToSpeak": "Yêu cầu nói", "listeners": "Thính giả", "allowAll": "Cho phép tất cả", "allowAllConfirm": "Bạn có chắc không? Hành động này sẽ cho phép {{count}} người dùng có quyền nói" }, "searchUser": { "search": "tìm kiếm..." }, "soundEffectSettings": { "header": "Âm thanh", "title": "Cài đặt âm thanh", "playSound": "Phát âm thanh" }, "viewUser": { "editProfile": "chỉnh sửa hồ sơ", "followsYou": "Theo dõi bạn", "followers": "người theo dõi", "following": "đang theo dõi", "followHim": "Theo dõi", "unfollow": "Bỏ theo dõi", "followingHim": "đang theo dõi", "copyProfileUrl": "sao chép liên kết hồ sơ", "urlCopied": "Đã sao chép liên kết", "about": "About", "bot": "Bot", "profileTabs": { "about": "Về", "rooms": "Phòng", "scheduled": "Lên kế hoạch", "recorded": "Ghi lại", "clips": "Clips", "admin": "Quản trị viên" }, "block": "Chặn", "unblock": "Bỏ chặn", "sendDM": "Gửi tin nhắn trực tiếp", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "Cài đặt giọng nói", "mic": "mic:", "permissionError": "không tìm thấy mic, bạn có thể chưa cắm hoặc chưa cấp quyền cho trang web này..", "refresh": "làm mới danh sách mic", "volume": "âm lượng:", "title": "Cài đặt âm thanh" }, "overlaySettings": { "header": "Cài đặt Overlay", "input": { "errorMsg": "Vui lòng nhập tiêu đề hợp lý cho App", "label": "Nhập tiêu đề cho app" } }, "download": { "starting": "Đang bắt đầu tải xướng...", "failed": "Không thể tự động tải xuống, vui lòng thử lại", "visit_gh": "Ghé thăm bản Release trên Github", "prompt": "Bấm vào nút dưới đây để bắt đầu tải", "download_now": "Tải ngay", "download_for": "Tải cho %nền tảng% (%ext%)" }, "privacySettings": { "title": "Cài đặt quyền riêng tư", "header": "Cài đặt quyền riêng tư", "whispers": { "label": "Thì thầm", "on": "Bật", "off": "Tắt" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "Nguời dùng bị cấm", "unban": "bỏ cấm", "noBans": "chưa có ai bị cấm" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "Thoát phòng hiện tại", "confirmLeaveRoom": "Bạn có chắc muốn thoát không?", "leave": "Thoát", "inviteUsersToRoomBtn": "Mời người dùng vào phòng", "invite": "Mời", "toggleMuteMicBtn": "Tắt/mở mic", "mute": "Tắt mic", "unmute": "Mở mic", "makeRoomPublicBtn": "Đặt phòng thành chế độ công khai!", "settings": "Cài đặt", "speaker": "Diễn giả", "listener": "Thính giả", "chat": "Trò chuyện", "toggleDeafMicBtn": "Bật/tắt tắt tiếng", "deafen": "Tắt tiếng", "undeafen": "Bỏ tắt tiếng" }, "deviceNotSupported": { "notSupported": "Thiết bị của bạn hiện không được hỗ trợ. Bạn có thể tạo một", "linkText": "lỗi tại GitHub", "addSupport": "tôi sẽ thêm hỗ trợ cho thiết bị của bạn." }, "inviteButton": { "invited": "đã mời", "inviteToRoom": "mời vào phòng" }, "micPermissionBanner": { "permissionDenied": "Không có quyền truy cập mic của bạn (thử xem lại cài đặt của trình duyệt và tải lại trang)", "dismiss": "bỏ qua", "tryAgain": "thử lại" }, "keyboardShortcuts": { "setKeybind": "cài đặt tổ hợp phím", "listening": "đang nghe", "toggleMuteKeybind": "phím tắt/mở mic", "toggleOverlayKeybind": "phím bật/tắt overlay", "togglePushToTalkKeybind": "phím nhấn-để-nói", "toggleDeafKeybind": "phím bật/tắt tắng tiếng" }, "userVolumeSlider": { "noAudioMessage": "không có âm thanh vì một số lý do" }, "addToCalendar": { "add": "Thêm vào lịch" }, "wsKilled": { "description": "WebSocket đã bị ngắt kết nối bởi server. Điều này thường là do bạn đang mở trang web ở nhiều tab khác nhau.", "reconnect": "kết nối lại" }, "modals": { "createRoomModal": { "public": "Công khai", "private": "Riêng tư", "roomName": "Tên phòng", "roomDescription": "Mô tả phòng", "descriptionError": "tối đa 500 ký tự", "nameError": "phải từ 2 đến 60 ký tự", "subtitle": "Điền vào các trường sau để bắt đầu một phòng mới" }, "invitedToJoinRoomModal": { "newRoomCreated": "Đã tạo phòng mới", "roomInviteFrom": "Mời vào phòng đến từ", "justStarted": "Mọi người vừa chỉ mới bắt đầu", "likeToJoin": ", bạn có muốn vào không?", "inviteReceived": "bạn đã được mời vào" }, "editProfileModal": { "usernameTaken": "tên người dùng đã tồn tại", "avatarUrlError": "Hình ảnh không hợp lệ", "avatarUrlLabel": "Liên kết đến ảnh đại diện Github/Twitter/Discord", "displayNameError": "phải có độ dài từ 2 tới 50 ký tự", "displayNameLabel": "Tên hiển thị", "usernameError": "phải có độ dài từ 4 đến 15 ký tự và chỉ được dùng chữ, số hoặc gạch dưới", "usernameLabel": "Tên người dùng", "bioError": "tối đa 160 ký tự", "bioLabel": "Mô tả", "bannerUrlLabel": "URL ảnh bìa Twitter" }, "profileModal": { "blockUserConfirm": "Bạn có chắc chắn muốn cấm người dùng này tham gia bất kỳ phòng nào bạn tạo không?", "blockUser": "cấm người dùng", "makeMod": "cho làm kiểm duyệt viên", "unmod": "bỏ làm kiểm duyệt viên", "addAsSpeaker": "cho làm diễn giả", "moveToListener": "cho làm thính giả", "banFromChat": "cấm gửi tin nhắn", "banFromRoom": "cấm khỏi phòng", "goBackToListener": "trở về làm thính giả", "deleteMessage": "xóa tin nhắn này", "makeRoomCreator": "cho làm quản trị viên", "unBanFromChat": "Huỷ cấm trò chuyện", "banIPFromRoom": "Cấm địa chỉ IP khỏi phòng" }, "roomSettingsModal": { "requirePermission": "phải được cấp quyền mới có thể nói", "makePublic": "chuyển thành phòng công khai", "makePrivate": "chuyển thành phòng riêng tư", "renamePublic": "Đặt tên phòng công khai", "renamePrivate": "Đặt tên phòng riêng", "chatDisabled": "vô hiệu hoá chat", "chatCooldown": "Thời gian hồi trò chuyện (giây)", "chat": { "label": "Trò chuyện", "enabled": "Kích hoạt", "disabled": "Vô hiệu hoá", "followerOnly": "Chỉ người theo dõi" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "Mọi người", "online": "Trực tuyến", "noOnline": "Bạn có 0 người bạn trực tuyến ngay bây giờ", "showMore": "Nhiều hơn" }, "upcomingRoomsCard": { "upcomingRooms": "Các phòng sắp tới", "exploreMoreRooms": "Khám phá các phòng khác" }, "search": { "placeholder": "Tìm theo phòng, người dùng, hoặc danh mục", "placeholderShort": "Tìm kiếm" }, "settingsDropdown": { "profile": "Hồ sơ", "language": "Ngôn ngữ", "reportABug": "Báo cáo lỗ hỏng", "useOldVersion": "Sử dụng phiên bản cũ", "logOut": { "button": "Đăng xuất", "modalSubtitle": "Bạn có chắc muốn đăng xuất?" }, "debugAudio": { "debugAudio": "Gỡ lỗi âm thanh", "stopDebugger": "Dừng trình gỡ lỗi" }, "downloadApp": "Tải App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "Nhân viên của DogeHouse", "dhContributor": "Người đóng góp cho DogeHouse" }, "messagesDropdown": { "title": "Tin nhắn", "showMore": "Nhiều hơn", "noMessages": "Không có tin nhắn mới" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "Phòng đã lên lịch", "noneFound": "không tìm thấy gì", "allRooms": "tất cả phòng đã lên lịch", "myRooms": "phòng do tôi lên lịch", "scheduleRoomHeader": "Lên lịch phòng mới", "startRoom": "bắt đầu phòng", "modal": { "needsFuture": "cần phải ở tương lai", "roomName": "tên phòng", "roomDescription": "Mô tả", "minLength": "tối thiểu 2 ký tự" }, "tommorow": "NGÀY MAI", "today": "HÔM NAY", "deleteModal": { "areYouSure": "Bạn có chắc chắn muốn xóa phòng đã lên lịch này không?" } }, "roomChat": { "title": "Trò chuyện", "emotesSoon": "[sắp có biểu tượng cảm xúc]", "bannedAlert": "Bạn đã bị cấm gửi tin nhắn", "waitAlert": "Bạn cần chờ một giây trước khi gửi tin nhắn kế tiếp", "search": "Tìm kiếm", "searchResults": "Kết quả tìm kiếm", "recent": "Hay sử dụng", "sendMessage": "Gửi tin nhắn", "whisper": "Thì thầm", "welcomeMessage": "Chào mừng đến với phòng trò chuyện!", "roomDescription": "Mô tả phòng", "disabled": "phòng chat đã bị vô hiệu hoá", "messageDeletion": { "message": "tin nhắn", "retracted": "đã thu hồi", "deleted": "đã xoá" } }, "roomStatus": { "fuelingRocket": "Đang đổ xăng cho tên lửa", "takingOff": "Cất cánh", "inSpace": "Đang ở trên không gian", "approachingMoon": "Đang tiếp cận mặt trăng", "lunarDoge": "Doge đang ở trên mặt trăng", "approachingSun": "Đang tiếp cận mặt trời", "solarDoge": "Doge đang bay quanh hệ mặt trời", "approachingGalaxy": "Đang tiếp cận dải ngân hà", "galacticDoge": "Doge đang bay quanh thiên hà", "spottedLife": "Đã tìm thấy hành tinh có sự sống" }, "feed": { "yourFeed": "Bản tin của bạn" } } } ================================================ FILE: kibbeh/public/locales/zh-CN/translation.json ================================================ { "common": { "loadMore": "加载更多", "loading": "加载中...", "noUsersFound": "没有找到任何用户", "ok": "好", "yes": "是", "no": "否", "cancel": "取消", "save": "保存", "edit": "编辑", "delete": "删除", "joinRoom": "加入音频聊天室", "copyLink": "拷贝链接", "copied": "已拷贝", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "请注意,在没有辅助功能权限的情况下运行DogeHouse可能会导致错误", "copy": "复制", "error": "错误" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "已关闭麦克风 | DogeHouse", "deafenedTitle": "已静音 | DogeHouse", "dashboard": "概览", "connectionTaken": "连接已被占用" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "起源故事", "link_2": "Discord", "link_3": "报告Bug" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "踢出用户", "userStaffandContrib": "用户人员与贡献", "staff": "人员: ", "contributions": "贡献", "username": "用户名", "usrStaff": "用户人员", "usrContributions": "用户贡献", "reason": "原因", "usernamePlaceholder": "对该用户执行操作" }, "followingOnlineList": { "listHeader": "您所关注的不在私人聊天室的人。", "currentRoom": "所在的聊天室:", "startPrivateRoom": "跟ta进入私人聊天室", "title": "用户" }, "followList": { "followHim": "关注ta", "followingHim": "已经关注", "title": "用户", "followingNone": "没有关注任何人", "noFollowers": "没有粉丝" }, "home": { "createRoom": "新建聊天室", "refresh": "刷新", "editRoom": "修改聊天室", "desktopAlert": "现在下载神烦狗桌面app吧!" }, "inviteList": { "roomGone": "聊天室已被删除,请回到前一页", "shareRoomLink": "在聊天室分享链接", "inviteFollowers": "您可以邀请您在线的关注者:", "whenFollowersOnline": "当您的关注者在线的时候,ta们会在这里显示。" }, "login": { "headerText": "把语音聊天飞上月球 🚀", "featureText_1": "深色主题", "featureText_2": "开放注册", "featureText_3": "跨平台支持", "featureText_4": "开源", "featureText_5": "文字聊天", "featureText_6": "神烦狗出品", "loginGithub": "用GitHub登录", "loginTwitter": "用Twitter登录", "createTestUser": "创建测试账号", "loginDiscord": "用Discord登录" }, "myProfile": { "logout": "登出", "probablyLoading": "加载中...", "voiceSettings": "音量设置", "soundSettings": "声音设置", "deleteAccount": "删除账号", "overlaySettings": "覆盖层设置", "couldNotFindUser": "对不起,无法找到该用户", "privacySettings": "隐私设置" }, "notFound": { "whoopsError": "哎呀,这页在聊天中被丢掉了", "goHomeMessage": "别担心,可以", "goHomeLinkText": "回到主页" }, "room": { "speakers": "讲话者", "requestingToSpeak": "要求讲话", "listeners": "听者", "allowAll": "允许全体成员讲话", "allowAllConfirm": "确定?这将会允许全部{{}}位成员讲话" }, "searchUser": { "search": "搜索..." }, "soundEffectSettings": { "header": "声音", "title": "声音设置", "playSound": "播放声音" }, "viewUser": { "editProfile": "编辑个人主页", "followsYou": "关注您的人", "followers": "关注者", "following": "关注的人", "followHim": "关注ta", "followingHim": "已经关注", "copyProfileUrl": "复制个人主页链接", "urlCopied": "个人主页链接已复制到剪贴板", "unfollow": "取消关注", "about": "关于ta", "bot": "机器人", "profileTabs": { "about": "关于", "rooms": "聊天室", "scheduled": "已安排", "recorded": "已录制", "clips": "片段", "admin": "管理员" }, "block": "屏蔽", "unblock": "取消屏蔽", "sendDM": "发送消息", "aboutSuffix": "", "errors": { "blocked": "此用户屏蔽了你", "default": "噢!我们无法读取这个用户" } }, "voiceSettings": { "header": "语音设置", "mic": "麦克风:", "permissionError": "没有找到麦克风,也许没有插入麦克风,也许没有给此网页使用麦克风的权利。", "refresh": "刷新麦克风列表", "volume": "音量:", "title": "声音设置" }, "overlaySettings": { "input": { "errorMsg": "不允许的App标题", "label": "输入App标题" }, "header": "覆盖层设置" }, "download": { "starting": "开始下载...", "failed": "无法自动下载,请稍后再尝试", "visit_gh": "查看Github的发布", "prompt": "按下面的按键开始下载", "download_now": "下载", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "隐私设置", "header": "隐私设置", "whispers": { "label": "私聊", "on": "开", "off": "关" } }, "botEdit": { "yourBots": "你的机器人", "bots": "机器人", "title": "机器人信息", "apiKey": "ApiKey", "regenerate": "重新生成", "reveal": "点击显示ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "禁止加入的用户", "unban": "解封", "noBans": "没有人被封过" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "离开聊天室", "confirmLeaveRoom": "确定离开吗?", "leave": "离开", "inviteUsersToRoomBtn": "邀请用户进入聊天室", "invite": "邀请", "toggleMuteMicBtn": "切换麦克风静音", "mute": "关闭麦克风", "unmute": "打开麦克风", "makeRoomPublicBtn": "把聊天室设为公开!", "settings": "设置", "speaker": "扬声器", "listener": "听者", "chat": "文字聊天", "toggleDeafMicBtn": "切换静音", "deafen": "静音", "undeafen": "取消静音" }, "micPermissionBanner": { "permissionDenied": "麦克风使用权被拒绝(可能需要更改设置并且刷新页面)", "dismiss": "取消", "tryAgain": "重试" }, "modals": { "createRoomModal": { "public": "公开", "private": "私人", "roomName": "聊天室名字", "roomDescription": "聊天室简介", "descriptionError": "最大长度为500字符", "nameError": "长度为2到60字符", "subtitle": "填写以下信息开启新聊天室" }, "invitedToJoinRoomModal": { "newRoomCreated": "新聊天室被建", "roomInviteFrom": "邀请者:", "justStarted": "ta们刚开始", "likeToJoin": ",您要加入吗?", "inviteReceived": "您被邀请到" }, "editProfileModal": { "usernameTaken": "用户名已被占用", "avatarUrlError": "图片无效", "avatarUrlLabel": "Github/Twitter/Discord头像URL", "displayNameError": "长度为2到50字符", "displayNameLabel": "所显名称", "usernameError": "长度为4到15字符,只允许字母或数字或下划线", "usernameLabel": "用户名", "bioError": "最大长度为160字符", "bioLabel": "个人简介", "bannerUrlLabel": "Twitter横幅图链接" }, "profileModal": { "blockUserConfirm": "您确定把此人加入黑名单?(ta不可加入您所建立的任何聊天室)", "blockUser": "加入黑名单", "makeMod": "设为管理员", "unmod": "取消管理员资格", "addAsSpeaker": "加为讲话者", "moveToListener": "移到听者", "banFromChat": "禁止此人使用文字聊天", "banFromRoom": "踢出聊天室", "goBackToListener": "回到听者", "deleteMessage": "删除此信息", "makeRoomCreator": "设为聊天室管理员", "unBanFromChat": "恢复此人使用文字聊天", "banIPFromRoom": "本聊天室封禁此IP" }, "roomSettingsModal": { "requirePermission": "需要允许才能说话", "makePublic": "把聊天室设为公开", "makePrivate": "把聊天室设为私人", "renamePublic": "设置公开聊天室名称", "renamePrivate": "设置私人聊天室名称", "chatDisabled": "禁止聊天", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "聊天", "enabled": "允许", "disabled": "禁止", "followerOnly": "仅粉丝" } }, "createBotModal": { "usernameTaken": "用户名被占用", "subtitle": "请填写以下详情来创造机器人", "title": "创造机器人" } }, "userVolumeSlider": { "noAudioMessage": "no audio consumer for some reason" }, "addToCalendar": { "add": "加到日历" }, "keyboardShortcuts": { "setKeybind": "设置快捷键", "listening": "等待输入", "toggleMuteKeybind": "切换麦克风静音键绑定", "togglePushToTalkKeybind": "切换按键说话绑定", "toggleOverlayKeybind": "切换覆盖层绑定", "toggleDeafKeybind": "切换静音键绑定" }, "wsKilled": { "description": "连接被服务器终止。当您在另一个标签中打开此网站时,通常会发生这种情况 ", "reconnect": "正在重新连接" }, "deviceNotSupported": { "notSupported": "您的设备展示还不被支持,您可以", "linkText": "在GitHub开启一个报告", "addSupport": "我将会尝试支持您的设备" }, "inviteButton": { "invited": "被邀请", "inviteToRoom": "邀请进入聊天室" }, "followingOnline": { "people": "用户", "online": "在线", "noOnline": "你有0个朋友现在在线", "showMore": "显示更多" }, "upcomingRoomsCard": { "upcomingRooms": "即将开始的聊天室", "exploreMoreRooms": "探寻更多聊天室" }, "search": { "placeholder": "搜索聊天室,用户或者种类", "placeholderShort": "搜索" }, "settingsDropdown": { "profile": "个人信息页面", "language": "语言", "reportABug": "反馈Bug", "useOldVersion": "使用旧版本", "logOut": { "button": "登出", "modalSubtitle": "是否确定登出?" }, "debugAudio": { "debugAudio": "调试声音", "stopDebugger": "取消调试" }, "downloadApp": "下载APP", "developer": "开发者设置" }, "userBadges": { "dhStaff": "神烦狗人员", "dhContributor": "神烦狗贡献者" }, "messagesDropdown": { "title": "消息", "showMore": "显示更多", "noMessages": "没有新消息" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "预定的聊天室", "noneFound": "没有找到", "allRooms": "所有预定的聊天室", "myRooms": "我的预定的聊天室", "scheduleRoomHeader": "预定聊天室", "startRoom": "开始聊天室", "modal": { "needsFuture": "需要一个在未来的时间", "roomName": "聊天室名字", "minLength": "最短长度为2", "roomDescription": "聊天室描述" }, "tommorow": "明天", "today": "今天", "deleteModal": { "areYouSure": "你确定要删除此预定的聊天室?" } }, "roomChat": { "title": "文字聊天", "emotesSoon": "[未来增加表情]", "bannedAlert": "您被禁止使用文字聊天", "waitAlert": "您需要等一秒钟才能发出下一条信息", "search": "搜索", "searchResults": "搜索结果", "recent": "经常使用的", "sendMessage": "发一条信息", "whisper": "私信", "welcomeMessage": "欢迎来到文字聊天!", "roomDescription": "聊天室介绍", "disabled": "聊天室聊天已经被禁止", "messageDeletion": { "message": "消息", "retracted": "已撤回", "deleted": "已删除" } }, "roomStatus": { "fuelingRocket": "火箭在加油", "takingOff": "起飞", "inSpace": "在太空", "approachingMoon": "飞向月球", "lunarDoge": "月球 Doge", "approachingSun": "飞向太阳", "solarDoge": "太阳 Doge", "approachingGalaxy": "飞向宇宙", "galacticDoge": "宇宙 Doge", "spottedLife": "已发现新生命" }, "feed": { "yourFeed": "您的推送" } } } ================================================ FILE: kibbeh/public/locales/zh-TW/translation.json ================================================ { "common": { "loadMore": "載入更多", "loading": "載入中...", "noUsersFound": "沒有找到任何用戶", "ok": "好", "yes": "是", "no": "否", "cancel": "取消", "save": "儲存", "edit": "編輯", "delete": "刪除", "joinRoom": "加入房間", "copyLink": "複製連結", "copied": "已複製", "formattedIntlDate": "{{date, intlDate}}", "formattedIntlTime": "{{time, intlTime}}", "requestPermissions": "請注意,在沒有存取權限下DogeHouse可能會出現運作異常", "copy": "Copy", "error": "Error" }, "header": { "_comment": "Main Header UI Internationalization Strings", "title": "DogeHouse", "mutedTitle": "已靜音 | DogeHouse", "deafenedTitle": "已拒聽 | DogeHouse", "dashboard": "儀錶版", "connectionTaken": "Connection Taken" }, "footer": { "_comment": "Main Footer UI Internationalization Strings", "link_1": "起源故事", "link_2": "Discord", "link_3": "回報Bug" }, "pages": { "_comment": "Respective Page UI Internationalization Strings", "admin": { "ban": "禁言", "userStaffandContrib": "User Staff & Contributions", "staff": "Staff: ", "contributions": "Contributions", "username": "Username", "usrStaff": "User Staff", "usrContributions": "User Contributions", "reason": "reason", "usernamePlaceholder": "username to perform actions on" }, "followingOnlineList": { "listHeader": "你追蹤的且不在私人房間內的使用者", "currentRoom": "目前的房間:", "startPrivateRoom": "開啟私人房間", "title": "People" }, "followList": { "followHim": "追蹤", "followingHim": "已追蹤", "title": "People", "followingNone": "Not following anyone", "noFollowers": "No followers" }, "home": { "createRoom": "新增房間", "refresh": "重新整理", "editRoom": "房間設定", "desktopAlert": "下載DogeHouse桌上版吧!" }, "inviteList": { "roomGone": "房間已被删除,請回到前一頁", "shareRoomLink": "在房間分享連結", "inviteFollowers": "你可以邀請你在線上的追蹤者:", "whenFollowersOnline": "當你的追蹤者在線上,他們會顯示在這裡" }, "login": { "headerText": "把語音對話帶上月球 🚀", "featureText_1": "暗黑模式", "featureText_2": "開放註冊", "featureText_3": "跨平台支援", "featureText_4": "開源", "featureText_5": "文字聊天", "featureText_6": "Powered by Doge", "loginGithub": "以GitHub登入", "loginTwitter": "以Twitter登入", "createTestUser": "建立測試使用者", "loginDiscord": "以Discord登入" }, "myProfile": { "logout": "登出", "probablyLoading": "可能在讀取中...", "voiceSettings": "音量設定", "soundSettings": "聲音設定", "deleteAccount": "刪除帳號", "overlaySettings": "介面設定", "couldNotFindUser": "很抱歉,我們找不到這名用戶", "privacySettings": "Privacy settings" }, "notFound": { "whoopsError": "噢!這一頁不見了‧", "goHomeMessage": "不用擔心,你可以", "goHomeLinkText": "回到主頁面‧" }, "room": { "speakers": "講者", "requestingToSpeak": "要求發言", "listeners": "聽眾", "allowAll": "允許所有", "allowAllConfirm": "你確定嗎? 這將會允許所有 {{count}} 發出請求的用戶發言" }, "searchUser": { "search": "搜尋..." }, "soundEffectSettings": { "header": "聲音", "title": "聲音設定", "playSound": "Play Sound" }, "viewUser": { "editProfile": "編輯個人主頁", "followsYou": "正在追蹤你", "followers": "追蹤者們", "following": "你正在追蹤", "followHim": "追蹤", "followingHim": "已追蹤", "copyProfileUrl": "複製連結", "urlCopied": "連結已被複製簿被", "unfollow": "取消追蹤", "about": "關於", "bot": "Bot", "profileTabs": { "about": "About", "rooms": "Rooms", "scheduled": "Scheduled", "recorded": "Recorded", "clips": "Clips", "admin": "Admin" }, "block": "Block", "unblock": "Unblock", "sendDM": "Send DM", "aboutSuffix": "", "errors": { "blocked": "This user has blocked you.", "default": "Whoops! We couldn't load this user." } }, "voiceSettings": { "header": "語音設定", "mic": "麥克風:", "permissionError": "沒有找到麥克風,請確認有插入或者要允許本網站使用麥克風的權限‧", "refresh": "更新麥克風列表", "volume": "音量:", "title": "Voice Settings" }, "overlaySettings": { "input": { "errorMsg": "無效的 app 標題 ", "label": "輸入 App 標題" }, "header": "Overlay Settings" }, "download": { "starting": "正在下載 ...", "failed": "自動下載失敗,請稍後再試", "visit_gh": "Visit Github Releases", "prompt": "點擊以下按鈕開始下載", "download_now": "現在就下載", "download_for": "Download for %platform% (%ext%)" }, "privacySettings": { "title": "Privacy Settings", "header": "Privacy Settings", "whispers": { "label": "Whispers", "on": "On", "off": "Off" } }, "botEdit": { "yourBots": "Your Bots", "bots": "Bots", "title": "Bot Information", "apiKey": "ApiKey", "regenerate": "Regenerate", "reveal": "Click to reveal ApiKey" } }, "components": { "_comment": "Component UI Internationalization Strings", "avatar": {}, "backBar": {}, "blockedFromRoomUsers": { "header": "被禁言的使用者", "unban": "解禁", "noBans": "沒有人被禁過" }, "bottomVoiceControl": { "leaveCurrentRoomBtn": "離開房間", "confirmLeaveRoom": "確定離開嗎?", "leave": "離開", "inviteUsersToRoomBtn": "邀請使用者進入房間", "invite": "邀請", "toggleMuteMicBtn": "切換麥克風静音", "mute": "麥克風靜音", "unmute": "取消麥克風靜音", "makeRoomPublicBtn": "把房間設定為公開", "settings": "設定", "speaker": "講者", "listener": "聽眾", "chat": "聊天框", "toggleDeafMicBtn": "切換拒聽", "deafen": "拒聽", "undeafen": "取消拒聽" }, "deviceNotSupported": { "notSupported": "目前我們還未支援你的裝置,你可以到", "linkText": " GitHub 建立 issue.", "addSupport": " 而我會試著支援你的裝置‧" }, "inviteButton": { "invited": "已被邀請", "inviteToRoom": "邀請到房間" }, "micPermissionBanner": { "permissionDenied": "麥克風使用權被拒絕(可能需要更改設定並且重新整理頁面)", "dismiss": "取消", "tryAgain": "再試一次" }, "keyboardShortcuts": { "setKeybind": "設定按鍵組合", "listening": "請輸入按鍵", "toggleMuteKeybind": "觸發靜音的按鍵組合", "togglePushToTalkKeybind": "觸發發言的按鍵組合", "toggleOverlayKeybind": "toggle overlay keybind", "toggleDeafKeybind": "Toggle deafen keybind" }, "userVolumeSlider": { "noAudioMessage": "沒有聲音" }, "addToCalendar": { "add": "加到行事曆" }, "wsKilled": { "description": "Websocket 已從 server 斷線,這通常發生在你於另一個分頁開啟本網站‧", "reconnect": "重新連線" }, "modals": { "createRoomModal": { "public": "公開", "private": "私人", "roomName": "房間名稱", "roomDescription": "房間敘述", "descriptionError": "最大長度為 500 字元", "nameError": "名稱長度只能在 2 到 60 字元", "subtitle": "填寫以下資料以開設房間" }, "invitedToJoinRoomModal": { "newRoomCreated": "新房間被建立", "roomInviteFrom": "邀请者:", "justStarted": "才剛開始", "likeToJoin": ",你要加入嗎?", "inviteReceived": "你被邀请到" }, "editProfileModal": { "usernameTaken": "用户名已被使用", "avatarUrlError": "圖片無效", "avatarUrlLabel": "Github/Twitter/Discord 頭像 URL", "displayNameError": "長度為 2 到 50 字元", "displayNameLabel": "顯示名稱", "usernameError": "長度要在 4 到 15 字元之内,只可輸入英文字母、數字與下劃線 _", "usernameLabel": "用户名", "bioError": "最大長度為 160 字元", "bioLabel": "個人簡介", "bannerUrlLabel": "Twitter 橫額連結" }, "profileModal": { "blockUserConfirm": "你確定把此人加入黑名單?(他就無法加入你所建立的任何房間)", "blockUser": "加入黑名單", "makeMod": "設定為管理員", "unmod": "取消管理員權限", "addAsSpeaker": "加到講者", "moveToListener": "移到聽眾", "banFromChat": "禁止此人使用文字聊天", "banFromRoom": "踢出房間", "goBackToListener": "回到聽眾", "deleteMessage": "删除此訊息", "makeRoomCreator": "設定為房間主人", "unBanFromChat": "解禁用戶使用文字聊天", "banIPFromRoom": "Ban IP from Room" }, "roomSettingsModal": { "requirePermission": "需要許可才能發言", "makePublic": "把房間設定為公開", "makePrivate": "把房間設定為私人", "renamePublic": "重設公開房間名字", "renamePrivate": "重設私人房間名字", "chatDisabled": "disable chat", "chatCooldown": "Chat Cooldown (milliseconds)", "chat": { "label": "Chat", "enabled": "Enabled", "disabled": "Disabled", "followerOnly": "Follower Only" } }, "createBotModal": { "usernameTaken": "Username is taken", "subtitle": "Please fill the details below to create your bot", "title": "Create Bot" } }, "followingOnline": { "people": "其他人", "online": "上線", "noOnline": "你有0個朋友", "showMore": "顯示更多" }, "upcomingRoomsCard": { "upcomingRooms": "即將到來的房間", "exploreMoreRooms": "搜尋更多房間" }, "search": { "placeholder": "搜尋房間,用戶及種類", "placeholderShort": "搜尋" }, "settingsDropdown": { "profile": "個人檔案", "language": "語言", "reportABug": "回報漏洞", "useOldVersion": "使用舊版本", "logOut": { "button": "登出", "modalSubtitle": "你確定要登出嗎?" }, "debugAudio": { "debugAudio": "除錯音頻", "stopDebugger": "停止除錯" }, "downloadApp": "Download App", "developer": "Developer Settings" }, "userBadges": { "dhStaff": "DogeHouse Staff", "dhContributor": "DogeHouse Contributor" }, "messagesDropdown": { "title": "Messages", "showMore": "Show More", "noMessages": "No new messages" } }, "modules": { "_comment": "Modules UI Internationalization Strings", "scheduledRooms": { "title": "預排的房間", "noneFound": "沒有找到預排的房間", "allRooms": "所有預排的房間", "myRooms": "我預排的房間", "scheduleRoomHeader": "預排房間", "startRoom": "開始房間", "modal": { "needsFuture": "需要一個在未來的時間", "roomName": "房間名稱", "minLength": "最短長度為 2", "roomDescription": "描述" }, "tommorow": "明天", "today": "今天", "deleteModal": { "areYouSure": "你確定要刪除這間已排程的房間嗎?" } }, "roomChat": { "title": "房間", "emotesSoon": "[將增加表情符號]", "bannedAlert": "你被禁言了", "waitAlert": "你需要等一秒鐘才能發出下一則訊息", "search": "搜尋", "searchResults": "搜尋结果", "recent": "最近的", "sendMessage": "發送訊息", "whisper": "密語", "welcomeMessage": "歡迎來到房間!", "roomDescription": "房間簡介", "disabled": "room chat has been disabled", "messageDeletion": { "message": "message", "retracted": "retracted", "deleted": "deleted" } }, "roomStatus": { "fuelingRocket": "火箭正在加油", "takingOff": "準備起飛", "inSpace": "在太空", "approachingMoon": "靠近月球中", "lunarDoge": "月球上的狗狗", "approachingSun": "靠近太陽中", "solarDoge": "太陽系上的狗狗", "approachingGalaxy": "靠近銀河系中", "galacticDoge": "銀河上的狗狗", "spottedLife": "發現星球上有生命跡象" }, "feed": { "yourFeed": "Your Feed" } } } ================================================ FILE: kibbeh/public/manifest.json ================================================ { "name": "DogeHouse", "short_name": "DogeHouse is taking voice conversations to the moon 🚀", "start_url": "/dash", "display": "minimal-ui", "background_color": "#0b0e11", "theme_color": "#fd4d4d", "orientation": "portrait-primary", "icons": [ { "src": "/img/doge.png", "type": "image/png", "sizes": "200x200" }, { "src": "/img/doge512.png", "type": "image/png", "sizes": "512x512" } ], "splash_pages": null } ================================================ FILE: kibbeh/public/privacy-policy.html ================================================
PRIVACY NOTICE

Last updated February 17, 2021



Thank you for choosing to be part of our community at DogeHouse ("Company", "we", "us", "our"). We are committed to protecting your personal information and your right to privacy. If you have any questions or concerns about this privacy notice, or our practices with regards to your personal information, please contact us at benawadapps@gmail.com.

When you visit our website https://dogehouse.tv (the "Website"), and more generally, use any of our services (the "Services", which include the Website), we appreciate that you are trusting us with your personal information. We take your privacy very seriously. In this privacy notice, we seek to explain to you in the clearest way possible what information we collect, how we use it and what rights you have in relation to it. We hope you take some time to read through it carefully, as it is important. If there are any terms in this privacy notice that you do not agree with, please discontinue use of our Services immediately.

This privacy notice applies to all information collected through our Services (which, as described above, includes our Website), as well as, any related services, sales, marketing or events.

Please read this privacy notice carefully as it will help you understand what we do with the information that we collect.

TABLE OF CONTENTS


1. WHAT INFORMATION DO WE COLLECT?

Personal information you disclose to us

In Short:  We collect personal information that you provide to us.

We collect personal information that you voluntarily provide to us when you register on the Website, express an interest in obtaining information about us or our products and Services, when you participate in activities on the Website (such as by posting messages in our online forums or entering competitions, contests or giveaways) or otherwise when you contact us.

The personal information that we collect depends on the context of your interactions with us and the Website, the choices you make and the products and features you use. The personal information we collect may include the following:

Personal Information Provided by You. We collect email addressesusernamesand other similar information.

Social Media Login Data. We may provide you with the option to register with us using your existing social media account details, like your Facebook, Twitter or other social media account. If you choose to register in this way, we will collect the information described in the section called "HOW DO WE HANDLE YOUR SOCIAL LOGINS" below.

All personal information that you provide to us must be true, complete and accurate, and you must notify us of any changes to such personal information.

2. HOW DO WE USE YOUR INFORMATION?

In Short:  We process your information for purposes based on legitimate business interests, the fulfillment of our contract with you, compliance with our legal obligations, and/or your consent.

We use personal information collected via our Website for a variety of business purposes described below. We process your personal information for these purposes in reliance on our legitimate business interests, in order to enter into or perform a contract with you, with your consent, and/or for compliance with our legal obligations. We indicate the specific processing grounds we rely on next to each purpose listed below.

We use the information we collect or receive:
  • To facilitate account creation and logon process. If you choose to link your account with us to a third-party account (such as your Google or Facebook account), we use the information you allowed us to collect from those third parties to facilitate account creation and logon process for the performance of the contract. See the section below headed "HOW DO WE HANDLE YOUR SOCIAL LOGINS" for further information.
  • To post testimonials. We post testimonials on our Website that may contain personal information. Prior to posting a testimonial, we will obtain your consent to use your name and the content of the testimonial. If you wish to update, or delete your testimonial, please contact us at benawadapps@gmail.com and be sure to include your name, testimonial location, and contact information.
  • Request feedback. We may use your information to request feedback and to contact you about your use of our Website.
  • To enable user-to-user communications. We may use your information in order to enable user-to-user communications with each user's consent.
  • To manage user accounts. We may use your information for the purposes of managing our account and keeping it in working order.


3. WILL YOUR INFORMATION BE SHARED WITH ANYONE?

In Short:  We only share information with your consent, to comply with laws, to provide you with services, to protect your rights, or to fulfill business obligations.

We may process or share your data that we hold based on the following legal basis:
  • Consent: We may process your data if you have given us specific consent to use your personal information for a specific purpose.
  • Legitimate Interests: We may process your data when it is reasonably necessary to achieve our legitimate business interests.
  • Performance of a Contract: Where we have entered into a contract with you, we may process your personal information to fulfill the terms of our contract.
  • Legal Obligations: We may disclose your information where we are legally required to do so in order to comply with applicable law, governmental requests, a judicial proceeding, court order, or legal process, such as in response to a court order or a subpoena (including in response to public authorities to meet national security or law enforcement requirements).
  • Vital Interests: We may disclose your information where we believe it is necessary to investigate, prevent, or take action regarding potential violations of our policies, suspected fraud, situations involving potential threats to the safety of any person and illegal activities, or as evidence in litigation in which we are involved.
More specifically, we may need to process your data or share your personal information in the following situations:
  • Business Transfers. We may share or transfer your information in connection with, or during negotiations of, any merger, sale of company assets, financing, or acquisition of all or a portion of our business to another company.

4. HOW DO WE HANDLE YOUR SOCIAL LOGINS?     

In Short:  If you choose to register or log in to our services using a social media account, we may have access to certain information about you.

Our Website offers you the ability to register and log in using your third-party social media account details (like your Facebook or Twitter logins). Where you choose to do this, we will receive certain profile information about you from your social media provider. The profile information we receive may vary depending on the social media provider concerned, but will often include your name, email address, friends list, profile picture as well as other information you choose to make public on such social media platform.

We will use the information we receive only for the purposes that are described in this privacy notice or that are otherwise made clear to you on the relevant Website. Please note that we do not control, and are not responsible for, other uses of your personal information by your third-party social media provider. We recommend that you review their privacy notice to understand how they collect, use and share your personal information, and how you can set your privacy preferences on their sites and apps.

5. HOW LONG DO WE KEEP YOUR INFORMATION?

In Short:  We keep your information for as long as necessary to fulfill the purposes outlined in this privacy notice unless otherwise required by law.

We will only keep your personal information for as long as it is necessary for the purposes set out in this privacy notice, unless a longer retention period is required or permitted by law (such as tax, accounting or other legal requirements). No purpose in this notice will require us keeping your personal information for longer than the period of time in which users have an account with us.

When we have no ongoing legitimate business need to process your personal information, we will either delete or anonymize such information, or, if this is not possible (for example, because your personal information has been stored in backup archives), then we will securely store your personal information and isolate it from any further processing until deletion is possible.

6. HOW DO WE KEEP YOUR INFORMATION SAFE?

In Short:  We aim to protect your personal information through a system of organizational and technical security measures.

We have implemented appropriate technical and organizational security measures designed to protect the security of any personal information we process. However, despite our safeguards and efforts to secure your information, no electronic transmission over the Internet or information storage technology can be guaranteed to be 100% secure, so we cannot promise or guarantee that hackers, cybercriminals, or other unauthorized third parties will not be able to defeat our security, and improperly collect, access, steal, or modify your information. Although we will do our best to protect your personal information, transmission of personal information to and from our Website is at your own risk. You should only access the Website within a secure environment.

7. WHAT ARE YOUR PRIVACY RIGHTS?

In Short:  In some regions, such as the European Economic Area, you have rights that allow you greater access to and control over your personal information. You may review, change, or terminate your account at any time.

In some regions (like the European Economic Area), you have certain rights under applicable data protection laws. These may include the right (i) to request access and obtain a copy of your personal information, (ii) to request rectification or erasure; (iii) to restrict the processing of your personal information; and (iv) if applicable, to data portability. In certain circumstances, you may also have the right to object to the processing of your personal information. To make such a request, please use the contact details provided below. We will consider and act upon any request in accordance with applicable data protection laws.

If we are relying on your consent to process your personal information, you have the right to withdraw your consent at any time. Please note however that this will not affect the lawfulness of the processing before its withdrawal, nor will it affect the processing of your personal information conducted in reliance on lawful processing grounds other than consent.
 
If you are a resident in the European Economic Area and you believe we are unlawfully processing your personal information, you also have the right to complain to your local data protection supervisory authority. You can find their contact details here: http://ec.europa.eu/justice/data-protection/bodies/authorities/index_en.htm.

If you are a resident in Switzerland, the contact details for the data protection authorities are available here: https://www.edoeb.admin.ch/edoeb/en/home.html.

If you have questions or comments about your privacy rights, you may email us at benawadapps@gmail.com.

Account Information

If you would at any time like to review or change the information in your account or terminate your account, you can:
  • Contact us using the contact information provided.
Upon your request to terminate your account, we will deactivate or delete your account and information from our active databases. However, we may retain some information in our files to prevent fraud, troubleshoot problems, assist with any investigations, enforce our Terms of Use and/or comply with applicable legal requirements.

Opting out of email marketing: You can unsubscribe from our marketing email list at any time by clicking on the unsubscribe link in the emails that we send or by contacting us using the details provided below. You will then be removed from the marketing email list — however, we may still communicate with you, for example to send you service-related emails that are necessary for the administration and use of your account, to respond to service requests, or for other non-marketing purposes. To otherwise opt-out, you may:
  • Contact us using the contact information provided.

8. CONTROLS FOR DO-NOT-TRACK FEATURES

Most web browsers and some mobile operating systems and mobile applications include a Do-Not-Track ("DNT") feature or setting you can activate to signal your privacy preference not to have data about your online browsing activities monitored and collected. At this stage no uniform technology standard for recognizing and implementing DNT signals has been finalized. As such, we do not currently respond to DNT browser signals or any other mechanism that automatically communicates your choice not to be tracked online. If a standard for online tracking is adopted that we must follow in the future, we will inform you about that practice in a revised version of this privacy notice. 

9. DO CALIFORNIA RESIDENTS HAVE SPECIFIC PRIVACY RIGHTS?

In Short:  Yes, if you are a resident of California, you are granted specific rights regarding access to your personal information.

California Civil Code Section 1798.83, also known as the "Shine The Light" law, permits our users who are California residents to request and obtain from us, once a year and free of charge, information about categories of personal information (if any) we disclosed to third parties for direct marketing purposes and the names and addresses of all third parties with which we shared personal information in the immediately preceding calendar year. If you are a California resident and would like to make such a request, please submit your request in writing to us using the contact information provided below.

If you are under 18 years of age, reside in California, and have a registered account with the Website, you have the right to request removal of unwanted data that you publicly post on the Website. To request removal of such data, please contact us using the contact information provided below, and include the email address associated with your account and a statement that you reside in California. We will make sure the data is not publicly displayed on the Website, but please be aware that the data may not be completely or comprehensively removed from all our systems (e.g. backups, etc.).

CCPA Privacy Notice

The California Code of Regulations defines a "resident" as:

(1) every individual who is in the State of California for other than a temporary or transitory purpose and
(2) every individual who is domiciled in the State of California who is outside the State of California for a temporary or transitory purpose

All other individuals are defined as "non-residents."

If this definition of "resident" applies to you, we must adhere to certain rights and obligations regarding your personal information.

What categories of personal information do we collect?

We have collected the following categories of personal information in the past twelve (12) months:


Category


Examples


Collected

A. Identifiers
Contact details, such as real name, alias, postal address, telephone or mobile contact number, unique personal identifier, online identifier, Internet Protocol address, email address and account name

YES

B. Personal information categories listed in the California Customer Records statute
Name, contact information, education, employment, employment history and financial information

YES

C. Protected classification characteristics under California or federal law
Gender and date of birth

NO

D. Commercial information
Transaction information, purchase history, financial details and payment information

NO

E. Biometric information
Fingerprints and voiceprints

NO

F. Internet or other similar network activity
Browsing history, search history, online behavior, interest data, and interactions with our and other websites, applications, systems and advertisements

NO

G. Geolocation data
Device location

NO

H. Audio, electronic, visual, thermal, olfactory, or similar information
Images and audio, video or call recordings created in connection with our business activities

YES
I. Professional or employment-related information
Business contact details in order to provide you our services at a business level, job title as well as work history and professional qualifications if you apply for a job with us

NO
J. Education Information
Student records and directory information

NO
K. Inferences drawn from other personal information
Inferences drawn from any of the collected personal information listed above to create a profile or summary about, for example, an individual’s preferences and characteristics

NO

We may also collect other personal information outside of these categories instances where you interact with us in-person, online, or by phone or mail in the context of:
  • Receiving help through our customer support channels;
  • Participation in customer surveys or contests; and
  • Facilitation in the delivery of our Services and to respond to your inquiries.
How do we use and share your personal information?

More information about our data collection and sharing practices can be found in this privacy notice.

You may contact us by email at benawadapps@gmail.com, or by referring to the contact details at the bottom of this document.

If you are using an authorized agent to exercise your right to opt-out we may deny a request if the authorized agent does not submit proof that they have been validly authorized to act on your behalf.

Will your information be shared with anyone else?

We may disclose your personal information with our service providers pursuant to a written contract between us and each service provider. Each service provider is a for-profit entity that processes the information on our behalf.

We may use your personal information for our own business purposes, such as for undertaking internal research for technological development and demonstration. This is not considered to be "selling" of your personal data.

DogeHouse has not disclosed or sold any personal information to third parties for a business or commercial purpose in the preceding 12 months. DogeHouse will not sell personal information in the future belonging to website visitors, users and other consumers.

Your rights with respect to your personal data

Right to request deletion of the data - Request to delete

You can ask for the deletion of your personal information. If you ask us to delete your personal information, we will respect your request and delete your personal information, subject to certain exceptions provided by law, such as (but not limited to) the exercise by another consumer of his or her right to free speech, our compliance requirements resulting from a legal obligation or any processing that may be required to protect against illegal activities.

Right to be informed - Request to know

Depending on the circumstances, you have a right to know:
  • whether we collect and use your personal information;
  • the categories of personal information that we collect;
  • the purposes for which the collected personal information is used;
  • whether we sell your personal information to third parties;
  • the categories of personal information that we sold or disclosed for a business purpose;
  • the categories of third parties to whom the personal information was sold or disclosed for a business purpose; and
  • the business or commercial purpose for collecting or selling personal information.
In accordance with applicable law, we are not obligated to provide or delete consumer information that is de-identified in response to a consumer request or to re-identify individual data to verify a consumer request.

Right to Non-Discrimination for the Exercise of a Consumer’s Privacy Rights

We will not discriminate against you if you exercise your privacy rights.

Verification process

Upon receiving your request, we will need to verify your identity to determine you are the same person about whom we have the information in our system. These verification efforts require us to ask you to provide information so that we can match it with information you have previously provided us. For instance, depending on the type of request you submit, we may ask you to provide certain information so that we can match the information you provide with the information we already have on file, or we may contact you through a communication method (e.g. phone or email) that you have previously provided to us. We may also use other verification methods as the circumstances dictate.

We will only use personal information provided in your request to verify your identity or authority to make the request. To the extent possible, we will avoid requesting additional information from you for the purposes of verification. If, however, we cannot verify your identity from the information already maintained by us, we may request that you provide additional information for the purposes of verifying your identity, and for security or fraud-prevention purposes. We will delete such additionally provided information as soon as we finish verifying you.

Other privacy rights
  • you may object to the processing of your personal data
  • you may request correction of your personal data if it is incorrect or no longer relevant, or ask to restrict the processing of the data
  • you can designate an authorized agent to make a request under the CCPA on your behalf. We may deny a request from an authorized agent that does not submit proof that they have been validly authorized to act on your behalf in accordance with the CCPA.
  • you may request to opt-out from future selling of your personal information to third parties. Upon receiving a request to opt-out, we will act upon the request as soon as feasibly possible, but no later than 15 days from the date of the request submission.
To exercise these rights, you can contact us by email at benawadapps@gmail.com, or by referring to the contact details at the bottom of this document. If you have a complaint about how we handle your data, we would like to hear from you.

10. DO WE MAKE UPDATES TO THIS NOTICE?     

In Short:  Yes, we will update this notice as necessary to stay compliant with relevant laws.

We may update this privacy notice from time to time. The updated version will be indicated by an updated "Revised" date and the updated version will be effective as soon as it is accessible. If we make material changes to this privacy notice, we may notify you either by prominently posting a notice of such changes or by directly sending you a notification. We encourage you to review this privacy notice frequently to be informed of how we are protecting your information.

11. HOW CAN YOU CONTACT US ABOUT THIS NOTICE?     

If you have questions or comments about this notice, you may email us at benawadapps@gmail.com or by post to:

DogeHouse
6705 West Highway 290
Suite 50230
Austin, TX 78735
United States

12. HOW CAN YOU REVIEW, UPDATE, OR DELETE THE DATA WE COLLECT FROM YOU?     

Based on the applicable laws of your country, you may have the right to request access to the personal information we collect from you, change that information, or delete it in some circumstances. To request to review, update, or delete your personal information, please visit: https://dogehouse.tv. We will respond to your request within 30 days.
================================================ FILE: kibbeh/public/terms.html ================================================
TERMS OF USE

Last updated February 17, 2021



AGREEMENT TO TERMS

These Terms of Use constitute a legally binding agreement made between you, whether personally or on behalf of an entity (“you”) and DogeHouse ("Company", “we”, “us”, or “our”), concerning your access to and use of the https://dogehouse.tv website as well as any other media form, media channel, mobile website or mobile application related, linked, or otherwise connected thereto (collectively, the “Site”). You agree that by accessing the Site, you have read, understood, and agreed to be bound by all of these Terms of Use. IF YOU DO NOT AGREE WITH ALL OF THESE TERMS OF USE, THEN YOU ARE EXPRESSLY PROHIBITED FROM USING THE SITE AND YOU MUST DISCONTINUE USE IMMEDIATELY.

Supplemental terms and conditions or documents that may be posted on the Site from time to time are hereby expressly incorporated herein by reference. We reserve the right, in our sole discretion, to make changes or modifications to these Terms of Use at any time and for any reason. We will alert you about any changes by updating the “Last updated” date of these Terms of Use, and you waive any right to receive specific notice of each such change. It is your responsibility to periodically review these Terms of Use to stay informed of updates. You will be subject to, and will be deemed to have been made aware of and to have accepted, the changes in any revised Terms of Use by your continued use of the Site after the date such revised Terms of Use are posted.

The information provided on the Site is not intended for distribution to or use by any person or entity in any jurisdiction or country where such distribution or use would be contrary to law or regulation or which would subject us to any registration requirement within such jurisdiction or country. Accordingly, those persons who choose to access the Site from other locations do so on their own initiative and are solely responsible for compliance with local laws, if and to the extent local laws are applicable.

The Site is intended for users who are at least 13 years of age. All users who are minors in the jurisdiction in which they reside (generally under the age of 18) must have the permission of, and be directly supervised by, their parent or guardian to use the Site. If you are a minor, you must have your parent or guardian read and agree to these Terms of Use prior to you using the Site. 


INTELLECTUAL PROPERTY RIGHTS

Unless otherwise indicated, the Site is our proprietary property and all source code, databases, functionality, software, website designs, audio, video, text, photographs, and graphics on the Site (collectively, the “Content”) and the trademarks, service marks, and logos contained therein (the “Marks”) are owned or controlled by us or licensed to us, and are protected by copyright and trademark laws and various other intellectual property rights and unfair competition laws of the United States, international copyright laws, and international conventions. The Content and the Marks are provided on the Site “AS IS” for your information and personal use only. Except as expressly provided in these Terms of Use, no part of the Site and no Content or Marks may be copied, reproduced, aggregated, republished, uploaded, posted, publicly displayed, encoded, translated, transmitted, distributed, sold, licensed, or otherwise exploited for any commercial purpose whatsoever, without our express prior written permission.

Provided that you are eligible to use the Site, you are granted a limited license to access and use the Site and to download or print a copy of any portion of the Content to which you have properly gained access solely for your personal, non-commercial use. We reserve all rights not expressly granted to you in and to the Site, the Content and the Marks.


USER REPRESENTATIONS

By using the Site, you represent and warrant that: (1) all registration information you submit will be true, accurate, current, and complete; (2) you will maintain the accuracy of such information and promptly update such registration information as necessary; (3) you have the legal capacity and you agree to comply with these Terms of Use; (4) you are not under the age of 13; (5) you are not a minor in the jurisdiction in which you reside, or if a minor, you have received parental permission to use the Site; (6) you will not access the Site through automated or non-human means, whether through a bot, script, or otherwise; (7) you will not use the Site for any illegal or unauthorized purpose; and (8) your use of the Site will not violate any applicable law or regulation.

If you provide any information that is untrue, inaccurate, not current, or incomplete, we have the right to suspend or terminate your account and refuse any and all current or future use of the Site (or any portion thereof).


USER REGISTRATION

You may be required to register with the Site. You agree to keep your password confidential and will be responsible for all use of your account and password. We reserve the right to remove, reclaim, or change a username you select if we determine, in our sole discretion, that such username is inappropriate, obscene, or otherwise objectionable.


PROHIBITED ACTIVITIES

You may not access or use the Site for any purpose other than that for which we make the Site available. The Site may not be used in connection with any commercial endeavors except those that are specifically endorsed or approved by us.

As a user of the Site, you agree not to:

1Systematically retrieve data or other content from the Site to create or compile, directly or indirectly, a collection, compilation, database, or directory without written permission from us.
2. Trick, defraud, or mislead us and other users, especially in any attempt to learn sensitive account information such as user passwords.
3. Circumvent, disable, or otherwise interfere with security-related features of the Site, including features that prevent or restrict the use or copying of any Content or enforce limitations on the use of the Site and/or the Content contained therein.
4. Disparage, tarnish, or otherwise harm, in our opinion, us and/or the Site.
5. Use any information obtained from the Site in order to harass, abuse, or harm another person.
6. Make improper use of our support services or submit false reports of abuse or misconduct.
7. Use the Site in a manner inconsistent with any applicable laws or regulations.
8. Upload or transmit (or attempt to upload or to transmit) viruses, Trojan horses, or other material, including excessive use of capital letters and spamming (continuous posting of repetitive text), that interferes with any party’s uninterrupted use and enjoyment of the Site or modifies, impairs, disrupts, alters, or interferes with the use, features, functions, operation, or maintenance of the Site.
9. Upload or transmit (or attempt to upload or to transmit) any material that acts as a passive or active information collection or transmission mechanism, including without limitation, clear graphics interchange formats (“gifs”), 1×1 pixels, web bugs, cookies, or other similar devices (sometimes referred to as “spyware” or “passive collection mechanisms” or “pcms”).
10. Interfere with, disrupt, or create an undue burden on the Site or the networks or services connected to the Site.
11. Harass, annoy, intimidate, or threaten any of our employees or agents engaged in providing any portion of the Site to you.
12. Attempt to bypass any measures of the Site designed to prevent or restrict access to the Site, or any portion of the Site.
13. Use the Site as part of any effort to compete with us or otherwise use the Site and/or the Content for any revenue-generating endeavor or commercial enterprise.


USER GENERATED CONTRIBUTIONS 

The Site may invite you to chat, contribute to, or participate in blogs, message boards, online forums, and other functionality, and may provide you with the opportunity to create, submit, post, display, transmit, perform, publish, distribute, or broadcast content and materials to us or on the Site, including but not limited to text, writings, video, audio, photographs, graphics, comments, suggestions, or personal information or other material (collectively, "Contributions"). Contributions may be viewable by other users of the Site and through third-party websites. As such, any Contributions you transmit may be treated as non-confidential and non-proprietary. When you create or make available any Contributions, you thereby represent and warrant that:

1.  The creation, distribution, transmission, public display, or performance, and the accessing, downloading, or copying of your Contributions do not and will not infringe the proprietary rights, including but not limited to the copyright, patent, trademark, trade secret, or moral rights of any third party.
2.  You are the creator and owner of or have the necessary licenses, rights, consents, releases, and permissions to use and to authorize us, the Site, and other users of the Site to use your Contributions in any manner contemplated by the Site and these Terms of Use.
3.  You have the written consent, release, and/or permission of each and every identifiable individual person in your Contributions to use the name or likeness of each and every such identifiable individual person to enable inclusion and use of your Contributions in any manner contemplated by the Site and these Terms of Use.
4.  Your Contributions are not false, inaccurate, or misleading.
5.  Your Contributions are not unsolicited or unauthorized advertising, promotional materials, pyramid schemes, chain letters, spam, mass mailings, or other forms of solicitation.
6.  Your Contributions are not obscene, lewd, lascivious, filthy, violent, harassing, libelous, slanderous, or otherwise objectionable (as determined by us).
7.  Your Contributions do not ridicule, mock, disparage, intimidate, or abuse anyone.
8.  Your Contributions are not used to harass or threaten (in the legal sense of those terms) any other person and to promote violence against a specific person or class of people.
9.  Your Contributions do not violate any applicable law, regulation, or rule.
10.  Your Contributions do not violate the privacy or publicity rights of any third party.
11.  Your Contributions do not contain any material that solicits personal information from anyone under the age of 18 or exploits people under the age of 18 in a sexual or violent manner.
12.  Your Contributions do not violate any applicable law concerning child pornography, or otherwise intended to protect the health or well-being of minors.
13.  Your Contributions do not include any offensive comments that are connected to race, national origin, gender, sexual preference, or physical handicap.
14.  Your Contributions do not otherwise violate, or link to material that violates, any provision of these Terms of Use, or any applicable law or regulation.

Any use of the Site in violation of the foregoing violates these Terms of Use and may result in, among other things, termination or suspension of your rights to use the Site.


CONTRIBUTION LICENSE

By posting your Contributions to any part of the Site or making Contributions accessible to the Site by linking your account from the Site to any of your social networking accounts, you automatically grant, and you represent and warrant that you have the right to grant, to us an unrestricted, unlimited, irrevocable, perpetual, non-exclusive, transferable, royalty-free, fully-paid, worldwide right, and license to host, use, copy, reproduce, disclose, sell, resell, publish, broadcast, retitle, archive, store, cache, publicly perform, publicly display, reformat, translate, transmit, excerpt (in whole or in part), and distribute such Contributions (including, without limitation, your image and voice) for any purpose, commercial, advertising, or otherwise, and to prepare derivative works of, or incorporate into other works, such Contributions, and grant and authorize sublicenses of the foregoing. The use and distribution may occur in any media formats and through any media channels.

This license will apply to any form, media, or technology now known or hereafter developed, and includes our use of your name, company name, and franchise name, as applicable, and any of the trademarks, service marks, trade names, logos, and personal and commercial images you provide. You waive all moral rights in your Contributions, and you warrant that moral rights have not otherwise been asserted in your Contributions.

We do not assert any ownership over your Contributions. You retain full ownership of all of your Contributions and any intellectual property rights or other proprietary rights associated with your Contributions. We are not liable for any statements or representations in your Contributions provided by you in any area on the Site. You are solely responsible for your Contributions to the Site and you expressly agree to exonerate us from any and all responsibility and to refrain from any legal action against us regarding your Contributions.  

We have the right, in our sole and absolute discretion, (1) to edit, redact, or otherwise change any Contributions; (2) to re-categorize any Contributions to place them in more appropriate locations on the Site; and (3) to pre-screen or delete any Contributions at any time and for any reason, without notice. We have no obligation to monitor your Contributions.


GUIDELINES FOR REVIEWS

We may provide you areas on the Site to leave reviews or ratings. When posting a review, you must comply with the following criteria: (1) you should have firsthand experience with the person/entity being reviewed; (2) your reviews should not contain offensive profanity, or abusive, racist, offensive, or hate language; (3) your reviews should not contain discriminatory references based on religion, race, gender, national origin, age, marital status, sexual orientation, or disability; (4) your reviews should not contain references to illegal activity; (5) you should not be affiliated with competitors if posting negative reviews; (6) you should not make any conclusions as to the legality of conduct; (7) you may not post any false or misleading statements; and (8) you may not organize a campaign encouraging others to post reviews, whether positive or negative.

We may accept, reject, or remove reviews in our sole discretion. We have absolutely no obligation to screen reviews or to delete reviews, even if anyone considers reviews objectionable or inaccurate. Reviews are not endorsed by us, and do not necessarily represent our opinions or the views of any of our affiliates or partners. We do not assume liability for any review or for any claims, liabilities, or losses resulting from any review. By posting a review, you hereby grant to us a perpetual, non-exclusive, worldwide, royalty-free, fully-paid, assignable, and sublicensable right and license to reproduce, modify, translate, transmit by any means, display, perform, and/or distribute all content relating to reviews.


SOCIAL MEDIA

As part of the functionality of the Site, you may link your account with online accounts you have with third-party service providers (each such account, a “Third-Party Account”) by either: (1) providing your Third-Party Account login information through the Site; or (2) allowing us to access your Third-Party Account, as is permitted under the applicable terms and conditions that govern your use of each Third-Party Account. You represent and warrant that you are entitled to disclose your Third-Party Account login information to us and/or grant us access to your Third-Party Account, without breach by you of any of the terms and conditions that govern your use of the applicable Third-Party Account, and without obligating us to pay any fees or making us subject to any usage limitations imposed by the third-party service provider of the Third-Party Account. By granting us access to any Third-Party Accounts, you understand that (1) we may access, make available, and store (if applicable) any content that you have provided to and stored in your Third-Party Account (the “Social Network Content”) so that it is available on and through the Site via your account, including without limitation any friend lists and (2) we may submit to and receive from your Third-Party Account additional information to the extent you are notified when you link your account with the Third-Party Account. Depending on the Third-Party Accounts you choose and subject to the privacy settings that you have set in such Third-Party Accounts, personally identifiable information that you post to your Third-Party Accounts may be available on and through your account on the Site. Please note that if a Third-Party Account or associated service becomes unavailable or our access to such Third Party Account is terminated by the third-party service provider, then Social Network Content may no longer be available on and through the Site. You will have the ability to disable the connection between your account on the Site and your Third-Party Accounts at any time. PLEASE NOTE THAT YOUR RELATIONSHIP WITH THE THIRD-PARTY SERVICE PROVIDERS ASSOCIATED WITH YOUR THIRD-PARTY ACCOUNTS IS GOVERNED SOLELY BY YOUR AGREEMENT(S) WITH SUCH THIRD-PARTY SERVICE PROVIDERS. We make no effort to review any Social Network Content for any purpose, including but not limited to, for accuracy, legality, or non-infringement, and we are not responsible for any Social Network Content. You acknowledge and agree that we may access your email address book associated with a Third-Party Account and your contacts list stored on your mobile device or tablet computer solely for purposes of identifying and informing you of those contacts who have also registered to use the Site. You can deactivate the connection between the Site and your Third-Party Account by contacting us using the contact information below or through your account settings (if applicable). We will attempt to delete any information stored on our servers that was obtained through such Third-Party Account, except the username and profile picture that become associated with your account.


SUBMISSIONS

You acknowledge and agree that any questions, comments, suggestions, ideas, feedback, or other information regarding the Site ("Submissions") provided by you to us are non-confidential and shall become our sole property. We shall own exclusive rights, including all intellectual property rights, and shall be entitled to the unrestricted use and dissemination of these Submissions for any lawful purpose, commercial or otherwise, without acknowledgment or compensation to you. You hereby waive all moral rights to any such Submissions, and you hereby warrant that any such Submissions are original with you or that you have the right to submit such Submissions. You agree there shall be no recourse against us for any alleged or actual infringement or misappropriation of any proprietary right in your Submissions.


THIRD-PARTY WEBSITE AND CONTENT

The Site may contain (or you may be sent via the Site) links to other websites ("Third-Party Websites") as well as articles, photographs, text, graphics, pictures, designs, music, sound, video, information, applications, software, and other content or items belonging to or originating from third parties ("Third-Party Content"). Such Third-Party Websites and Third-Party Content are not investigated, monitored, or checked for accuracy, appropriateness, or completeness by us, and we are not responsible for any Third-Party Websites accessed through the Site or any Third-Party Content posted on, available through, or installed from the Site, including the content, accuracy, offensiveness, opinions, reliability, privacy practices, or other policies of or contained in the Third-Party Websites or the Third-Party Content. Inclusion of, linking to, or permitting the use or installation of any Third-Party Websites or any Third-Party Content does not imply approval or endorsement thereof by us. If you decide to leave the Site and access the Third-Party Websites or to use or install any Third-Party Content, you do so at your own risk, and you should be aware these Terms of Use no longer govern. You should review the applicable terms and policies, including privacy and data gathering practices, of any website to which you navigate from the Site or relating to any applications you use or install from the Site. Any purchases you make through Third-Party Websites will be through other websites and from other companies, and we take no responsibility whatsoever in relation to such purchases which are exclusively between you and the applicable third party. You agree and acknowledge that we do not endorse the products or services offered on Third-Party Websites and you shall hold us harmless from any harm caused by your purchase of such products or services. Additionally, you shall hold us harmless from any losses sustained by you or harm caused to you relating to or resulting in any way from any Third-Party Content or any contact with Third-Party Websites.


SITE MANAGEMENT

We reserve the right, but not the obligation, to: (1) monitor the Site for violations of these Terms of Use; (2) take appropriate legal action against anyone who, in our sole discretion, violates the law or these Terms of Use, including without limitation, reporting such user to law enforcement authorities; (3) in our sole discretion and without limitation, refuse, restrict access to, limit the availability of, or disable (to the extent technologically feasible) any of your Contributions or any portion thereof; (4) in our sole discretion and without limitation, notice, or liability, to remove from the Site or otherwise disable all files and content that are excessive in size or are in any way burdensome to our systems; and (5) otherwise manage the Site in a manner designed to protect our rights and property and to facilitate the proper functioning of the Site.


PRIVACY POLICY

We care about data privacy and security. Please review our Privacy Policy: https://dogehouse.tv/privacy-policyBy using the Site, you agree to be bound by our Privacy Policy, which is incorporated into these Terms of Use. Please be advised the Site is hosted in the United States. If you access the Site from any other region of the world with laws or other requirements governing personal data collection, use, or disclosure that differ from applicable laws in the United States, then through your continued use of the Site, you are transferring your data to the United States, and you agree to have your data transferred to and processed in the United States. Further, we do not knowingly accept, request, or solicit information from children or knowingly market to children. Therefore, in accordance with the U.S. Children’s Online Privacy Protection Act, if we receive actual knowledge that anyone under the age of 13 has provided personal information to us without the requisite and verifiable parental consent, we will delete that information from the Site as quickly as is reasonably practical.


COPYRIGHT INFRINGEMENTS

We respect the intellectual property rights of others. If you believe that any material available on or through the Site infringes upon any copyright you own or control, please immediately notify us using the contact information provided below (a “Notification”). A copy of your Notification will be sent to the person who posted or stored the material addressed in the Notification. Please be advised that pursuant to applicable law you may be held liable for damages if you make material misrepresentations in a Notification. Thus, if you are not sure that material located on or linked to by the Site infringes your copyright, you should consider first contacting an attorney.


TERM AND TERMINATION

These Terms of Use shall remain in full force and effect while you use the Site. WITHOUT LIMITING ANY OTHER PROVISION OF THESE TERMS OF USE, WE RESERVE THE RIGHT TO, IN OUR SOLE DISCRETION AND WITHOUT NOTICE OR LIABILITY, DENY ACCESS TO AND USE OF THE SITE (INCLUDING BLOCKING CERTAIN IP ADDRESSES), TO ANY PERSON FOR ANY REASON OR FOR NO REASON, INCLUDING WITHOUT LIMITATION FOR BREACH OF ANY REPRESENTATION, WARRANTY, OR COVENANT CONTAINED IN THESE TERMS OF USE OR OF ANY APPLICABLE LAW OR REGULATION. WE MAY TERMINATE YOUR USE OR PARTICIPATION IN THE SITE OR DELETE YOUR ACCOUNT AND ANY CONTENT OR INFORMATION THAT YOU POSTED AT ANY TIME, WITHOUT WARNING, IN OUR SOLE DISCRETION.

If we terminate or suspend your account for any reason, you are prohibited from registering and creating a new account under your name, a fake or borrowed name, or the name of any third party, even if you may be acting on behalf of the third party. In addition to terminating or suspending your account, we reserve the right to take appropriate legal action, including without limitation pursuing civil, criminal, and injunctive redress.


MODIFICATIONS AND INTERRUPTIONS

We reserve the right to change, modify, or remove the contents of the Site at any time or for any reason at our sole discretion without notice. However, we have no obligation to update any information on our Site. We also reserve the right to modify or discontinue all or part of the Site without notice at any time. We will not be liable to you or any third party for any modification, price change, suspension, or discontinuance of the Site.  

We cannot guarantee the Site will be available at all times. We may experience hardware, software, or other problems or need to perform maintenance related to the Site, resulting in interruptions, delays, or errors. We reserve the right to change, revise, update, suspend, discontinue, or otherwise modify the Site at any time or for any reason without notice to you. You agree that we have no liability whatsoever for any loss, damage, or inconvenience caused by your inability to access or use the Site during any downtime or discontinuance of the Site. Nothing in these Terms of Use will be construed to obligate us to maintain and support the Site or to supply any corrections, updates, or releases in connection therewith.


GOVERNING LAW

These Terms of Use and your use of the Site are governed by and construed in accordance with the laws of the State of Texas applicable to agreements made and to be entirely performed within the State of Texas, without regard to its conflict of law principles.


DISPUTE RESOLUTION

Binding Arbitration

Any dispute arising out of or in connection with this contract, including any question regarding its existence, validity or termination, shall be referred to and finally resolved by the International Commercial Arbitration Court under the European Arbitration Chamber (Belgium, Brussels, Avenue Louise, 146) according to the Rules of this ICAC, which, as a result of referring to it, is considered as the part of this clause. The number of arbitrators shall be __________. The seat, or legal place, of arbitration shall be __________. The language of the proceedings shall be __________. The governing law of the contract shall be the substantive law of __________.

Restrictions

The Parties agree that any arbitration shall be limited to the Dispute between the Parties individually. To the full extent permitted by law, (a) no arbitration shall be joined with any other proceeding; (b) there is no right or authority for any Dispute to be arbitrated on a class-action basis or to utilize class action procedures; and (c) there is no right or authority for any Dispute to be brought in a purported representative capacity on behalf of the general public or any other persons.

Exceptions to Arbitration

The Parties agree that the following Disputes are not subject to the above provisions concerning binding arbitration: (a) any Disputes seeking to enforce or protect, or concerning the validity of, any of the intellectual property rights of a Party; (b) any Dispute related to, or arising from, allegations of theft, piracy, invasion of privacy, or unauthorized use; and (c) any claim for injunctive relief. If this provision is found to be illegal or unenforceable, then neither Party will elect to arbitrate any Dispute falling within that portion of this provision found to be illegal or unenforceable and such Dispute shall be decided by a court of competent jurisdiction within the courts listed for jurisdiction above, and the Parties agree to submit to the personal jurisdiction of that court.


CORRECTIONS

There may be information on the Site that contains typographical errors, inaccuracies, or omissions, including descriptions, pricing, availability, and various other information. We reserve the right to correct any errors, inaccuracies, or omissions and to change or update the information on the Site at any time, without prior notice.


DISCLAIMER

THE SITE IS PROVIDED ON AN AS-IS AND AS-AVAILABLE BASIS. YOU AGREE THAT YOUR USE OF THE SITE AND OUR SERVICES WILL BE AT YOUR SOLE RISK. TO THE FULLEST EXTENT PERMITTED BY LAW, WE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, IN CONNECTION WITH THE SITE AND YOUR USE THEREOF, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. WE MAKE NO WARRANTIES OR REPRESENTATIONS ABOUT THE ACCURACY OR COMPLETENESS OF THE SITE’S CONTENT OR THE CONTENT OF ANY WEBSITES LINKED TO THE SITE AND WE WILL ASSUME NO LIABILITY OR RESPONSIBILITY FOR ANY (1) ERRORS, MISTAKES, OR INACCURACIES OF CONTENT AND MATERIALS, (2) PERSONAL INJURY OR PROPERTY DAMAGE, OF ANY NATURE WHATSOEVER, RESULTING FROM YOUR ACCESS TO AND USE OF THE SITE, (3) ANY UNAUTHORIZED ACCESS TO OR USE OF OUR SECURE SERVERS AND/OR ANY AND ALL PERSONAL INFORMATION AND/OR FINANCIAL INFORMATION STORED THEREIN, (4) ANY INTERRUPTION OR CESSATION OF TRANSMISSION TO OR FROM THE SITE, (5) ANY BUGS, VIRUSES, TROJAN HORSES, OR THE LIKE WHICH MAY BE TRANSMITTED TO OR THROUGH THE SITE BY ANY THIRD PARTY, AND/OR (6) ANY ERRORS OR OMISSIONS IN ANY CONTENT AND MATERIALS OR FOR ANY LOSS OR DAMAGE OF ANY KIND INCURRED AS A RESULT OF THE USE OF ANY CONTENT POSTED, TRANSMITTED, OR OTHERWISE MADE AVAILABLE VIA THE SITE. WE DO NOT WARRANT, ENDORSE, GUARANTEE, OR ASSUME RESPONSIBILITY FOR ANY PRODUCT OR SERVICE ADVERTISED OR OFFERED BY A THIRD PARTY THROUGH THE SITE, ANY HYPERLINKED WEBSITE, OR ANY WEBSITE OR MOBILE APPLICATION FEATURED IN ANY BANNER OR OTHER ADVERTISING, AND WE WILL NOT BE A PARTY TO OR IN ANY WAY BE RESPONSIBLE FOR MONITORING ANY TRANSACTION BETWEEN YOU AND ANY THIRD-PARTY PROVIDERS OF PRODUCTS OR SERVICES. AS WITH THE PURCHASE OF A PRODUCT OR SERVICE THROUGH ANY MEDIUM OR IN ANY ENVIRONMENT, YOU SHOULD USE YOUR BEST JUDGMENT AND EXERCISE CAUTION WHERE APPROPRIATE.


LIMITATIONS OF LIABILITY

IN NO EVENT WILL WE OR OUR DIRECTORS, EMPLOYEES, OR AGENTS BE LIABLE TO YOU OR ANY THIRD PARTY FOR ANY DIRECT, INDIRECT, CONSEQUENTIAL, EXEMPLARY, INCIDENTAL, SPECIAL, OR PUNITIVE DAMAGES, INCLUDING LOST PROFIT, LOST REVENUE, LOSS OF DATA, OR OTHER DAMAGES ARISING FROM YOUR USE OF THE SITE, EVEN IF WE HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. NOTWITHSTANDING ANYTHING TO THE CONTRARY CONTAINED HEREIN, OUR LIABILITY TO YOU FOR ANY CAUSE WHATSOEVER AND REGARDLESS OF THE FORM OF THE ACTION, WILL AT ALL TIMES BE LIMITED TO THE LESSER OF THE AMOUNT PAID, IF ANY, BY YOU TO US OR __________. CERTAIN US STATE LAWS AND INTERNATIONAL LAWS DO NOT ALLOW LIMITATIONS ON IMPLIED WARRANTIES OR THE EXCLUSION OR LIMITATION OF CERTAIN DAMAGES. IF THESE LAWS APPLY TO YOU, SOME OR ALL OF THE ABOVE DISCLAIMERS OR LIMITATIONS MAY NOT APPLY TO YOU, AND YOU MAY HAVE ADDITIONAL RIGHTS.


INDEMNIFICATION

You agree to defend, indemnify, and hold us harmless, including our subsidiaries, affiliates, and all of our respective officers, agents, partners, and employees, from and against any loss, damage, liability, claim, or demand, including reasonable attorneys’ fees and expenses, made by any third party due to or arising out of: (1) your Contributions; (2) use of the Site; (3) breach of these Terms of Use; (4) any breach of your representations and warranties set forth in these Terms of Use; (5) your violation of the rights of a third party, including but not limited to intellectual property rights; or (6) any overt harmful act toward any other user of the Site with whom you connected via the Site. Notwithstanding the foregoing, we reserve the right, at your expense, to assume the exclusive defense and control of any matter for which you are required to indemnify us, and you agree to cooperate, at your expense, with our defense of such claims. We will use reasonable efforts to notify you of any such claim, action, or proceeding which is subject to this indemnification upon becoming aware of it.


USER DATA

We will maintain certain data that you transmit to the Site for the purpose of managing the performance of the Site, as well as data relating to your use of the Site. Although we perform regular routine backups of data, you are solely responsible for all data that you transmit or that relates to any activity you have undertaken using the Site. You agree that we shall have no liability to you for any loss or corruption of any such data, and you hereby waive any right of action against us arising from any such loss or corruption of such data.


ELECTRONIC COMMUNICATIONS, TRANSACTIONS, AND SIGNATURES

Visiting the Site, sending us emails, and completing online forms constitute electronic communications. You consent to receive electronic communications, and you agree that all agreements, notices, disclosures, and other communications we provide to you electronically, via email and on the Site, satisfy any legal requirement that such communication be in writing. YOU HEREBY AGREE TO THE USE OF ELECTRONIC SIGNATURES, CONTRACTS, ORDERS, AND OTHER RECORDS, AND TO ELECTRONIC DELIVERY OF NOTICES, POLICIES, AND RECORDS OF TRANSACTIONS INITIATED OR COMPLETED BY US OR VIA THE SITE. You hereby waive any rights or requirements under any statutes, regulations, rules, ordinances, or other laws in any jurisdiction which require an original signature or delivery or retention of non-electronic records, or to payments or the granting of credits by any means other than electronic means. 


CALIFORNIA USERS AND RESIDENTS

If any complaint with us is not satisfactorily resolved, you can contact the Complaint Assistance Unit of the Division of Consumer Services of the California Department of Consumer Affairs in writing at 1625 North Market Blvd., Suite N 112, Sacramento, California 95834 or by telephone at (800) 952-5210 or (916) 445-1254.


MISCELLANEOUS

These Terms of Use and any policies or operating rules posted by us on the Site or in respect to the Site constitute the entire agreement and understanding between you and us. Our failure to exercise or enforce any right or provision of these Terms of Use shall not operate as a waiver of such right or provision. These Terms of Use operate to the fullest extent permissible by law. We may assign any or all of our rights and obligations to others at any time. We shall not be responsible or liable for any loss, damage, delay, or failure to act caused by any cause beyond our reasonable control. If any provision or part of a provision of these Terms of Use is determined to be unlawful, void, or unenforceable, that provision or part of the provision is deemed severable from these Terms of Use and does not affect the validity and enforceability of any remaining provisions. There is no joint venture, partnership, employment or agency relationship created between you and us as a result of these Terms of Use or use of the Site. You agree that these Terms of Use will not be construed against us by virtue of having drafted them. You hereby waive any and all defenses you may have based on the electronic form of these Terms of Use and the lack of signing by the parties hereto to execute these Terms of Use.


CONTACT US 

In order to resolve a complaint regarding the Site or to receive further information regarding use of the Site, please contact us at: 

DogeHouse
6705 West Highway 290
Austin, TX 78735
United States
Phone: __________
benawadapps@gmail.com

================================================ FILE: kibbeh/scripts/syncTranslations.ts ================================================ // @ts-ignore import config from "../.prettierrc.js"; import english from "../public/locales/en/translation.json"; import * as fs from "fs"; import { join } from "path"; import prettier from "prettier"; import { traverseTranslations } from "./traverseTranslations"; import { get, set } from "lodash"; const paths = traverseTranslations(); fs.readdirSync(join(__dirname, "../public/locales")).forEach((locale) => { if (locale === "en") { return; } const filename = join( __dirname, "../public/locales", locale, "translation.json" ); let data: any; try { data = JSON.parse(fs.readFileSync(filename, { encoding: "utf-8" })); } catch (err) { throw new Error(`${locale}: ${err.message}`); } paths.forEach((p) => { if (get(data, p, null) === null) { set(data, p, get(english, p)); } }); fs.writeFileSync( filename, prettier.format(JSON.stringify(data), { parser: "json", ...config, }) ); }); ================================================ FILE: kibbeh/scripts/traverseTranslations.ts ================================================ import translations from "../public/locales/en/translation.json"; const keys: string[] = []; type TranslationRecord = { [P in string]: string | TranslationRecord; }; const _traverseTranslations = (obj: TranslationRecord, path: string[]) => { Object.keys(obj).forEach((key) => { if (key.startsWith("_")) { return; } const objOrString = obj[key]; if (typeof objOrString === "string") { keys.push([...path, key].join(".")); } else { _traverseTranslations(objOrString, [...path, key]); } }); }; export const traverseTranslations = () => { _traverseTranslations(translations, []); return keys; }; ================================================ FILE: kibbeh/scripts/tsconfig.json ================================================ { "compilerOptions": { "target": "es6", "module": "commonjs", "lib": ["dom", "es6", "es2017", "esnext.asynciterable"], "sourceMap": true, "outDir": "./dist", "moduleResolution": "node", "removeComments": true, "noImplicitAny": true, "strictNullChecks": true, "strictFunctionTypes": true, "noImplicitThis": true, "noUnusedLocals": true, "noUnusedParameters": true, "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, "allowSyntheticDefaultImports": true, "esModuleInterop": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, "resolveJsonModule": true, "baseUrl": "." }, "exclude": ["node_modules"], "include": ["./*.ts"] } ================================================ FILE: kibbeh/src/form-fields/FieldSpacer.tsx ================================================ import React from "react"; interface FieldSpacerProps {} export const FieldSpacer: React.FC = ({}) => { return
; }; ================================================ FILE: kibbeh/src/form-fields/InputField.tsx ================================================ import { useField } from "formik"; import React from "react"; import { Input } from "../ui/Input"; import { InputErrorMsg } from "../ui/InputErrorMsg"; export const InputField: React.FC< React.DetailedHTMLProps< React.InputHTMLAttributes, HTMLInputElement > & { name: string; errorMsg?: string; label?: string; textarea?: boolean; altErrorMsg?: string; rows?: number; } > = ({ label, textarea, errorMsg, ref: _, className, ...props }) => { const [field, meta] = useField(props); return (
{label ? (
{label}
) : null} {meta.error && meta.touched ? (
{errorMsg || meta.error}
) : null}
); }; ================================================ FILE: kibbeh/src/global-stores/useAccountOverlay.ts ================================================ import create from "zustand"; import { combine } from "zustand/middleware"; export const useAccountOverlay = create( combine( { isOpen: false, }, (set) => ({ set, }) ) ); ================================================ FILE: kibbeh/src/global-stores/useAskForMicStore.ts ================================================ import create from "zustand"; import { combine } from "zustand/middleware"; export const useAskForMicStore = create( combine( { hasAsked: false, }, (set) => ({ set, }) ) ); ================================================ FILE: kibbeh/src/global-stores/useAudioTracks.ts ================================================ import create from "zustand"; import { combine } from "zustand/middleware"; export const useAudioTracks = create( combine( { tracks: [] as MediaStreamTrack[], }, (set) => ({ add: (track: MediaStreamTrack) => set((s) => ({ tracks: [...s.tracks, track] })), }) ) ); ================================================ FILE: kibbeh/src/global-stores/useCurrentRoomIdStore.ts ================================================ import create from "zustand"; import { combine } from "zustand/middleware"; import { useRoomChatStore } from "../modules/room/chat/useRoomChatStore"; type Fn = (currentRoomId: string | null) => string | null; export const useCurrentRoomIdStore = create( combine( { currentRoomId: null as string | null, }, (set, get) => ({ set, setCurrentRoomId: (currentRoomIdOrFn: string | null | Fn) => { const id = get().currentRoomId; const newId = typeof currentRoomIdOrFn === "function" ? currentRoomIdOrFn(id) : currentRoomIdOrFn; if (newId !== id) { useRoomChatStore.getState().reset(); } set({ currentRoomId: newId }); }, }) ) ); ================================================ FILE: kibbeh/src/global-stores/useDeafStore.ts ================================================ import create from "zustand"; import { combine } from "zustand/middleware"; import { useSoundEffectStore } from "../modules/sound-effects/useSoundEffectStore"; export const useDeafStore = create( combine( { deafened: false, }, (set) => ({ // don't call this directly unless you know what you are doing // use useSetDeaf hook intead setInternalDeaf: (deafened: boolean, playSound = true) => { // to prevent sound overlapping if (playSound) { useSoundEffectStore .getState() .playSoundEffect(deafened ? "deafen" : "undeafen"); } set({ deafened }); }, }) ) ); ================================================ FILE: kibbeh/src/global-stores/useDebugAudio.ts ================================================ import create from "zustand"; import { combine } from "zustand/middleware"; const key = "@debug-audio"; const getDefaultValue = () => { try { return localStorage.getItem(key) === "true"; } catch { return false; } }; export const useDebugAudioStore = create( combine( { debugAudio: getDefaultValue(), }, (set) => ({ setDebugAudio: (v: boolean) => { try { localStorage.setItem("debug", v ? "*" : ""); localStorage.setItem(key, "" + v); } catch {} set({ debugAudio: v }); }, }) ) ); ================================================ FILE: kibbeh/src/global-stores/useDownloadAlertStore.ts ================================================ import create from "zustand"; import { combine } from "zustand/middleware"; const downloadalertkey = "@baklava/showDownloadAlert"; const getDefaultValues = () => { try { const v = JSON.parse(localStorage.getItem(downloadalertkey) || "true"); return { shouldAlert: v, }; } catch { return { shouldAlert: true, }; } }; export const useDownloadAlertStore = create( combine(getDefaultValues(), (set) => ({ setData: (x: { shouldAlert: boolean }) => { try { localStorage.setItem(downloadalertkey, JSON.stringify(x.shouldAlert)); } catch {} set(x); }, })) ); ================================================ FILE: kibbeh/src/global-stores/useElectronMobileStore.ts ================================================ import isElectron from "is-electron"; import { useScreenType } from "../shared-hooks/useScreenType"; import { useHostStore } from "./useHostStore"; export const useIsElectronMobile = () => { const screenType = useScreenType(); return ( screenType === "fullscreen" && isElectron() && !useHostStore.getState().isLinux ); }; ================================================ FILE: kibbeh/src/global-stores/useEmojiPickerStore.ts ================================================ import { CustomEmote } from "./../modules/room/chat/EmoteData"; import create from "zustand"; import { combine } from "zustand/middleware"; export const useEmojiPickerStore = create( combine( { open: false, query: "", queryMatches: [] as CustomEmote[], keyboardHoveredEmoji: null as null | string, }, (set) => ({ setOpen: (open: boolean) => set({ open }), setQuery: (query: string) => set({ query }), setQueryMatches: (queryMatches: CustomEmote[]) => set({ queryMatches }), setKeyboardHoveredEmoji: (keyboardHoveredEmoji: string | null) => set({ keyboardHoveredEmoji }), }) ) ); ================================================ FILE: kibbeh/src/global-stores/useGlobalVolumeStore.ts ================================================ import create from "zustand"; import { combine } from "zustand/middleware"; export const useGlobalVolumeStore = create( combine( { volume: 100, }, (set) => ({ set, }) ) ); ================================================ FILE: kibbeh/src/global-stores/useHostStore.ts ================================================ import create from "zustand"; import { combine } from "zustand/middleware"; const hostPlatformkey = "@app/hostPlatform"; const getDefaultValues = () => { try { const v = JSON.parse( localStorage.getItem(hostPlatformkey) || '{"isLinux":false,"isWin":false,"isMac":false}' ); return { isLinux: v.isLinux, isWin: v.isWin, isMac: v.isMac }; } catch { return { isLinux: false, isWin: false, isMac: false }; } }; export const useHostStore = create( combine(getDefaultValues(), (set) => ({ setData: (x: { isLinux: boolean; isWin: boolean; isMac: boolean }) => { try { localStorage.setItem(hostPlatformkey, JSON.stringify(x)); } catch {} set(x); }, })) ); ================================================ FILE: kibbeh/src/global-stores/useKeyMapStore.ts ================================================ import { KeyMap } from "react-hotkeys"; import create from "zustand"; import { combine } from "zustand/middleware"; import isElectron from "is-electron"; let ipcRenderer: any = undefined; if (isElectron()) { ipcRenderer = window.require("electron").ipcRenderer; } export const REQUEST_TO_SPEAK_KEY = "@keybind/invite"; export const INVITE_KEY = "@keybind/invite"; export const MUTE_KEY = "@keybind/mute"; export const DEAF_KEY = "@keybind/deafen"; export const CHAT_KEY = "@keybind/chat"; export const PTT_KEY = "@keybind/ptt"; export const OVERLAY_KEY = "@keybind/overlay"; function getKeybind(actionKey: string, defaultKeybind: string) { let v = ""; try { v = localStorage.getItem(actionKey) || ""; } catch { } if (isElectron()) { ipcRenderer.send(actionKey, v || defaultKeybind); } return v || defaultKeybind; } function getRequestToSpeakKeybind() { return getKeybind(REQUEST_TO_SPEAK_KEY, "Control+8"); } function getInviteKeybind() { return getKeybind(INVITE_KEY, "Control+7"); } function getMuteKeybind() { return getKeybind(MUTE_KEY, "Control+m"); } function getDeafKeybind() { return getKeybind(DEAF_KEY, "Control+1"); } function getChatKeybind() { return getKeybind(CHAT_KEY, "Control+9"); } function getPTTKeybind() { return getKeybind(PTT_KEY, "Control+0"); } function getOverlayKeybind() { return getKeybind(OVERLAY_KEY, "Control+2"); } const keyMap: KeyMap = { REQUEST_TO_SPEAK: getRequestToSpeakKeybind(), INVITE: getInviteKeybind(), MUTE: getMuteKeybind(), DEAF: getDeafKeybind(), CHAT: getChatKeybind(), OVERLAY: getOverlayKeybind(), PTT: [ { sequence: getPTTKeybind(), action: "keydown" }, { sequence: getPTTKeybind(), action: "keyup" }, ], }; const keyNames: KeyMap = { REQUEST_TO_SPEAK: getRequestToSpeakKeybind(), INVITE: getInviteKeybind(), MUTE: getMuteKeybind(), DEAF: getDeafKeybind(), CHAT: getChatKeybind(), PTT: getPTTKeybind(), OVERLAY: getOverlayKeybind(), }; export const useKeyMapStore = create( combine( { keyMap, keyNames, }, (set) => ({ setRequestToSpeakKeybind: (id: string) => { try { localStorage.setItem(REQUEST_TO_SPEAK_KEY, id); if (isElectron()) { ipcRenderer.send(REQUEST_TO_SPEAK_KEY, id); } } catch { } set((x) => ({ keyMap: { ...x.keyMap, REQUEST_TO_SPEAK: id }, keyNames: { ...x.keyNames, REQUEST_TO_SPEAK: id }, })); }, setInviteKeybind: (id: string) => { try { localStorage.setItem(INVITE_KEY, id); if (isElectron()) { ipcRenderer.send(INVITE_KEY, id); } } catch { } set((x) => ({ keyMap: { ...x.keyMap, INVITE: id }, keyNames: { ...x.keyNames, INVITE: id }, })); }, setMuteKeybind: (id: string) => { try { localStorage.setItem(MUTE_KEY, id); if (isElectron()) { ipcRenderer.send(MUTE_KEY, id); } } catch { } set((x) => ({ keyMap: { ...x.keyMap, MUTE: id }, keyNames: { ...x.keyNames, MUTE: id }, })); }, setDeafKeybind: (id: string) => { try { localStorage.setItem(DEAF_KEY, id); if (isElectron()) { ipcRenderer.send(DEAF_KEY, id); } } catch { } set((x) => ({ keyMap: { ...x.keyMap, DEAF: id }, keyNames: { ...x.keyNames, DEAF: id }, })); }, setChatKeybind: (id: string) => { try { localStorage.setItem(CHAT_KEY, id); if (isElectron()) { ipcRenderer.send(CHAT_KEY, id); } } catch { } set((x) => ({ keyMap: { ...x.keyMap, CHAT: id }, keyNames: { ...x.keyNames, CHAT: id }, })); }, setOverlayKeybind: (id: string) => { try { localStorage.setItem(OVERLAY_KEY, id); if (isElectron()) { ipcRenderer.send(OVERLAY_KEY, id); } } catch { } set((x) => ({ keyMap: { ...x.keyMap, OVERLAY: id }, keyNames: { ...x.keyNames, OVERLAY: id }, })); }, setPTTKeybind: (id: string) => { try { localStorage.setItem(PTT_KEY, id); if (isElectron()) { ipcRenderer.send(PTT_KEY, id); } } catch { } set((x) => ({ keyMap: { ...x.keyMap, PTT: [ { sequence: id, action: "keydown" }, { sequence: id, action: "keyup" }, ], }, keyNames: { ...x.keyNames, PTT: id }, })); }, }) ) ); ================================================ FILE: kibbeh/src/global-stores/useMicPermErrorStore.ts ================================================ import create from "zustand"; import { combine } from "zustand/middleware"; export const useMicPermErrorStore = create( combine( { error: false, }, (set) => ({ set, }) ) ); ================================================ FILE: kibbeh/src/global-stores/useMuteStore.ts ================================================ import create from "zustand"; import { combine } from "zustand/middleware"; import { useSoundEffectStore } from "../modules/sound-effects/useSoundEffectStore"; import { useWakeLockStore } from "../shared-hooks/useScreenWakeLockStore"; export const useMuteStore = create( combine( { muted: false, }, (set) => ({ // don't call this directly unless you know what you are doing // use useSetMute hook intead setInternalMute: (muted: boolean, playSound = true) => { if (muted) { useWakeLockStore.getState().releaseWakeLock(); } else { useWakeLockStore.getState().requestWakeLock(); } // to prevent sound overlapping if (playSound) { useSoundEffectStore .getState() .playSoundEffect(muted ? "mute" : "unmute"); } set({ muted }); }, }) ) ); ================================================ FILE: kibbeh/src/global-stores/useOverlayStore.ts ================================================ import create from "zustand"; import { combine } from "zustand/middleware"; import isElectron from "is-electron"; let ipcRenderer: any = undefined; if (isElectron()) { ipcRenderer = window.require("electron").ipcRenderer; } const overlayAppTitleKey = "@overlay/app_title"; const getDefaultValues = () => { try { const v = localStorage.getItem(overlayAppTitleKey); if (isElectron()) { ipcRenderer.send(overlayAppTitleKey, v || ""); } return { appTitle: v || "", }; } catch { return { appTitle: "", }; } }; export const useOverlayStore = create( combine(getDefaultValues(), (set) => ({ setData: (x: { appTitle: string }) => { try { localStorage.setItem(overlayAppTitleKey, x.appTitle); if (isElectron()) { ipcRenderer.send(overlayAppTitleKey, x.appTitle); } } catch {} set(x); }, })) ); ================================================ FILE: kibbeh/src/global-stores/useProducerStore.ts ================================================ import { Producer } from "mediasoup-client/lib/types"; import create from "zustand"; import { combine } from "zustand/middleware"; export const useProducerStore = create( combine( { producer: null as Producer | null, }, (set) => ({ add: (p: Producer) => set((s) => { if (s.producer && !s.producer.closed) { s.producer.close(); } return { producer: p }; }), close: () => set((s) => { if (s.producer && !s.producer.closed) { s.producer.close(); } return { producer: null, }; }), }) ) ); ================================================ FILE: kibbeh/src/global-stores/useRoomChatMentionStore.ts ================================================ import { BaseUser } from "@dogehouse/kebab"; import create from "zustand"; import { combine } from "zustand/middleware"; import { useSoundEffectStore } from "../modules/sound-effects/useSoundEffectStore"; export const useRoomChatMentionStore = create( combine( { queriedUsernames: [] as BaseUser[], activeUsername: "", iAmMentioned: 0, }, (set) => ({ setQueriedUsernames: (queriedUsernames: BaseUser[]) => set({ queriedUsernames, }), setActiveUsername: (activeUsername: string) => { return set({ activeUsername, }); }, resetIAmMentioned: () => set({ iAmMentioned: 0, }), incrementIAmMentioned: () => { useSoundEffectStore.getState().playSoundEffect("roomChatMention"); set((x) => ({ iAmMentioned: x.iAmMentioned + 1 })); }, }) ) ); ================================================ FILE: kibbeh/src/global-stores/useSocketStatus.ts ================================================ import create from "zustand"; import { combine } from "zustand/middleware"; type State = | "auth-good" | "open" | "connecting" | "closed-by-server" | "closed"; export const useSocketStatus = create( combine( { status: "connecting" as State, }, (set) => ({ setStatus: (status: State) => set({ status }), }) ) ); ================================================ FILE: kibbeh/src/global-stores/useStatus.ts ================================================ import create from "zustand"; import { combine } from "zustand/middleware"; type State = | "init" | "ws-disconnected" | "voice-server-disconnected" | "connected-no-room" | "connected-listener" | "bad-auth" | "killed" | "connected-speaker"; export const useStatus = create( combine( { status: "init" as State, }, (set) => ({ setStatus: (status: State) => set({ status }), }) ) ); ================================================ FILE: kibbeh/src/globals.d.ts ================================================ import "@testing-library/jest-dom/extend-expect"; ================================================ FILE: kibbeh/src/icons/BotIcon.tsx ================================================ import * as React from "react"; function BotIcon(props: React.SVGProps) { return ( ); } export default BotIcon; ================================================ FILE: kibbeh/src/icons/DeveloperIcon.tsx ================================================ import * as React from "react"; function DeveloperIcon(props: React.SVGProps) { return ( ); } export default DeveloperIcon; ================================================ FILE: kibbeh/src/icons/LgLogo.tsx ================================================ import * as React from "react"; function LgLogo(props: React.SVGProps) { return ( ); } export default LgLogo; ================================================ FILE: kibbeh/src/icons/Link.tsx ================================================ import * as React from "react"; function LinkIcon(props: React.SVGProps) { return ( ); } export default LinkIcon; ================================================ FILE: kibbeh/src/icons/LogoIcon.tsx ================================================ import * as React from "react"; interface SvgDogehouseIconProps extends React.SVGProps { fillCurrent?: boolean; } function SvgDogehouseIcon(props: SvgDogehouseIconProps) { return ( ); } export default SvgDogehouseIcon; ================================================ FILE: kibbeh/src/icons/MacCloseIcon.tsx ================================================ import * as React from "react"; function MacCloseIcon(props: React.SVGProps) { return ( ); } export default MacCloseIcon; ================================================ FILE: kibbeh/src/icons/MacMaximizeIcon.tsx ================================================ import * as React from "react"; function MacMaximizeIcon(props: React.SVGProps) { return ( ); } export default MacMaximizeIcon; ================================================ FILE: kibbeh/src/icons/MacMinimizeIcon.tsx ================================================ import * as React from "react"; function MacMinimizeIcon(props: React.SVGProps) { return ( ); } export default MacMinimizeIcon; ================================================ FILE: kibbeh/src/icons/OutlineGlobe.tsx ================================================ import * as React from "react"; function SvgOutlineGlobe(props: React.SVGProps) { return ( ); } export default SvgOutlineGlobe; ================================================ FILE: kibbeh/src/icons/Share.tsx ================================================ import * as React from "react"; function ShareIcon(props: React.SVGProps) { return ( ); } export default ShareIcon; ================================================ FILE: kibbeh/src/icons/Smiley.tsx ================================================ import * as React from "react"; function Smiley(props: React.SVGProps) { return ( ); } export default Smiley; ================================================ FILE: kibbeh/src/icons/SolidBug.tsx ================================================ import * as React from "react"; function SvgSolidBug(props: React.SVGProps) { return ( ); } export default SvgSolidBug; ================================================ FILE: kibbeh/src/icons/SolidCalendar.tsx ================================================ import * as React from "react"; function SvgSolidCalendar(props: React.SVGProps) { return ( ); } export default SvgSolidCalendar; ================================================ FILE: kibbeh/src/icons/SolidCaretRight.tsx ================================================ import * as React from "react"; function SvgSolidCaretRight(props: React.SVGProps) { return ( ); } export default SvgSolidCaretRight; ================================================ FILE: kibbeh/src/icons/SolidChatBubble.tsx ================================================ import * as React from "react"; function SolidChatBubble(props: React.SVGProps) { return ( ); } export default SolidChatBubble; ================================================ FILE: kibbeh/src/icons/SolidCompass.tsx ================================================ import * as React from "react"; function SvgSolidCompass(props: React.SVGProps) { return ( ); } export default SvgSolidCompass; ================================================ FILE: kibbeh/src/icons/SolidContributor.tsx ================================================ import * as React from "react"; interface SolidContributorProps extends React.SVGProps {} function SolidContributor(props: SolidContributorProps): JSX.Element { return ( ); } export default SolidContributor; ================================================ FILE: kibbeh/src/icons/SolidDeafened.tsx ================================================ import * as React from "react"; export default function SvgSolidDeafened(props: React.SVGProps) { return ( ); } ================================================ FILE: kibbeh/src/icons/SolidDeafenedOff.tsx ================================================ import * as React from "react"; export default function SvgSolidDeafenedOff( props: React.SVGProps ) { return ( ); } ================================================ FILE: kibbeh/src/icons/SolidDiscord.tsx ================================================ import * as React from "react"; export default function SvgSolidDiscord(props: React.SVGProps) { return ( ); } ================================================ FILE: kibbeh/src/icons/SolidDogenitro.tsx ================================================ import * as React from "react"; function SvgSolidDogenitro(props: React.SVGProps) { return ( ); } export default SvgSolidDogenitro; ================================================ FILE: kibbeh/src/icons/SolidDownload.tsx ================================================ import * as React from "react"; function SvgSolidDownload(props: React.SVGProps) { return ( ); } export default SvgSolidDownload; ================================================ FILE: kibbeh/src/icons/SolidFriends.tsx ================================================ import * as React from "react"; function SvgSolidFriends(props: React.SVGProps) { return ( ); } export default SvgSolidFriends; ================================================ FILE: kibbeh/src/icons/SolidFriendsAdd.tsx ================================================ import * as React from "react"; export default function SvgSolidFriendsAdd( props: React.SVGProps ) { return ( ); } ================================================ FILE: kibbeh/src/icons/SolidFullscreen.tsx ================================================ import * as React from "react"; function SvgSolidFullscreen(props: React.SVGProps) { return ( ); } export default SvgSolidFullscreen; ================================================ FILE: kibbeh/src/icons/SolidGitHub.tsx ================================================ import * as React from "react"; export default function SvgSolidGitHub(props: React.SVGProps) { return ( ); } ================================================ FILE: kibbeh/src/icons/SolidGoogle.tsx ================================================ import * as React from "react"; export default function SvgSolidGoogle(props: React.SVGProps) { return ( ); } ================================================ FILE: kibbeh/src/icons/SolidHelp.tsx ================================================ import * as React from "react"; function SvgSolidHelp(props: React.SVGProps) { return ( ); } export default SvgSolidHelp; ================================================ FILE: kibbeh/src/icons/SolidHome.tsx ================================================ import * as React from "react"; function SvgSolidHome(props: React.SVGProps) { return ( ); } export default SvgSolidHome; ================================================ FILE: kibbeh/src/icons/SolidInstagram.tsx ================================================ import * as React from "react"; export default function SvgSolidInstagram( props: React.SVGProps ) { return ( ); } ================================================ FILE: kibbeh/src/icons/SolidKeyboard.tsx ================================================ import * as React from "react"; function SvgSolidKeyboard(props: React.SVGProps) { return ( ); } export default SvgSolidKeyboard; ================================================ FILE: kibbeh/src/icons/SolidLink.tsx ================================================ import * as React from "react"; interface SolidLinkProps extends React.SVGProps {} function SolidLink(props: SolidLinkProps): JSX.Element { return ( ); } export default SolidLink; ================================================ FILE: kibbeh/src/icons/SolidLogOut.tsx ================================================ function SvgSolidLogOut(props: React.SVGProps) { return ( ); } export default SvgSolidLogOut; ================================================ FILE: kibbeh/src/icons/SolidMegaphone.tsx ================================================ import * as React from "react"; function SvgSolidMegaphone(props: React.SVGProps) { return ( ); } export default SvgSolidMegaphone; ================================================ FILE: kibbeh/src/icons/SolidMessages.tsx ================================================ import * as React from "react"; function SvgSolidMessages(props: React.SVGProps) { return ( ); } export default SvgSolidMessages; ================================================ FILE: kibbeh/src/icons/SolidMicrophone.tsx ================================================ import * as React from "react"; function SvgSolidMicrophone(props: React.SVGProps) { return ( ); } export default SvgSolidMicrophone; ================================================ FILE: kibbeh/src/icons/SolidMicrophoneOff.tsx ================================================ import * as React from "react"; function SvgSolidMicrophoneOff(props: React.SVGProps) { return ( ); } export default SvgSolidMicrophoneOff; ================================================ FILE: kibbeh/src/icons/SolidMoon.tsx ================================================ import * as React from "react"; export default function SvgSolidMoon(props: React.SVGProps) { return ( ); } ================================================ FILE: kibbeh/src/icons/SolidNew.tsx ================================================ import * as React from "react"; function SvgSolidNew(props: React.SVGProps) { return ( ); } export default SvgSolidNew; ================================================ FILE: kibbeh/src/icons/SolidNotification.tsx ================================================ import * as React from "react"; function SvgSolidNotification(props: React.SVGProps) { return ( ); } export default SvgSolidNotification; ================================================ FILE: kibbeh/src/icons/SolidPersonAdd.tsx ================================================ import * as React from "react"; function SvgSolidPersonAdd(props: React.SVGProps) { return ( ); } export default SvgSolidPersonAdd; ================================================ FILE: kibbeh/src/icons/SolidPlus.tsx ================================================ import * as React from "react"; function SvgSolidMessages(props: React.SVGProps) { return ( ); } export default SvgSolidMessages; ================================================ FILE: kibbeh/src/icons/SolidRocket.tsx ================================================ import * as React from "react"; function SvgSolidRocket(props: React.SVGProps) { return ( ); } export default SvgSolidRocket; ================================================ FILE: kibbeh/src/icons/SolidSearch.tsx ================================================ import * as React from "react"; function SvgSolidSearch(props: React.SVGProps) { return ( ); } export default SvgSolidSearch; ================================================ FILE: kibbeh/src/icons/SolidSettings.tsx ================================================ import * as React from "react"; function SvgSolidSettings(props: React.SVGProps) { return ( ); } export default SvgSolidSettings; ================================================ FILE: kibbeh/src/icons/SolidSimpleMegaphone.tsx ================================================ import * as React from "react"; function SvgSolidSimpleMegaphone(props: React.SVGProps) { return ( ); } export default SvgSolidSimpleMegaphone; ================================================ FILE: kibbeh/src/icons/SolidStaff.tsx ================================================ import * as React from "react"; interface SolidStaffProps extends React.SVGProps {} function SolidStaff(props: SolidStaffProps): JSX.Element { return ( ); } export default SolidStaff; ================================================ FILE: kibbeh/src/icons/SolidTime.tsx ================================================ import * as React from "react"; function SvgSolidTime(props: React.SVGProps) { return ( ); } export default SvgSolidTime; ================================================ FILE: kibbeh/src/icons/SolidTrash.tsx ================================================ import * as React from "react"; export default function SvgSolidTrash(props: React.SVGProps) { return ( ); } ================================================ FILE: kibbeh/src/icons/SolidTwitter.tsx ================================================ import * as React from "react"; export default function SvgSolidTwitter(props: React.SVGProps) { return ( ); } ================================================ FILE: kibbeh/src/icons/SolidUser.tsx ================================================ import * as React from "react"; function SvgSolidUser(props: React.SVGProps) { return ( ); } export default SvgSolidUser; ================================================ FILE: kibbeh/src/icons/SolidVolume.tsx ================================================ import * as React from "react"; function SvgSolidVolume(props: React.SVGProps) { return ( ); } export default SvgSolidVolume; ================================================ FILE: kibbeh/src/icons/SolidVolumeOff.tsx ================================================ import * as React from "react"; function SvgSolidVolumeOff(props: React.SVGProps) { return ( ); } export default SvgSolidVolumeOff; ================================================ FILE: kibbeh/src/icons/SolidWarning.tsx ================================================ import * as React from "react"; export default function SvgSolidWarning(props: React.SVGProps) { return ( ); } ================================================ FILE: kibbeh/src/icons/WinCloseIcon.tsx ================================================ import * as React from "react"; function WinCloseIcon(props: React.SVGProps) { return ( ); } export default WinCloseIcon; ================================================ FILE: kibbeh/src/icons/WinMaximizeIcon.tsx ================================================ import * as React from "react"; function WinMaximizeIcon(props: React.SVGProps) { return ( ); } export default WinMaximizeIcon; ================================================ FILE: kibbeh/src/icons/WinMinimizeIcon.tsx ================================================ import * as React from "react"; function WinMinimizeIcon(props: React.SVGProps) { return ( ); } export default WinMinimizeIcon; ================================================ FILE: kibbeh/src/icons/badges/ContributorBadge.tsx ================================================ import * as React from "react"; interface SvgSolidContributorBadgeProps extends React.SVGProps { contributions: number; } function SvgSolidContributorBadge(props: SvgSolidContributorBadgeProps) { const fill = props.style?.color || "#5df4df"; let variant = ( ); if (props.contributions >= 1000) { variant = ( <> ); } else if (props.contributions >= 500) { variant = ( ); } else if (props.contributions >= 250) { variant = ( ); } else if (props.contributions >= 150) { variant = ( ); } else if (props.contributions >= 50) { variant = ( ); } return ( {variant} ); } export default SvgSolidContributorBadge; ================================================ FILE: kibbeh/src/icons/badges/StaffBadge.tsx ================================================ import * as React from "react"; function SvgSolidStaffBadge(props: React.SVGProps) { return ( ); } export default SvgSolidStaffBadge; ================================================ FILE: kibbeh/src/icons/badges/index.tsx ================================================ export { default as StaffBadge } from "./StaffBadge"; export { default as ContributorBadge } from "./ContributorBadge"; ================================================ FILE: kibbeh/src/icons/index.tsx ================================================ export { default as SolidCalendar } from "./SolidCalendar"; export { default as SolidContributor } from "./SolidContributor"; export { default as SolidCompass } from "./SolidCompass"; export { default as SolidFriends } from "./SolidFriends"; export { default as SolidHome } from "./SolidHome"; export { default as SolidMessages } from "./SolidMessages"; export { default as SolidNew } from "./SolidNew"; export { default as SolidNotification } from "./SolidNotification"; export { default as SolidPlus } from "./SolidPlus"; export { default as SolidSearch } from "./SolidSearch"; export { default as LgLogo } from "./LgLogo"; export { default as LogoIcon } from "./LogoIcon"; export { default as OutlineGlobe } from "./OutlineGlobe"; export { default as SolidBug } from "./SolidBug"; export { default as SolidCaretRight } from "./SolidCaretRight"; export { default as SolidDogenitro } from "./SolidDogenitro"; export { default as SolidFullscreen } from "./SolidFullscreen"; export { default as SolidHelp } from "./SolidHelp"; export { default as SolidLogOut } from "./SolidLogOut"; export { default as SolidDiscord } from "./SolidDiscord"; export { default as SolidLink } from "./SolidLink"; export { default as SolidMegaphone } from "./SolidMegaphone"; export { default as SolidSimpleMegaphone } from "./SolidSimpleMegaphone"; export { default as SolidMicrophone } from "./SolidMicrophone"; export { default as SolidMicrophoneOff } from "./SolidMicrophoneOff"; export { default as SolidSettings } from "./SolidSettings"; export { default as SolidStaff } from "./SolidStaff"; export { default as SolidTime } from "./SolidTime"; export { default as SolidUser } from "./SolidUser"; export { default as SolidVolume } from "./SolidVolume"; export { default as SolidVolumeOff } from "./SolidVolumeOff"; export { default as SolidRocket } from "./SolidRocket"; export { default as Smiley } from "./Smiley"; export { default as WinMaximizeIcon } from "./WinMaximizeIcon"; export { default as WinMinimizeIcon } from "./WinMinimizeIcon"; export { default as WinCloseIcon } from "./WinCloseIcon"; export { default as MacMaximizeIcon } from "./MacMaximizeIcon"; export { default as MacMinimizeIcon } from "./MacMinimizeIcon"; export { default as MacCloseIcon } from "./MacCloseIcon"; export { default as SolidChatBubble } from "./SolidChatBubble"; export { default as SolidInstagram } from "./SolidInstagram"; export { default as SolidPersonAdd } from "./SolidPersonAdd"; export { default as ShareIcon } from "./Share"; export { default as TwitterIcon } from "./SolidTwitter"; export { default as LinkIcon } from "./Link"; export { default as SolidTrash } from "./SolidTrash"; export { default as SolidMoon } from "./SolidMoon"; export { default as SolidWarning } from "./SolidWarning"; export { default as SolidDeafenedOff } from "./SolidDeafenedOff"; export { default as SolidDeafened } from "./SolidDeafened"; export { default as SolidFriendsAdd } from "./SolidFriendsAdd"; export { default as BotIcon } from "./BotIcon"; export { default as SolidDownload } from "./SolidDownload"; export { default as DeveloperIcon } from "./DeveloperIcon"; ================================================ FILE: kibbeh/src/jest.config.js ================================================ module.exports = { // The root of your source code, typically /src // `` is a token Jest substitutes roots: ["/src"], // Jest transformations -- this adds support for TypeScript // using ts-jest transform: { "^.+\\.tsx?$": "ts-jest", }, // Runs special logic, such as cleaning up components // when using React Testing Library and adds special // extended assertions to Jest setupFilesAfterEnv: [ "@testing-library/react/cleanup-after-each", "@testing-library/jest-dom/extend-expect", ], // Test spec file resolution pattern // Matches parent folder `__tests__` and filename // should contain `test` or `spec`. testRegex: "(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$", // Module file extensions for importing moduleFileExtensions: ["ts", "tsx", "js", "jsx", "json", "node"], }; ================================================ FILE: kibbeh/src/lib/constants.ts ================================================ export const __prod__ = process.env.NODE_ENV === "production"; export const apiBaseUrl = process.env.NEXT_PUBLIC_API_BASE_URL!; export const isStaging = process.env.NEXT_PUBLIC_IS_STAGING === "true"; export const baseUrl = process.env.NEXT_PUBLIC_BASE_URL || "https://dogehouse.tv"; export const loginNextPathKey = "@dogehouse/login-next"; export const linkRegex = /(^|\s)(https?:\/\/)(www\.)?([-a-z0-9]{1,63}\.)*?[a-z0-9][-a-z0-9]{0,61}[a-z0-9]\.[a-z]{1,6}(\/[-\\w@\\+\\.~#\\?&/=%]*)?[^\s()]+/; export const codeBlockRegex = /`([^`]*)`/g; export const mentionRegex = /^(?!.*\bRT\b)(?:.+\s)?#?@\w+/i; ================================================ FILE: kibbeh/src/lib/createChatMessage.ts ================================================ import { BaseUser } from "@dogehouse/kebab"; import normalizeUrl from "normalize-url"; import { linkRegex, codeBlockRegex, mentionRegex } from "./constants"; export const createChatMessage = ( message: string, roomUsers: BaseUser[] = [] ) => { const tokens = ([] as unknown) as [ { t: string; v: string; } ]; const whisperedToUsernames: string[] = []; const testAndPushToken = (item: string) => { const isLink = linkRegex.test(item); const withoutAt = item.replace(/@|#/g, ""); const isMention = roomUsers.find((m) => withoutAt === m.username) && mentionRegex.test(item); // whisperedTo users list if (isMention && item.startsWith("#@")) { whisperedToUsernames.push(withoutAt); } if (isLink) { tokens.push({ t: "link", v: normalizeUrl(item), }); } else if (isMention) { tokens.push({ t: "mention", v: withoutAt, }); } else if (item.startsWith(":") && item.endsWith(":") && item.length > 2) { tokens.push({ t: "emote", v: item.slice(1, item.length - 1).toLowerCase(), }); } else { tokens.push({ t: "text", v: item, }); } }; const match = message.matchAll(new RegExp(codeBlockRegex, "g")); let matchResult = match.next(); // For message that matches the regex pattern of code blocks. if (!matchResult.done) { const splitMessage = message.split(codeBlockRegex); splitMessage.forEach((text, index) => { // First and last index is empty string while split using the code block regex. if (!index && index === splitMessage.length - 1) { return; } const trimmed = text.trim(); if (!matchResult.done && text === matchResult.value[1]) { if (trimmed) { tokens.push({ t: "block", v: trimmed, }); } else { tokens.push({ t: "text", v: matchResult.value[0], }); } matchResult = match.next(); } else { text.split(" ").forEach((item) => { testAndPushToken(item); }); } }); } else { message.split(" ").forEach((item) => testAndPushToken(item)); } return { tokens, whisperedTo: roomUsers .filter((u) => whisperedToUsernames .map((x) => x?.toLowerCase()) .includes(u.username?.toLowerCase()) ) .map((u) => u.id), }; }; ================================================ FILE: kibbeh/src/lib/defaultQueryFn.ts ================================================ import { useTokenStore } from "../modules/auth/useTokenStore"; import { apiBaseUrl } from "./constants"; import fetch from "isomorphic-fetch"; export const defaultQueryFn = async ({ queryKey }: { queryKey: string }) => { const { accessToken, refreshToken } = useTokenStore.getState(); const r = await fetch(`${apiBaseUrl}${queryKey}`, { headers: { "X-Access-Token": accessToken, "X-Refresh-Token": refreshToken, }, }); if (r.status !== 200) { throw new Error(await r.text()); } const _accessToken = r.headers.get("access-token"); const _refreshToken = r.headers.get("refresh-token"); if (_accessToken && _refreshToken) { useTokenStore.getState().setTokens({ accessToken: _accessToken, refreshToken: _refreshToken, }); } return await r.json(); }; ================================================ FILE: kibbeh/src/lib/i18n.ts ================================================ import i18n from "i18next"; import Backend from "i18next-http-backend"; import LanguageDetector from "i18next-browser-languagedetector"; import { initReactI18next } from "react-i18next"; import isDate from "lodash/isDate"; import { __prod__ } from "./constants"; const DETECTION_OPTIONS = { order: ["localStorage", "navigator"], }; function createDateFormatOptions(format: string): Intl.DateTimeFormatOptions { switch (format) { case "intlDate": { // EN returns 3/16/2021, 5:45 PM return { year: "numeric", month: "numeric", day: "numeric", hour: "numeric", minute: "numeric", }; } case "intlTime": { // EN returns 05:45 PM return { hour: "numeric", minute: "numeric", }; } default: { // EN returns Tuesday, March 16, 2021, 5:45 PM return { weekday: "long", year: "numeric", month: "long", day: "numeric", hour: "numeric", minute: "numeric", }; } } } export const init_i18n = () => { i18n // import & load translations from -> /public/locales .use(Backend) // https://github.com/i18next/i18next-browser-languageDetector .use(LanguageDetector) // pass the i18n instance to react-i18next. .use(initReactI18next) // init i18next // see opts @ https://www.i18next.com/overview/configuration-options .init({ detection: DETECTION_OPTIONS, fallbackLng: "en", debug: !__prod__, interpolation: { escapeValue: false, format: (value, format, lng) => { return isDate(value) && format ? new Intl.DateTimeFormat(lng, createDateFormatOptions(format)) .format(value) .toString() : value; }, }, react: { useSuspense: false, // fixes 'no fallback UI was specified' in react i18next when using hooks }, }); }; ================================================ FILE: kibbeh/src/lib/isCurrentRoomId.ts ================================================ import { useCurrentRoomIdStore } from "../global-stores/useCurrentRoomIdStore"; export const isCurrentRoomId = (id: string) => id && id === useCurrentRoomIdStore.getState().currentRoomId; ================================================ FILE: kibbeh/src/lib/isServer.ts ================================================ export const isServer = typeof window === "undefined"; ================================================ FILE: kibbeh/src/lib/isWebRTCEnabled.ts ================================================ export const isWebRTCEnabled = () => [ "RTCPeerConnection", "webkitRTCPeerConnection", "mozRTCPeerConnection", "RTCIceGatherer", ].some((item) => window && item in window); ================================================ FILE: kibbeh/src/lib/kFormatter.ts ================================================ export const kFormatter = (num: number) => { if (num < 1000) { return `${num}`; } const base = Math.floor(Math.log(Math.abs(num)) / Math.log(1000)); const suffix = "kmb"[base - 1]; const abbrev = String(num / 1000 ** base).substring(0, 3); return (abbrev.endsWith(".") ? abbrev.slice(0, -1) : abbrev) + suffix; }; ================================================ FILE: kibbeh/src/lib/queryClient.ts ================================================ import { QueryClient } from "react-query"; import { showErrorToast } from "./showErrorToast"; import { defaultQueryFn } from "./defaultQueryFn"; export const queryClient = new QueryClient({ defaultOptions: { mutations: { onError: (e) => { if ("message" in (e as Error)) { showErrorToast((e as Error).message); } }, }, queries: { retry: false, staleTime: 60 * 1000 * 5, onError: (e) => { if ("message" in (e as Error)) { showErrorToast((e as Error).message); } }, queryFn: defaultQueryFn as any, }, }, }); ================================================ FILE: kibbeh/src/lib/roomToCurrentRoom.ts ================================================ import { Room, CurrentRoom } from "@dogehouse/kebab"; export const roomToCurrentRoom = (r: Room): CurrentRoom => r ? { ...r, muteMap: {}, deafMap: {}, users: [], activeSpeakerMap: {}, autoSpeaker: false, } : r; ================================================ FILE: kibbeh/src/lib/showErrorToast.ts ================================================ import { useErrorToastStore } from "../modules/errors/useErrorToastStore"; export const showErrorToast = (m: string) => { console.log("showErrorToast: ", m); useErrorToastStore.getState().showToast({ message: m }); }; ================================================ FILE: kibbeh/src/lib/tests/constants.test.ts ================================================ import { linkRegex } from "../constants"; describe("Link Regex", () => { test("Only Link", () => { const msg1 = "https://abc.com"; expect(linkRegex.test(msg1)).toBeTruthy(); }); test("Link between text", () => { const msg2 = "some text https://abc.com other text"; expect(linkRegex.test(msg2)).toBeTruthy(); }); test("Link in brackets", () => { const msg3 = "(https://abc.com)"; expect(linkRegex.test(msg3)).toBeFalsy(); }); test("Link with parameters", () => { const msg4 = "text after https://abc.com/queries?parameter text after"; expect(linkRegex.test(msg4)).toBeTruthy(); }); }); ================================================ FILE: kibbeh/src/lib/tests/kFormatter.test.ts ================================================ import { kFormatter } from "../kFormatter"; describe("Number formatter", () => { it("should return 1", () => { expect(kFormatter(1)).toBe("1"); }); it("should return 1k", () => { expect(kFormatter(1000)).toBe("1k"); }); it("should return 3.8k", () => { expect(kFormatter(3821)).toBe("3.8k"); }); it("should return 9.9k", () => { expect(kFormatter(9999)).toBe("9.9k"); }); it("should return 10k", () => { expect(kFormatter(10500)).toBe("10k"); }); it("should return 101k", () => { expect(kFormatter(101800)).toBe("101k"); }); it("should return 3m", () => { expect(kFormatter(3000000)).toBe("3m"); }); it("should return 3.8m", () => { expect(kFormatter(3800000)).toBe("3.8m"); }); it("should return 98m", () => { expect(kFormatter(98150000)).toBe("98m"); }); it("should return 124m", () => { expect(kFormatter(124200000)).toBe("124m"); }); it("should return 9.9m", () => { expect(kFormatter(9999999)).toBe("9.9m"); }); }); ================================================ FILE: kibbeh/src/lib/validateStruct.ts ================================================ import { Struct } from "superstruct"; export const validateStruct = (struct: Struct) => (values: T) => { const errors: Record = {}; const [result] = struct.validate(values); for (const failure of result?.failures() || []) { errors[failure.path[0]] = failure.message; } return errors; }; ================================================ FILE: kibbeh/src/modules/admin/AdminPage.tsx ================================================ import * as React from "react"; import { PageComponent } from "../../types/PageComponent"; import { WaitForWsAndAuth } from "../auth/WaitForWsAndAuth"; import { DefaultDesktopLayout } from "../layouts/DefaultDesktopLayout"; import { AdminPageForm } from "./AdminPageForm"; interface Props {} export const AdminPage: PageComponent = () => { return ( ); }; AdminPage.ws = true; ================================================ FILE: kibbeh/src/modules/admin/AdminPageForm.tsx ================================================ import { wrap } from "@dogehouse/kebab"; import { useRouter } from "next/router"; import React, { useEffect, useState } from "react"; import { showErrorToast } from "../../lib/showErrorToast"; import { useConn } from "../../shared-hooks/useConn"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; import { Button } from "../../ui/Button"; import { Input } from "../../ui/Input"; import { MiddlePanel } from "../layouts/GridPanels"; interface SearchUsersProps {} export const AdminPageForm: React.FC = ({}) => { const conn = useConn(); const [username, setUsername] = useState(""); const [reason, setReason] = useState(""); const [contributions, setContributions] = useState(0); const [isStaff, setIsStaff] = useState(false); const { t } = useTypeSafeTranslation(); const { replace } = useRouter(); const wrapper = wrap(conn); useEffect(() => { if (conn.user.username !== "benawad") { showErrorToast("nice try"); replace("/dash"); } // eslint-disable-next-line react-hooks/exhaustive-deps }, []); if (conn.user.username !== "benawad") { return ; } return (

{t("pages.admin.username")}

setUsername(e.target.value)} />

{t("pages.admin.ban")}

setReason(e.target.value)} />
); }; ================================================ FILE: kibbeh/src/modules/auth/WaitForWsAndAuth.tsx ================================================ import React, { useContext } from "react"; import { WebSocketContext } from "../ws/WebSocketProvider"; import { useVerifyLoggedIn } from "./useVerifyLoggedIn"; interface WaitForWsAndAuthProps {} export const WaitForWsAndAuth: React.FC = ({ children, }) => { const { conn } = useContext(WebSocketContext); if (!useVerifyLoggedIn()) { return null; } if (!conn) { // @todo make this better return
loading...
; } return <>{children}; }; ================================================ FILE: kibbeh/src/modules/auth/useSaveTokensFromQueryParams.ts ================================================ import { useEffect } from "react"; import { useRouter } from "next/router"; import { useTokenStore } from "./useTokenStore"; import { loginNextPathKey } from "../../lib/constants"; import { showErrorToast } from "../../lib/showErrorToast"; export const useSaveTokensFromQueryParams = () => { const { query: params, push } = useRouter(); useEffect(() => { if (typeof params.error === "string" && params.error) { showErrorToast(params.error); } if ( typeof params.accessToken === "string" && typeof params.refreshToken === "string" && params.accessToken && params.refreshToken ) { useTokenStore.getState().setTokens({ accessToken: params.accessToken, refreshToken: params.refreshToken, }); let nextPath = "/dash"; try { const possibleNextPath = localStorage.getItem(loginNextPathKey); if (possibleNextPath && possibleNextPath.startsWith("/")) { nextPath = possibleNextPath; localStorage.setItem(loginNextPathKey, ""); } } catch {} // Push to next path after auto redirect to /dash (100 msecs is unoticeable) setTimeout(() => push(nextPath), 100); } }, [params, push]); }; ================================================ FILE: kibbeh/src/modules/auth/useTokenStore.ts ================================================ import create from "zustand"; import { combine } from "zustand/middleware"; import { isServer } from "../../lib/isServer"; const accessTokenKey = "@toum/token"; const refreshTokenKey = "@toum/refresh-token"; const getDefaultValues = () => { if (!isServer) { try { return { accessToken: localStorage.getItem(accessTokenKey) || "", refreshToken: localStorage.getItem(refreshTokenKey) || "", }; } catch {} } return { accessToken: "", refreshToken: "", }; }; export const useTokenStore = create( combine(getDefaultValues(), (set) => ({ setTokens: (x: { accessToken: string; refreshToken: string }) => { try { localStorage.setItem(accessTokenKey, x.accessToken); localStorage.setItem(refreshTokenKey, x.refreshToken); } catch {} set(x); }, })) ); ================================================ FILE: kibbeh/src/modules/auth/useVerifyLoggedIn.ts ================================================ import { useRouter } from "next/router"; import { useEffect } from "react"; import { useTokenStore } from "./useTokenStore"; export const useVerifyLoggedIn = () => { const { replace, asPath } = useRouter(); const hasTokens = useTokenStore((s) => !!(s.accessToken && s.refreshToken)); useEffect(() => { if (!hasTokens) { replace(`/?next=${asPath}`); } }, [hasTokens, asPath, replace]); return hasTokens; }; ================================================ FILE: kibbeh/src/modules/dashboard/CreateRoomModal.tsx ================================================ import { Form, Formik } from "formik"; import { useRouter } from "next/router"; import React from "react"; import { InputField } from "../../form-fields/InputField"; import { useCurrentRoomIdStore } from "../../global-stores/useCurrentRoomIdStore"; import { showErrorToast } from "../../lib/showErrorToast"; import { useWrappedConn } from "../../shared-hooks/useConn"; import { useTypeSafePrefetch } from "../../shared-hooks/useTypeSafePrefetch"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; import { Button } from "../../ui/Button"; import { ButtonLink } from "../../ui/ButtonLink"; import { Modal } from "../../ui/Modal"; import { NativeSelect } from "../../ui/NativeSelect"; import { useRoomChatStore } from "../room/chat/useRoomChatStore"; interface CreateRoomModalProps { onRequestClose: () => void; data?: { name: string; description: string; privacy: string; }; edit?: boolean; } export const CreateRoomModal: React.FC = ({ onRequestClose, data, edit, }) => { const conn = useWrappedConn(); const { t } = useTypeSafeTranslation(); const { push } = useRouter(); const prefetch = useTypeSafePrefetch(); return ( initialValues={ data ? data : { name: "", description: "", privacy: "public", } } validateOnChange={false} validateOnBlur={false} validate={({ name, description }) => { const errors: Record = {}; if (name.length < 2 || name.length > 60) { return { name: t("components.modals.createRoomModal.nameError"), }; } else if (description.length > 500) { return { description: t( "components.modals.createRoomModal.descriptionError" ), }; } return errors; }} onSubmit={async ({ name, privacy, description }) => { const d = { name, privacy, description }; const resp = edit ? await conn.mutation.editRoom(d) : await conn.mutation.createRoom(d); if (typeof resp === "object" && "error" in resp) { showErrorToast(resp.error); return; } else if (resp.room) { const { room } = resp; prefetch(["joinRoomAndGetInfo", room.id], [room.id]); console.log("new room voice server id: " + room.voiceServerId); useRoomChatStore.getState().clearChat(); useCurrentRoomIdStore.getState().setCurrentRoomId(room.id); push(`/room/[id]`, `/room/${room.id}`); } onRequestClose(); }} > {({ setFieldValue, values, isSubmitting }) => (

{edit ? t("pages.home.editRoom") : t("pages.home.createRoom")}

{t("components.modals.createRoomModal.subtitle")}
{ setFieldValue("privacy", e.target.value); }} >
{t("common.cancel")}
)}
); }; ================================================ FILE: kibbeh/src/modules/dashboard/DashboardPage.tsx ================================================ import React from "react"; import { PageComponent } from "../../types/PageComponent"; import { WaitForWsAndAuth } from "../auth/WaitForWsAndAuth"; import { HeaderController } from "../display/HeaderController"; import { DefaultDesktopLayout } from "../layouts/DefaultDesktopLayout"; import { FeedController } from "./FeedController"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; interface LoungePageProps {} export const DashboardPage: PageComponent = ({}) => { const { t } = useTypeSafeTranslation(); return ( ); }; DashboardPage.ws = true; ================================================ FILE: kibbeh/src/modules/dashboard/FeedController.tsx ================================================ import isElectron from "is-electron"; import { useRouter } from "next/router"; import React, { useContext, useEffect, useState } from "react"; import { useCurrentRoomIdStore } from "../../global-stores/useCurrentRoomIdStore"; import { useDownloadAlertStore } from "../../global-stores/useDownloadAlertStore"; import { isServer } from "../../lib/isServer"; import { useScreenType } from "../../shared-hooks/useScreenType"; import { useTypeSafePrefetch } from "../../shared-hooks/useTypeSafePrefetch"; import { useTypeSafeQuery } from "../../shared-hooks/useTypeSafeQuery"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; import { useTypeSafeUpdateQuery } from "../../shared-hooks/useTypeSafeUpdateQuery"; import { Button } from "../../ui/Button"; import { CenterLoader } from "../../ui/CenterLoader"; import { FeedHeader } from "../../ui/FeedHeader"; import { RoomCard } from "../../ui/RoomCard"; import { MiddlePanel } from "../layouts/GridPanels"; import { useRoomChatStore } from "../room/chat/useRoomChatStore"; import { EditScheduleRoomModalController } from "../scheduled-rooms/EditScheduleRoomModalController"; import { ScheduledRoomCard } from "../scheduled-rooms/ScheduledRoomCard"; import { WebSocketContext } from "../ws/WebSocketProvider"; import { CreateRoomModal } from "./CreateRoomModal"; interface FeedControllerProps {} const Page = ({ cursor, isLastPage, onLoadMore, }: { cursor: number; isLastPage: boolean; isOnlyPage: boolean; onLoadMore: (o: number) => void; }) => { const { currentRoomId } = useCurrentRoomIdStore(); const { push } = useRouter(); const prefetch = useTypeSafePrefetch(); const { t } = useTypeSafeTranslation(); const shouldAlert = useDownloadAlertStore().shouldAlert; const { isLoading, data } = useTypeSafeQuery( ["getTopPublicRooms", cursor], { staleTime: Infinity, enabled: !isServer, refetchOnMount: "always", refetchInterval: 10000, }, [cursor] ); useEffect(() => { if (isElectron()) { const ipcRenderer = window.require("electron").ipcRenderer; ipcRenderer.send("@rpc/page", { page: "home", opened: true, modal: false, data: data?.rooms.length, }); return () => { ipcRenderer.send("@rpc/page", { page: "home", opened: false, modal: false, data: data?.rooms.length, }); }; } }, [data]); // useEffect(() => { // if (shouldAlert && !isElectron()) { // showErrorToast( // t("pages.home.desktopAlert"), // "sticky", // { // window.location.href = window.location.origin + "/download"; // }} // > // Download // , // () => { // localStorage.setItem("@baklava/showDownloadAlert", "false"); // } // ); // } // }, []); if (isLoading) { return ; } if (!data) { return null; } // if (isOnlyPage && data.rooms.length === 0) { // return ( // // ); // } return ( <> {data.rooms.map((room) => ( { if (room.id !== currentRoomId) { useRoomChatStore.getState().reset(); prefetch(["joinRoomAndGetInfo", room.id], [room.id]); } push(`/room/[id]`, `/room/${room.id}`); }} key={room.id} title={room.name} subtitle={ "peoplePreviewList" in room ? room.peoplePreviewList .slice(0, 3) .map((x) => x.displayName) .join(", ") : "" } avatars={ "peoplePreviewList" in room ? room.peoplePreviewList .map((x) => x.avatarUrl!) .slice(0, 3) .filter((x) => x !== null) : [] } listeners={"numPeopleInside" in room ? room.numPeopleInside : 0} tags={[]} /> ))} {isLastPage && data.nextCursor ? (
) : null} ); }; // const isMac = process.platform === "darwin"; export const FeedController: React.FC = ({}) => { const [cursors, setCursors] = useState([0]); const { conn } = useContext(WebSocketContext); const { t } = useTypeSafeTranslation(); const [roomModal, setRoomModal] = useState(false); const { data } = useTypeSafeQuery("getMyScheduledRoomsAboutToStart", { enabled: !!conn, refetchOnMount: "always", }); const updater = useTypeSafeUpdateQuery(); const screenType = useScreenType(); const { currentRoomId } = useCurrentRoomIdStore(); let mb = "mb-7"; if (screenType === "fullscreen") { if (currentRoomId) { mb = "mb-15"; } else { mb = "mb-8"; } } // useEffect(() => { // if (isElectron() && isMac) { // modalAlert(t("common.requestPermissions")); // } // }, [t]); if (!conn) { return null; } return ( { setRoomModal(true); }} title={t("modules.feed.yourFeed")} /> } >
{data?.scheduledRooms?.map((sr) => ( { updater("getMyScheduledRoomsAboutToStart", (x) => { return !x ? x : { scheduledRooms: x.scheduledRooms.map((y) => y.id === sr.id ? { ...sr, name: editedRoomData.name, description: editedRoomData.description, scheduledFor: editedRoomData.scheduledFor.toISOString(), } : y ), }; }); }} > {({ onEdit }) => ( updater("getMyScheduledRoomsAboutToStart", (x) => !x ? x : { scheduledRooms: x.scheduledRooms.filter( (y) => y.id !== sr.id ), } ) } onEdit={() => onEdit({ cursor: "", scheduleRoomToEdit: sr })} noCopyLinkButton /> )} ))} {cursors.map((cursor, i) => ( setCursors([...cursors, c])} isLastPage={i === cursors.length - 1} /> ))}
{roomModal && ( setRoomModal(false)} /> )}
); }; ================================================ FILE: kibbeh/src/modules/dashboard/FollowingOnlineController.tsx ================================================ import React, { useState } from "react"; import { useConn } from "../../shared-hooks/useConn"; import { useTypeSafeQuery } from "../../shared-hooks/useTypeSafeQuery"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; import { FollowerOnline, FollowersOnlineShowMore, FollowersOnlineWrapper, } from "../../ui/FollowersOnline"; import { InfoText } from "../../ui/InfoText"; interface FriendsOnlineControllerProps {} const Page: React.FC<{ cursor: number; onLoadMore: (cursor: number) => void; isLastPage: boolean; isOnlyPage: boolean; }> = ({ cursor, isLastPage, isOnlyPage, onLoadMore }) => { const { t } = useTypeSafeTranslation(); const { data, isLoading } = useTypeSafeQuery( ["getMyFollowing", cursor], { refetchOnMount: "always", }, [cursor] ); if (isOnlyPage && !isLoading && !data?.users.length) { return {t("components.followingOnline.noOnline")}; } return ( <> {data?.users.map((u) => ( ))} {isLastPage && data?.nextCursor ? ( onLoadMore(data!.nextCursor!)} /> ) : null} ); }; export const FollowingOnlineController: React.FC = ({}) => { const [cursors, setCursors] = useState([0]); const conn = useConn(); if (!conn) { return null; } return ( {cursors.map((c, i) => ( setCursors([...cursors, nc])} isLastPage={i === cursors.length - 1} isOnlyPage={cursors.length === 1} /> ))} ); }; ================================================ FILE: kibbeh/src/modules/dashboard/MinimizedRoomCardController.tsx ================================================ import { useRouter } from "next/router"; import React from "react"; import { useDeafStore } from "../../global-stores/useDeafStore"; import { useMuteStore } from "../../global-stores/useMuteStore"; import { useCurrentRoomFromCache } from "../../shared-hooks/useCurrentRoomFromCache"; import { useCurrentRoomInfo } from "../../shared-hooks/useCurrentRoomInfo"; import { useLeaveRoom } from "../../shared-hooks/useLeaveRoom"; import { useSetDeaf } from "../../shared-hooks/useSetDeaf"; import { useSetMute } from "../../shared-hooks/useSetMute"; import { MinimizedRoomCard } from "../../ui/MinimizedRoomCard"; export const MinimizedRoomCardController: React.FC = ({}) => { const data = useCurrentRoomFromCache(); const { canSpeak } = useCurrentRoomInfo(); const { leaveRoom, isLoading } = useLeaveRoom(); const { muted } = useMuteStore(); const { deafened } = useDeafStore(); const setMute = useSetMute(); const setDeaf = useSetDeaf(); const router = useRouter(); if (!data || "error" in data) { return null; } const { room } = data; const dt = new Date(room.inserted_at); return ( router.push(`/room/${room.id}`)} leaveLoading={isLoading} room={{ name: room.name, speakers: room.peoplePreviewList.slice(0, 3).map((s) => s.displayName), roomStartedAt: dt, myself: { isDeafened: deafened, isSpeaker: canSpeak, isMuted: muted, leave: () => { leaveRoom(); }, switchDeafened: () => { setDeaf(!deafened); }, switchMuted: () => { setMute(!muted); }, }, }} /> ); }; ================================================ FILE: kibbeh/src/modules/dashboard/ProfileBlockController.tsx ================================================ import { useRouter } from "next/router"; import React, { useEffect, useState } from "react"; import { useCurrentRoomIdStore } from "../../global-stores/useCurrentRoomIdStore"; import { ContributorBadge, StaffBadge } from "../../icons/badges"; import { useConn } from "../../shared-hooks/useConn"; import { useTypeSafeQuery } from "../../shared-hooks/useTypeSafeQuery"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; import { useTypeSafeUpdateQuery } from "../../shared-hooks/useTypeSafeUpdateQuery"; import useWindowSize from "../../shared-hooks/useWindowSize"; import { ProfileBlock } from "../../ui/ProfileBlock"; import { UpcomingRoomsCard } from "../../ui/UpcomingRoomsCard"; import { badge, UserSummaryCard } from "../../ui/UserSummaryCard"; import { CreateScheduleRoomModal } from "../scheduled-rooms/CreateScheduledRoomModal"; import { EditProfileModal } from "../user/EditProfileModal"; import { MinimizedRoomCardController } from "./MinimizedRoomCardController"; interface ProfileBlockControllerProps {} export const ProfileBlockController: React.FC = ({}) => { const [upcomingCount, setUpcomingCount] = useState(3); const { currentRoomId } = useCurrentRoomIdStore(); const conn = useConn(); const [showEditProfileModal, setShowEditProfileModal] = useState(false); const [ showCreateScheduleRoomModal, setShowCreateScheduleRoomModal, ] = useState(false); const { data } = useTypeSafeQuery(["getScheduledRooms", ""]); const { push } = useRouter(); const update = useTypeSafeUpdateQuery(); const { height } = useWindowSize(); const { t } = useTypeSafeTranslation(); const badges: badge[] = []; if (conn.user.staff) { badges.push({ content: , variant: "primary", color: "white", title: t("components.userBadges.dhStaff"), naked: true, }); } if (conn.user.contributions > 0) { badges.push({ content: , variant: "primary", color: "white", title: `${t("components.userBadges.dhContributor")} (${conn.user.contributions} ${t("pages.admin.contributions")})`, naked: true, }); } if (conn.user.botOwnerId) { badges.push({ content: t("pages.viewUser.bot"), variant: "primary", color: "white", title: t("pages.viewUser.bot"), }); } useEffect(() => { if (height && height < 780) { setUpcomingCount(2); } else { setUpcomingCount(3); } }, [height]); return ( <> setShowEditProfileModal(false)} /> {showCreateScheduleRoomModal ? ( { update(["getScheduledRooms", ""], (d) => { return { rooms: [ { roomId: null, creator: conn.user!, creatorId: conn.user!.id, description: srData.description, id: resp.scheduledRoom.id, name: srData.name, numAttending: 0, scheduledFor: srData.scheduledFor.toISOString(), }, ...(d?.rooms || []), ], nextCursor: d?.nextCursor, }; }); }} onRequestClose={() => setShowCreateScheduleRoomModal(false)} /> ) : null} ) : ( setShowEditProfileModal(true)} badges={badges} website="" isOnline={false} {...conn.user} username={conn.user.username} /> ) } bottom={ setShowCreateScheduleRoomModal(true)} rooms={ data?.rooms.slice(0, upcomingCount).map((sr) => ({ onClick: () => { push(`/scheduled-room/[id]`, `/scheduled-room/${sr.id}`); }, id: sr.id, scheduledFor: new Date(sr.scheduledFor), title: sr.name, speakersInfo: { avatars: [sr.creator.avatarUrl], speakers: [sr.creator.username], }, })) || [] } /> } /> ); }; ================================================ FILE: kibbeh/src/modules/debugging/AudioDebugAvatar.tsx ================================================ import React, { useEffect, useState } from "react"; import hark from "hark"; import { useConsumerStore } from "../webrtc/stores/useConsumerStore"; interface AudioDebugAvatarProps { id: string; } const colorMap = { "no-consumer": "red", closed: "orange", good: "green", }; export const AudioDebugAvatar: React.FC = ({ id, children, }) => { const [n, setN] = useState(0); const { consumerMap } = useConsumerStore(); const consumer = consumerMap[id]; let state = ""; if (!consumer) { state = "no-consumer"; } else if (consumer.consumer.closed) { state = "closed"; } else { state = "good"; } useEffect(() => { if (!consumer) { return; } const harker = hark(new MediaStream([consumer.consumer.track])); harker.setInterval(500); harker.on("volume_change", (x) => { const min = -100; const max = 100; // normalize between 0 and 1 setN((x - min) / (max - min)); }); return () => { harker.stop(); }; // eslint-disable-next-line react-hooks/exhaustive-deps }, [consumer?.consumer.id]); return (
{children}
); }; ================================================ FILE: kibbeh/src/modules/debugging/AudioDebugPanel.tsx ================================================ import { detectDevice } from "mediasoup-client"; import React, { useEffect, useState } from "react"; import { useVoiceStore } from "../webrtc/stores/useVoiceStore"; interface AudioDebugPanelProps {} export const AudioDebugPanel: React.FC = ({}) => { const [, rerender] = useState(0); const { recvTransport } = useVoiceStore(); useEffect(() => { if (!recvTransport) { return; } const listener = () => { rerender((c) => c + 1); }; recvTransport.on("connectionstatechange", listener); return () => { recvTransport.removeListener("connectionstatechange", listener); }; }, [recvTransport]); const [supportedDevice] = useState(() => !!detectDevice()); return (

Audio Debug Information

recv transport state:{" "} {recvTransport?.connectionState}
{!supportedDevice ? (
WARNING: Your browser is not officially supported and has defaulted to Chrome74 audio driver which may affect your experience.{" "} List of supported browsers.
) : null}
); }; ================================================ FILE: kibbeh/src/modules/developer/Bot.tsx ================================================ export interface Bot { id: string; username: string; avatarUrl: string; displayName: string; apiKey: string; } ================================================ FILE: kibbeh/src/modules/developer/BotCard.tsx ================================================ import React from "react"; import { useRouter } from "next/router"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; import { SingleUser } from "../../ui/UserAvatar"; import { Bot } from "./Bot"; interface BotCardProps { bot: Bot } export const BotCard: React.FC = ({ bot }) => { const { t } = useTypeSafeTranslation(); const { push } = useRouter(); return ( ); }; ================================================ FILE: kibbeh/src/modules/developer/BotIcon.tsx ================================================ import React, { useState } from "react"; interface BotIconProps { username?: string; src: string; onClick: () => any; } export const BotIcon: React.FC = ({ username, src, onClick }) => { const [isError, setError] = useState(false); return (
{`${username setError(true)} src={ isError ? `https://ui-avatars.com/api/${ username ? `&name=${username}` : "&name" }&rounded=true&background=B23439&bold=true&color=FFFFFF` : src } />
); }; ================================================ FILE: kibbeh/src/modules/developer/BotInfo.tsx ================================================ import React from "react"; import { Bot } from "./Bot"; import { BotIcon } from "./BotIcon"; interface BotInfoProps { bot: Bot; onClick: () => any; } export const BotInfo: React.FC = ({ bot, onClick }) => { return (
{bot.displayName}
@{bot.username}
); }; ================================================ FILE: kibbeh/src/modules/developer/BotsEditPage.tsx ================================================ import React from "react"; import { PageComponent } from "../../types/PageComponent"; import { WaitForWsAndAuth } from "../auth/WaitForWsAndAuth"; import { HeaderController } from "../display/HeaderController"; import { MainLayout } from "../layouts/MainLayout"; import { FloatingRoomInfo } from "../layouts/FloatingRoomInfo"; import { TabletSidebar } from "../layouts/TabletSidebar"; import { DeveloperPanel } from "./DeveloperPanel"; import { ProfileBlockController } from "../dashboard/ProfileBlockController"; import { EditBot } from "./EditBot"; interface BotsEditPageProps {} export const BotsEditPage: PageComponent = ({}) => { return ( } tabletSidebar={} leftPanel={} rightPanel={} mobileHeader={undefined} > ); }; BotsEditPage.ws = true; ================================================ FILE: kibbeh/src/modules/developer/BotsPage.tsx ================================================ import React from "react"; import { PageComponent } from "../../types/PageComponent"; import { WaitForWsAndAuth } from "../auth/WaitForWsAndAuth"; import { HeaderController } from "../display/HeaderController"; import { MainLayout } from "../layouts/MainLayout"; import { FloatingRoomInfo } from "../layouts/FloatingRoomInfo"; import { TabletSidebar } from "../layouts/TabletSidebar"; import { DeveloperPanel } from "./DeveloperPanel"; import { ProfileBlockController } from "../dashboard/ProfileBlockController"; import { YourBots } from "./YourBots"; export const BotsPage: PageComponent = ({}) => { return ( } tabletSidebar={} leftPanel={} rightPanel={} mobileHeader={undefined} > ); }; BotsPage.ws = true; ================================================ FILE: kibbeh/src/modules/developer/CreateBotModal.tsx ================================================ import { Form, Formik } from "formik"; import React from "react"; import { InputField } from "../../form-fields/InputField"; import { useWrappedConn } from "../../shared-hooks/useConn"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; import { Button } from "../../ui/Button"; import { ButtonLink } from "../../ui/ButtonLink"; import { Modal } from "../../ui/Modal"; import { showErrorToast } from "../../lib/showErrorToast"; interface CreateBotModalProps { onRequestClose: () => void; data?: { username: string; }; } export const CreateBotModal: React.FC = ({ onRequestClose, data, }) => { const { t } = useTypeSafeTranslation(); const wrapper = useWrappedConn(); return ( initialValues={ data ? data : { username: "", } } validateOnChange={false} validateOnBlur={false} onSubmit={({ username }) => { wrapper.mutation.userCreateBot(username).then((r) => { if (r.isUsernameTaken) { showErrorToast( t("components.modals.createBotModal.usernameTaken") ); } if (r.error) { showErrorToast(r.error); } }); onRequestClose(); }} > {({ isSubmitting }) => (

{t("components.modals.createBotModal.title")}

{t("components.modals.createBotModal.subtitle")}
{t("common.cancel")}
)}
); }; ================================================ FILE: kibbeh/src/modules/developer/DeveloperNavButton.tsx ================================================ import { useRouter } from "next/router"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; export const DeveloperNavButton: React.FC<{ title: string, icon: React.ReactNode, href: string }> = ({ title, icon, href }) => { const { t } = useTypeSafeTranslation(); const { push } = useRouter(); return ( ); }; ================================================ FILE: kibbeh/src/modules/developer/DeveloperPanel.tsx ================================================ import { BotIcon } from "../../icons"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; import { DeveloperNavButton } from "./DeveloperNavButton"; export const DeveloperPanel: React.FC = ({}) => { const { t } = useTypeSafeTranslation(); return (

{t("components.settingsDropdown.developer")}

} />
); }; ================================================ FILE: kibbeh/src/modules/developer/EditBot.tsx ================================================ import React, { useEffect, useState } from "react"; import { Bot } from "./Bot"; import { BotInfo } from "./BotInfo"; import { useWrappedConn } from "../../shared-hooks/useConn"; import { Button } from "../../ui/Button"; import { useRouter } from "next/router"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; export const EditBot = ({}) => { const { query } = useRouter(); const username = query.username; const [showapiKey, setShowapiKey] = useState(false); const [bots, setBots] = useState>([]); const [bot, setBot] = useState(); const wrapper = useWrappedConn(); const { t } = useTypeSafeTranslation(); useEffect(() => { wrapper.connection.sendCall("user:get_bots", {}).then((v: any) => { setBots(v.bots); }); }, []); useEffect(() => { setBot(bots.find((b) => b.username === username)); }, [bots]); if (!bot) { return
{t("common.error")}
; } return (
{t("pages.botEdit.title")}
{}} />
{t("pages.botEdit.apiKey")}
setShowapiKey(true)} > {showapiKey ? bot.apiKey : t("pages.botEdit.reveal")}
); }; EditBot.ws = true; ================================================ FILE: kibbeh/src/modules/developer/YourBots.tsx ================================================ import React, { useEffect, useState } from "react"; import { BotCard } from "./BotCard"; import { Bot } from "./Bot"; import { useWrappedConn } from "../../shared-hooks/useConn"; import { CreateBotModal } from "./CreateBotModal"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; export const YourBots: React.FC = ({}) => { const [bots, setBots] = useState>([]); const [modal, setModal] = useState(false); const botsParsed = bots.map((v, i) => ( )); const wrapper = useWrappedConn(); const { t } = useTypeSafeTranslation(); // wrapper.wrapperection.sendCall('user:create_bot', {username: 'ttttt'}).then(v => console.log(v)); useEffect(() => { wrapper.connection.sendCall("user:get_bots", {}).then((v: any) => { setBots(v.bots); }); }, [modal]); return (
{t('pages.botEdit.yourBots')} ({bots.length})
{bots.length < 5 ? ( ) : (
Max amount of bots reached!
)}
{botsParsed}
{modal && setModal(false)} />}
); }; ================================================ FILE: kibbeh/src/modules/display/HeaderController.tsx ================================================ import React from "react"; import Header from "next/head"; import { NextPage } from "next"; import { baseUrl } from "../../lib/constants"; export interface HeaderControllerProps { title?: string; embed?: { hexColor?: string; image?: string }; owner?: string; additionalKeywords?: string[]; description?: string; } export const HeaderController: NextPage = ({ title, description = "Dogehouse is taking voice conversations to the moon 🚀", owner, additionalKeywords = [], embed, }) => { return (
{title ? {title} | DogeHouse : DogeHouse} {owner ? : ""} `, ${k}`)}`} /> {embed ? ( <> {owner ? : ""} ) : ( "" )}
); }; ================================================ FILE: kibbeh/src/modules/display/TextParser.tsx ================================================ import React from 'react'; import { linkRegex } from '../../lib/constants'; import emojiRegex from "emoji-regex"; import { ParseTextToTwemoji } from '../../ui/Twemoji'; interface TextParserProps { children: string } export const TextParser: React.FC = ({ children }) => { return (<> {children.split(/(?=[ ,\n])|(?<=[ ,\n])/g).map((text, i) => { if (new RegExp(linkRegex).test(text)) return {text}; if (emojiRegex().test(text)) return ; return text; })} ); }; ================================================ FILE: kibbeh/src/modules/errors/ErrorToastController.tsx ================================================ import React from "react"; import { MainInnerGrid } from "../../ui/MainGrid"; import { ErrorToast } from "../../ui/ErrorToast"; import { useErrorToastStore } from "./useErrorToastStore"; interface ErrorToastControllerProps {} export const ErrorToastController: React.FC = ({}) => { const { toasts, hideToast } = useErrorToastStore(); return (
{toasts.map((t) => (
hideToast(t.id)} />
))}
); }; ================================================ FILE: kibbeh/src/modules/errors/useErrorToastStore.tsx ================================================ import React from "react"; import create from "zustand"; import { combine } from "zustand/middleware"; import { v4 } from "uuid"; import { ToastDurations } from "../../ui/ErrorToast"; type Toast = { id: string; button?: React.ReactNode; duration?: ToastDurations; message: string; }; export const useErrorToastStore = create( combine( { toasts: [] as Toast[], }, (set) => ({ hideToast: (id: string) => set((x) => ({ toasts: x.toasts.filter((y) => y.id !== id) })), showToast: (t: Omit) => set((x) => { const currentRemovedToasts: Toast[] = x.toasts.filter((y) => y.message !== t.message); return { toasts: [...currentRemovedToasts, { ...t, id: v4() }] }; }), }) ) ); ================================================ FILE: kibbeh/src/modules/keyboard-shortcuts/ChatKeybind.tsx ================================================ import React, { useEffect, useState } from "react"; import { recordKeyCombination } from "react-hotkeys"; import { useKeyMapStore } from "../../global-stores/useKeyMapStore"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; import { Button } from "../../ui/Button"; interface ChatKeybindProps { className?: string; } export const ChatKeybind: React.FC = ({ className }) => { const [count, setCount] = useState(0); const [active, setActive] = useState(false); const { t } = useTypeSafeTranslation(); const { keyNames: { CHAT }, setChatKeybind, } = useKeyMapStore(); useEffect(() => { if (count > 0) { const unsub = recordKeyCombination(({ id }) => { setActive(false); setChatKeybind(id as string); }); return () => unsub(); } }, [count, setChatKeybind]); return (
toggle chat keybind:{" "} {active ? "listening" : CHAT}
); }; ================================================ FILE: kibbeh/src/modules/keyboard-shortcuts/DeafKeybind.tsx ================================================ import React, { useEffect, useState } from "react"; import { recordKeyCombination } from "react-hotkeys"; import { useKeyMapStore } from "../../global-stores/useKeyMapStore"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; import { Button } from "../../ui/Button"; interface DeafKeybindProps { className?: string; } export const DeafKeybind: React.FC = ({ className }) => { const [count, setCount] = useState(0); const [active, setActive] = useState(false); const { t } = useTypeSafeTranslation(); const { keyNames: { DEAF }, setDeafKeybind, } = useKeyMapStore(); useEffect(() => { if (count > 0) { const unsub = recordKeyCombination(({ id }) => { setActive(false); setDeafKeybind(id as string); }); return () => unsub(); } }, [count, setDeafKeybind]); return (
{t("components.keyboardShortcuts.toggleDeafKeybind")}:{" "} {active ? t("components.keyboardShortcuts.listening") : DEAF}
); }; ================================================ FILE: kibbeh/src/modules/keyboard-shortcuts/InviteKeybind.tsx ================================================ import React, { useEffect, useState } from "react"; import { recordKeyCombination } from "react-hotkeys"; import { useKeyMapStore } from "../../global-stores/useKeyMapStore"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; import { Button } from "../../ui/Button"; interface InviteKeybindProps { className?: string; } export const InviteKeybind: React.FC = ({ className }) => { const [count, setCount] = useState(0); const [active, setActive] = useState(false); const { t } = useTypeSafeTranslation(); const { keyNames: { INVITE }, setInviteKeybind, } = useKeyMapStore(); useEffect(() => { if (count > 0) { const unsub = recordKeyCombination(({ id }) => { setActive(false); setInviteKeybind(id as string); }); return () => unsub(); } }, [count, setInviteKeybind]); return (
invite keybind:{" "} {active ? "listening" : INVITE}
); }; ================================================ FILE: kibbeh/src/modules/keyboard-shortcuts/KeybindListener.tsx ================================================ import { wrap, Wrapper } from "@dogehouse/kebab"; import isElectron from "is-electron"; import { useRouter } from "next/router"; import React, { useContext, useEffect, useMemo } from "react"; import { GlobalHotKeys } from "react-hotkeys"; import { CHAT_KEY, INVITE_KEY, MUTE_KEY, DEAF_KEY, REQUEST_TO_SPEAK_KEY, useKeyMapStore, } from "../../global-stores/useKeyMapStore"; import { useMuteStore } from "../../global-stores/useMuteStore"; import { useDeafStore } from "../../global-stores/useDeafStore"; import { modalConfirm } from "../../shared-components/ConfirmModal"; import { setMute } from "../../shared-hooks/useSetMute"; import { setDeaf } from "../../shared-hooks/useSetDeaf"; import { useRoomChatStore } from "../room/chat/useRoomChatStore"; import { WebSocketContext } from "../ws/WebSocketProvider"; let ipcRenderer: any = undefined; if (isElectron()) { ipcRenderer = window.require("electron").ipcRenderer; } interface KeybindListenerProps {} function ListenerElectron() { const { push } = useRouter(); const { conn } = useContext(WebSocketContext); const toggleOpen = useRoomChatStore((s) => s.toggleOpen); useEffect(() => { if (!conn) { return {} as any; } const wrapper: Wrapper = wrap(conn); // keybind event functions const REQUEST_TO_SPEAK_KEY_FUNC = (event: any, args: any) => { modalConfirm("Would you like to ask to speak?", () => { wrapper.mutation.askToSpeak(); }); }; const MUTE_KEY_FUNC = (event: any, args: any) => { const { muted } = useMuteStore.getState(); setMute(wrapper, !muted); }; const DEAF_KEY_FUNC = (event: any, args: any) => { const { deafened } = useDeafStore.getState(); setDeaf(wrapper, !deafened); }; const INVITE_KEY_FUNC = (event: any, args: any) => { push("/invite"); }; const PTT_STATUS_CHANGE_FUNC = (event: any, status: boolean) => { if (!event) return; const mute = status; setMute(wrapper, mute); }; const CHAT_KEY_FUNC = (event: any, args: any) => { toggleOpen(); }; // Subscribing to keybind events ipcRenderer.on(REQUEST_TO_SPEAK_KEY, REQUEST_TO_SPEAK_KEY_FUNC); ipcRenderer.on(MUTE_KEY, MUTE_KEY_FUNC); ipcRenderer.on(DEAF_KEY, DEAF_KEY_FUNC); ipcRenderer.on(INVITE_KEY, INVITE_KEY_FUNC); ipcRenderer.on("@voice/ptt_status_change", PTT_STATUS_CHANGE_FUNC); ipcRenderer.on(CHAT_KEY, CHAT_KEY_FUNC); return function cleanup() { // bUnsubscribing from keybind events ipcRenderer.removeListener( REQUEST_TO_SPEAK_KEY, REQUEST_TO_SPEAK_KEY_FUNC ); ipcRenderer.removeListener(MUTE_KEY, MUTE_KEY_FUNC); ipcRenderer.removeListener(DEAF_KEY, DEAF_KEY_FUNC); ipcRenderer.removeListener(INVITE_KEY, INVITE_KEY_FUNC); ipcRenderer.removeListener( "@voice/ptt_status_change", PTT_STATUS_CHANGE_FUNC ); ipcRenderer.removeListener(CHAT_KEY, CHAT_KEY_FUNC); }; }, [conn, push, toggleOpen]); return null; } function ListenerBrowser() { const { push } = useRouter(); const { conn } = useContext(WebSocketContext); const { keyMap } = useKeyMapStore(); const toggleOpen = useRoomChatStore((s) => s.toggleOpen); return ( { if (!conn) { return {} as any; } const wrapper = wrap(conn); return { REQUEST_TO_SPEAK: () => { modalConfirm("Would you like to ask to speak?", () => { wrapper.mutation.askToSpeak(); }); }, MUTE: () => { const { muted } = useMuteStore.getState(); setMute(wrapper, !muted); }, DEAF: () => { const { deafened } = useDeafStore.getState(); setDeaf(wrapper, !deafened); }, INVITE: () => { // wsend({ op: "fetch_invite_list", d: { cursor: 0 } }); // @todo push("/invite"); }, PTT: (e) => { if (!e) return; const mute = e.type === "keyup"; setMute(wrapper, mute); }, CHAT: toggleOpen, }; }, [push, toggleOpen, conn])} /> ); } export const KeybindListener: React.FC = ({}) => { return <>{isElectron() ? : }; }; ================================================ FILE: kibbeh/src/modules/keyboard-shortcuts/MuteKeybind.tsx ================================================ import React, { useEffect, useState } from "react"; import { recordKeyCombination } from "react-hotkeys"; import { useKeyMapStore } from "../../global-stores/useKeyMapStore"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; import { Button } from "../../ui/Button"; interface MuteKeybindProps { className?: string; } export const MuteKeybind: React.FC = ({ className }) => { const [count, setCount] = useState(0); const [active, setActive] = useState(false); const { t } = useTypeSafeTranslation(); const { keyNames: { MUTE }, setMuteKeybind, } = useKeyMapStore(); useEffect(() => { if (count > 0) { const unsub = recordKeyCombination(({ id }) => { setActive(false); setMuteKeybind(id as string); }); return () => unsub(); } }, [count, setMuteKeybind]); return (
{t("components.keyboardShortcuts.toggleMuteKeybind")}:{" "} {active ? t("components.keyboardShortcuts.listening") : MUTE}
); }; ================================================ FILE: kibbeh/src/modules/keyboard-shortcuts/OverlayKeybind.tsx ================================================ import React, { useEffect, useState } from "react"; import { recordKeyCombination } from "react-hotkeys"; import { useKeyMapStore } from "../../global-stores/useKeyMapStore"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; import { Button } from "../../ui/Button"; interface OverlayKeybindProps { className?: string; } export const OverlayKeybind: React.FC = ({ className, }) => { const [count, setCount] = useState(0); const [active, setActive] = useState(false); const { t } = useTypeSafeTranslation(); const { keyNames: { OVERLAY }, setOverlayKeybind, } = useKeyMapStore(); useEffect(() => { if (count > 0) { const unsub = recordKeyCombination(({ id }) => { setActive(false); setOverlayKeybind(id as string); }); return () => unsub(); } }, [count, setOverlayKeybind]); return (
{t("components.keyboardShortcuts.toggleOverlayKeybind")}:{" "} {active ? t("components.keyboardShortcuts.listening") : OVERLAY}
); }; ================================================ FILE: kibbeh/src/modules/keyboard-shortcuts/PTTKeybind.tsx ================================================ import React, { useEffect, useState } from "react"; import { recordKeyCombination } from "react-hotkeys"; import { useKeyMapStore } from "../../global-stores/useKeyMapStore"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; import { Button } from "../../ui/Button"; interface PTTKeybindProps { className?: string; } export const PTTKeybind: React.FC = ({ className }) => { const [count, setCount] = useState(0); const [active, setActive] = useState(false); const { t } = useTypeSafeTranslation(); const { keyNames: { PTT }, setPTTKeybind, } = useKeyMapStore(); useEffect(() => { if (count > 0) { const unsub = recordKeyCombination(({ id }) => { setActive(false); setPTTKeybind(id as string); }); return () => unsub(); } }, [count, setPTTKeybind]); return (
{t("components.keyboardShortcuts.togglePushToTalkKeybind")}:{" "} {active ? t("components.keyboardShortcuts.listening") : PTT}
); }; ================================================ FILE: kibbeh/src/modules/keyboard-shortcuts/RequestToSpeakKeybind.tsx ================================================ import React, { useEffect, useState } from "react"; import { recordKeyCombination } from "react-hotkeys"; import { useKeyMapStore } from "../../global-stores/useKeyMapStore"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; import { Button } from "../../ui/Button"; interface RequestToSpeakKeybindProps { className?: string; } export const RequestToSpeakKeybind: React.FC = ({ className, }) => { const [count, setCount] = useState(0); const [active, setActive] = useState(false); const { t } = useTypeSafeTranslation(); const { keyNames: { REQUEST_TO_SPEAK }, setRequestToSpeakKeybind, } = useKeyMapStore(); useEffect(() => { if (count > 0) { const unsub = recordKeyCombination(({ id }) => { setActive(false); setRequestToSpeakKeybind(id as string); }); return () => unsub(); } }, [count, setRequestToSpeakKeybind]); return (
request to speak keybind:{" "} {active ? "listening" : REQUEST_TO_SPEAK}
); }; ================================================ FILE: kibbeh/src/modules/keyboard-shortcuts/index.ts ================================================ export { RequestToSpeakKeybind } from "./RequestToSpeakKeybind"; export { InviteKeybind } from "./InviteKeybind"; export { MuteKeybind } from "./MuteKeybind"; export { DeafKeybind } from "./DeafKeybind"; export { ChatKeybind } from "./ChatKeybind"; export { PTTKeybind } from "./PTTKeybind"; export { OverlayKeybind } from "./OverlayKeybind"; ================================================ FILE: kibbeh/src/modules/landing-page/LoginPage.tsx ================================================ import isElectron from "is-electron"; import { useRouter } from "next/router"; import React, { useCallback, useContext, useEffect, useState } from "react"; import { LgLogo } from "../../icons"; import SvgSolidBug from "../../icons/SolidBug"; import SvgSolidDiscord from "../../icons/SolidDiscord"; import SvgSolidGitHub from "../../icons/SolidGitHub"; import SvgSolidTwitter from "../../icons/SolidTwitter"; import { apiBaseUrl, isStaging, loginNextPathKey, __prod__, } from "../../lib/constants"; import { isServer } from "../../lib/isServer"; import { Button } from "../../ui/Button"; import { useSaveTokensFromQueryParams } from "../auth/useSaveTokensFromQueryParams"; import { useTokenStore } from "../auth/useTokenStore"; import { HeaderController } from "../display/HeaderController"; import { ElectronHeader } from "../layouts/ElectronHeader"; import { WebSocketContext } from "../ws/WebSocketProvider"; /* i know this code is kinda garbage but that's because the mockup is garbage and doesn't use the design system */ interface LoginButtonProps { children: [React.ReactNode, React.ReactNode]; dev?: true; onClick?: () => void; oauthUrl?: string; // React.FC didn't like & ({ onClick: () => void } | { oauthUrl: string }) so yeah } const LoginButton: React.FC = ({ children, onClick, oauthUrl, dev, ...props }) => { const { query } = useRouter(); const clickHandler = useCallback(() => { if (typeof query.next === "string" && query.next) { try { localStorage.setItem(loginNextPathKey, query.next); } catch {} } window.location.href = oauthUrl as string; }, [query, oauthUrl]); return ( ); }; export const LoginPage: React.FC = () => { useSaveTokensFromQueryParams(); const hasTokens = useTokenStore((s) => !!(s.accessToken && s.refreshToken)); const { setConn } = useContext(WebSocketContext); const { push } = useRouter(); const [tokensChecked, setTokensChecked] = useState(false); useEffect(() => { // only want this on mount setConn(null); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); useEffect(() => { if (hasTokens) { push("/dash"); } else { setTokensChecked(true); } }, [hasTokens, push]); const queryParams = isStaging && !isServer ? "?redirect_after_base=" + window.location.origin : ""; if (!tokensChecked) return null; return ( <>
Welcome
By logging in you accept our  Privacy Policy  and  Terms of Service .
Log in with GitHub Log in with Twitter {!isElectron() ? ( Log in with Discord ) : null} {!__prod__ ? ( { // eslint-disable-next-line no-alert const name = window.prompt("username"); if (!name) { return; } const r = await fetch( `${apiBaseUrl}/dev/test-info?username=` + name ); const d = await r.json(); useTokenStore.getState().setTokens({ accessToken: d.accessToken, refreshToken: d.refreshToken, }); push("/dash"); }} data-testid="create-test-user" > Create a test user ) : null}
{/*
Download the app unavailable lol
*/}
); }; ================================================ FILE: kibbeh/src/modules/language/LanguagePage.tsx ================================================ import React from "react"; import router from "next/router"; import { PageComponent } from "../../types/PageComponent"; import { LanguageSelector } from "../../ui/LanguageSelector"; import { PageHeader } from "../../ui/mobile/MobileHeader"; import { WaitForWsAndAuth } from "../auth/WaitForWsAndAuth"; import { HeaderController } from "../display/HeaderController"; import { DefaultDesktopLayout } from "../layouts/DefaultDesktopLayout"; import { useScreenType } from "../../shared-hooks/useScreenType"; interface LanguagePageProps {} // This is temp until we have the settings page up and running export const LanguagePage: PageComponent = () => { const screenType = useScreenType(); if (screenType !== "fullscreen") router.push("/dash"); return ( router.back()} /> } >
); }; LanguagePage.ws = true; ================================================ FILE: kibbeh/src/modules/layouts/DefaultDesktopLayout.tsx ================================================ import React from "react"; import { WaitForWsAndAuth } from "../auth/WaitForWsAndAuth"; import { FollowingOnlineController } from "../dashboard/FollowingOnlineController"; import { ProfileBlockController } from "../dashboard/ProfileBlockController"; import { MainLayout } from "./MainLayout"; import { FloatingRoomInfo } from "./FloatingRoomInfo"; import { TabletSidebar } from "./TabletSidebar"; interface DefaultDesktopLayoutProps { mobileHeader?: React.ReactNode } export const DefaultDesktopLayout: React.FC = ({ children, mobileHeader = undefined, }) => { return ( } tabletSidebar={} leftPanel={} rightPanel={} mobileHeader={mobileHeader} > {children} ); }; ================================================ FILE: kibbeh/src/modules/layouts/ElectronHeader.tsx ================================================ import isElectron from "is-electron"; import React, { useState } from "react"; import { WinMaximizeIcon, WinCloseIcon, WinMinimizeIcon, MacMaximizeIcon, MacCloseIcon, MacMinimizeIcon, } from "../../icons"; import { useHostStore } from "../../global-stores/useHostStore"; import { MacButton } from "../../ui/MacButton"; import { WinButton } from "../../ui/WinButton"; let ipcRenderer: any = undefined; if (isElectron()) { ipcRenderer = window.require("electron").ipcRenderer; } function WinHeader() { return (
DogeHouse
} className="hover:bg-accent-hover" onClick={() => { if (isElectron()) ipcRenderer.send("@app/quit"); }} /> } onClick={() => { if (isElectron()) ipcRenderer.send("@app/maximize"); }} /> } onClick={() => { if (isElectron()) ipcRenderer.send("@app/minimize"); }} />
); } function MacHeader() { const [hovering, setHovering] = useState(false); return (
{ setHovering(true); }} onMouseLeave={() => { setHovering(false); }} > : null} color="red" onClick={() => { if (isElectron()) ipcRenderer.send("@app/quit"); }} /> : null} color="yellow" onClick={() => { if (isElectron()) ipcRenderer.send("@app/minimize"); }} /> : null} color="green" onClick={() => { if (isElectron()) ipcRenderer.send("@app/maximize"); }} />
); } export function ElectronHeader() { if (!isElectron() || useHostStore.getState().isLinux) { return null; } return useHostStore.getState().isMac ? : ; } ================================================ FILE: kibbeh/src/modules/layouts/FloatingRoomInfo.tsx ================================================ import { useRouter } from "next/router"; import React, { useRef } from "react"; import { useDeafStore } from "../../global-stores/useDeafStore"; import { SolidDeafened, SolidDeafenedOff, SolidMicrophone } from "../../icons"; import SvgSolidMicrophoneOff from "../../icons/SolidMicrophoneOff"; import { useCurrentRoomFromCache } from "../../shared-hooks/useCurrentRoomFromCache"; import { useCurrentRoomInfo } from "../../shared-hooks/useCurrentRoomInfo"; import { useSetDeaf } from "../../shared-hooks/useSetDeaf"; import { useSetMute } from "../../shared-hooks/useSetMute"; import { BoxedIcon } from "../../ui/BoxedIcon"; import { MultipleUsers } from "../../ui/UserAvatar"; import { a, useSpring, config } from "react-spring"; import { useDrag } from "react-use-gesture"; import { useBoundingClientRect } from "../../shared-hooks/useBoundingClientRect"; import { useLeaveRoom } from "../../shared-hooks/useLeaveRoom"; import { useMuteStore } from "../../global-stores/useMuteStore"; import { useMediaQuery } from "react-responsive"; export const FloatingRoomInfo: React.FC = () => { const data = useCurrentRoomFromCache(); const { canSpeak } = useCurrentRoomInfo(); const { muted } = useMuteStore(); const setMute = useSetMute(); const { deafened } = useDeafStore(); const setDeaf = useSetDeaf(); const router = useRouter(); const { leaveRoom } = useLeaveRoom(); const is1Cols = useMediaQuery({ minWidth: 800 }); const [{ y }, api] = useSpring(() => ({ y: 0 })); const floatingRef = useRef(null); const bbox = useBoundingClientRect(floatingRef); const close = () => { api({ y: bbox ? bbox.height : 60, immediate: false, config: { ...config.default }, onRest: () => leaveRoom(), }); }; const bind = useDrag( ({ last, down, movement: [, my] }) => { api.start({ y: down ? my : 0, config: { mass: 1, tension: 500, friction: 50 }, }); if (last && bbox) { if (y.get() > bbox.height / 3) { close(); } } }, { axis: "y", bounds: { top: 0, left: 0, right: 0, }, useTouch: true, } ); if (!data || "error" in data) { return null; } const { room } = data; const avatars = "peoplePreviewList" in room ? room.peoplePreviewList .map((x) => x.avatarUrl!) .slice(0, 2) .filter((x) => x !== null) : []; const bgStyles = { opacity: y.to([0, bbox ? bbox.height : 60], [1, 0], "clamp"), }; return (
{canSpeak ? ( { setMute(!muted); }} className={`w-7 mr-2 ${ !muted && !deafened ? "bg-accent text-button" : "" }`} > {muted || deafened ? ( ) : ( )} ) : null} { setDeaf(!deafened); }} className={`w-7 ${deafened ? "bg-accent" : ""}`} > {deafened ? : }
); }; ================================================ FILE: kibbeh/src/modules/layouts/GridPanels.tsx ================================================ import isElectron from "is-electron"; import React, { FC, useContext } from "react"; import { useIsElectronMobile } from "../../global-stores/useElectronMobileStore"; import { useHostStore } from "../../global-stores/useHostStore"; import { useScreenType } from "../../shared-hooks/useScreenType"; import { FixedGridPanel, GridPanel } from "../../ui/GridPanel"; import LeftHeader from "../../ui/header/LeftHeader"; import { MiddleHeader } from "../../ui/header/MiddleHeader"; import RightHeader from "../../ui/header/RightHeader"; import { WebSocketContext } from "../ws/WebSocketProvider"; interface LeftPanelProps {} const HeaderWrapper: FC = ({ children }) => (
{children}
); export const LeftPanel: React.FC = ({ children }) => { return ( {children} ); }; export const MiddlePanel: React.FC< LeftPanelProps & { stickyChildren?: React.ReactNode } > = ({ stickyChildren, children }) => { const screenType = useScreenType(); return (
{screenType !== "fullscreen" ? ( ) : ( "" )} {stickyChildren}
{children}
); }; export const RightPanel: React.FC = ({ children }) => { const { conn } = useContext(WebSocketContext); return ( {conn ? : null} {children} ); }; ================================================ FILE: kibbeh/src/modules/layouts/MainLayout.tsx ================================================ import isElectron from "is-electron"; import router from "next/router"; import React from "react"; import { useIsElectronMobile } from "../../global-stores/useElectronMobileStore"; import { useHostStore } from "../../global-stores/useHostStore"; import { SolidCalendar, SolidHome, SolidPersonAdd, SolidPlus, SolidUser, } from "../../icons"; import { useConn } from "../../shared-hooks/useConn"; import { useScreenType } from "../../shared-hooks/useScreenType"; import { MainInnerGrid } from "../../ui/MainGrid"; import { AccountOverlay } from "../../ui/mobile/AccountOverlay"; import { ProfileHeader } from "../../ui/mobile/MobileHeader"; import { MobileNav } from "../../ui/mobile/MobileNav"; import { ElectronHeader } from "./ElectronHeader"; import { FloatingRoomInfo } from "./FloatingRoomInfo"; import { LeftPanel, RightPanel } from "./GridPanels"; import { TabletSidebar } from "./TabletSidebar"; interface MainLayoutProps { floatingRoomInfo?: React.ReactNode; tabletSidebar?: React.ReactNode; leftPanel?: React.ReactNode; rightPanel?: React.ReactNode; mobileHeader?: React.ReactNode /** This is an optional parameter in-case you want a custom mobile header (e.g a search header) */; plusButtonURL?: string /** This adds a plus button in the bottom mobile nav */; } export const MainLayout: React.FC = ({ children, leftPanel =
, rightPanel =
, tabletSidebar = , floatingRoomInfo = , mobileHeader, plusButtonURL, }) => { const screenType = useScreenType(); const conn = useConn()!; const me = conn ? conn.user : undefined; const mHeader = mobileHeader || ( router.push("/search")} /> ); const items = [ { icon: , targetPath: "/dash" }, { icon: , targetPath: "/scheduled-rooms" }, ]; if (plusButtonURL) { items.push({ icon: , targetPath: plusButtonURL }); } if (me) { items.push({ icon: , targetPath: `/u/${me.username}/following-online`, }); } let middle = null; let prepend = null; switch (screenType) { case "3-cols": middle = ( <> {leftPanel} {children} {rightPanel} ); break; case "2-cols": middle = ( <> {tabletSidebar} {children} {rightPanel} ); break; case "1-cols": middle = ( <> {tabletSidebar} {children} {floatingRoomInfo} ); break; case "fullscreen": prepend = ( <> {mHeader} ); middle = ( <> {children} {floatingRoomInfo} ); } return ( <>
{prepend}
{middle}
); }; ================================================ FILE: kibbeh/src/modules/layouts/TabletSidebar.tsx ================================================ import React, { useState } from "react"; import { SolidPlus } from "../../icons"; import { ApiPreloadLink } from "../../shared-components/ApiPreloadLink"; import { useConn } from "../../shared-hooks/useConn"; import { useTypeSafeQuery } from "../../shared-hooks/useTypeSafeQuery"; import { BoxedIcon } from "../../ui/BoxedIcon"; import { SingleUser } from "../../ui/UserAvatar"; interface FriendsOnlineControllerProps {} const Page: React.FC<{ cursor: number; onLoadMore: (cursor: number) => void; isLastPage: boolean; isOnlyPage: boolean; }> = ({ cursor, isLastPage, isOnlyPage, onLoadMore }) => { const { data, isLoading } = useTypeSafeQuery( ["getMyFollowing", cursor], { refetchOnMount: "always", }, [cursor] ); if (isOnlyPage && !isLoading && !data?.users.length) { return null; } return ( <> {data?.users.map((u) => (
))} {isLastPage && data?.nextCursor ? (
onLoadMore(data!.nextCursor!)}>
) : null} ); }; export const TabletSidebar: React.FC = ({}) => { const [cursors, setCursors] = useState([0]); const conn = useConn(); if (!conn) { return null; } return (
{cursors.map((c, i) => ( setCursors([...cursors, nc])} isLastPage={i === cursors.length - 1} isOnlyPage={cursors.length === 1} /> ))}
); }; ================================================ FILE: kibbeh/src/modules/room/AudioDebugConsumerSection.tsx ================================================ import React, { useEffect, useState } from "react"; import { Button } from "../../ui/Button"; import { useConsumerStore } from "../webrtc/stores/useConsumerStore"; interface AudioDebugConsumerSectionProps { userId: string; } export const AudioDebugConsumerSection: React.FC = ({ userId, }) => { const [, rerender] = useState(0); const { consumerMap } = useConsumerStore(); const data = consumerMap[userId]; useEffect(() => { const id = setInterval(() => { rerender((c) => c + 1); }, 1000); return () => { clearInterval(id); }; }, []); if (!data) { return null; } const { audioRef: r } = data; return (
        {r
          ? JSON.stringify(
              {
                currentTime: r.currentTime,
                paused: r.paused,
                ended: r.ended,
                readyState: r.readyState,
                duration: r.duration,
                volume: r.volume,
              },
              null,
              2
            )
          : "no audio ref"}
      
); }; ================================================ FILE: kibbeh/src/modules/room/BlockedFromRoomUsers.tsx ================================================ import React from "react"; import { useMutation, useQuery, useQueryClient } from "react-query"; import { useTypeSafeMutation } from "../../shared-hooks/useTypeSafeMutation"; import { useTypeSafeQuery } from "../../shared-hooks/useTypeSafeQuery"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; import { useTypeSafeUpdateQuery } from "../../shared-hooks/useTypeSafeUpdateQuery"; import { Button } from "../../ui/Button"; import { CenterLoader } from "../../ui/CenterLoader"; import { InfoText } from "../../ui/InfoText"; import { SingleUser } from "../../ui/UserAvatar"; interface BlockedFromRoomUsersProps {} export const GET_BLOCKED_FROM_ROOM_USERS = "get_blocked_from_room_users"; const UnbanButton = ({ userId, offset, }: { userId: string; offset: number; }) => { const updater = useTypeSafeUpdateQuery(); const { mutateAsync, isLoading } = useTypeSafeMutation("unbanFromRoom", { onSuccess: () => { updater(["getBlockedFromRoomUsers", offset], (d) => { if (!d) { return d; } return { ...d, users: d.users.filter((x) => x.id !== userId), }; }); }, }); const { t } = useTypeSafeTranslation(); return ( ); }; export const BlockedFromRoomUsersPage: React.FC<{ offset: number; onLoadMore: (newOffset: number) => void; isLastPage: boolean; isOnlyPage: boolean; }> = ({ offset, onLoadMore, isOnlyPage, isLastPage }) => { const { isLoading, data } = useTypeSafeQuery( ["getBlockedFromRoomUsers", offset], { enabled: false }, [offset] ); const { t } = useTypeSafeTranslation(); if (isLoading) { return ; } if (isOnlyPage && data?.users.length === 0) { return ( {t("components.blockedFromRoomUsers.noBans")} ); } if (!data) { return null; } return ( <> {data.users.map((profile) => (
{profile.displayName}
 (@{profile.username})
))} {isLastPage && data.nextCursor ? (
) : null} ); }; export const BlockedFromRoomUsers: React.FC = ({}) => { const [offsets, setOffsets] = React.useState([0]); const { t } = useTypeSafeTranslation(); return ( <>

{t("components.blockedFromRoomUsers.header")}

{offsets.map((offset, i) => ( setOffsets([...offsets, o])} /> ))}
); }; ================================================ FILE: kibbeh/src/modules/room/InviteRoomPage.tsx ================================================ import { useRouter } from "next/router"; import React, { useRef, useState } from "react"; import { useCurrentRoomIdStore } from "../../global-stores/useCurrentRoomIdStore"; import { SolidFriends } from "../../icons"; import { isServer } from "../../lib/isServer"; import { ApiPreloadLink } from "../../shared-components/ApiPreloadLink"; import { useWrappedConn } from "../../shared-hooks/useConn"; import { useTypeSafePrefetch } from "../../shared-hooks/useTypeSafePrefetch"; import { useTypeSafeQuery } from "../../shared-hooks/useTypeSafeQuery"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; import { PageComponent } from "../../types/PageComponent"; import { Button } from "../../ui/Button"; import { CenterLoader } from "../../ui/CenterLoader"; import { InfoText } from "../../ui/InfoText"; import { Input } from "../../ui/Input"; import { RoomCard } from "../../ui/RoomCard"; import { SingleUser } from "../../ui/UserAvatar"; import { DefaultDesktopLayout } from "../layouts/DefaultDesktopLayout"; import { MiddlePanel } from "../layouts/GridPanels"; import { useGetRoomByQueryParam } from "./useGetRoomByQueryParam"; import { HeaderController } from "../display/HeaderController"; import { FeedHeader } from "../../ui/FeedHeader"; interface InviteRoomPageProps {} const InviteButton: React.FC<{ onClick: () => void }> = ({ onClick }) => { const [invited, setInvited] = useState(false); const { t } = useTypeSafeTranslation(); return ( ); }; const Page = ({ cursor, isLastPage, onLoadMore, }: { cursor: number; isLastPage: boolean; isOnlyPage: boolean; onLoadMore: (o: number) => void; }) => { const conn = useWrappedConn(); const { t } = useTypeSafeTranslation(); const { isLoading, data } = useTypeSafeQuery( ["getInviteList", cursor], { staleTime: Infinity, enabled: !isServer, refetchOnMount: "always", }, [cursor] ); if (isLoading) { return ; } if (!data) { return null; } return ( <> {data.users.map((user) => (
{user.displayName}
@{user.username}
{ conn.mutation.inviteToRoom(user.id); }} />
))} {isLastPage && data.nextCursor ? (
) : null} ); }; export const InviteRoomPage: PageComponent = ({}) => { const { data, isLoading } = useGetRoomByQueryParam(); const { t } = useTypeSafeTranslation(); const inputRef = useRef(null); const [copied, setCopied] = useState(false); const [cursors, setCursors] = useState([0]); if (isLoading || !data || "error" in data) { return ( ); } const { room } = data; const url = window.location.origin + `/room/${room.id}`; let buttonText = "copy"; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore if (navigator.share) { buttonText = "share link to room"; } else if (copied) { buttonText = "copied"; } return ( <> {!navigator.share ? (
{t("pages.inviteList.shareRoomLink")}
) : null}
{cursors.map((cursor, i) => ( setCursors([...cursors, c])} isLastPage={i === cursors.length - 1} /> ))}
); }; InviteRoomPage.ws = true; ================================================ FILE: kibbeh/src/modules/room/RoomChatController.tsx ================================================ import React from "react"; import { useCurrentRoomFromCache } from "../../shared-hooks/useCurrentRoomFromCache"; import { RoomChat } from "./chat/RoomChat"; interface RoomChatControllerProps {} export const RoomChatController: React.FC = ({}) => { const data = useCurrentRoomFromCache(); if (!data || "error" in data) { return null; } return ; }; ================================================ FILE: kibbeh/src/modules/room/RoomOpenGraphPreview.tsx ================================================ import { Room } from "@dogehouse/kebab"; import React from "react"; import { isServer } from "../../lib/isServer"; import { HeaderController } from "../display/HeaderController"; interface RoomOpenGraphPreviewProps { room: Room | null | undefined; } export const RoomOpenGraphPreview: React.FC = ({ room, children, }) => { if (isServer && room) { const { name, description } = room; return ( ); } return <>{children}; }; ================================================ FILE: kibbeh/src/modules/room/RoomPage.tsx ================================================ import { JoinRoomAndGetInfoResponse, Room } from "@dogehouse/kebab"; import router, { useRouter } from "next/router"; import React, { useState } from "react"; import { validate } from "uuid"; import { isServer } from "../../lib/isServer"; import { defaultQueryFn } from "../../lib/defaultQueryFn"; import { PageComponent } from "../../types/PageComponent"; import { WaitForWsAndAuth } from "../auth/WaitForWsAndAuth"; import { FollowingOnlineController } from "../dashboard/FollowingOnlineController"; import { MainLayout } from "../layouts/MainLayout"; import { TabletSidebar } from "../layouts/TabletSidebar"; import { RoomChatController } from "./RoomChatController"; import { RoomOpenGraphPreview } from "./RoomOpenGraphPreview"; import { RoomPanelController } from "./RoomPanelController"; import { UserPreviewModalProvider } from "./UserPreviewModalProvider"; import { PageHeader } from "../../ui/mobile/MobileHeader"; import { useLeaveRoom } from "../../shared-hooks/useLeaveRoom"; import { useConn } from "../../shared-hooks/useConn"; interface RoomPageProps { room?: Room; } export const RoomPage: PageComponent = ({ room }) => { const { query, back } = useRouter(); const key = typeof query.id === "string" ? query.id : ""; const { leaveRoom } = useLeaveRoom(); const conn = useConn(); const [roomData, setRoomData] = useState( undefined as JoinRoomAndGetInfoResponse | undefined ); const [showMobileEditModal, setShowMobileEditModal] = useState(false); return ( } leftPanel={} rightPanel={} mobileHeader={
roomData?.room.creatorId === conn.user.id ? setShowMobileEditModal(true) : ""} > {roomData?.room.name} {roomData && ( with{" "} { roomData?.users.find( (x: any) => x.id === roomData?.room.creatorId )?.username } )}
} onBackClick={() => back()} /> } >
); }; RoomPage.ws = true; // ssr RoomPage.getInitialProps = async ({ query }) => { const key = typeof query.id === "string" && validate(query.id) ? query.id : ""; let room = null; if (isServer && key) { try { const resp = await defaultQueryFn({ queryKey: `/room/${key}` }); if ("room" in resp) { room = resp.room; } } catch {} } return { room }; }; ================================================ FILE: kibbeh/src/modules/room/RoomPanelController.tsx ================================================ import { JoinRoomAndGetInfoResponse } from "@dogehouse/kebab"; import React, { useState } from "react"; import { useCurrentRoomIdStore } from "../../global-stores/useCurrentRoomIdStore"; import { useConn } from "../../shared-hooks/useConn"; import { useScreenType } from "../../shared-hooks/useScreenType"; import { CenterLoader } from "../../ui/CenterLoader"; import { RoomHeader } from "../../ui/RoomHeader"; import { CreateRoomModal } from "../dashboard/CreateRoomModal"; import { HeaderController } from "../display/HeaderController"; import { MiddlePanel } from "../layouts/GridPanels"; import { useRoomChatStore } from "./chat/useRoomChatStore"; import { RoomPanelIconBarController } from "./RoomPanelIconBarController"; import { RoomUsersPanel } from "./RoomUsersPanel"; import { useGetRoomByQueryParam } from "./useGetRoomByQueryParam"; import { UserPreviewModal } from "./UserPreviewModal"; interface RoomPanelControllerProps { setRoomData?: React.Dispatch< React.SetStateAction >; showMobileEditModal: boolean; setShowMobileEditModal: React.Dispatch>; } export const RoomPanelController: React.FC = ({ setRoomData, showMobileEditModal, setShowMobileEditModal, }) => { const conn = useConn(); const { currentRoomId } = useCurrentRoomIdStore(); const [showEditModal, setShowEditModal] = useState(false); const { data, isLoading } = useGetRoomByQueryParam(); const open = useRoomChatStore((s) => s.open); const screenType = useScreenType(); if (isLoading || !currentRoomId) { return ( <> ); } if (!data || "error" in data) { return null; } const roomCreator = data.users.find((x: any) => x.id === data.room.creatorId); if (setRoomData) setRoomData(data); return ( <> {showEditModal || showMobileEditModal ? ( { setShowEditModal(false); setShowMobileEditModal(false); }} edit data={{ name: data.room.name, description: data.room.description || "", privacy: data.room.isPrivate ? "private" : "public", }} /> ) : null} setShowEditModal(true) : undefined } title={data.room.name} description={data.room.description || ""} names={roomCreator ? [roomCreator.username] : []} /> ) : ( "" ) } > {screenType === "fullscreen" && open ? null : ( )}
); }; ================================================ FILE: kibbeh/src/modules/room/RoomPanelIconBarController.tsx ================================================ import { JoinRoomAndGetInfoResponse, RoomUser, wrap } from "@dogehouse/kebab"; import { useRouter } from "next/router"; import React, { useMemo, useState } from "react"; import { createPortal } from "react-dom"; import { useCurrentRoomIdStore } from "../../global-stores/useCurrentRoomIdStore"; import { useDeafStore } from "../../global-stores/useDeafStore"; import { useMuteStore } from "../../global-stores/useMuteStore"; import { SolidPlus } from "../../icons"; import { useConn } from "../../shared-hooks/useConn"; import { useCurrentRoomInfo } from "../../shared-hooks/useCurrentRoomInfo"; import { useLeaveRoom } from "../../shared-hooks/useLeaveRoom"; import { useScreenType } from "../../shared-hooks/useScreenType"; import { useSetDeaf } from "../../shared-hooks/useSetDeaf"; import { useSetMute } from "../../shared-hooks/useSetMute"; import { useTypeSafeMutation } from "../../shared-hooks/useTypeSafeMutation"; import { useTypeSafePrefetch } from "../../shared-hooks/useTypeSafePrefetch"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; import { RoomPanelIconBar } from "../../ui/RoomPanelIconBar"; import { RoomChatInput } from "./chat/RoomChatInput"; import { RoomChatList } from "./chat/RoomChatList"; import { RoomChatMentions } from "./chat/RoomChatMentions"; import { useRoomChatStore } from "./chat/useRoomChatStore"; import RoomOverlay from "./mobile/RoomOverlay"; import { RoomSettingsModal } from "./RoomSettingModal"; export const RoomPanelIconBarController: React.FC = ({ users, room, }) => { const { t } = useTypeSafeTranslation(); const { muted } = useMuteStore(); const setMute = useSetMute(); const { deafened } = useDeafStore(); const conn = useConn(); const setDeaf = useSetDeaf(); const { canSpeak, isCreator, canIAskToSpeak } = useCurrentRoomInfo(); const { leaveRoom } = useLeaveRoom(); const { push } = useRouter(); const prefetch = useTypeSafePrefetch(); const { mutateAsync: setListener } = useTypeSafeMutation("setListener"); const { currentRoomId } = useCurrentRoomIdStore(); const [roomId, setRoomId] = useState(""); const [open, toggleOpen] = useRoomChatStore((s) => [s.open, s.toggleOpen]); const screenType = useScreenType(); const userMap = useMemo(() => { const map: Record = {}; users.forEach((u) => { map[u.id] = u; }); return map; }, [users]); return (
setRoomId("")} /> {screenType === "fullscreen" ? ( setMute(!muted) } : undefined } canSpeak={canSpeak} deaf={{ isDeaf: deafened, onDeaf: () => setDeaf(!deafened) }} onInvitePeopleToRoom={() => { push(`/room/[id]/invite`, `/room/${currentRoomId}/invite`); }} onRoomSettings={ isCreator ? () => { prefetch(["getBlockedFromRoomUsers", 0]); setRoomId(currentRoomId!); } : undefined } askToSpeak={ canIAskToSpeak ? () => wrap(conn).mutation.askToSpeak() : undefined } setListener={() => setListener([conn.user.id])} /> ) : ( toggleOpen()} mute={ canSpeak ? { isMuted: muted, onMute: () => setMute(!muted) } : undefined } deaf={{ isDeaf: deafened, onDeaf: () => setDeaf(!deafened) }} onLeaveRoom={() => { push("/dash"); leaveRoom(); }} onInvitePeopleToRoom={() => { push(`/room/[id]/invite`, `/room/${currentRoomId}/invite`); }} onRoomSettings={ isCreator ? () => { prefetch(["getBlockedFromRoomUsers", 0]); setRoomId(currentRoomId!); } : undefined } /> )} {screenType === "1-cols" && open ? createPortal( // this is kind of hard to embed in the page // so tmp solution of portaling this and absolute positioning for fullscreen
, document.querySelector("#__next")! ) : null}
); }; ================================================ FILE: kibbeh/src/modules/room/RoomSettingModal.tsx ================================================ import { ChatMode } from "@dogehouse/kebab"; import React from "react"; import { useWrappedConn } from "../../shared-hooks/useConn"; import { useCurrentRoomFromCache } from "../../shared-hooks/useCurrentRoomFromCache"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; import { useTypeSafeUpdateQuery } from "../../shared-hooks/useTypeSafeUpdateQuery"; import { InfoText } from "../../ui/InfoText"; import { Input } from "../../ui/Input"; import { Modal } from "../../ui/Modal"; import { NativeSelect } from "../../ui/NativeSelect"; import { BlockedFromRoomUsers } from "./BlockedFromRoomUsers"; interface RoomSettingsModalProps { open: boolean; onRequestClose: () => void; } export const RoomSettingsModal: React.FC = ({ open, onRequestClose, }) => { const conn = useWrappedConn(); const data = useCurrentRoomFromCache(); const updater = useTypeSafeUpdateQuery(); const { t } = useTypeSafeTranslation(); const options = [ { label: t("components.modals.roomSettingsModal.chat.enabled"), value: "default", }, { label: t("components.modals.roomSettingsModal.chat.disabled"), value: "disabled", }, { label: t("components.modals.roomSettingsModal.chat.followerOnly"), value: "follower_only", }, ]; return ( {!data || "error" in data ? ( something went wrong ) : (
{/* require ask to speak */} {/* chat disabled */}
)}
); }; ================================================ FILE: kibbeh/src/modules/room/RoomUsersPanel.tsx ================================================ import { JoinRoomAndGetInfoResponse } from "@dogehouse/kebab"; import isElectron from "is-electron"; import React, { useEffect, useContext } from "react"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; import { RoomSectionHeader } from "../../ui/RoomSectionHeader"; import { useSplitUsersIntoSections } from "./useSplitUsersIntoSections"; import { WebSocketContext } from "../../modules/ws/WebSocketProvider"; import { useScreenType } from "../../shared-hooks/useScreenType"; import { useMediaQuery } from "react-responsive"; import { AudioDebugPanel } from "../debugging/AudioDebugPanel"; import { useDebugAudioStore } from "../../global-stores/useDebugAudio"; import { useMuteStore } from "../../global-stores/useMuteStore"; import { useDeafStore } from "../../global-stores/useDeafStore"; import { isWebRTCEnabled } from "../../lib/isWebRTCEnabled"; import { useIsElectronMobile } from "../../global-stores/useElectronMobileStore"; interface RoomUsersPanelProps extends JoinRoomAndGetInfoResponse {} let ipcRenderer: any = undefined; if (isElectron()) { ipcRenderer = window.require("electron").ipcRenderer; } export const RoomUsersPanel: React.FC = (props) => { const { askingToSpeak, listeners, speakers, canIAskToSpeak, } = useSplitUsersIntoSections(props); const { t } = useTypeSafeTranslation(); const me = useContext(WebSocketContext).conn?.user; const muted = useMuteStore().muted; const deafened = useDeafStore().deafened; let gridTemplateColumns = "repeat(5, minmax(0, 1fr))"; const screenType = useScreenType(); const isBigFullscreen = useMediaQuery({ minWidth: 640 }); if (isBigFullscreen && screenType === "fullscreen") { gridTemplateColumns = "repeat(4, minmax(0, 1fr))"; } else if (screenType === "fullscreen") { gridTemplateColumns = "repeat(3, minmax(0, 1fr))"; } useEffect(() => { if (isElectron()) { ipcRenderer.send("@room/data", { currentRoom: props, muted, deafened, me: me || {}, }); } }, [props, muted, deafened, me]); const { debugAudio } = useDebugAudioStore(); return (
{!isWebRTCEnabled() ? (
Your browser does not support WebRTC or it is disabled.
) : null} {debugAudio ? : null}
{speakers} {askingToSpeak.length ? ( ) : null} {askingToSpeak} {listeners.length ? ( ) : null} {listeners}
); }; ================================================ FILE: kibbeh/src/modules/room/UserPreviewModal.tsx ================================================ import { JoinRoomAndGetInfoResponse, RoomUser, UserWithFollowInfo } from "@dogehouse/kebab"; import React, { useContext } from "react"; import { useDebugAudioStore } from "../../global-stores/useDebugAudio"; import { useConn } from "../../shared-hooks/useConn"; import { useCurrentRoomInfo } from "../../shared-hooks/useCurrentRoomInfo"; import { useTypeSafeMutation } from "../../shared-hooks/useTypeSafeMutation"; import { useTypeSafeQuery } from "../../shared-hooks/useTypeSafeQuery"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; import { Button } from "../../ui/Button"; import { Modal } from "../../ui/Modal"; import { Spinner } from "../../ui/Spinner"; import { VerticalUserInfoWithFollowButton } from "../user/VerticalUserInfoWithFollowButton"; import { AudioDebugConsumerSection } from "./AudioDebugConsumerSection"; import { RoomChatMessage, useRoomChatStore } from "./chat/useRoomChatStore"; import { UserPreviewModalContext } from "./UserPreviewModalProvider"; import { VolumeSliderController } from "./VolumeSliderController"; const UserPreview: React.FC<{ message?: RoomChatMessage; id: string; isMe: boolean; iAmCreator: boolean; iAmMod: boolean; isCreator: boolean; roomPermissions?: RoomUser["roomPermissions"]; onClose: () => void; }> = ({ id, isCreator, isMe, iAmCreator, iAmMod, message, roomPermissions, onClose, }) => { const { t } = useTypeSafeTranslation(); const { mutateAsync: setListener } = useTypeSafeMutation("setListener"); const { mutateAsync: changeModStatus } = useTypeSafeMutation( "changeModStatus" ); const { mutateAsync: changeRoomCreator } = useTypeSafeMutation( "changeRoomCreator" ); const { mutateAsync: addSpeaker } = useTypeSafeMutation("addSpeaker"); const { mutateAsync: deleteRoomChatMessage } = useTypeSafeMutation( "deleteRoomChatMessage" ); const { mutateAsync: roomBan } = useTypeSafeMutation("roomBan"); const { mutateAsync: banFromRoomChat } = useTypeSafeMutation( "banFromRoomChat" ); const { mutateAsync: unbanFromRoomChat } = useTypeSafeMutation( "unbanFromRoomChat" ); const { data, isLoading } = useTypeSafeQuery(["getUserProfile", id], {}, [ id, ]); const bannedUserIdMap = useRoomChatStore((s) => s.bannedUserIdMap); const { debugAudio } = useDebugAudioStore(); if (isLoading) { return (
); } if (!data) { return
This user is gone.
; } if ("error" in data) { const error = data.error; let errorMessage = t("pages.viewUser.errors.default"); switch (error) { case "blocked": errorMessage = t("pages.viewUser.errors.blocked"); break; } return
{errorMessage}
; } const canDoModStuffOnThisUser = !isMe && (iAmCreator || iAmMod) && !isCreator && (!roomPermissions?.isMod || iAmCreator); // [shouldShow, key, onClick, text] const buttonData = [ [ iAmCreator && !isMe && roomPermissions?.isSpeaker, "changeRoomCreator", () => { onClose(); changeRoomCreator([id]); }, t("components.modals.profileModal.makeRoomCreator"), ], [ !isMe && iAmCreator, "makeMod", () => { onClose(); changeModStatus([id, !roomPermissions?.isMod]); }, roomPermissions?.isMod ? t("components.modals.profileModal.unmod") : t("components.modals.profileModal.makeMod"), ], [ canDoModStuffOnThisUser && !roomPermissions?.isSpeaker && roomPermissions?.askedToSpeak, "addSpeakerButton", () => { onClose(); addSpeaker([id]); }, t("components.modals.profileModal.addAsSpeaker"), ], [ canDoModStuffOnThisUser && roomPermissions?.isSpeaker, "moveToListenerButton", () => { onClose(); setListener([id]); }, t("components.modals.profileModal.moveToListener"), ], [ canDoModStuffOnThisUser && !(id in bannedUserIdMap) && (iAmCreator || !roomPermissions?.isMod), "banFromChat", () => { onClose(); banFromRoomChat([id]); }, t("components.modals.profileModal.banFromChat"), ], [ canDoModStuffOnThisUser && id in bannedUserIdMap && (iAmCreator || !roomPermissions?.isMod), "unbanFromChat", () => { onClose(); unbanFromRoomChat([id]); }, t("components.modals.profileModal.unBanFromChat"), ], [ canDoModStuffOnThisUser && (iAmCreator || !roomPermissions?.isMod), "banFromRoom", () => { onClose(); roomBan([id]); }, t("components.modals.profileModal.banFromRoom"), ], [ canDoModStuffOnThisUser && (iAmCreator || !roomPermissions?.isMod), "banIpFromRoom", () => { onClose(); roomBan([id, true]); }, t("components.modals.profileModal.banIPFromRoom"), ], [ isMe && !iAmCreator && (roomPermissions?.askedToSpeak || roomPermissions?.isSpeaker), "goBackToListener", () => { onClose(); setListener([id]); }, t("components.modals.profileModal.goBackToListener"), ], [ !!message, "deleteMessage", () => { if (message?.id) { deleteRoomChatMessage([message.userId, message.id]); onClose(); } }, t("components.modals.profileModal.deleteMessage"), ], ] as const; return (
{!isMe && (isCreator || roomPermissions?.isSpeaker) ? (
) : null}
{debugAudio ? : null} {buttonData.map(([shouldShow, key, onClick, text]) => { return shouldShow ? ( ) : null; })}
); }; export const UserPreviewModal: React.FC = ({ room, users, }) => { const { isCreator: iAmCreator, isMod } = useCurrentRoomInfo(); const { data, setData } = useContext(UserPreviewModalContext); const conn = useConn(); return ( setData(null)} isOpen={!!data} > {!data ? null : ( u.id === data.userId)?.roomPermissions } iAmCreator={iAmCreator} isMe={conn.user.id === data.userId} iAmMod={isMod} message={data.message} onClose={() => setData(null)} /> )} ); }; ================================================ FILE: kibbeh/src/modules/room/UserPreviewModalProvider.tsx ================================================ import React, { useMemo, useState } from "react"; import { RoomChatMessage } from "./chat/useRoomChatStore"; interface UserProfileOverlayProviderProps {} type Data = { userId: string; message?: RoomChatMessage }; export const UserPreviewModalContext = React.createContext<{ data?: Data | null; setData: (x: Data | null) => void; }>({ setData: () => {} }); export const UserPreviewModalProvider: React.FC = ({ children, }) => { const [data, setData] = useState(null); return ( ({ data, setData }), [data, setData])} > {children} ); }; ================================================ FILE: kibbeh/src/modules/room/ViewScheduledRoomPage.tsx ================================================ import { ScheduledRoom } from "@dogehouse/kebab"; import router, { useRouter } from "next/router"; import { validate } from "uuid"; import React, { useState } from "react"; import { useQuery, useQueryClient } from "react-query"; import { InfoText } from "../../ui/InfoText"; import { MainLayout } from "../layouts/MainLayout"; import { MiddlePanel } from "../layouts/GridPanels"; import { EditScheduleRoomModalController } from "../scheduled-rooms/EditScheduleRoomModalController"; import { ScheduledRoomCard } from "../scheduled-rooms/ScheduledRoomCard"; import { HeaderController } from "../display/HeaderController"; import { PageHeader } from "../../ui/mobile/MobileHeader"; interface ViewScheduledRoomPageProps {} type GetScheduledRoomById = { room: ScheduledRoom | null }; export const ViewScheduledRoomPage: React.FC = ({}) => { const queryClient = useQueryClient(); const [deleted, setDeleted] = useState(false); const { query } = useRouter(); const id = typeof query.id === "string" ? query.id : ""; const key = `/scheduled-room/${id}`; const { data, isLoading } = useQuery< GetScheduledRoomById | { error: string } >(key, { enabled: validate(id) }); if (!data || isLoading) { return null; } if ("error" in data || !data.room) { return ( could not find room ); } return ( router.push('/dash')}/>}> {deleted ? ( deleted ) : ( { queryClient.setQueryData(key, { room: { ...data.room!, name: values.name, description: values.description, scheduledFor: values.scheduledFor.toISOString(), }, }); }} > {({ onEdit }) => ( setDeleted(true)} noCopyLinkButton onEdit={() => onEdit({ scheduleRoomToEdit: data.room!, cursor: "" }) } /> )} )} ); }; ================================================ FILE: kibbeh/src/modules/room/VolumeSliderController.tsx ================================================ import React from "react"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; import { VolumeSlider } from "../../ui/VolumeSlider"; import { useConsumerStore } from "../webrtc/stores/useConsumerStore"; interface VolumeSliderControllerProps { userId: string; } export const VolumeSliderController: React.FC = ({ userId, }) => { const { consumerMap, setVolume } = useConsumerStore(); const consumerInfo = consumerMap[userId]; const { t } = useTypeSafeTranslation(); if (!consumerInfo) { return (
{t("components.userVolumeSlider.noAudioMessage")}
); } return (
setVolume(userId, 100)} onVolume={(n) => setVolume(userId, n)} />
); }; ================================================ FILE: kibbeh/src/modules/room/chat/Emote.tsx ================================================ import React from "react"; import { EmoteKeys, emoteMap } from "./EmoteData"; interface CustomEmojiProps { emote: EmoteKeys; style?: React.CSSProperties; title?: string; alt?: string; className?: string; size?: "small"; } export const Emote: React.FC = ({ emote, size, style, title = emote, alt = `:${emote}:`, className, }) => { const src = emoteMap[emote.toLowerCase()]; let cn = ""; if (size === "small") { cn = `w-3 h-3`; } return src ? ( <> {alt}{" "} ) : ( <>{":" + emote + ":"} ); }; ================================================ FILE: kibbeh/src/modules/room/chat/EmoteData.ts ================================================ export const customEmojis = [ { name: "heart", short_names: ["heart", "<3"], keywords: ["heart", "<3"], imageUrl: "/emotes/heart.png", }, { name: "brokenheart", short_names: ["brokenHeart"], keywords: ["broken", "heart", "broken heart", "brokenHeart"], imageUrl: "/emotes/brokenHeart.gif", }, { name: "obama", short_names: ["obama"], keywords: ["obama", "prism", "obamium"], imageUrl: "/emotes/obamium.png", }, { name: "intelxamd", short_names: ["intelxamd"], keywords: ["intel", "amd", "intelxamd"], imageUrl: "/emotes/IntelxAMD.png", }, { name: "linus", short_names: ["linus"], keywords: ["linus", "tech", "linustechtips"], imageUrl: "/emotes/linus.png", }, { name: "reddogehouse", short_names: ["redDogeHouse"], keywords: ["red", "dogehouse", "doge"], imageUrl: "/emotes/reddogehouse.png", }, { name: "this", short_names: ["this"], keywords: ["this"], imageUrl: "/emotes/this.png", }, { name: "browndogehouse", short_names: ["brownDogeHouse"], keywords: ["brown", "dogehouse", "doge"], imageUrl: "/emotes/browndogehouse.png", }, { name: "shut", short_names: ["shut"], keywords: ["shut"], imageUrl: "/emotes/shut.png", }, { name: "blobwtf", short_names: ["blobWtf"], keywords: ["blob", "wtf"], imageUrl: "/emotes/blobwtf.png", }, { name: "whalethonk", short_names: ["WhaleThonk"], keywords: ["whale", "thonk", "thinking", "what"], imageUrl: "/emotes/whalethonk.png", }, { name: "pogchamp", short_names: ["PogChamp"], keywords: ["pogchamp", "pog"], imageUrl: "/emotes/pogchamp.png", }, { name: "monkas", short_names: ["monkaS"], keywords: ["monkas", "pepe"], imageUrl: "/emotes/monkas.png", }, { name: "hypers", short_names: ["HYPERS"], keywords: ["hypers", "pepe"], imageUrl: "/emotes/hypers.png", }, { name: "peped", short_names: ["pepeD"], keywords: ["peped", "pepe"], imageUrl: "/emotes/peped.gif", }, { name: "pepega", short_names: ["Pepega"], keywords: ["pepega", "pepe"], imageUrl: "/emotes/pepega.png", }, { name: "peepohappy", short_names: ["peepoHappy"], keywords: ["peepohappy", "peepo", "pepe"], imageUrl: "/emotes/peepohappy.png", }, { name: "peepohug", short_names: ["peepoHug"], keywords: ["peepohug", "peepo", "pepe"], imageUrl: "/emotes/peepohug.png", }, { name: "sadge", short_names: ["Sadge"], keywords: ["sadge", "pepe"], imageUrl: "/emotes/sadge.png", }, { name: "catjam", short_names: ["catJAM"], keywords: ["catjam", "vibe"], imageUrl: "/emotes/catjam.gif", }, { name: "thonk", short_names: ["Thonk"], keywords: ["thonk", "think"], imageUrl: "/emotes/thonk.png", }, { name: "dogehouse", short_names: ["DogeHouse"], keywords: ["dogehouse", "doge"], imageUrl: "/emotes/dogehouse.png", }, { name: "sadhouse", short_names: ["SadHouse"], keywords: ["dogehouse", "doge", "sadhouse"], imageUrl: "/emotes/sadhouse.png", }, { name: "coolhouse", short_names: ["CoolHouse"], keywords: ["dogehouse", "doge", "coolhouse"], imageUrl: "/emotes/coolhouse.png", }, { name: "winkhouse", short_names: ["WinkHouse"], keywords: ["dogehouse", "doge", "winkhouse"], imageUrl: "/emotes/winkhouse.png", }, { name: "suprisehouse", short_names: ["SupriseHouse"], keywords: ["dogehouse", "doge", "suprisehouse", "shock"], imageUrl: "/emotes/suprisehouse.png", }, { name: "neutralhouse", short_names: ["NeutralHouse"], keywords: ["dogehouse", "doge", "neutralhouse"], imageUrl: "/emotes/neutralhouse.png", }, { name: "waytoodank", short_names: ["WAYTOODANK"], keywords: ["dank", "feelsdankman", "waytoodank"], imageUrl: "/emotes/waytoodank.gif", }, { name: "cryptobtc", short_names: ["CryptoBTC"], keywords: ["crypto", "btc", "bitcoin"], imageUrl: "/emotes/cryptoBTC.png", }, { name: "cryptoeth", short_names: ["CryptoETH"], keywords: ["crypto", "eth", "ethereum"], imageUrl: "/emotes/cryptoETH.png", }, { name: "cryptobnb", short_names: ["CryptoBNB"], keywords: ["crypto", "bnb", "binance"], imageUrl: "/emotes/cryptoBNB.png", }, { name: "cryptoltc", short_names: ["CryptoLTC"], keywords: ["crypto", "ltc", "litecoin"], imageUrl: "/emotes/cryptoLTC.png", }, { name: "cryptobch", short_names: ["CryptoBCH"], keywords: ["crypto", "bch", "bitcoin", "bitcoincash"], imageUrl: "/emotes/cryptoBCH.png", }, { name: "cryptodoge", short_names: ["CryptoDOGE"], keywords: ["crypto", "doge", "dogecoin", "bestcoin"], imageUrl: "/emotes/cryptoDOGE.png", }, { name: "cryptosushi", short_names: ["CryptoSUSHI"], keywords: ["crypto", "sushi", "swap", "sushiswap"], imageUrl: "/emotes/cryptoSUSHI.png", }, { name: "cryptotron", short_names: ["CryptoTRON"], keywords: ["crypto", "tron"], imageUrl: "/emotes/cryptoTron.png", }, { name: "cryptozec", short_names: ["CryptoZEC"], keywords: ["crypto", "zec", "zcash"], imageUrl: "/emotes/cryptoZEC.png", }, { name: "cryptoetc", short_names: ["CryptoETC"], keywords: ["crypto", "etc", "ethereum", "ethereumclassic"], imageUrl: "/emotes/cryptoETC.png", }, { name: "cryptocake", short_names: ["CryptoCAKE"], keywords: ["crypto", "cake", "swap", "pancakeswap"], imageUrl: "/emotes/cryptoCAKE.png", }, { name: "cryptoada", short_names: ["CryptoADA"], keywords: ["crypto", "ada", "cardano"], imageUrl: "/emotes/cryptoADA.png", }, { name: "cryptoxrp", short_names: ["CryptoXRP"], keywords: ["crypto", "xrp", "ripple"], imageUrl: "/emotes/cryptoXRP.png", }, { name: "cryptousdc", short_names: ["CryptoUSDC"], keywords: ["crypto", "usdc", "usdcoin"], imageUrl: "/emotes/cryptoUSDC.png", }, { name: "dodgycoin", short_names: ["DodgyCoin"], keywords: ["crypto", "doge", "dodgycoin"], imageUrl: "/emotes/dodgyCoin.png", }, { name: "pepebckl", short_names: ["pepeBCKL"], keywords: [ "pepebckl", "bckl", "pepe", "malarkey", "jesse", "penguin", "stallman", "freesoftware", "fsf", "charlie", "kernel", "lab", "kernellab", "computing", "jessecharlie", "linux", "torvalds", ], imageUrl: "/emotes/pepeBCKL.png", }, { name: "5head", short_names: ["5Head"], keywords: ["5head", "big", "brain", "bigbrain", "smart"], imageUrl: "/emotes/5Head.png", }, { name: "ayaya", short_names: ["AYAYA"], keywords: ["ayaya"], imageUrl: "/emotes/AYAYA.png", }, { name: "babayep", short_names: ["babaYEP"], keywords: ["babayep", "baba", "yep"], imageUrl: "/emotes/babaYEP.png", }, { name: "bboomer", short_names: ["BBoomer"], keywords: ["bboomer", "boomer"], imageUrl: "/emotes/BBoomer.gif", }, { name: "bebela", short_names: ["BebeLa"], keywords: ["bebela", "bebe"], imageUrl: "/emotes/BebeLa.png", }, { name: "bern", short_names: ["BERN"], keywords: [ "bern", "notmeus", "bernie", "sanders", "berniesanders", "bernard", "socialism", "socialist", "comrade", "democrat", "malarkey", "biden", "joe", "joebiden", "us", "usa", "america", ], imageUrl: "/emotes/BERN.png", }, { name: "bidenjam", short_names: ["bidenJAM"], keywords: [ "bidenjam", "jam", "jamjam", "malarkey", "ridinwithbiden", "icecream", "joe", "biden", "joebiden", "46", "president", "laser", "potus", "democrat", "us", "usa", "america", ], imageUrl: "/emotes/bidenJAM.gif", }, { name: "playa", short_names: ["Playa"], keywords: ["Playa"], imageUrl: "/emotes/Playa.png", }, { name: "igetit", short_names: ["IGetIt"], keywords: ["IGetIt", "Smile", "PepeLa", "Smug"], imageUrl: "/emotes/IGetIt.png", }, { name: "blankies", short_names: ["BLANKIES"], keywords: ["blankies", "jammies", "blanket", "dance"], imageUrl: "/emotes/BLANKIES.gif", }, { name: "bogged", short_names: ["BOGGED"], keywords: [ "bogged", "bog", "hello", "phone", "iphone", "calling", "call", "phonecall", ], imageUrl: "/emotes/BOGGED.png", }, { name: "clap", short_names: ["Clap"], keywords: ["clap", "clapping"], imageUrl: "/emotes/Clap.gif", }, { name: "coggers", short_names: ["COGGERS"], keywords: ["coggers", "pog", "pogu", "poggies", "poggers", "pogger"], imageUrl: "/emotes/COGGERS.gif", }, { name: "copium", short_names: ["COPIUM"], keywords: ["copium", "cope"], imageUrl: "/emotes/COPIUM.png", }, { name: "coronas", short_names: ["coronaS"], keywords: ["coronas", "corona", "mask", "covid"], imageUrl: "/emotes/coronaS.png", }, { name: "crabpls", short_names: ["CrabPls"], keywords: ["crabpls", "crab", "pls", "plz", "please"], imageUrl: "/emotes/crabpls.gif", }, { name: "dankhackermans", short_names: ["DANKHACKERMANS"], keywords: [ "dankhackermans", "dank", "hacker", "hackermans", "keyboard", "typing", "computer", "coding", "coder", "code", "virus", "malware", ], imageUrl: "/emotes/DANKHACKERMANS.gif", }, { name: "dankhug", short_names: ["dankHug"], keywords: ["dankhug", "dank", "hug"], imageUrl: "/emotes/dankHug.png", }, { name: "dankies", short_names: ["DANKIES"], keywords: ["dankies", "dank"], imageUrl: "/emotes/DANKIES.gif", }, { name: "dewtime", short_names: ["DewTime"], keywords: ["dewtime", "mountaindew", "dew", "moutain", "time"], imageUrl: "/emotes/DewTime.gif", }, { name: "ez", short_names: ["EZ"], keywords: ["ez"], imageUrl: "/emotes/EZ.png", }, { name: "f", short_names: ["F"], keywords: ["f"], imageUrl: "/emotes/F.gif" }, { name: "feelsdankman", short_names: ["FeelsDankMan"], keywords: ["feelsdankman", "feels", "feel", "dank", "man"], imageUrl: "/emotes/FeelsDankMan.png", }, { name: "feelsokayman", short_names: ["FeelsOkayMan"], keywords: ["feelsokayman", "feels", "feel", "okay", "man"], imageUrl: "/emotes/FeelsOkayMan.png", }, { name: "feelsstrongman", short_names: ["FeelsStrongMan"], keywords: ["feelsstrongman", "feels", "feel", "strong", "man"], imageUrl: "/emotes/FeelsStrongMan.png", }, { name: "feelsweirdman", short_names: ["FeelsWeirdMan"], keywords: ["feelsweirdman", "feels", "feel", "weird", "man"], imageUrl: "/emotes/FeelsWeirdMan.png", }, { name: "gachihyper", short_names: ["gachiHYPER"], keywords: ["gachihyper", "gachi", "hyper", "coomer"], imageUrl: "/emotes/gachiHYPER.gif", }, { name: "grug", short_names: ["GRUG"], keywords: ["grug"], imageUrl: "/emotes/GRUG.png", }, { name: "guitartime", short_names: ["GuitarTime"], keywords: ["guitartime", "guitar", "time"], imageUrl: "/emotes/GuitarTime.gif", }, { name: "hackermans", short_names: ["HACKERMANS"], keywords: [ "hackermans", "hacker", "keyboard", "typing", "computer", "coding", "coder", "code", "virus", "malware", ], imageUrl: "/emotes/HACKERMANS.gif", }, { name: "handsup", short_names: ["HandsUp"], keywords: ["handsup", "hands", "up", "hand"], imageUrl: "/emotes/HandsUp.png", }, { name: "hasanhypersmash", short_names: ["hasanHyperSmash"], keywords: [ "hasanhypersmash", "hasan", "hasanabi", "hasanpiker", "hyper", "smash", ], imageUrl: "/emotes/hasanHyperSmash.gif", }, { name: "hasansmash", short_names: ["hasanSmash"], keywords: ["hasansmash", "hasan", "hasanabi", "hasanpiker", "smash"], imageUrl: "/emotes/hasanSmash.gif", }, { name: "hasanwalk", short_names: ["HasanWalk"], keywords: [ "hasanwalk", "hasan", "hasanabi", "hasanpiker", "walk", "walking", ], imageUrl: "/emotes/HasanWalk.gif", }, { name: "hashyperjam", short_names: ["hasHyperJAM"], keywords: [ "hashyperjam", "hasan", "hasanabi", "hasanpiker", "hyper", "jam", "jamjam", "jammies", ], imageUrl: "/emotes/hasHyperJAM.gif", }, { name: "haspls", short_names: ["hasPls"], keywords: [ "haspls", "please", "pls", "plz", "hasan", "hasanabi", "hasanpiker", ], imageUrl: "/emotes/hasPls.gif", }, { name: "hasrock", short_names: ["hasRock"], keywords: [ "hasrock", "spongebob", "patrick", "hasan", "hasanabi", "hasanpiker", "rock", ], imageUrl: "/emotes/hasRock.gif", }, { name: "hastasty", short_names: ["hasTasty"], keywords: [ "hastasty", "hasan", "tasty", "yum", "yummy", "hasanabi", "hasanpiker", ], imageUrl: "/emotes/hasTasty.gif", }, { name: "hyperclap", short_names: ["HYPERCLAP"], keywords: ["hyperclap", "hyper", "clap"], imageUrl: "/emotes/HYPERCLAP.gif", }, { name: "hyperhammer", short_names: ["hyperHammer"], keywords: ["hyperhammer", "hyper", "hammer"], imageUrl: "/emotes/hyperHammer.gif", }, { name: "hyperitalianhands", short_names: ["HYPERITALIANHANDS"], keywords: [ "hyperitalianhands", "hyper", "italian", "hands", "hand", "italy", "ovahere", ], imageUrl: "/emotes/HYPERITALIANHANDS.gif", }, { name: "hyperpogger", short_names: ["HYPERPOGGER"], keywords: ["hyperpogger", "hyper", "pog", "pogger", "poggies"], imageUrl: "/emotes/HYPERPOGGER.gif", }, { name: "hyperpogo", short_names: ["HYPERPOGO"], keywords: [ "hyperpogo", "hyper", "pog", "pogo", "azan", "poggies", "poggers", "pogger", ], imageUrl: "/emotes/HYPERPOGO.gif", }, { name: "italianhands", short_names: ["ItalianHands"], keywords: ["italianhands", "ovahere", "italian", "hands", "hand", "italy"], imageUrl: "/emotes/ItalianHands.gif", }, { name: "jammies", short_names: ["Jammies"], keywords: ["jammies", "jam", "jamjam", "dance", "vibe"], imageUrl: "/emotes/Jammies.gif", }, { name: "kekw", short_names: ["KEKW"], keywords: [ "kekw", "kek", "omegalul", "lol", "lmao", "haha", "ha", "ja", "jaja", ], imageUrl: "/emotes/KEKW.png", }, { name: "kekwait", short_names: ["KEKWait"], keywords: [ "kekwait", "lul", "omegalul", "lol", "lmao", "wait", "kek", "ha", ], imageUrl: "/emotes/KEKWait.png", }, { name: "kkapitalist", short_names: ["KKapitalist"], keywords: ["kkapitalist", "kapitalist", "capitalist", "business"], imageUrl: "/emotes/KKapitalist.png", }, { name: "kkomrade", short_names: ["KKomrade"], keywords: ["kkomrade", "komrade", "comrade"], imageUrl: "/emotes/KKomrade.png", }, { name: "kkonaw", short_names: ["KKonaW"], keywords: ["kkonaw"], imageUrl: "/emotes/KKonaW.png", }, { name: "kkop", short_names: ["KKop"], keywords: [ "kkop", "kop", "kops", "cop", "cops", "police", "acab", "blueline", ], imageUrl: "/emotes/KKop.png", }, { name: "lulw", short_names: ["LULW"], keywords: ["lulw", "lul", "lol", "lmao", "omegalul"], imageUrl: "/emotes/LULW.png", }, { name: "lulwut", short_names: ["lulWut"], keywords: [ "lulwut", "lul", "lmao", "lol", "wut", "what", "wat", "wtf", "omegalul", "ha", "haha", "ja", "jaja", ], imageUrl: "/emotes/lulWut.png", }, { name: "malarkey", short_names: ["MALARKEY"], keywords: [ "malarkey", "ridinwithbiden", "icecream", "joe", "biden", "joebiden", "46", "president", "laser", "potus", "democrat", "us", "usa", "america", ], imageUrl: "/emotes/MALARKEY.gif", }, { name: "mmmhmm", short_names: ["MmmHmm"], keywords: [ "mmmhmm", "mmm", "mmmm", "hmm", "hmmm", "mmmmhmmm", "mmmmhmm", "mmmhmmm", ], imageUrl: "/emotes/MmmHmm.gif", }, { name: "modcheck", short_names: ["modCheck"], keywords: [ "modcheck", "mods", "mod", "check", "spongebob", "ask", "askers", "whoasked", "where", "look", "fish", "oooo", ], imageUrl: "/emotes/modCheck.gif", }, { name: "modtime", short_names: ["ModTime"], keywords: ["modtime", "mod", "mods", "time"], imageUrl: "/emotes/ModTime.gif", }, { name: "monkahmm", short_names: ["monkaHmm"], keywords: ["monkahmm", "monka", "hmmm", "hmm"], imageUrl: "/emotes/monkaHmm.png", }, { name: "monkastare", short_names: ["monkaStare"], keywords: ["monkastare", "stare", "monka"], imageUrl: "/emotes/monkaStare.png", }, { name: "monkasteer", short_names: ["monkaSTEER"], keywords: ["monkasteer", "monka", "steer", "ridinwithbiden"], imageUrl: "/emotes/monkaSTEER.gif", }, { name: "monkaw", short_names: ["monkaW"], keywords: ["monkaw", "monka"], imageUrl: "/emotes/monkaW.png", }, { name: "neffhyperjam", short_names: ["neffHyperJAM"], keywords: [ "neffhyperjam", "hyperjam", "jam", "jammies", "boppin", "dj", "jamjam", "neff", "will", "willneff", ], imageUrl: "/emotes/neffHyperJAM.gif", }, { name: "nodders", short_names: ["NODDERS"], keywords: ["nodders", "nod", "noddies"], imageUrl: "/emotes/NODDERS.gif", }, { name: "nopers", short_names: ["NOPERS"], keywords: ["nopers", "no", "nope"], imageUrl: "/emotes/NOPERS.gif", }, { name: "nymncorn", short_names: ["nymnCorn"], keywords: ["nymncorn", "mmm", "corn", "nymn"], imageUrl: "/emotes/nymnCorn.gif", }, { name: "okaychamp", short_names: ["OkayChamp"], keywords: ["okaychamp", "okay", "champ"], imageUrl: "/emotes/OkayChamp.png", }, { name: "omegalul", short_names: ["OMEGALUL"], keywords: ["omegalul", "lol", "lmao", "lul", "ha", "haha", "ja", "jaja"], imageUrl: "/emotes/omegalul.png", }, { name: "oooo", short_names: ["OOOO"], keywords: ["oooo", "fish"], imageUrl: "/emotes/OOOO.gif", }, { name: "pagchomp", short_names: ["PagChomp"], keywords: ["pagchomp", "pag", "chomp"], imageUrl: "/emotes/PagChomp.png", }, { name: "painschamp", short_names: ["PainsChamp"], keywords: ["painschamp", "pains", "champ", "pain"], imageUrl: "/emotes/PainsChamp.png", }, { name: "pausechamp", short_names: ["PauseChamp"], keywords: ["pausechamp", "pause", "champ"], imageUrl: "/emotes/PauseChamp.png", }, { name: "peepoarrive", short_names: ["peepoArrive"], keywords: [ "peepoarrive", "peepo", "pepo", "arrive", "here", "welcome", "hey", "wave", "hi", "hello", "howdy", ], imageUrl: "/emotes/peepoArrive.gif", }, { name: "peepobaba", short_names: ["peepoBaba"], keywords: ["peepobaba", "peepo", "pepo", "baba"], imageUrl: "/emotes/peepoBaba.png", }, { name: "peepobye", short_names: ["peepoBye"], keywords: ["peepobye", "peepo", "pepo", "bye"], imageUrl: "/emotes/peepoBye.gif", }, { name: "peepochat", short_names: ["peepoChat"], keywords: ["peepochat", "peepo", "pepo", "chat"], imageUrl: "/emotes/peepoChat.gif", }, { name: "peepocheer", short_names: ["peepoCheer"], keywords: ["peepocheer", "peepo", "pepo", "cheer"], imageUrl: "/emotes/peepoCheer.gif", }, { name: "peepoclap", short_names: ["peepoClap"], keywords: ["peepoclap", "peepo", "pepo", "clap"], imageUrl: "/emotes/peepoClap.gif", }, { name: "peepod", short_names: ["peepoD"], keywords: ["peepod", "peepo", "pepo"], imageUrl: "/emotes/peepoD.gif", }, { name: "peepofat", short_names: ["peepoFat"], keywords: ["peepofat", "peepo", "pepo", "fat", "houngry", "hungry", "food"], imageUrl: "/emotes/peepoFat.png", }, { name: "peepogiggles", short_names: ["peepoGiggles"], keywords: ["peepogiggles", "pepo", "peepo", "giggle", "giggles"], imageUrl: "/emotes/peepoGiggles.gif", }, { name: "peepohey", short_names: ["peepoHey"], keywords: [ "peepohey", "peepo", "wave", "pepo", "hey", "hi", "hello", "howdy", "welcome", ], imageUrl: "/emotes/peepoHey.gif", }, { name: "peepojammer", short_names: ["peepoJAMMER"], keywords: ["peepojammer", "peepo", "pepo", "jam", "jammer", "jamjam"], imageUrl: "/emotes/peepoJAMMER.gif", }, { name: "peepokiss", short_names: ["peepoKiss"], keywords: ["peepokiss", "peepo", "pepo", "kiss", "love"], imageUrl: "/emotes/peepoKiss.png", }, { name: "peepoleave", short_names: ["peepoLeave"], keywords: ["peepoleave", "peepo", "pepo", "leave", "exit", "bye"], imageUrl: "/emotes/peepoLeave.gif", }, { name: "peepopog", short_names: ["peepoPog"], keywords: ["peepopog", "peepo", "pepo", "pog"], imageUrl: "/emotes/peepoPog.png", }, { name: "peepopogo", short_names: ["peepoPogO"], keywords: ["peepopogo", "peepo", "pepo", "pog", "pogo"], imageUrl: "/emotes/peepoPogO.png", }, { name: "peeporun", short_names: ["peepoRun"], keywords: ["peeporun", "peepo", "pepo", "run"], imageUrl: "/emotes/peepoRun.gif", }, { name: "peeposhy", short_names: ["peepoShy"], keywords: ["peeposhy", "peepo", "pepo", "shy"], imageUrl: "/emotes/peepoShy.gif", }, { name: "peeposnow", short_names: ["peepoSnow"], keywords: [ "peeposnow", "peepo", "pepo", "snow", "christmas", "cold", "holidays", ], imageUrl: "/emotes/peepoSnow.gif", }, { name: "peepot", short_names: ["peepoT"], keywords: ["peepot", "peepo", "pepo"], imageUrl: "/emotes/peepoT.gif", }, { name: "peepoweird", short_names: ["peepoWeird"], keywords: ["peepoweird", "peepo", "pepo", "weird"], imageUrl: "/emotes/peepoWeird.png", }, { name: "pepecd", short_names: ["pepeCD"], keywords: ["pepecd", "pepe", "cd"], imageUrl: "/emotes/pepeCD.gif", }, { name: "pepegehmm", short_names: ["PepegeHmm"], keywords: ["pepegehmm", "pepege", "pepe", "hmm", "hmmm"], imageUrl: "/emotes/PepegeHmm.png", }, { name: "pepehands", short_names: ["PepeHands"], keywords: ["pepehands", "pepe", "hands"], imageUrl: "/emotes/PepeHands.png", }, { name: "pepejamjam", short_names: ["pepeJAMJAM"], keywords: ["pepejamjam", "pepe", "jam"], imageUrl: "/emotes/pepeJAMJAM.gif", }, { name: "pepejam", short_names: ["pepeJAM"], keywords: ["pepeJAM", "pepe"], imageUrl: "/emotes/pepejam.gif", }, { name: "pepela", short_names: ["PepeLa"], keywords: ["pepela", "pepe"], imageUrl: "/emotes/PepeLa.png", }, { name: "pepelaugh", short_names: ["PepeLaugh"], keywords: ["pepelaugh", "pepe", "laugh"], imageUrl: "/emotes/PepeLaugh.gif", }, { name: "pepemeltdown", short_names: ["pepeMeltdown"], keywords: ["pepemeltdown", "pepe", "meltdown"], imageUrl: "/emotes/pepeMeltdown.gif", }, { name: "pepep", short_names: ["pepeP"], keywords: ["pepep", "pepe"], imageUrl: "/emotes/pepeP.gif", }, { name: "pepes", short_names: ["PepeS"], keywords: ["pepes", "pepe"], imageUrl: "/emotes/PepeS.gif", }, { name: "pepespit", short_names: ["PepeSpit"], keywords: ["pepespit", "pepe", "spit"], imageUrl: "/emotes/PepeSpit.gif", }, { name: "pepew", short_names: ["pepeW"], keywords: ["pepew", "pepe"], imageUrl: "/emotes/pepeW.gif", }, { name: "pepog", short_names: ["PepoG"], keywords: ["pepog", "pepo", "peepo"], imageUrl: "/emotes/PepoG.png", }, { name: "pog", short_names: ["Pog"], keywords: ["pog", "poggies", "pogger", "poggers"], imageUrl: "/emotes/Pog.png", }, { name: "poggers", short_names: ["POGGERS"], keywords: ["poggers", "pog", "poggies", "pogger"], imageUrl: "/emotes/POGGERS.png", }, { name: "poggies", short_names: ["POGGIES"], keywords: ["poggies", "pog", "pogger"], imageUrl: "/emotes/POGGIES.png", }, { name: "pogo", short_names: ["PogO"], keywords: ["pogo", "pog", "azan"], imageUrl: "/emotes/PogO.png", }, { name: "pogu", short_names: ["PogU"], keywords: ["pogu", "pog"], imageUrl: "/emotes/PogU.png", }, { name: "pphop", short_names: ["ppHop"], keywords: ["pphop", "hop"], imageUrl: "/emotes/ppHop.gif", }, { name: "ppoverheat", short_names: ["ppOverheat"], keywords: ["ppoverheat", "overheat"], imageUrl: "/emotes/ppOverheat.gif", }, { name: "pppoof", short_names: ["ppPoof"], keywords: ["pppoof", "poof"], imageUrl: "/emotes/ppPoof.gif", }, { name: "prayge", short_names: ["Prayge"], keywords: ["prayge", "pray", "god"], imageUrl: "/emotes/Prayge.png", }, { name: "ratjam", short_names: ["ratJAM"], keywords: ["ratjam", "rat", "jam"], imageUrl: "/emotes/ratJAM.gif", }, { name: "ree", short_names: ["REE"], keywords: ["ree", "reeee"], imageUrl: "/emotes/REE.png", }, { name: "sillychamp", short_names: ["SillyChamp"], keywords: ["sillychamp", "silly", "champ"], imageUrl: "/emotes/SillyChamp.png", }, { name: "smoketime", short_names: ["SmokeTime"], keywords: ["smoketime", "smoke"], imageUrl: "/emotes/SmokeTime.gif", }, { name: "swooner", short_names: ["SWOONER"], keywords: ["swooner"], imageUrl: "/emotes/SWOONER.png", }, { name: "teatime", short_names: ["TeaTime"], keywords: ["teatime", "tea"], imageUrl: "/emotes/TeaTime.gif", }, { name: "tomatotime", short_names: ["TomatoTime"], keywords: ["tomatotime", "tomato"], imageUrl: "/emotes/TomatoTime.gif", }, { name: "unpoggers", short_names: ["unPOGGERS"], keywords: ["unpoggers", "poggers", "pog", "unpoggies"], imageUrl: "/emotes/unPOGGERS.png", }, { name: "weirdchamp", short_names: ["WeirdChamp"], keywords: ["weirdchamp", "weird", "champ"], imageUrl: "/emotes/WeirdChamp.png", }, { name: "weirdge", short_names: ["Weirdge"], keywords: ["weirdge", "weird"], imageUrl: "/emotes/Weirdge.png", }, { name: "whatchamp", short_names: ["WhatChamp"], keywords: ["whatchamp", "what", "champ"], imageUrl: "/emotes/WhatChamp.png", }, { name: "wicked", short_names: ["WICKED"], keywords: ["wicked"], imageUrl: "/emotes/WICKED.png", }, { name: "widepeepohappy", short_names: ["widepeepoHappy"], keywords: ["widepeepohappy", "peepohappy", "peepo", "happy"], imageUrl: "/emotes/widepeepoHappy.png", }, { name: "widepeeposad", short_names: ["widepeepoSad"], keywords: ["widepeeposad", "peeposad", "peepo", "sad"], imageUrl: "/emotes/widepeepoSad.png", }, { name: "winetime", short_names: ["WineTime"], keywords: ["winetime", "wine"], imageUrl: "/emotes/WineTime.gif", }, { name: "yep", short_names: ["YEP"], keywords: ["yep"], imageUrl: "/emotes/YEP.png", }, { name: "zzoomer", short_names: ["ZZoomer"], keywords: ["zzoomer", "zoomer"], imageUrl: "/emotes/ZZoomer.gif", }, { name: "doge3d", short_names: ["Doge3D"], keywords: ["doge3d", "doge", "3d"], imageUrl: "/emotes/doge3d.gif", }, { name: "dogecool", short_names: ["DogeCool"], keywords: ["dogecool", "doge", "cool"], imageUrl: "/emotes/dogecool.gif", }, { name: "thugpepe", short_names: ["ThugPepe"], keywords: ["dogehouse", "doge", "thugpepe"], imageUrl: "/emotes/thugpepe.png", }, { name: "blaze", short_names: ["blaze"], keywords: ["blaze", "yes", "snark"], imageUrl: "/emotes/blaze.png", }, { name: "blobdance", short_names: ["blobDance"], keywords: ["blobDance", "vibe"], imageUrl: "/emotes/blobdance.gif", }, { name: "pepepls", short_names: ["PepePls"], keywords: ["PepePls", "pepe"], imageUrl: "/emotes/pepepls.gif", }, { name: "feelsgoodman", short_names: ["FeelsGoodMan"], keywords: ["FeelsGoodMan", "pepe"], imageUrl: "/emotes/feelsgoodman.png", }, { name: "github", short_names: ["GitHub"], keywords: ["app", "git", "github"], imageUrl: "/emotes/github.png", }, { name: "elixir", short_names: ["Elixir"], keywords: ["app", "elixir"], imageUrl: "/emotes/elixir.png", }, { name: "nextjs", short_names: ["NextJS"], keywords: ["app", "next", "js"], imageUrl: "/emotes/nextjs.png", }, { name: "react", short_names: ["React"], keywords: ["app", "react", "js"], imageUrl: "/emotes/react.png", }, { name: "electron", short_names: ["Electron"], keywords: ["app", "electron"], imageUrl: "/emotes/electron.png", }, { name: "beardguyr", short_names: ["BeardGuyR"], keywords: ["meme", "beard", "guy"], imageUrl: "/emotes/beardguyright.png", }, { name: "beardguyl", short_names: ["BeardGuyL"], keywords: ["meme", "beard", "guy"], imageUrl: "/emotes/beardguyleft.png", }, { name: "mememan", short_names: ["MemeMan"], keywords: ["meme", "guy"], imageUrl: "/emotes/mememan.png", }, { name: "npc", short_names: ["NPC"], keywords: ["meme", "npc", "guy"], imageUrl: "/emotes/npc.png", }, { name: "smudgecat", short_names: ["SMudgeCat"], keywords: ["meme", "cat"], imageUrl: "/emotes/smudgecat.png", }, { name: "stonks", short_names: ["Stonks"], keywords: ["meme", "crypto", "guy"], imageUrl: "/emotes/stonks.png", }, { name: "stinks", short_names: ["Stinks"], keywords: ["meme", "crypto", "guy"], imageUrl: "/emotes/stinks.png", }, { name: "iwmd", short_names: ["IWMD"], keywords: ["meme", "dude", "wednesday", "frog"], imageUrl: "/emotes/wednesday.png", }, { name: "presponge", short_names: ["PreSponge"], keywords: ["meme", "spongebob"], imageUrl: "/emotes/presponge.png", }, { name: "spongebob", short_names: ["sPonGeBoB"], keywords: ["meme", "spongebob"], imageUrl: "/emotes/sPonGeBoB.png", }, { name: "peepohappy", short_names: ["peepohappy"], keywords: ["peepohappy", "peepo", "pepe"], imageUrl: "/emotes/peepohappy.png", }, { name: "peepohug", short_names: ["peepohug"], keywords: ["peepohug", "peepo", "pepe"], imageUrl: "/emotes/peepohug.png", }, { name: "purpledogehouse", short_names: ["PurpleDogeHouse"], keywords: ["purple", "dogehouse", "doge"], imageUrl: "/emotes/purpledogehouse.png", }, { name: "widepeepopussy", short_names: ["widepeepoPussy"], keywords: ["widepeepoPussy", "peepo", "wide"], imageUrl: "/emotes/widepeepoPussy.png", }, { name: "rareparrot", short_names: ["RareParrot"], keywords: ["Rare", "Parrot", "party"], imageUrl: "/emotes/rareParrot.gif", }, { name: "orangedogehouse", short_names: ["OrangeDogeHouse"], keywords: ["orange", "dogehouse", "doge"], imageUrl: "/emotes/orangedogehouse.png", }, { name: "cyandogehouse", short_names: ["CyanDogeHouse"], keywords: ["cyan", "dogehouse", "doge"], imageUrl: "/emotes/cyandogehouse.png", }, { name: "angrykermit", short_names: ["AngryKermit"], keywords: ["kermit", "angry", "ak47"], imageUrl: "/emotes/angrykermit.png", }, { name: "darthkermit", short_names: ["DarthKermit"], keywords: ["kermit", "star", "wars", "darth"], imageUrl: "/emotes/darthkermit.png", }, { name: "takemymoney", short_names: ["TakeMyMoney"], keywords: ["take", "my", "money", "shut", "up"], imageUrl: "/emotes/takemymoney.png", }, { name: "awyeah", short_names: ["awyeah"], keywords: ["aw", "yeah", "awyeah", "dancing"], imageUrl: "/emotes/awyeah.gif", }, { name: "ztlul", short_names: ["ztlul", "zerotwolul"], keywords: ["lul", "lol", "anime", "girl", "zerotwo"], imageUrl: "/emotes/zerotwolul.png", }, { name: "ztsmug", short_names: ["ztsmug", "zerotwosmug"], keywords: ["smug", "anime", "girl", "zerotwo"], imageUrl: "/emotes/zerotwosmug.png", }, { name: "ztthinking", short_names: ["ztthinking"], keywords: [ "thinking", "think", "anime", "girl", "zerotwo", "zerotwothinking", ], imageUrl: "/emotes/zerotwothinking.png", }, { name: "partyparrot", short_names: ["partyparrot"], keywords: ["party", "high", "parrot", "fun"], imageUrl: "/emotes/PartyParrot.gif", }, { name: "dogepls", short_names: ["dogepls"], keywords: ["doge", "please", "fun", "dance"], imageUrl: "/emotes/DogePls.gif", }, { name: "catdance", short_names: ["catDance"], keywords: ["cat", "dance", "party", "fun"], imageUrl: "/emotes/catDance.gif", }, { name: "doughdoge", short_names: ["doughdoge"], keywords: ["dough", "doge", "pizza"], imageUrl: "/emotes/doughdoge.png", }, ]; type EmoteList = typeof customEmojis; export type EmoteKeys = EmoteList[number]["name"]; export const emoteMap: Record = {}; export type CustomEmote = { name: string; short_names: string[]; keywords: string[]; imageUrl: string; }; customEmojis.forEach((e) => { emoteMap[e.name] = e.imageUrl; }); ================================================ FILE: kibbeh/src/modules/room/chat/RoomChat.tsx ================================================ import { Room, RoomUser } from "@dogehouse/kebab"; import React, { useMemo } from "react"; import { useCurrentRoomIdStore } from "../../../global-stores/useCurrentRoomIdStore"; import { RoomChatInput } from "./RoomChatInput"; import { RoomChatList } from "./RoomChatList"; import { RoomChatMentions } from "./RoomChatMentions"; interface ChatProps { room: Room; users: RoomUser[]; } export const RoomChat: React.FC = ({ users, room }) => { const userMap = useMemo(() => { const map: Record = {}; users.forEach((u) => { map[u.id] = u; }); return map; }, [users]); const { currentRoomId } = useCurrentRoomIdStore(); return (
); }; ================================================ FILE: kibbeh/src/modules/room/chat/RoomChatInput.tsx ================================================ import { Room, RoomUser, UserWithFollowInfo } from "@dogehouse/kebab"; import React, { useRef, useState, useEffect } from "react"; import { Smiley } from "../../../icons"; import { createChatMessage } from "../../../lib/createChatMessage"; import { showErrorToast } from "../../../lib/showErrorToast"; import { useConn, useWrappedConn } from "../../../shared-hooks/useConn"; import { useTypeSafeTranslation } from "../../../shared-hooks/useTypeSafeTranslation"; import { Input } from "../../../ui/Input"; import { customEmojis, CustomEmote } from "./EmoteData"; import { useRoomChatMentionStore } from "./useRoomChatMentionStore"; import { useRoomChatStore } from "./useRoomChatStore"; import { EmojiPicker } from "../../../ui/EmojiPicker"; import { useEmojiPickerStore } from "../../../global-stores/useEmojiPickerStore"; import { navigateThroughQueriedUsers } from "./navigateThroughQueriedUsers"; import { navigateThroughQueriedEmojis } from "./navigateThroughQueriedEmojis"; import { useTypeSafeQuery } from "../../../shared-hooks/useTypeSafeQuery"; import { useCurrentRoomIdStore } from "../../../global-stores/useCurrentRoomIdStore"; import { useScreenType } from "../../../shared-hooks/useScreenType"; import { useCurrentRoomFromCache } from "../../../shared-hooks/useCurrentRoomFromCache"; import Dolma from '@dogehouse/dolma'; interface ChatInputProps { users: RoomUser[]; } export const RoomChatInput: React.FC = ({ users }) => { const { message, setMessage } = useRoomChatStore(); const { setQueriedUsernames } = useRoomChatMentionStore(); const { setOpen, open, queryMatches } = useEmojiPickerStore(); const conn = useConn(); const dolma = new Dolma(customEmojis); const wConn = useWrappedConn(); const me = conn.user; const inputRef = useRef(null); const [lastMessageTimestamp, setLastMessageTimestamp] = useState(0); const { t } = useTypeSafeTranslation(); const screenType = useScreenType(); let position = 0; useEffect(() => { if (!open && screenType !== "fullscreen") inputRef.current?.focus(); // Prevent autofocus on mobile }, [open, screenType]); const data = useCurrentRoomFromCache(); if (data && !("error" in data) && data.room.chatMode === "disabled") { return (

{t("modules.roomChat.disabled")}

); } const handleSubmit = async ( e: React.FormEvent | React.MouseEvent ) => { e.preventDefault(); if (!me) return; if (me.id in useRoomChatStore.getState().bannedUserIdMap) { showErrorToast(t("modules.roomChat.bannedAlert")); return; } if ( data && !("error" in data) && Date.now() - lastMessageTimestamp <= data.room.chatThrottle ) { showErrorToast(t("modules.roomChat.waitAlert")); return; } const tmp = message; // const messageData = createChatMessage(tmp, users); const messageData = dolma.encode(message); console.log(messageData); messageData.whisperedTo = await Promise.all(messageData.whisperedTo.map(async (uname = "") => { const u = await wConn.query.getUserProfile(uname); if("id" in u!) return u.id; return ""; })); // dont empty the input, if no tokens if (!messageData.tokens.length) return; setMessage(""); if ( !message || !message.trim() || !message.replace(/[\u200B-\u200D\uFEFF]/g, "") ) { return; } conn.send("send_room_chat_msg", messageData); setQueriedUsernames([]); setLastMessageTimestamp(Date.now()); }; // useEffect(() => { // const id = setInterval(() => { // conn.send("send_room_chat_msg", createChatMessage("spam")); // }, 1001); // return () => { // clearInterval(id); // }; // // eslint-disable-next-line react-hooks/exhaustive-deps // }, []); return (
{ position = (position === 0 ? inputRef!.current!.selectionStart : position + 2) || 0; let msg = ''; if ((message.match(/:/g)?.length ?? 0) % 2) { msg = message.split('').reverse().join(''); msg = msg.replace(msg.split(':')[0] + ':', ''); msg = msg.split('').reverse().join(''); } else { msg = message; } const newMsg = [ msg.slice(0, position), (`:${emoji.short_names[0]}:` || "") + " ", msg.slice(position), ].join(""); setMessage(newMsg); }} />
{data && "room" in data && data.room.chatMode === "follower_only" ? (
Follower mode
) : null}
setMessage(e.target.value)} id="room-chat-input" transparent ref={inputRef} autoComplete="off" onKeyDown={ queryMatches.length ? navigateThroughQueriedEmojis : navigateThroughQueriedUsers } onFocus={() => { setOpen(false); position = 0; }} />
{ setOpen(!open); position = 0; }} >
{/* Send button (mobile only) */} {/* {chatIsSidebar ? null : ( )} */}
); }; ================================================ FILE: kibbeh/src/modules/room/chat/RoomChatList.tsx ================================================ import { Message, Room, RoomUser } from "@dogehouse/kebab"; import normalizeUrl from "normalize-url"; import React, { useContext, useEffect, useRef } from "react"; import { useVirtual, VirtualItem } from "react-virtual"; import { useConn } from "../../../shared-hooks/useConn"; import { useCurrentRoomInfo } from "../../../shared-hooks/useCurrentRoomInfo"; import { useTypeSafeTranslation } from "../../../shared-hooks/useTypeSafeTranslation"; import { ParseTextToTwemoji, StaticTwemoji } from "../../../ui/Twemoji"; import { UserPreviewModalContext } from "../UserPreviewModalProvider"; import { Emote } from "./Emote"; import { EmoteKeys } from "./EmoteData"; import { useRoomChatMentionStore } from "./useRoomChatMentionStore"; import { useRoomChatStore } from "./useRoomChatStore"; import { useResize } from "../useResize"; interface ChatListProps { room: Room; userMap: Record; } interface BadgeIconData { emoji: string; title: string; } export const RoomChatList: React.FC = ({ room, userMap }) => { const { setData } = useContext(UserPreviewModalContext); const { messages, toggleFrozen } = useRoomChatStore(); const me = useConn().user; const { isMod: iAmMod, isCreator: iAmCreator } = useCurrentRoomInfo(); const bottomRef = useRef(null); const chatListRef = useRef(null); const { isRoomChatScrolledToTop, setIsRoomChatScrolledToTop, message, setMessage, } = useRoomChatStore(); const { t } = useTypeSafeTranslation(); // Only scroll into view if not manually scrolled to top useEffect(() => { if (!isRoomChatScrolledToTop) { chatListRef.current?.scrollTo(0, chatListRef.current.scrollHeight); } }); const windowSize = useResize(); const rowVirtualizer = useVirtual({ overscan: 10, size: messages.length, parentRef: chatListRef, estimateSize: React.useCallback(() => windowSize.y * 0.2, [windowSize]), }); const getBadgeIcon = (m: Message) => { const user = userMap[m.userId]; const isCreator = room.creatorId === user?.id; let badge: React.ReactNode | null = null; if (isCreator) { badge = ( ); } else if (user?.roomPermissions?.isMod) { badge = ; } else if (user?.roomPermissions?.isSpeaker) { badge = ; } return {badge}; }; return (
{ if (!chatListRef.current) return; const { scrollTop, offsetHeight, scrollHeight } = chatListRef.current; const isOnBottom = Math.abs(scrollTop + offsetHeight - scrollHeight) <= 1; setIsRoomChatScrolledToTop(!isOnBottom); if (isOnBottom) { useRoomChatMentionStore.getState().resetIAmMentioned(); } }} onMouseEnter={toggleFrozen} onMouseLeave={toggleFrozen} >
{rowVirtualizer.virtualItems.map( ({ index: idx, start, measureRef, size }: VirtualItem) => { const index = messages.length - idx - 1; const badgeIcon = getBadgeIcon(messages[index]); return (
{/* Whisper label */} {messages[index].isWhisper ? (
{t("modules.roomChat.whisper")}
) : null}
{badgeIcon} :
{messages[index].deleted ? ( {t("modules.roomChat.messageDeletion.message") + ""} {messages[index].deleterId === messages[index].userId ? t("modules.roomChat.messageDeletion.retracted") : t("modules.roomChat.messageDeletion.deleted")} ) : ( messages[index].tokens.map(({ t: token, v }, i) => { switch (token) { case "text": return ( {`${v} `} ); case "emote": return ; case "mention": return ( {""} ); case "link": try { return ( {normalizeUrl(v, { stripProtocol: true })} {""} ); } catch { return null; } case "block": return ( {v} {""} ); case "emoji": return <> ; default: return null; } }) )}
); } )} {/* {messages.length === 0 ? (
{t("modules.roomChat.welcomeMessage")}
) : null} */}
); }; ================================================ FILE: kibbeh/src/modules/room/chat/RoomChatMentions.tsx ================================================ import { BaseUser, RoomUser } from "@dogehouse/kebab"; import React, { useEffect } from "react"; import { mentionRegex } from "../../../lib/constants"; import { useConn } from "../../../shared-hooks/useConn"; import { SingleUser } from "../../../ui/UserAvatar"; import { useRoomChatMentionStore } from "./useRoomChatMentionStore"; import { useRoomChatStore } from "./useRoomChatStore"; interface RoomChatMentionsProps { users: RoomUser[]; } export const RoomChatMentions: React.FC = ({ users, }) => { const me = useConn().user; const { message, setMessage } = useRoomChatStore(); const { activeUsername, setActiveUsername, queriedUsernames, setQueriedUsernames, } = useRoomChatMentionStore(); function addMention(m: BaseUser) { setMessage( message.substring(0, message.lastIndexOf("@") + 1) + m.username + " " ); setQueriedUsernames([]); // Re-focus input after mention was clicked document.getElementById("room-chat-input")?.focus(); } useEffect(() => { // regex to match mention patterns const mentionMatches = message.match(mentionRegex); // query usernames for matched patterns if (mentionMatches && me) { const mentionsList = mentionMatches[0].replace(/@|#/g, "").split(" "); const useMention = mentionsList[mentionsList.length - 1]; // hide usernames list if user continues typing without selecting if (message[message.lastIndexOf(useMention) + useMention.length]) { setQueriedUsernames([]); } else { const usernameMatches = users.filter( ({ id, username, displayName }) => (username?.toLowerCase().includes(useMention?.toLowerCase()) || displayName?.toLowerCase().includes(useMention?.toLowerCase())) && me.id !== id ); const firstFive = usernameMatches.slice(0, 5); setQueriedUsernames(firstFive); if (firstFive.length) setActiveUsername(firstFive[0].id); } } else { // Hide mentions when message is sent setQueriedUsernames([]); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [message]); if (queriedUsernames.length) { return (
{queriedUsernames.map((m) => ( ))}
); } return <>; }; ================================================ FILE: kibbeh/src/modules/room/chat/navigateThroughQueriedEmojis.ts ================================================ import { useEmojiPickerStore } from "../../../global-stores/useEmojiPickerStore"; import { useRoomChatStore } from "./useRoomChatStore"; export const navigateThroughQueriedEmojis = (e: any) => { const { message, setMessage } = useRoomChatStore.getState(); const { queryMatches, keyboardHoveredEmoji, setQueryMatches, setKeyboardHoveredEmoji, setOpen, query, } = useEmojiPickerStore.getState(); // Use dom method, GlobalHotkeys apparently don't catch arrow-key events on inputs if ( !["ArrowLeft", "ArrowRight", "Enter"].includes(e.code) || !queryMatches.length ) { return; } e.preventDefault(); let changeToIndex: number | null = null; const activeIndex = queryMatches.findIndex( (emoji) => emoji.name === keyboardHoveredEmoji ); if (e.code === "ArrowLeft") { changeToIndex = activeIndex === 0 ? queryMatches.length - 1 : activeIndex - 1; } else if (e.code === "ArrowRight") { changeToIndex = activeIndex === queryMatches.length - 1 ? 0 : activeIndex + 1; } else if (e.code === "Enter") { const selected = queryMatches[activeIndex]; setMessage(message.slice(0, ~(query.length - 1)) + `:${selected.name}: `); setOpen(false); setQueryMatches([]); } // navigate to next/prev mention suggestion item if (changeToIndex !== null) { setKeyboardHoveredEmoji(queryMatches[changeToIndex]?.name); } }; ================================================ FILE: kibbeh/src/modules/room/chat/navigateThroughQueriedUsers.ts ================================================ import { useRoomChatMentionStore } from "./useRoomChatMentionStore"; import { useRoomChatStore } from "./useRoomChatStore"; export const navigateThroughQueriedUsers = (e: any) => { const { queriedUsernames, setQueriedUsernames, activeUsername, setActiveUsername, } = useRoomChatMentionStore.getState(); const { message, setMessage } = useRoomChatStore.getState(); // Use dom method, GlobalHotkeys apparently don't catch arrow-key events on inputs if ( !["ArrowUp", "ArrowDown", "Enter", "Tab"].includes(e.code) || !queriedUsernames.length ) { return; } e.preventDefault(); let changeToIndex: number | null = null; const activeIndex = queriedUsernames.findIndex( (username) => username.id === activeUsername ); if (e.code === "ArrowUp") { changeToIndex = activeIndex === 0 ? queriedUsernames.length - 1 : activeIndex - 1; } else if (e.code === "ArrowDown") { changeToIndex = activeIndex === queriedUsernames.length - 1 ? 0 : activeIndex + 1; } else if (e.code === "Enter" || e.code === "Tab") { const selected = queriedUsernames[activeIndex]; setMessage( `${message.substring(0, message.lastIndexOf("@") + 1)}${ selected.username } ` ); setQueriedUsernames([]); } // navigate to next/prev mention suggestion item if (changeToIndex !== null) { setActiveUsername(queriedUsernames[changeToIndex]?.id); } }; ================================================ FILE: kibbeh/src/modules/room/chat/useRoomChatMentionStore.ts ================================================ import { BaseUser } from "@dogehouse/kebab"; import create from "zustand"; import { combine } from "zustand/middleware"; import { useSoundEffectStore } from "../../sound-effects/useSoundEffectStore"; export const useRoomChatMentionStore = create( combine( { queriedUsernames: [] as BaseUser[], activeUsername: "", iAmMentioned: 0, }, (set) => ({ setQueriedUsernames: (queriedUsernames: BaseUser[]) => set({ queriedUsernames, }), setActiveUsername: (activeUsername: string) => { return set({ activeUsername, }); }, resetIAmMentioned: () => set({ iAmMentioned: 0, }), incrementIAmMentioned: () => { useSoundEffectStore.getState().playSoundEffect("roomChatMention"); set((x) => ({ iAmMentioned: x.iAmMentioned + 1 })); }, }) ) ); ================================================ FILE: kibbeh/src/modules/room/chat/useRoomChatStore.ts ================================================ import create from "zustand"; import { combine } from "zustand/middleware"; import { useRoomChatMentionStore } from "./useRoomChatMentionStore"; interface TextToken { t: "text"; v: string; } interface MentionToken { t: "mention"; v: string; } interface LinkToken { t: "link"; v: string; } interface BlockToken { t: "block"; v: string; } interface EmoteToken { t: "emote"; v: string; } interface EmojiToken { t: "emoji"; v: string; } export type RoomChatMessageToken = | TextToken | MentionToken | LinkToken | BlockToken | EmoteToken | EmojiToken; const colors = [ "#ff2366", "#fd51d9", "#face15", "#8d4de8", "#6859ea", "#7ed321", "#56b2ba", "#00CCFF", "#FF9900", "#FFFF66", ]; function generateColorFromString(str: string) { let sum = 0; for (let x = 0; x < str.length; x++) sum += x * str.charCodeAt(x); return colors[sum % colors.length]; } export interface RoomChatMessage { id: string; userId: string; avatarUrl: string; color: string; username: string; displayName: string; tokens: RoomChatMessageToken[]; deleted?: boolean; deleterId?: string; sentAt: string; isWhisper?: boolean; } export const useRoomChatStore = create( combine( { open: false, bannedUserIdMap: {} as Record, messages: [] as RoomChatMessage[], newUnreadMessages: false, message: "" as string, isRoomChatScrolledToTop: false, frozen: false, }, (set) => ({ unbanUser: (userId: string) => set(({ bannedUserIdMap: { [userId]: _, ...banMap }, ...s }) => ({ messages: s.messages.filter((m) => m.userId !== userId), bannedUserIdMap: banMap, })), addBannedUser: (userId: string) => set((s) => ({ messages: s.messages.filter((m) => m.userId !== userId), bannedUserIdMap: { ...s.bannedUserIdMap, [userId]: true }, })), addMessage: (m: RoomChatMessage) => set((s) => ({ newUnreadMessages: !s.open, messages: [ { ...m, color: generateColorFromString(m.userId) }, ...(s.messages.length <= 100 || s.frozen ? s.messages : s.messages.slice(0, 100)), ], })), setMessages: (messages: RoomChatMessage[]) => set((s) => ({ messages, })), clearChat: () => set({ messages: [], newUnreadMessages: false, bannedUserIdMap: {}, }), reset: () => set({ messages: [], newUnreadMessages: false, message: "", bannedUserIdMap: {}, }), toggleOpen: () => set((s) => { // Reset mention state useRoomChatMentionStore.getState().resetIAmMentioned(); if (s.open) { return { open: false, newUnreadMessages: false, }; } else { return { open: true, newUnreadMessages: false, }; } }), setMessage: (message: string) => set({ message, }), setOpen: (open: boolean) => set((s) => ({ ...s, open })), setIsRoomChatScrolledToTop: (isRoomChatScrolledToTop: boolean) => set({ isRoomChatScrolledToTop, }), toggleFrozen: () => set((s) => ({ frozen: !s.frozen })), }) ) ); ================================================ FILE: kibbeh/src/modules/room/mobile/RoomOverlay.tsx ================================================ import React from "react"; import { createPortal } from "react-dom"; import { useSpring, a, config } from "react-spring"; import { useDrag } from "react-use-gesture"; import { SolidDeafened, SolidDeafenedOff, SolidFriendsAdd, SolidMicrophone, SolidMicrophoneOff, SolidSettings, SolidSimpleMegaphone, } from "../../../icons"; import { RoomChatController } from "../RoomChatController"; import useWindowSize from "../../../shared-hooks/useWindowSize"; import { BoxedIcon } from "../../../ui/BoxedIcon"; import useViewportSize from "../../../shared-hooks/useViewportSize"; interface RoomOverlayProps { mute?: { isMuted: boolean; onMute: () => void; }; deaf?: { isDeaf: boolean; onDeaf: () => void; }; onInvitePeopleToRoom?: () => void; onRoomSettings?: () => void; askToSpeak?: () => void; setListener: () => void; canSpeak: boolean; } const RoomOverlay: React.FC = ({ mute, deaf, onInvitePeopleToRoom, onRoomSettings, askToSpeak, setListener, canSpeak, }) => { const { height: windowHeight } = useWindowSize(); const { height: viewportHeight } = useViewportSize(); const height = windowHeight - 30 - 100; const [{ y }, set] = useSpring(() => ({ y: height })); const open = () => { set({ y: 0, immediate: false, config: { mass: 1, tension: 200, friction: 25 }, }); }; const close = (velocity = 0) => { set({ y: height, immediate: false, config: { ...config.default, velocity: velocity * 1.2 }, // @todo clamp velo between 0 and something }); }; const bind = useDrag( ({ last, vxvy: [, vy], movement: [, my], cancel, canceled }) => { if (my > height) cancel(); // @todo fix weird bottom spacing if (last) { if (my > height * 0.8 || vy > 0.1) close(vy); else open(); } else { set({ y: my, immediate: true }); } }, { initial: () => [0, y.get()], filterTaps: true, bounds: { top: 0 }, rubberband: true, } ); const bgStyle = { opacity: y.to([0, height], [0.8, 0], "clamp"), display: y.to((py) => (py < height ? "block" : "none")), }; return createPortal( <> close()} >
{/* We bind it to the header so scroll in chat doesn't close the overlay */}
{canSpeak ? ( {mute?.isMuted || deaf?.isDeaf ? ( ) : ( )} ) : ( )}
{onRoomSettings ? ( ) : null} {deaf?.isDeaf ? ( ) : ( )}
, document.querySelector("#__next")! ); }; export default RoomOverlay; ================================================ FILE: kibbeh/src/modules/room/useGetRoomByQueryParam.ts ================================================ import { JoinRoomAndGetInfoResponse } from "@dogehouse/kebab"; import { useRouter } from "next/router"; import { useEffect } from "react"; import { useCurrentRoomIdStore } from "../../global-stores/useCurrentRoomIdStore"; import { isServer } from "../../lib/isServer"; import { validate as uuidValidate } from "uuid"; import { showErrorToast } from "../../lib/showErrorToast"; import { useTypeSafeQuery } from "../../shared-hooks/useTypeSafeQuery"; import isElectron from "is-electron"; import { useRoomChatStore } from "./chat/useRoomChatStore"; let ipcRenderer: any = null; if (isElectron()) { ipcRenderer = window.require("electron").ipcRenderer; } export const useGetRoomByQueryParam = () => { const { setCurrentRoomId } = useCurrentRoomIdStore(); const { query } = useRouter(); const roomId = typeof query.id === "string" ? query.id : ""; const { data, isLoading } = useTypeSafeQuery( ["joinRoomAndGetInfo", roomId || ""], { enabled: uuidValidate(roomId) && !isServer, refetchOnMount: "always", onSuccess: ((d: JoinRoomAndGetInfoResponse | { error: string }) => { if (d && !("error" in d) && d.room) { if (isElectron()) { ipcRenderer.send("@room/joined", true); } setCurrentRoomId(() => d.room.id); } }) as any, }, [roomId] ); const { push } = useRouter(); useEffect(() => { if (roomId) { setCurrentRoomId(roomId); if (isElectron()) { ipcRenderer.send("@room/joined", true); } } }, [roomId, setCurrentRoomId]); const errMsg = data && "error" in data ? data.error : ""; const noData = !data; useEffect(() => { if (isLoading) { return; } if (noData) { setCurrentRoomId(null); if (isElectron()) { ipcRenderer.send("@room/joined", false); } push("/dash"); return; } if (errMsg) { setCurrentRoomId(null); if (isElectron()) { ipcRenderer.send("@room/joined", false); } console.log(errMsg, isLoading); showErrorToast(errMsg); push("/dash"); } }, [noData, errMsg, isLoading, push, setCurrentRoomId]); return { data, isLoading }; }; ================================================ FILE: kibbeh/src/modules/room/useResize.ts ================================================ import React, { useEffect, useCallback, useState } from "react"; function getWindowsSize() { return { x: window.innerWidth, y: window.innerHeight }; } export const useResize = () => { const [size, setSize] = useState(getWindowsSize()); const handleResize = useCallback(() => { setSize(getWindowsSize()); }, []); // register resize event listener and removes it // calls handleResize useEffect(() => { window.addEventListener("resize", handleResize, { passive: true }); return () => { window.removeEventListener("resize", handleResize); }; }, [handleResize]); return size; }; ================================================ FILE: kibbeh/src/modules/room/useSplitUsersIntoSections.tsx ================================================ import { JoinRoomAndGetInfoResponse, wrap } from "@dogehouse/kebab"; import React, { useContext } from "react"; import { useMuteStore } from "../../global-stores/useMuteStore"; import { useDeafStore } from "../../global-stores/useDeafStore"; import { SolidSimpleMegaphone } from "../../icons"; import { modalConfirm } from "../../shared-components/ConfirmModal"; import { useConn } from "../../shared-hooks/useConn"; import { BoxedIcon } from "../../ui/BoxedIcon"; import { RoomAvatar } from "../../ui/RoomAvatar"; import { UserPreviewModalContext } from "./UserPreviewModalProvider"; import { Emote } from "./chat/Emote"; import { useScreenType } from "../../shared-hooks/useScreenType"; export const useSplitUsersIntoSections = ({ room, users, activeSpeakerMap, muteMap, deafMap, }: JoinRoomAndGetInfoResponse) => { const conn = useConn(); const { muted } = useMuteStore(); const { deafened } = useDeafStore(); const { setData } = useContext(UserPreviewModalContext); const screenType = useScreenType(); const speakers: React.ReactNode[] = []; const askingToSpeak: React.ReactNode[] = []; const listeners: React.ReactNode[] = []; let canIAskToSpeak = false; users.forEach((u) => { let arr = listeners; if (u.id === room.creatorId || u.roomPermissions?.isSpeaker) { arr = speakers; } else if (u.roomPermissions?.askedToSpeak) { arr = askingToSpeak; } else if (u.id === conn.user.id) { canIAskToSpeak = true; } let flair: React.ReactNode | undefined = undefined; const isCreator = u.id === room.creatorId; const isSpeaker = !!u.roomPermissions?.isSpeaker; const canSpeak = isCreator || isSpeaker; const isMuted = conn.user.id === u.id ? muted : muteMap[u.id]; const isDeafened = conn.user.id === u.id ? deafened : deafMap[u.id]; if (isCreator || u.roomPermissions?.isMod) { flair = ( ); } // for (let i = 0; i < 50; i++) { arr.push( { setData({ userId: u.id }); }} flair={flair} /> ); // } }); if (canIAskToSpeak && screenType !== "fullscreen") { speakers.push(
{ modalConfirm("Would you like to ask to speak?", () => { wrap(conn).mutation.askToSpeak(); }); }} style={{ width: 60, height: 60 }} circle className="flex-shrink-0" title="Request to speak" >
); } return { speakers, listeners, askingToSpeak, canIAskToSpeak }; }; ================================================ FILE: kibbeh/src/modules/scheduled-rooms/AddToCalendar.tsx ================================================ import React, { ReactNode, useEffect, useMemo, useRef, useState } from "react"; import { BaseOverlay } from "../../ui/BaseOverlay"; import { DropdownController } from "../../ui/DropdownController"; import { SettingsIcon } from "../../ui/SettingsIcon"; import makeUrls, { CalendarEvent } from "./makeUrls"; type CalendarURLs = ReturnType; const useAutoFocus = () => { const elementRef = useRef(null); useEffect(() => { const previous = document.activeElement; const element = elementRef.current; if (element) { element.focus(); } if (previous instanceof HTMLElement) { return () => previous.focus(); } return undefined; }, []); return elementRef; }; type OpenStateToggle = (event?: React.MouseEvent) => void; const useOpenState = (initialOpen: boolean): [boolean, OpenStateToggle] => { const [open, setOpen] = useState(initialOpen); const onToggle = () => setOpen((current) => !current); useEffect(() => { if (open) { const onClose = () => setOpen(false); document.addEventListener("click", onClose); return () => document.removeEventListener("click", onClose); } return undefined; }, [open, setOpen]); return [open, onToggle]; }; type CalendarRef = HTMLAnchorElement; type CalendarProps = { children: React.ReactNode; filename?: string; href: string; }; const Calendar = React.forwardRef( ({ children, filename = false, href }, ref) => ( {children} ) ); Calendar.displayName = "Calendar"; type DropdownProps = { filename: string; onToggle: OpenStateToggle; urls: CalendarURLs; }; const Dropdown: React.FC = ({ filename, onToggle, urls }) => { const ref = useAutoFocus() as React.RefObject; const onKeyDown = (event: React.KeyboardEvent) => { if (event.key === "Escape") { onToggle(); } }; return ( ); }; type AddToCalendarProps = { event: CalendarEvent; open?: boolean; filename?: string; children: (tog: () => void) => ReactNode; }; export const AddToCalendar: React.FC = ({ children, event, filename = "download", open: initialOpen = false, }) => { const [_, onToggle] = useOpenState(initialOpen); const urls = useMemo(() => makeUrls(event), [event]); return (
( )} > {children(onToggle)}
); }; ================================================ FILE: kibbeh/src/modules/scheduled-rooms/CopyScheduleRoomLinkButton.tsx ================================================ import React, { useState } from "react"; import { Link, Link2 } from "react-feather"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; import { BoxedIcon } from "../../ui/BoxedIcon"; import { copyTextToClipboard } from "./copyToClipboard"; interface CopyLinkButtonProps { text: string; } export const CopyScheduleRoomLinkButton: React.FC = ({ text, }) => { const [copied, setCopied] = useState(false); return ( { if (copyTextToClipboard(text)) { setCopied(true); } }} > ); }; ================================================ FILE: kibbeh/src/modules/scheduled-rooms/CreateScheduledRoomModal.tsx ================================================ import DateFnsUtils from "@date-io/date-fns"; import { BaseUser } from "@dogehouse/kebab"; import { createMuiTheme, ThemeProvider } from "@material-ui/core/styles"; import { DateTimePicker, MuiPickersUtilsProvider } from "@material-ui/pickers"; import { add } from "date-fns"; import { Form, Formik } from "formik"; import React from "react"; import { InputField } from "../../form-fields/InputField"; import { showErrorToast } from "../../lib/showErrorToast"; import { useWrappedConn } from "../../shared-hooks/useConn"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; import { Button } from "../../ui/Button"; import { ButtonLink } from "../../ui/ButtonLink"; import { InputErrorMsg } from "../../ui/InputErrorMsg"; import { Modal } from "../../ui/Modal"; export interface ScheduleRoomFormData { name: string; description: string; cohosts: BaseUser[]; scheduledFor: Date; } interface CreateRoomModalProps { editInfo?: { intialValues: ScheduleRoomFormData; id: string }; onScheduledRoom: (data: ScheduleRoomFormData, resp: any) => void; onRequestClose: () => void; } const colors = { p100: "#dee3ea", p200: "#b2bdcd", p300: "#5d7290", p600: "#323d4d", p700: "#242c37", p800: "#151a21", p900: "#0b0e11", accent: "#fd4d4d", accentHover: "#fd6868", white: "#FFF", }; const theme = createMuiTheme({ palette: { type: "dark", primary: { main: colors.accent, }, secondary: { main: colors.accent, }, }, overrides: { MuiPickersDay: { day: { "&:hover": { backgroundColor: colors.p700, }, color: colors.p100, }, current: { "&:hover": { backgroundColor: colors.p700, }, color: colors.p100, }, daySelected: { "&:hover": { backgroundColor: colors.accentHover, }, backgroundColor: colors.accent, color: colors.white, }, dayDisabled: { backgroundColor: colors.p800, color: colors.p600, }, }, MuiPickerDTHeader: { separator: {}, toolbar: {}, }, MuiPickerDTTabs: { tabs: { backgroundColor: colors.p900, }, }, MuiPickersCalendar: { week: { backgroundColor: colors.p800, color: colors.p100, }, progressContainer: {}, transitionContainer: { backgroundColor: colors.p800, }, }, MuiPickersCalendarHeader: { switchHeader: { backgroundColor: colors.p800, color: colors.p100, }, transitionContainer: { backgroundColor: colors.p800, }, iconButton: { backgroundColor: colors.p800, color: colors.p100, }, daysHeader: { backgroundColor: colors.p800, color: colors.p100, }, dayLabel: { backgroundColor: colors.p800, color: colors.p100, }, }, MuiPickersSlideTransition: { transitionContainer: {}, }, MuiPickersYearSelectionStyles: { container: { backgroundColor: colors.p800, color: colors.p100, }, }, MuiPickersYear: { root: { backgroundColor: colors.p800, color: colors.p300, }, yearSelected: { backgroundColor: colors.p800, color: colors.p100, }, yearDisabled: { backgroundColor: colors.p800, color: colors.p600, }, }, MuiPickersMonthSelection: { container: { backgroundColor: colors.p800, color: colors.p100, }, }, MuiPickersMonth: { root: { backgroundColor: colors.p800, color: colors.p300, }, monthSelected: { backgroundColor: colors.p800, color: colors.p100, }, monthDisabled: { backgroundColor: colors.p800, color: colors.p600, }, }, MuiPickersTimePickerToolbar: { separator: {}, toolbarLandscape: {}, hourMinuteLabel: {}, ampmLabel: {}, }, MuiPickersClock: { container: { backgroundColor: colors.p800, color: colors.p100, }, clock: { backgroundColor: colors.p900, color: colors.accent, }, pin: { backgroundColor: colors.accent, }, }, MuiPickersClockNumber: { clockNumber: { color: colors.p200, }, clockNumberSelected: { color: colors.white, }, }, MuiPickersClockPointer: { animateTransform: {}, pointer: { backgroundColor: colors.accent, }, thumb: { backgroundColor: colors.accent, borderColor: colors.accent, }, noPoint: { backgroundColor: colors.accent, }, }, MuiPickersModal: { dialog: { backgroundColor: colors.p800, }, dialogRoot: { backgroundColor: colors.p800, }, dialogRootWider: { backgroundColor: colors.p800, }, withAdditionalAction: { backgroundColor: colors.p800, }, }, MuiPickersToolbar: { toolbar: { backgroundColor: colors.p900, color: colors.p100, }, }, MuiPickersToolbarButton: { toolbarBtn: { color: colors.p100, }, }, }, }); export const CreateScheduleRoomModal: React.FC = ({ onScheduledRoom, onRequestClose, editInfo, }) => { const conn = useWrappedConn(); const { t } = useTypeSafeTranslation(); return ( initialValues={ editInfo?.intialValues || { name: "", description: "", cohosts: [] as BaseUser[], scheduledFor: add(new Date(), { days: 1 }), } } validateOnChange={false} validateOnBlur={false} validate={({ name, scheduledFor }) => { const errors: Record = {}; if (name.length < 2) { return { name: t("modules.scheduledRooms.modal.minLength"), }; } if (scheduledFor.getTime() < new Date().getTime()) { return { scheduledFor: t("modules.scheduledRooms.modal.needsFuture"), }; } return errors; }} onSubmit={async (allData) => { const { name, scheduledFor, ...data } = allData; const scheduledForISO = scheduledFor.toISOString(); const resp = await (editInfo ? conn.mutation.editScheduledRoom(editInfo.id, { name, scheduledFor: scheduledForISO, ...data, }) : conn.mutation.createScheduledRoom({ name, scheduledFor: scheduledForISO, ...data, })); if ("error" in resp && resp.error) { showErrorToast(resp.error); return; } else { onScheduledRoom(allData, resp); } onRequestClose(); }} > {({ setFieldValue, values, errors, isSubmitting }) => (
{ if (x) { setFieldValue("scheduledFor", x); } }} /> {errors.scheduledFor ? (
{errors.scheduledFor}
) : null}
{t("common.cancel")}
)}
); }; ================================================ FILE: kibbeh/src/modules/scheduled-rooms/EditScheduleRoomModalController.tsx ================================================ import { ScheduledRoom } from "@dogehouse/kebab"; import React, { useState } from "react"; import { CreateScheduleRoomModal, ScheduleRoomFormData, } from "./CreateScheduledRoomModal"; type State = { scheduleRoomToEdit: ScheduledRoom; cursor: string; }; interface EditScheduleRoomModalControllerProps { onScheduledRoom: ( editInfo: State, data: ScheduleRoomFormData, resp: any ) => void; children: (x: { onEdit: (y: State) => void }) => React.ReactNode; } export const EditScheduleRoomModalController: React.FC = ({ onScheduledRoom, children, }) => { const [editInfo, setScheduleRoomToEdit] = useState(null); return ( <> {editInfo ? ( onScheduledRoom(editInfo, ...vals)} onRequestClose={() => setScheduleRoomToEdit(null)} /> ) : null} {children({ onEdit: setScheduleRoomToEdit })} ); }; ================================================ FILE: kibbeh/src/modules/scheduled-rooms/ScheduledRoomCard.tsx ================================================ import { ScheduledRoom } from "@dogehouse/kebab"; import { differenceInMilliseconds, isPast, isToday, sub } from "date-fns"; import { useRouter } from "next/router"; import React, { useContext, useEffect, useMemo, useState } from "react"; import { SolidCalendar, SolidRocket } from "../../icons"; import { modalConfirm } from "../../shared-components/ConfirmModal"; import { useTypeSafeMutation } from "../../shared-hooks/useTypeSafeMutation"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; import { BoxedIcon } from "../../ui/BoxedIcon"; import { Button } from "../../ui/Button"; import { SingleUser } from "../../ui/UserAvatar"; import { WebSocketContext } from "../ws/WebSocketProvider"; import { CopyScheduleRoomLinkButton } from "./CopyScheduleRoomLinkButton"; import { Edit, Trash } from "react-feather"; import { AddToCalendar } from "./AddToCalendar"; interface ScheduledRoomCardProps { onEdit: () => void; onDeleteComplete: () => void; info: ScheduledRoom; noCopyLinkButton?: boolean; noEditOrDeleteButton?: boolean; } export const ScheduledRoomCard: React.FC = ({ onEdit, onDeleteComplete, noCopyLinkButton, noEditOrDeleteButton = false, info: { id, name, scheduledFor, creator, description, roomId }, }) => { const { push } = useRouter(); const { mutateAsync: mutateAsyncStartRoom, isLoading: isLoadingStartRoom, } = useTypeSafeMutation("createRoomFromScheduledRoom", { onSuccess: ({ room }) => { push("/room/" + room.id); }, }); const { mutateAsync, isLoading } = useTypeSafeMutation( "deleteScheduledRoom", { onSuccess: () => { onDeleteComplete(); }, } ); const [, rerender] = useState(0); const dt = useMemo(() => new Date(scheduledFor), [scheduledFor]); const canStartRoom = useMemo(() => isPast(sub(dt, { minutes: 10 })), [dt]); useEffect(() => { let done = false; const timeoutId = setTimeout(() => { done = true; rerender((x) => x + 1); }, Math.min(differenceInMilliseconds(sub(dt, { minutes: 10 }), new Date()) + 1000, 0)); // + 1 second to be safe return () => { if (!done) { clearTimeout(timeoutId); } }; }, [dt]); const { conn } = useContext(WebSocketContext); const me = conn?.user; const { t } = useTypeSafeTranslation(); const isCreator = me?.id === creator.id; const url = window.location.origin + `/scheduled-room/${id}`; return (
{name}
{(toggle) => ( )} {noCopyLinkButton ? null : ( )} {isCreator && !noEditOrDeleteButton ? ( <> onEdit()}> modalConfirm( "Are you sure you want to delete this scheduled room?", () => { mutateAsync([id]); } ) } > ) : null}
{creator.displayName}
{isToday(dt) ? t("common.formattedIntlTime", { time: dt }) : t("common.formattedIntlDate", { date: dt })} {description ? ` | ` + description : ``}
{canStartRoom ? (
{isCreator ? ( ) : ( roomId && ( ) )}
) : null}
); }; ================================================ FILE: kibbeh/src/modules/scheduled-rooms/ScheduledRoomsList.tsx ================================================ import { ScheduledRoom } from "@dogehouse/kebab"; import React, { useState } from "react"; import { useConn } from "../../shared-hooks/useConn"; import { useTypeSafeQuery } from "../../shared-hooks/useTypeSafeQuery"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; import { useTypeSafeUpdateQuery } from "../../shared-hooks/useTypeSafeUpdateQuery"; import { Button } from "../../ui/Button"; import { CenterLoader } from "../../ui/CenterLoader"; import { FeedHeader } from "../../ui/FeedHeader"; import { MiddlePanel } from "../layouts/GridPanels"; import { CreateScheduleRoomModal } from "./CreateScheduledRoomModal"; import { EditScheduleRoomModalController } from "./EditScheduleRoomModalController"; import { ScheduledRoomCard } from "./ScheduledRoomCard"; interface ScheduledRoomsListProps {} const Page = ({ onLoadMore, cursor, isLastPage, isOnlyPage, userId, onEdit, }: { onEdit: (sr: { scheduleRoomToEdit: ScheduledRoom; cursor: string }) => void; userId: string; cursor: string; isLastPage: boolean; isOnlyPage: boolean; onLoadMore: (o: string) => void; }) => { const { isLoading, data } = useTypeSafeQuery( ["getScheduledRooms", cursor, "all", userId], { staleTime: Infinity, refetchOnMount: "always" }, [cursor, "all", userId] ); const update = useTypeSafeUpdateQuery(); const { t } = useTypeSafeTranslation(); if (isLoading) { return ; } if (!data) { return null; } if (isOnlyPage && data.rooms.length === 0) { return (
{t("modules.scheduledRooms.noneFound")}
); } return (
{data.rooms.map((r) => (
{ update(["getScheduledRooms", cursor, "all", userId], (d) => { return { rooms: (d?.rooms || []).filter((x) => x.id !== r.id), nextCursor: d?.nextCursor, }; }); }} onEdit={() => onEdit({ cursor, scheduleRoomToEdit: r })} info={r} />
))} {isLastPage && data.nextCursor ? (
) : null}
); }; export const ScheduledRoomsList: React.FC = ({}) => { const { t } = useTypeSafeTranslation(); const [open, setOpen] = useState(false); const [{ cursors, userId }, setQueryState] = useState<{ cursors: string[]; userId: string; }>({ cursors: [""], userId: "" }); const update = useTypeSafeUpdateQuery(); const conn = useConn(); return ( <> {open ? ( { update(["getScheduledRooms", "", "all", userId], (d) => { return { rooms: [ { roomId: null, creator: conn.user!, creatorId: conn.user!.id, description: data.description, id: resp.scheduledRoom.id, name: data.name, numAttending: 0, scheduledFor: data.scheduledFor.toISOString(), }, ...(d?.rooms || []), ], nextCursor: d?.nextCursor, }; }); }} onRequestClose={() => setOpen(false)} /> ) : null} { setOpen(true); }} title={t("modules.scheduledRooms.title")} /> } > { update(["getScheduledRooms", editInfo.cursor, userId], (d) => { return { rooms: (d?.rooms || []).map((x) => x.id === editInfo.scheduleRoomToEdit.id ? { ...x, name: data.name, description: data.description, scheduledFor: data.scheduledFor.toISOString(), } : x ), nextCursor: d?.nextCursor, }; }); }} > {({ onEdit }) => cursors.map((cursor, i) => ( setQueryState({ cursors: [...cursors, o], userId, }) } onEdit={onEdit} isOnlyPage={cursors.length === 1} isLastPage={cursors.length - 1 === i} key={cursor} cursor={cursor} /> )) } ); }; ================================================ FILE: kibbeh/src/modules/scheduled-rooms/ScheduledRoomsPage.tsx ================================================ import React from "react"; import { PageComponent } from "../../types/PageComponent"; import { WaitForWsAndAuth } from "../auth/WaitForWsAndAuth"; import { HeaderController } from "../display/HeaderController"; import { DefaultDesktopLayout } from "../layouts/DefaultDesktopLayout"; import { ScheduledRoomsList } from "./ScheduledRoomsList"; interface LoungePageProps {} export const ScheduledRoomsPage: PageComponent = ({}) => { return ( ); }; ScheduledRoomsPage.ws = true; ================================================ FILE: kibbeh/src/modules/scheduled-rooms/copyToClipboard.ts ================================================ import { showErrorToast } from "../../lib/showErrorToast"; // https://stackoverflow.com/questions/400212/how-do-i-copy-to-the-clipboard-in-javascript export function copyTextToClipboard(text: string) { const textArea = document.createElement("textarea"); textArea.value = text; // Avoid scrolling to bottom textArea.style.top = "0"; textArea.style.left = "0"; textArea.style.position = "fixed"; document.body.appendChild(textArea); textArea.focus(); textArea.select(); let good = true; try { good = document.execCommand("copy"); } catch (err) { console.error(err); showErrorToast(err); good = false; } document.body.removeChild(textArea); return good; } ================================================ FILE: kibbeh/src/modules/scheduled-rooms/makeUrls.ts ================================================ export interface CalendarEvent { name: string; details: string | null; location: string | null; startsAt: string; endsAt: string; } const makeDuration = (event: CalendarEvent) => { const minutes = Math.floor( (+new Date(event.endsAt) - +new Date(event.startsAt)) / 60 / 1000 ); return `${`0${Math.floor(minutes / 60)}`.slice(-2)}${`0${minutes % 60}`.slice( -2 )}`; }; const makeTime = (time: string) => new Date(time).toISOString().replace(/[-:]|\.\d{3}/g, ""); type Query = { [key: string]: null | boolean | number | string }; const makeUrl = (base: string, query: Query) => Object.keys(query).reduce((accum, key, index) => { const value = query[key]; if (value !== null) { return `${accum}${index === 0 ? "?" : "&"}${key}=${encodeURIComponent( value )}`; } return accum; }, base); const makeGoogleCalendarUrl = (event: CalendarEvent) => makeUrl("https://calendar.google.com/calendar/render", { action: "TEMPLATE", dates: `${makeTime(event.startsAt)}/${makeTime(event.endsAt)}`, location: event.location, text: event.name, details: event.details, }); const makeOutlookCalendarUrl = (event: CalendarEvent) => makeUrl("https://outlook.live.com/owa", { rru: "addevent", startdt: event.startsAt, enddt: event.endsAt, subject: event.name, location: event.location, body: event.details, allday: false, uid: new Date().getTime().toString(), path: "/calendar/view/Month", }); const makeYahooCalendarUrl = (event: CalendarEvent) => makeUrl("https://calendar.yahoo.com", { v: 60, view: "d", type: 20, title: event.name, st: makeTime(event.startsAt), dur: makeDuration(event), desc: event.details, in_loc: event.location, }); const makeICSCalendarUrl = (event: CalendarEvent) => { const components = ["BEGIN:VCALENDAR", "VERSION:2.0", "BEGIN:VEVENT"]; // In case of SSR, document won't be defined if (typeof document !== "undefined") { components.push(`URL:${document.URL}`); } components.push( `DTSTART:${makeTime(event.startsAt)}`, `DTEND:${makeTime(event.endsAt)}`, `SUMMARY:${event.name}`, `DESCRIPTION:${event.details}`, `LOCATION:${event.location}`, "END:VEVENT", "END:VCALENDAR" ); return encodeURI(`data:text/calendar;charset=utf8,${components.join("\n")}`); }; type URLSet = { [key: string]: string }; const makeUrls = (event: CalendarEvent): URLSet => ({ google: makeGoogleCalendarUrl(event), outlook: makeOutlookCalendarUrl(event), yahoo: makeYahooCalendarUrl(event), ics: makeICSCalendarUrl(event), }); export default makeUrls; ================================================ FILE: kibbeh/src/modules/search/SearchBarController.tsx ================================================ import React, { useEffect, useState } from "react"; import { useTypeSafeQuery } from "../../shared-hooks/useTypeSafeQuery"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; import { SearchBar } from "../../ui/Search/SearchBar"; import { SearchOverlay } from "../../ui/Search/SearchOverlay"; import Downshift from "downshift"; import { Room, User } from "@dogehouse/kebab"; import { useRouter } from "next/router"; import { useDebounce } from "use-debounce"; import { InfoText } from "../../ui/InfoText"; import { RoomSearchResult, UserSearchResult, } from "../../ui/Search/SearchResult"; import { useMediaQuery } from "react-responsive"; import usePageVisibility from "../../shared-hooks/usePageVisibility"; interface SearchControllerProps {} export const SearchBarController: React.FC = ({}) => { const [rawText, setText] = useState(""); const visible = usePageVisibility(); const [text] = useDebounce(rawText, 200); const { t } = useTypeSafeTranslation(); const isOverflowing = useMediaQuery({ maxWidth: 475 }); let enabled = false; const isUsernameSearch = text.startsWith("@"); if (text && isUsernameSearch && text.trim().length > 2) { enabled = true; } if (text && !isUsernameSearch && text.trim().length > 1) { enabled = true; } const { data, isLoading } = useTypeSafeQuery( ["search", text], { enabled, }, [text] ); const { push } = useRouter(); const results = data ? [...data.rooms, ...data.users] : []; return ( onChange={(selection) => { if (!selection) { return; } if ("username" in selection) { push(`/u/[username]`, `/u/${selection.username}`); return; } push(`/room/[id]`, `/room/${selection.id}`); }} onInputValueChange={(v) => { if (visible) { setText(v); } }} itemToString={(item) => { if (!item) { return ""; } else if ("username" in item) { return item.username; } return item.name; }} > {({ getInputProps, getItemProps, getLabelProps, getMenuProps, isOpen, inputValue, highlightedIndex, selectedItem, getRootProps, }) => (
{isOpen ? (
    {(data?.rooms.length === 0 && data?.users.length === 0) || !data ? ( no results ) : null} {results.map((item, index) => "username" in item ? ( // eslint-disable-next-line react/jsx-key
  • ) : (
  • ) )}
) : null}
)} ); }; ================================================ FILE: kibbeh/src/modules/search/SearchPage.tsx ================================================ import { Room, User } from "@dogehouse/kebab"; import router from "next/router"; import React, { useState } from "react"; import { useWrappedConn } from "../../shared-hooks/useConn"; import { useScreenType } from "../../shared-hooks/useScreenType"; import { PageComponent } from "../../types/PageComponent"; import { InfoText } from "../../ui/InfoText"; import { SearchHeader } from "../../ui/mobile/MobileHeader"; import { RoomSearchResult, UserSearchResult, } from "../../ui/Search/SearchResult"; import { WaitForWsAndAuth } from "../auth/WaitForWsAndAuth"; import { HeaderController } from "../display/HeaderController"; import { DefaultDesktopLayout } from "../layouts/DefaultDesktopLayout"; interface LoungePageProps {} export const SearchPage: PageComponent = ({}) => { const screenType = useScreenType(); if (screenType !== "fullscreen") router.push("/dash"); const [results, setResults] = useState([] as (User | Room)[]); const [searchLoading, setSearchLoading] = useState(false); const conn = useWrappedConn(); return ( { console.log(e.target.value); setSearchLoading(true); conn.query.search(e.target.value).then((r) => { setResults(r?.items); setSearchLoading(false); }); }} searchPlaceholder="Search" onBackClick={() => router.back()} searchLoading={searchLoading} /> } >
{results && results.map((userOrRoom, i) => { if ("username" in userOrRoom) { return ( router.push(`/u/${userOrRoom.username}`)} key={i} user={userOrRoom} /> ); } else { return ( router.push(`/room/${userOrRoom.id}`)} key={i} room={userOrRoom} /> ); } })} {!results?.length && ( no results )}
); }; SearchPage.ws = true; ================================================ FILE: kibbeh/src/modules/settings/OverlaySettingsPage.tsx ================================================ import { Formik } from "formik"; import isElectron from "is-electron"; import { useRouter } from "next/router"; import React, { useEffect } from "react"; import { object, string } from "superstruct"; import { InputField } from "../../form-fields/InputField"; import { useOverlayStore } from "../../global-stores/useOverlayStore"; import { validateStruct } from "../../lib/validateStruct"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; import { PageComponent } from "../../types/PageComponent"; import { Button } from "../../ui/Button"; import { OverlayKeybind } from "../keyboard-shortcuts"; import { DefaultDesktopLayout } from "../layouts/DefaultDesktopLayout"; import { MiddlePanel } from "../layouts/GridPanels"; interface OverlaySettingsProps {} const overlaySettingsStruct = object({ appTitle: string(), }); const validateData = validateStruct(overlaySettingsStruct); const isMac = process.platform === "darwin"; export const OverlaySettingsPage: PageComponent = () => { const { appTitle } = useOverlayStore.getState(); const { push } = useRouter(); const { t } = useTypeSafeTranslation(); useEffect(() => { if (!isElectron() || isMac) { push("/dash"); } }, [push]); useEffect(() => { if (isElectron()) { const ipcRenderer = window.require("electron").ipcRenderer; ipcRenderer.send("@rpc/page", { page: "overlay-settings", opened: true, modal: false, data: "", }); return () => { ipcRenderer.send("@rpc/page", { page: "overlay-settings", opened: false, modal: false, data: "", }); }; } }, []); return (
{ return validateData({ ...values, appTitle: values.appTitle.trim(), }); }} onSubmit={(data) => { useOverlayStore.getState().setData(data); }} > {({ handleSubmit }) => (
)}
); }; OverlaySettingsPage.ws = true; ================================================ FILE: kibbeh/src/modules/settings/PrivacySettingForm.tsx ================================================ import { User } from "@dogehouse/kebab"; import React, { useContext } from "react"; import { useTypeSafeMutation } from "../../shared-hooks/useTypeSafeMutation"; import { NativeSelect } from "../../ui/NativeSelect"; import { WebSocketContext } from "../ws/WebSocketProvider"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; interface PrivacySettingFormProps {} export const PrivacySettingForm: React.FC = ({}) => { const { mutateAsync } = useTypeSafeMutation("userUpdate"); const { conn, setUser } = useContext(WebSocketContext); const { user } = conn!; const { t } = useTypeSafeTranslation(); return (
{t("pages.privacySettings.whispers.label")}:
{ const whisperPrivacySetting = e.target .value as User["whisperPrivacySetting"]; setUser({ ...user, whisperPrivacySetting }); mutateAsync([{ whisperPrivacySetting }]); }} > {[ t("pages.privacySettings.whispers.on"), t("pages.privacySettings.whispers.off"), ].map((v) => ( ))}
); }; ================================================ FILE: kibbeh/src/modules/settings/PrivacySettingsPage.tsx ================================================ import React from "react"; import { HeaderController } from "../../modules/display/HeaderController"; import { PageComponent } from "../../types/PageComponent"; import { DefaultDesktopLayout } from "../layouts/DefaultDesktopLayout"; import { MiddlePanel } from "../layouts/GridPanels"; import { PrivacySettingForm } from "./PrivacySettingForm"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; interface ChatSettingsProps {} export const PrivacySettingsPage: PageComponent = () => { const { t } = useTypeSafeTranslation(); return (

{t("pages.privacySettings.header")}

); }; PrivacySettingsPage.ws = true; ================================================ FILE: kibbeh/src/modules/settings/SoundEffectSettingsPage.tsx ================================================ import React, { useEffect } from "react"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; import { Button } from "../../ui/Button"; import { InfoText } from "../../ui/InfoText"; import { DefaultDesktopLayout } from "../layouts/DefaultDesktopLayout"; import { MiddlePanel } from "../layouts/GridPanels"; import { useSoundEffectStore, PossibleSoundEffect, } from "../sound-effects/useSoundEffectStore"; import { HeaderController } from "../../modules/display/HeaderController"; import isElectron from "is-electron"; import { PageComponent } from "../../types/PageComponent"; interface ChatSettingsProps {} const capitalize = (s: string) => s.length ? s[0].toUpperCase() + s.slice(1) : s; const camelToReg = (str: string) => str.replace(/[A-Z]/g, (letter) => ` ${letter}`); export const SoundEffectSettings: PageComponent = () => { const [ soundEffectSettings, setSetting, playSoundEffect, ] = useSoundEffectStore((x) => [x.settings, x.setSetting, x.playSoundEffect]); const { t } = useTypeSafeTranslation(); useEffect(() => { if (isElectron()) { const ipcRenderer = window.require("electron").ipcRenderer; ipcRenderer.send("@rpc/page", { page: "sound-effect-settings", opened: true, modal: false, data: "", }); return () => { ipcRenderer.send("@rpc/page", { page: "sound-effect-settings", opened: false, modal: false, data: "", }); }; } }, []); return (

{t("pages.soundEffectSettings.header")}

{Object.keys(soundEffectSettings).map((k) => { return (
{capitalize(camelToReg(k))} setSetting( k as PossibleSoundEffect, !soundEffectSettings[k as PossibleSoundEffect] ) } />
); })}
); }; SoundEffectSettings.ws = true; ================================================ FILE: kibbeh/src/modules/settings/VoiceSettingsPage.tsx ================================================ import React, { useEffect } from "react"; import { useGlobalVolumeStore } from "../../global-stores/useGlobalVolumeStore"; import { useTypeSafeTranslation } from "../../shared-hooks/useTypeSafeTranslation"; import { PageComponent } from "../../types/PageComponent"; import { Button } from "../../ui/Button"; import { NativeSelect } from "../../ui/NativeSelect"; import { VolumeSlider } from "../../ui/VolumeSlider"; import { MuteKeybind, DeafKeybind, PTTKeybind, ChatKeybind, InviteKeybind, RequestToSpeakKeybind, } from "../keyboard-shortcuts"; import { DefaultDesktopLayout } from "../layouts/DefaultDesktopLayout"; import { MiddlePanel } from "../layouts/GridPanels"; import { useMicIdStore } from "../webrtc/stores/useMicIdStore"; import { HeaderController } from "../../modules/display/HeaderController"; import isElectron from "is-electron"; import { useDevices } from "../../shared-hooks/useDevices"; interface VoiceSettingsProps {} export const VoiceSettingsPage: PageComponent = () => { const { micId, setMicId } = useMicIdStore(); const { volume, set } = useGlobalVolumeStore(); const { devices, fetchMics } = useDevices(); useEffect(() => { if (isElectron()) { const ipcRenderer = window.require("electron").ipcRenderer; ipcRenderer.send("@rpc/page", { page: "voice-settings", opened: true, modal: false, data: "", }); return () => { ipcRenderer.send("@rpc/page", { page: "voice-settings", opened: false, modal: false, data: "", }); }; } }, []); const { t } = useTypeSafeTranslation(); return (
{t("pages.voiceSettings.mic")}
{devices.length ? ( setMicId(e.target.value)} > {devices.map(({ id, label }) => ( ))} ) : (
{t("pages.voiceSettings.permissionError")}
)}
{t("pages.voiceSettings.volume")}{" "}
set({ volume: n })} />
); }; VoiceSettingsPage.ws = true; ================================================ FILE: kibbeh/src/modules/sound-effects/SoundEffectPlayer.tsx ================================================ import React, { createContext } from "react"; import { soundEffects, useSoundEffectStore } from "./useSoundEffectStore"; const soundKeys = Object.keys(soundEffects); export const SoundEffectContext = createContext<{ playSoundEffect: (name: keyof typeof soundEffects) => void; }>({ playSoundEffect: () => {} }); export const SoundEffectPlayer: React.FC = ({}) => { const add = useSoundEffectStore((x) => x.add); return ( <> {soundKeys.map((key) => (