mirror of
https://github.com/zulip/zulip-desktop.git
synced 2025-10-24 08:33:36 +00:00
Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3956252309 | ||
|
|
5eccd49fef | ||
|
|
c08bbf49ab | ||
|
|
913eda8b1e |
@@ -1,4 +1,4 @@
|
|||||||
import {EventEmitter} from "node:events";
|
import * as z from "zod";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
type ClipboardDecrypter,
|
type ClipboardDecrypter,
|
||||||
@@ -7,11 +7,11 @@ import {
|
|||||||
import {type NotificationData, newNotification} from "./notification/index.ts";
|
import {type NotificationData, newNotification} from "./notification/index.ts";
|
||||||
import {ipcRenderer} from "./typed-ipc-renderer.ts";
|
import {ipcRenderer} from "./typed-ipc-renderer.ts";
|
||||||
|
|
||||||
type ListenerType = (...arguments_: any[]) => void;
|
type ListenerType = (...arguments_: unknown[]) => void;
|
||||||
|
|
||||||
/* eslint-disable @typescript-eslint/naming-convention */
|
/* eslint-disable @typescript-eslint/naming-convention */
|
||||||
export type ElectronBridge = {
|
export type ElectronBridge = {
|
||||||
send_event: (eventName: string | symbol, ...arguments_: unknown[]) => boolean;
|
send_event: (eventName: string, ...arguments_: unknown[]) => boolean;
|
||||||
on_event: (eventName: string, listener: ListenerType) => void;
|
on_event: (eventName: string, listener: ListenerType) => void;
|
||||||
new_notification: (
|
new_notification: (
|
||||||
title: string,
|
title: string,
|
||||||
@@ -32,15 +32,26 @@ let idle = false;
|
|||||||
// Indicates the time at which user was last active
|
// Indicates the time at which user was last active
|
||||||
let lastActive = Date.now();
|
let lastActive = Date.now();
|
||||||
|
|
||||||
export const bridgeEvents = new EventEmitter(); // eslint-disable-line unicorn/prefer-event-target
|
export const bridgeEvents = new EventTarget();
|
||||||
|
|
||||||
|
export class BridgeEvent extends Event {
|
||||||
|
constructor(
|
||||||
|
type: string,
|
||||||
|
public readonly arguments_: unknown[] = [],
|
||||||
|
) {
|
||||||
|
super(type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* eslint-disable @typescript-eslint/naming-convention */
|
/* eslint-disable @typescript-eslint/naming-convention */
|
||||||
const electron_bridge: ElectronBridge = {
|
const electron_bridge: ElectronBridge = {
|
||||||
send_event: (eventName: string | symbol, ...arguments_: unknown[]): boolean =>
|
send_event: (eventName: string, ...arguments_: unknown[]): boolean =>
|
||||||
bridgeEvents.emit(eventName, ...arguments_),
|
bridgeEvents.dispatchEvent(new BridgeEvent(eventName, arguments_)),
|
||||||
|
|
||||||
on_event(eventName: string, listener: ListenerType): void {
|
on_event(eventName: string, listener: ListenerType): void {
|
||||||
bridgeEvents.on(eventName, listener);
|
bridgeEvents.addEventListener(eventName, (event) => {
|
||||||
|
listener(...z.instanceof(BridgeEvent).parse(event).arguments_);
|
||||||
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
new_notification: (
|
new_notification: (
|
||||||
@@ -65,28 +76,25 @@ const electron_bridge: ElectronBridge = {
|
|||||||
};
|
};
|
||||||
/* eslint-enable @typescript-eslint/naming-convention */
|
/* eslint-enable @typescript-eslint/naming-convention */
|
||||||
|
|
||||||
bridgeEvents.on("total_unread_count", (unreadCount: unknown) => {
|
bridgeEvents.addEventListener("total_unread_count", (event) => {
|
||||||
if (typeof unreadCount !== "number") {
|
const [unreadCount] = z
|
||||||
throw new TypeError("Expected string for unreadCount");
|
.tuple([z.number()])
|
||||||
}
|
.parse(z.instanceof(BridgeEvent).parse(event).arguments_);
|
||||||
|
|
||||||
ipcRenderer.send("unread-count", unreadCount);
|
ipcRenderer.send("unread-count", unreadCount);
|
||||||
});
|
});
|
||||||
|
|
||||||
bridgeEvents.on("realm_name", (realmName: unknown) => {
|
bridgeEvents.addEventListener("realm_name", (event) => {
|
||||||
if (typeof realmName !== "string") {
|
const [realmName] = z
|
||||||
throw new TypeError("Expected string for realmName");
|
.tuple([z.string()])
|
||||||
}
|
.parse(z.instanceof(BridgeEvent).parse(event).arguments_);
|
||||||
|
|
||||||
const serverUrl = location.origin;
|
const serverUrl = location.origin;
|
||||||
ipcRenderer.send("realm-name-changed", serverUrl, realmName);
|
ipcRenderer.send("realm-name-changed", serverUrl, realmName);
|
||||||
});
|
});
|
||||||
|
|
||||||
bridgeEvents.on("realm_icon_url", (iconUrl: unknown) => {
|
bridgeEvents.addEventListener("realm_icon_url", (event) => {
|
||||||
if (typeof iconUrl !== "string") {
|
const [iconUrl] = z
|
||||||
throw new TypeError("Expected string for iconUrl");
|
.tuple([z.string()])
|
||||||
}
|
.parse(z.instanceof(BridgeEvent).parse(event).arguments_);
|
||||||
|
|
||||||
const serverUrl = location.origin;
|
const serverUrl = location.origin;
|
||||||
ipcRenderer.send(
|
ipcRenderer.send(
|
||||||
"realm-icon-changed",
|
"realm-icon-changed",
|
||||||
|
|||||||
@@ -1,21 +1,21 @@
|
|||||||
import {contextBridge} from "electron/renderer";
|
import {contextBridge} from "electron/renderer";
|
||||||
|
|
||||||
import electron_bridge, {bridgeEvents} from "./electron-bridge.ts";
|
import electron_bridge, {BridgeEvent, bridgeEvents} from "./electron-bridge.ts";
|
||||||
import * as NetworkError from "./pages/network.ts";
|
import * as NetworkError from "./pages/network.ts";
|
||||||
import {ipcRenderer} from "./typed-ipc-renderer.ts";
|
import {ipcRenderer} from "./typed-ipc-renderer.ts";
|
||||||
|
|
||||||
contextBridge.exposeInMainWorld("electron_bridge", electron_bridge);
|
contextBridge.exposeInMainWorld("electron_bridge", electron_bridge);
|
||||||
|
|
||||||
ipcRenderer.on("logout", () => {
|
ipcRenderer.on("logout", () => {
|
||||||
bridgeEvents.emit("logout");
|
bridgeEvents.dispatchEvent(new BridgeEvent("logout"));
|
||||||
});
|
});
|
||||||
|
|
||||||
ipcRenderer.on("show-keyboard-shortcuts", () => {
|
ipcRenderer.on("show-keyboard-shortcuts", () => {
|
||||||
bridgeEvents.emit("show-keyboard-shortcuts");
|
bridgeEvents.dispatchEvent(new BridgeEvent("show-keyboard-shortcuts"));
|
||||||
});
|
});
|
||||||
|
|
||||||
ipcRenderer.on("show-notification-settings", () => {
|
ipcRenderer.on("show-notification-settings", () => {
|
||||||
bridgeEvents.emit("show-notification-settings");
|
bridgeEvents.dispatchEvent(new BridgeEvent("show-notification-settings"));
|
||||||
});
|
});
|
||||||
|
|
||||||
window.addEventListener("load", () => {
|
window.addEventListener("load", () => {
|
||||||
|
|||||||
@@ -2,6 +2,12 @@
|
|||||||
|
|
||||||
All notable changes to the Zulip desktop app are documented in this file.
|
All notable changes to the Zulip desktop app are documented in this file.
|
||||||
|
|
||||||
|
### v5.12.2 --2025-09-01
|
||||||
|
|
||||||
|
**Fixes**:
|
||||||
|
|
||||||
|
- Corrected broken translations in Chinese (simplified), Finnish, German, Greek, and Tamil that crashed the app.
|
||||||
|
|
||||||
### v5.12.1 --2025-08-29
|
### v5.12.1 --2025-08-29
|
||||||
|
|
||||||
**Enhancements**:
|
**Enhancements**:
|
||||||
|
|||||||
@@ -1,18 +0,0 @@
|
|||||||
import type {UserConfig} from "i18next-parser";
|
|
||||||
|
|
||||||
const config: UserConfig = {
|
|
||||||
createOldCatalogs: false,
|
|
||||||
defaultValue: (locale, namespace, key, value) =>
|
|
||||||
locale === "en" ? key! : value!,
|
|
||||||
indentation: "\t" as unknown as number,
|
|
||||||
input: ["app/**/*.ts"],
|
|
||||||
keySeparator: false,
|
|
||||||
lexers: {
|
|
||||||
ts: [{lexer: "JavascriptLexer", functions: ["t.__", "t.__mf"]}],
|
|
||||||
},
|
|
||||||
locales: ["en"],
|
|
||||||
namespaceSeparator: false,
|
|
||||||
output: "public/translations/$LOCALE.json",
|
|
||||||
sort: (a, b) => (a < b ? -1 : a > b ? 1 : 0),
|
|
||||||
};
|
|
||||||
export default config;
|
|
||||||
14
i18next.config.ts
Normal file
14
i18next.config.ts
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
import {defineConfig} from "i18next-cli";
|
||||||
|
|
||||||
|
export default defineConfig({
|
||||||
|
locales: ["en"],
|
||||||
|
extract: {
|
||||||
|
input: ["app/**/*.ts"],
|
||||||
|
output: "public/translations/{{language}}.json",
|
||||||
|
functions: ["t.__", "t.__mf"],
|
||||||
|
keySeparator: false,
|
||||||
|
nsSeparator: false,
|
||||||
|
sort: (a, b) => (a.key < b.key ? -1 : a.key > b.key ? 1 : 0),
|
||||||
|
indentation: "\t",
|
||||||
|
},
|
||||||
|
});
|
||||||
2731
package-lock.json
generated
2731
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "zulip",
|
"name": "zulip",
|
||||||
"productName": "Zulip",
|
"productName": "Zulip",
|
||||||
"version": "5.12.1",
|
"version": "5.12.2",
|
||||||
"main": "./dist-electron/index.cjs",
|
"main": "./dist-electron/index.cjs",
|
||||||
"description": "Zulip Desktop App",
|
"description": "Zulip Desktop App",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
@@ -178,7 +178,7 @@
|
|||||||
"eslint-import-resolver-typescript": "^4.4.4",
|
"eslint-import-resolver-typescript": "^4.4.4",
|
||||||
"htmlhint": "^1.1.2",
|
"htmlhint": "^1.1.2",
|
||||||
"i18n": "^0.15.1",
|
"i18n": "^0.15.1",
|
||||||
"i18next-parser": "^9.3.0",
|
"i18next-cli": "^1.2.1",
|
||||||
"node-json-db": "^1.3.0",
|
"node-json-db": "^1.3.0",
|
||||||
"p-fifo": "^1.0.0",
|
"p-fifo": "^1.0.0",
|
||||||
"playwright-core": "^1.41.0-alpha-jan-9-2024",
|
"playwright-core": "^1.41.0-alpha-jan-9-2024",
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ Within that Weblate project, if you'd like to focus on Zulip Desktop, look
|
|||||||
at the **Desktop** component. The other components are for the Zulip web/mobile
|
at the **Desktop** component. The other components are for the Zulip web/mobile
|
||||||
app, where translations are also very welcome.
|
app, where translations are also very welcome.
|
||||||
|
|
||||||
(\*) One file is an exception: `en.json` is maintained by `i18next-parser` as a
|
(\*) One file is an exception: `en.json` is maintained by `i18next-cli extract` as a
|
||||||
list of (English) messages in the source code, and is used by Weblate as
|
list of (English) messages in the source code, and is used by Weblate as
|
||||||
a list of strings to be translated. It doesn't contain any
|
a list of strings to be translated. It doesn't contain any
|
||||||
translations.
|
translations.
|
||||||
|
|||||||
@@ -113,14 +113,14 @@
|
|||||||
"OK": "OK",
|
"OK": "OK",
|
||||||
"OR": "ODER",
|
"OR": "ODER",
|
||||||
"On macOS, the OS spellchecker is used.": "In macOS wird die OS Rechtschreibprüfung verwendet.",
|
"On macOS, the OS spellchecker is used.": "In macOS wird die OS Rechtschreibprüfung verwendet.",
|
||||||
"Opening {{{link}}}…": "Öffne {{{link}}…",
|
"Opening {{{link}}}…": "Öffne {{{link}}}…",
|
||||||
"Organization URL": "Organisations-URL",
|
"Organization URL": "Organisations-URL",
|
||||||
"Organizations": "Organisationen",
|
"Organizations": "Organisationen",
|
||||||
"PAC script": "PAC-Skript",
|
"PAC script": "PAC-Skript",
|
||||||
"Paste": "Einfügen",
|
"Paste": "Einfügen",
|
||||||
"Paste and Match Style": "Ohne Formatierung einfügen",
|
"Paste and Match Style": "Ohne Formatierung einfügen",
|
||||||
"Please contact your system administrator.": "Bitte kontaktiere deinen Systemadministrator.",
|
"Please contact your system administrator.": "Bitte kontaktiere deinen Systemadministrator.",
|
||||||
"Press {{{exitKey}}} to exit full screen": "Drücke {{{exitKey}} um den Vollbildmodus zu beenden",
|
"Press {{{exitKey}}} to exit full screen": "Drücke {{{exitKey}}} um den Vollbildmodus zu beenden",
|
||||||
"Proxy": "Proxy",
|
"Proxy": "Proxy",
|
||||||
"Proxy bypass rules": "Proxy-Ausnahmen",
|
"Proxy bypass rules": "Proxy-Ausnahmen",
|
||||||
"Proxy rules": "Proxy-Regeln",
|
"Proxy rules": "Proxy-Regeln",
|
||||||
@@ -132,7 +132,7 @@
|
|||||||
"Redo": "Wiederholen",
|
"Redo": "Wiederholen",
|
||||||
"Release Notes": "Hinweise zur Versionsfreigabe",
|
"Release Notes": "Hinweise zur Versionsfreigabe",
|
||||||
"Reload": "Neu laden",
|
"Reload": "Neu laden",
|
||||||
"Removing {{{url}}} is a restricted operation.": "Entfernung von {{{url}} ist eine eingeschränkte Operation.",
|
"Removing {{{url}}} is a restricted operation.": "Entfernung von {{{url}}} ist eine eingeschränkte Operation.",
|
||||||
"Report an Issue": "Ein Problem melden",
|
"Report an Issue": "Ein Problem melden",
|
||||||
"Reset App Settings": "App-Einstellungen zurücksetzen",
|
"Reset App Settings": "App-Einstellungen zurücksetzen",
|
||||||
"Reset the application, thus deleting all the connected organizations and accounts.": "Die Anwendung zurücksetzen. Dabei werden alle verbundenen Organisationen und Konten gelöscht.",
|
"Reset the application, thus deleting all the connected organizations and accounts.": "Die Anwendung zurücksetzen. Dabei werden alle verbundenen Organisationen und Konten gelöscht.",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"A new update {{{version}}} has been downloaded.": "Έχει ληφθεί μια νέα ενημέρωση {{{version}}}.",
|
"A new update {{{version}}} has been downloaded.": "Έχει ληφθεί μια νέα ενημέρωση {{{version}}}.",
|
||||||
"A new version {{{version}}} is available. Please update using your package manager.": "Μια νέα έκδοση {{{version}}} είναι διαθέσιμη. Παρακαλούμε ενημερώστε χρησιμοποιώντας τον διαχειριστή πακέτων.",
|
"A new version {{{version}}} is available. Please update using your package manager.": "Μια νέα έκδοση {{{version}}} είναι διαθέσιμη. Παρακαλούμε ενημερώστε χρησιμοποιώντας τον διαχειριστή πακέτων.",
|
||||||
"A new version {{{version}}} of Zulip Desktop is available.": "Μια νέα έκδοση {{{version}} του Zulip Desktop είναι διαθέσιμη.",
|
"A new version {{{version}}} of Zulip Desktop is available.": "Μια νέα έκδοση {{{version}}} του Zulip Desktop είναι διαθέσιμη.",
|
||||||
"About": "Περί",
|
"About": "Περί",
|
||||||
"About Zulip": "Περί Zulip",
|
"About Zulip": "Περί Zulip",
|
||||||
"Actual Size": "Πραγματικό μέγεθος",
|
"Actual Size": "Πραγματικό μέγεθος",
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
"Change": "Αλλαγή",
|
"Change": "Αλλαγή",
|
||||||
"Change the language from System Preferences → Keyboard → Text → Spelling.": "Αλλάξτε τη γλώσσα από τις Προτιμήσεις Συστήματος → Πληκτρολόγιο → Κείμενο → Γραφή.",
|
"Change the language from System Preferences → Keyboard → Text → Spelling.": "Αλλάξτε τη γλώσσα από τις Προτιμήσεις Συστήματος → Πληκτρολόγιο → Κείμενο → Γραφή.",
|
||||||
"Check for Updates": "Έλεγχος για Ενημερώσεις",
|
"Check for Updates": "Έλεγχος για Ενημερώσεις",
|
||||||
"Click to show {{{fileName}}} in folder": "Κάνετε κλικ για την εμφάνιση του {{{fileName}} στο φάκελο",
|
"Click to show {{{fileName}}} in folder": "Κάνετε κλικ για την εμφάνιση του {{{fileName}}} στο φάκελο",
|
||||||
"Close": "Κλείσιμο",
|
"Close": "Κλείσιμο",
|
||||||
"Connect": "Σύνδεση",
|
"Connect": "Σύνδεση",
|
||||||
"Connect to another organization": "Σύνδεση με διαφορετικό οργανισμό",
|
"Connect to another organization": "Σύνδεση με διαφορετικό οργανισμό",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"A new update {{{version}}} has been downloaded.": "Uusi päivitys {{{version}}} on ladattu.",
|
"A new update {{{version}}} has been downloaded.": "Uusi päivitys {{{version}}} on ladattu.",
|
||||||
"A new version {{{version}}} is available. Please update using your package manager.": "Uusi versio {{{version}} saatavilla. Päivitä paketinhallinasta.",
|
"A new version {{{version}}} is available. Please update using your package manager.": "Uusi versio {{{version}}} saatavilla. Päivitä paketinhallinasta.",
|
||||||
"A new version {{{version}}} of Zulip Desktop is available.": "Uusi versio {{{version}}} Zulip Desktopista on saatavilla.",
|
"A new version {{{version}}} of Zulip Desktop is available.": "Uusi versio {{{version}}} Zulip Desktopista on saatavilla.",
|
||||||
"About": "Tietoja",
|
"About": "Tietoja",
|
||||||
"About Zulip": "Tietoa Zulipista",
|
"About Zulip": "Tietoa Zulipista",
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
"Change": "Muuta",
|
"Change": "Muuta",
|
||||||
"Change the language from System Preferences → Keyboard → Text → Spelling.": "Change the language from System Preferences → Keyboard → Text → Spelling.",
|
"Change the language from System Preferences → Keyboard → Text → Spelling.": "Change the language from System Preferences → Keyboard → Text → Spelling.",
|
||||||
"Check for Updates": "Tarkista päivitykset",
|
"Check for Updates": "Tarkista päivitykset",
|
||||||
"Click to show {{{fileName}}} in folder": "Paina nähdäksesis tiedoston {{{fileName}} kansiossaan",
|
"Click to show {{{fileName}}} in folder": "Paina nähdäksesis tiedoston {{{fileName}}} kansiossaan",
|
||||||
"Close": "Sulje",
|
"Close": "Sulje",
|
||||||
"Connect": "Yhdistä",
|
"Connect": "Yhdistä",
|
||||||
"Connect to another organization": "Yhdistä toiseen organisaatioon",
|
"Connect to another organization": "Yhdistä toiseen organisaatioon",
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
"Copy Image URL": "Kopioi kuvan URL",
|
"Copy Image URL": "Kopioi kuvan URL",
|
||||||
"Copy Link": "Kopioi linkki",
|
"Copy Link": "Kopioi linkki",
|
||||||
"Copy Zulip URL": "Kopioi Zulip-URL",
|
"Copy Zulip URL": "Kopioi Zulip-URL",
|
||||||
"Could not add {{{domain}}}. Please contact your system administrator.": "Ei voitu lisätä kohdetta {{{domain}}. Ota yhteys järjesstelmänvalvojaan.",
|
"Could not add {{{domain}}}. Please contact your system administrator.": "Ei voitu lisätä kohdetta {{{domain}}}. Ota yhteys järjesstelmänvalvojaan.",
|
||||||
"Create a new organization": "Luo uusi organisaatio",
|
"Create a new organization": "Luo uusi organisaatio",
|
||||||
"Custom CSS file deleted": "Mukautettu CSS-tiedosto poistettu",
|
"Custom CSS file deleted": "Mukautettu CSS-tiedosto poistettu",
|
||||||
"Cut": "Leikkaa",
|
"Cut": "Leikkaa",
|
||||||
@@ -113,14 +113,14 @@
|
|||||||
"OK": "OK",
|
"OK": "OK",
|
||||||
"OR": "TAI",
|
"OR": "TAI",
|
||||||
"On macOS, the OS spellchecker is used.": "On macOS, the OS spellchecker is used.",
|
"On macOS, the OS spellchecker is used.": "On macOS, the OS spellchecker is used.",
|
||||||
"Opening {{{link}}}…": "Avataan {{{link}}…",
|
"Opening {{{link}}}…": "Avataan {{{link}}}…",
|
||||||
"Organization URL": "Organisaation URL",
|
"Organization URL": "Organisaation URL",
|
||||||
"Organizations": "Organisaatiot",
|
"Organizations": "Organisaatiot",
|
||||||
"PAC script": "PAC-skripti",
|
"PAC script": "PAC-skripti",
|
||||||
"Paste": "Liitä",
|
"Paste": "Liitä",
|
||||||
"Paste and Match Style": "Liitä ja täsmää tyylit",
|
"Paste and Match Style": "Liitä ja täsmää tyylit",
|
||||||
"Please contact your system administrator.": "Ota yhteys järjestelmänvalvojaan.",
|
"Please contact your system administrator.": "Ota yhteys järjestelmänvalvojaan.",
|
||||||
"Press {{{exitKey}}} to exit full screen": "Paina {{{exitKey}} poistuaksesi koko näytön tilasta",
|
"Press {{{exitKey}}} to exit full screen": "Paina {{{exitKey}}} poistuaksesi koko näytön tilasta",
|
||||||
"Proxy": "Välityspalvelin",
|
"Proxy": "Välityspalvelin",
|
||||||
"Proxy bypass rules": "Välityspalvelimen ohituksen säännöt",
|
"Proxy bypass rules": "Välityspalvelimen ohituksen säännöt",
|
||||||
"Proxy rules": "Välityspalvelimen-säännöt",
|
"Proxy rules": "Välityspalvelimen-säännöt",
|
||||||
@@ -132,7 +132,7 @@
|
|||||||
"Redo": "Tee uudelleen",
|
"Redo": "Tee uudelleen",
|
||||||
"Release Notes": "Julkaisutiedot",
|
"Release Notes": "Julkaisutiedot",
|
||||||
"Reload": "Lataa uudelleen",
|
"Reload": "Lataa uudelleen",
|
||||||
"Removing {{{url}}} is a restricted operation.": "Osoitteen {{{url}} poisto on rajoitettu operaatio.",
|
"Removing {{{url}}} is a restricted operation.": "Osoitteen {{{url}}} poisto on rajoitettu operaatio.",
|
||||||
"Report an Issue": "Raportoi ongelmasta",
|
"Report an Issue": "Raportoi ongelmasta",
|
||||||
"Reset App Settings": "Nollaa asetukset",
|
"Reset App Settings": "Nollaa asetukset",
|
||||||
"Reset the application, thus deleting all the connected organizations and accounts.": "Nollaa sovelluksen, ja poistaa kaikki liitetyt organisaatiot ja tilit.",
|
"Reset the application, thus deleting all the connected organizations and accounts.": "Nollaa sovelluksen, ja poistaa kaikki liitetyt organisaatiot ja tilit.",
|
||||||
|
|||||||
@@ -86,7 +86,7 @@
|
|||||||
"Log Out": "வெளியேறு",
|
"Log Out": "வெளியேறு",
|
||||||
"Log Out of Organization": "நிறுவனத்திலிருந்து வெளியேறு",
|
"Log Out of Organization": "நிறுவனத்திலிருந்து வெளியேறு",
|
||||||
"Look Up": "பாருங்கள்",
|
"Look Up": "பாருங்கள்",
|
||||||
"Maintained by {{{link}}}Zulip{{{endLink}}}": "{{{link}}} Zulip {{{endLink}} by ஆல் பராமரிக்கப்படுகிறது",
|
"Maintained by {{{link}}}Zulip{{{endLink}}}": "{{{link}}} Zulip {{{endLink}}} by ஆல் பராமரிக்கப்படுகிறது",
|
||||||
"Manual proxy configuration": "கையேடு ப்ராக்ஸி உள்ளமைவு",
|
"Manual proxy configuration": "கையேடு ப்ராக்ஸி உள்ளமைவு",
|
||||||
"Minimize": "குறைத்தல்",
|
"Minimize": "குறைத்தல்",
|
||||||
"Mute all sounds from Zulip": "ஜூலிப்பிலிருந்து எல்லா ஒலிகளையும் முடக்கு",
|
"Mute all sounds from Zulip": "ஜூலிப்பிலிருந்து எல்லா ஒலிகளையும் முடக்கு",
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
"Copy Image URL": "复制图片链接",
|
"Copy Image URL": "复制图片链接",
|
||||||
"Copy Link": "复制链接",
|
"Copy Link": "复制链接",
|
||||||
"Copy Zulip URL": "复制Zulip地址",
|
"Copy Zulip URL": "复制Zulip地址",
|
||||||
"Could not add {{{domain}}}. Please contact your system administrator.": "无法添加{{{domain}},请联系您的系统管理员。",
|
"Could not add {{{domain}}}. Please contact your system administrator.": "无法添加{{{domain}}},请联系您的系统管理员。",
|
||||||
"Create a new organization": "创建新的组织",
|
"Create a new organization": "创建新的组织",
|
||||||
"Custom CSS file deleted": "自定义CSS文件已删除",
|
"Custom CSS file deleted": "自定义CSS文件已删除",
|
||||||
"Cut": "剪切",
|
"Cut": "剪切",
|
||||||
@@ -113,14 +113,14 @@
|
|||||||
"OK": "确定",
|
"OK": "确定",
|
||||||
"OR": "或",
|
"OR": "或",
|
||||||
"On macOS, the OS spellchecker is used.": "在 macOS 上,使用操作系统的拼写检查器。",
|
"On macOS, the OS spellchecker is used.": "在 macOS 上,使用操作系统的拼写检查器。",
|
||||||
"Opening {{{link}}}…": "正在打开{{{link}}…",
|
"Opening {{{link}}}…": "正在打开{{{link}}}…",
|
||||||
"Organization URL": "组织 URL",
|
"Organization URL": "组织 URL",
|
||||||
"Organizations": "组织",
|
"Organizations": "组织",
|
||||||
"PAC script": "PAC 配置文件",
|
"PAC script": "PAC 配置文件",
|
||||||
"Paste": "粘贴",
|
"Paste": "粘贴",
|
||||||
"Paste and Match Style": "粘贴并匹配格式",
|
"Paste and Match Style": "粘贴并匹配格式",
|
||||||
"Please contact your system administrator.": "请联系您的系统管理员。",
|
"Please contact your system administrator.": "请联系您的系统管理员。",
|
||||||
"Press {{{exitKey}}} to exit full screen": "按{{{exitKey}}退出全屏",
|
"Press {{{exitKey}}} to exit full screen": "按{{{exitKey}}}退出全屏",
|
||||||
"Proxy": "代理",
|
"Proxy": "代理",
|
||||||
"Proxy bypass rules": "代理绕过规则",
|
"Proxy bypass rules": "代理绕过规则",
|
||||||
"Proxy rules": "代理规则",
|
"Proxy rules": "代理规则",
|
||||||
@@ -132,7 +132,7 @@
|
|||||||
"Redo": "撤销",
|
"Redo": "撤销",
|
||||||
"Release Notes": "发行说明",
|
"Release Notes": "发行说明",
|
||||||
"Reload": "重新加载",
|
"Reload": "重新加载",
|
||||||
"Removing {{{url}}} is a restricted operation.": "移除{{{url}}是受限操作。",
|
"Removing {{{url}}} is a restricted operation.": "移除{{{url}}}是受限操作。",
|
||||||
"Report an Issue": "反馈问题",
|
"Report an Issue": "反馈问题",
|
||||||
"Reset App Settings": "重置应用设置",
|
"Reset App Settings": "重置应用设置",
|
||||||
"Reset the application, thus deleting all the connected organizations and accounts.": "重置应用程序,将删除所有已连接的组织、账号和证书。",
|
"Reset the application, thus deleting all the connected organizations and accounts.": "重置应用程序,将删除所有已连接的组织、账号和证书。",
|
||||||
@@ -189,7 +189,7 @@
|
|||||||
"Zulip Update": "Zulip 更新",
|
"Zulip Update": "Zulip 更新",
|
||||||
"keyboard shortcuts": "快捷键",
|
"keyboard shortcuts": "快捷键",
|
||||||
"your-organization.zulipchat.com or zulip.your-organization.com": "your-organization.zulipchat.com 或 zulip.your-organization.com",
|
"your-organization.zulipchat.com or zulip.your-organization.com": "your-organization.zulipchat.com 或 zulip.your-organization.com",
|
||||||
"{number, plural, one {# unread message} other {# unread messages}}": "{number, plural, one {# 条未读消息} other {# 条未读消息}",
|
"{number, plural, one {# unread message} other {# unread messages}}": "{number, plural, one {# 条未读消息} other {# 条未读消息}}",
|
||||||
"{number, plural, one {Could not add # organization} other {Could not add # organizations}}": "{number, plural, one {无法添加 # 个组织} other {无法添加 # 个组织}}",
|
"{number, plural, one {Could not add # organization} other {Could not add # organizations}}": "{number, plural, one {无法添加 # 个组织} other {无法添加 # 个组织}}",
|
||||||
"{{{server}}} runs an outdated Zulip Server version {{{version}}}. It may not fully work in this app.": "{{{server}}}在过时的{{{version}}}版Zulip服务器上运行。在该应用中可能无法正常运作。"
|
"{{{server}}} runs an outdated Zulip Server version {{{version}}}. It may not fully work in this app.": "{{{server}}}在过时的{{{version}}}版Zulip服务器上运行。在该应用中可能无法正常运作。"
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user