Merge branch 'develop' into feature/sso-mobile-layout

This commit is contained in:
Viktor Fomin 2023-09-02 01:07:54 +03:00
commit 3f63a0b27c
497 changed files with 38126 additions and 3434 deletions

View File

@ -31,6 +31,7 @@ jobs:
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build 4testing
run: |
cd .${DOCKER_PATH}

View File

@ -63,7 +63,10 @@ jobs:
wget https://packages.microsoft.com/config/$(lsb_release -is | \
tr [:upper:] [:lower:])/$(lsb_release -rs)/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
wget -O - https://deb.nodesource.com/setup_18.x | sudo -E bash -
echo "deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_18.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/nodesource.gpg --import
chmod 644 /usr/share/keyrings/nodesource.gpg
apt-get -y update
sudo apt install -y dotnet-sdk-7.0 yarn nodejs dh-make rename dpkg-sig lintian
sudo npm install -g json
echo "BRANCH_NAME=$(echo ${GITHUB_REF#refs/heads/})" >> $GITHUB_OUTPUT
@ -133,7 +136,10 @@ jobs:
wget https://packages.microsoft.com/config/$(lsb_release -is | \
tr [:upper:] [:lower:])/$(lsb_release -rs)/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
wget -O - https://deb.nodesource.com/setup_18.x | sudo -E bash -
echo "deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_18.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/nodesource.gpg --import
chmod 644 /usr/share/keyrings/nodesource.gpg
apt-get -y update
sudo apt install -y dotnet-sdk-7.0 yarn nodejs dh-make rename python3-pip python3-rpm
sudo npm install -g json
sudo pip install rpmlint

View File

@ -31,6 +31,7 @@ if [ "$UPDATE" = "true" ] && [ "$DOCUMENT_SERVER_INSTALLED" = "true" ]; then
RECONFIGURE_PRODUCT="true"
else
systemctl is-active openresty | grep -q "^active" && systemctl stop openresty
apt-get install -y --only-upgrade ${ds_pkg_name};
fi
fi
@ -60,6 +61,8 @@ if [ "$DOCUMENT_SERVER_INSTALLED" = "false" ]; then
echo ${package_sysname}-documentserver $DS_COMMON_NAME/jwt-enabled select ${DS_JWT_ENABLED} | sudo debconf-set-selections
echo ${package_sysname}-documentserver $DS_COMMON_NAME/jwt-secret select ${DS_JWT_SECRET} | sudo debconf-set-selections
echo ${package_sysname}-documentserver $DS_COMMON_NAME/jwt-header select ${DS_JWT_HEADER} | sudo debconf-set-selections
systemctl is-active openresty | grep -q "^active" && systemctl stop openresty
if [ "$INSTALLATION_TYPE" = "COMMUNITY" ]; then
apt-get install -yq ${package_sysname}-documentserver

View File

@ -40,7 +40,9 @@ chmod 644 /usr/share/keyrings/elastic-${ELASTIC_DIST}.x.gpg
# add nodejs repo
[[ "$DISTRIB_CODENAME" =~ ^(bionic|stretch)$ ]] && NODE_VERSION="16" || NODE_VERSION="18"
curl -sL https://deb.nodesource.com/setup_${NODE_VERSION}.x | bash -
echo "deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_VERSION.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/nodesource.gpg --import
chmod 644 /usr/share/keyrings/nodesource.gpg
#add dotnet repo
if [ "$DIST" = "debian" ] && [ "$DISTRIB_CODENAME" = "stretch" ]; then
@ -103,10 +105,7 @@ echo "deb [signed-by=/usr/share/keyrings/openresty.gpg] http://openresty.org/pac
chmod 644 /usr/share/keyrings/openresty.gpg
#Temporary fix for missing openresty repository for debian bookworm
[ "$DISTRIB_CODENAME" = "bookworm" ] && sed -i "s/$DISTRIB_CODENAME/bullseye/g" /etc/apt/sources.list.d/openresty.list
if systemctl is-active nginx | grep -q "active"; then
systemctl disable nginx && systemctl stop nginx
fi
systemctl is-active nginx | grep -q "^active" && systemctl stop nginx
# setup msttcorefonts
echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | debconf-set-selections

View File

@ -867,6 +867,26 @@ read_continue_installation () {
}
domain_check () {
if ! command_exists dig; then
install_service dig dnsutils
fi
if ! command_exists ping; then
if command_exists apt-get; then
install_service ping iputils-ping
elif command_exists yum; then
install_service ping iputils
fi
fi
if ! command_exists ip; then
if command_exists apt-get; then
install_service ip iproute2
elif command_exists yum; then
install_service ip iproute
fi
fi
DOMAINS=$(dig +short -x $(curl -s ifconfig.me) | sed 's/\.$//')
if [[ -n "$DOMAINS" ]]; then
@ -875,7 +895,7 @@ domain_check () {
if [[ -n "$IP_ADDRESS" && "$IP_ADDRESS" =~ ^(10\.|127\.|172\.(1[6-9]|2[0-9]|3[0-1])\.|192\.168\.) ]]; then
LOCAL_RESOLVED_DOMAINS+="$DOMAIN"
elif [[ -n "$IP_ADDRESS" ]]; then
APP_URL_PORTAL=${APP_URL_PORTAL-:"http://${DOMAIN}:${EXTERNAL_PORT}"}
APP_URL_PORTAL=${APP_URL_PORTAL:-"http://${DOMAIN}:${EXTERNAL_PORT}"}
fi
done <<< "$DOMAINS"
fi
@ -1262,6 +1282,8 @@ install_elasticsearch () {
install_product () {
DOCKER_TAG="${DOCKER_TAG:-$(get_available_version ${IMAGE_NAME})}"
reconfigure DOCKER_TAG ${DOCKER_TAG}
[ "${UPDATE}" = "true" ] && LOCAL_CONTAINER_TAG="$(docker inspect --format='{{index .Config.Image}}' ${CONTAINER_NAME} | awk -F':' '{print $2}')"
if [ "${UPDATE}" = "true" ] && [ "${LOCAL_CONTAINER_TAG}" != "${DOCKER_TAG}" ]; then
@ -1274,7 +1296,6 @@ install_product () {
reconfigure APP_CORE_MACHINEKEY ${APP_CORE_MACHINEKEY}
reconfigure APP_CORE_BASE_DOMAIN ${APP_CORE_BASE_DOMAIN}
reconfigure APP_URL_PORTAL "${APP_URL_PORTAL:-"http://${PACKAGE_SYSNAME}-proxy:8092"}"
reconfigure DOCKER_TAG ${DOCKER_TAG}
[[ -n $EXTERNAL_PORT ]] && sed -i "s/8092:8092/${EXTERNAL_PORT}:8092/g" $BASE_DIR/${PRODUCT}.yml

View File

@ -62,7 +62,7 @@ if [ "${MYSQL_FIRST_TIME_INSTALL}" = "true" ]; then
MYSQL="mysql --connect-expired-password -u$MYSQL_SERVER_USER -D mysql";
else
MYSQL="mysql --connect-expired-password -u$MYSQL_SERVER_USER -p${MYSQL_TEMPORARY_ROOT_PASS} -D mysql";
MYSQL_ROOT_PASS=$(echo $MYSQL_TEMPORARY_ROOT_PASS | sed -e 's/;/%/g' -e 's/=/%/g');
MYSQL_ROOT_PASS=$(cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 12);
fi
MYSQL_AUTHENTICATION_PLUGIN=$($MYSQL -e "SHOW VARIABLES LIKE 'default_authentication_plugin';" -s | awk '{print $2}')

View File

@ -60,8 +60,7 @@ curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.
#add nodejs repo
[ "$REV" = "7" ] && NODE_VERSION="16" || NODE_VERSION="18"
curl -sL https://rpm.nodesource.com/setup_${NODE_VERSION}.x | sed 's/centos|/'$DIST'|/g' | sudo bash - || true
rpm --import http://rpm.nodesource.com/pub/el/NODESOURCE-GPG-SIGNING-KEY-EL
yum install -y https://rpm.nodesource.com/pub_${NODE_VERSION}.x/nodistro/repo/nodesource-release-nodistro-1.noarch.rpm
#add dotnet repo
if [ $REV = "7" ] || [[ $DIST != "redhat" && $REV = "8" ]]; then
@ -95,10 +94,7 @@ END
rpm --import https://openresty.org/package/pubkey.gpg
OPENRESTY_REPO_FILE=$( [[ "$REV" -ge 9 ]] && echo "openresty2.repo" || echo "openresty.repo" )
curl -o /etc/yum.repos.d/openresty.repo "https://openresty.org/package/centos/${OPENRESTY_REPO_FILE}"
if systemctl is-active nginx | grep -q "active"; then
systemctl disable nginx && systemctl stop nginx
fi
systemctl is-active nginx | grep -q "^active" && systemctl stop nginx
${package_manager} -y install epel-release \
python3 \

View File

@ -56,20 +56,6 @@ while [ "$1" != "" ]; do
fi
;;
-dsh | --docshost )
if [ "$2" != "" ]; then
DOCUMENT_SERVER_HOST=$2
shift
fi
;;
-dsp | --docsport )
if [ "$2" != "" ]; then
DOCUMENT_SERVER_PORT=$2
shift
fi
;;
-ess | --elasticsheme )
if [ "$2" != "" ]; then
ELK_SHEME=$2
@ -175,14 +161,34 @@ while [ "$1" != "" ]; do
fi
;;
-js | --jwtsecret )
if [ "$2" != "" ]; then
DOCUMENT_SERVER_JWT_SECRET=$2
shift
fi
;;
-jh | --jwtheader )
if [ "$2" != "" ]; then
DOCUMENT_SERVER_JWT_HEADER=$2
shift
fi
;;
-docsurl | --docsurl )
if [ "$2" != "" ]; then
DOCUMENT_SERVER_URL_EXTERNAL=$2
shift
fi
;;
-? | -h | --help )
echo " Usage: bash ${PRODUCT}-configuration [PARAMETER] [[PARAMETER], ...]"
echo
echo " Parameters:"
echo " -ash, --appshost ${PRODUCT} ip"
echo " -asp, --appsport ${PRODUCT} port (default 80)"
echo " -dsh, --docshost document server ip"
echo " -dsp, --docsport document server port (default 8083)"
echo " -docsurl, --docsurl $PACKAGE_SYSNAME docs server address (example http://$PACKAGE_SYSNAME-docs-address:8083)"
echo " -esh, --elastichost elasticsearch ip"
echo " -esp, --elasticport elasticsearch port (default 9200)"
echo " -rdh, --redishost redis ip"
@ -195,6 +201,8 @@ while [ "$1" != "" ]; do
echo " -mysqld, --mysqldatabase ${PRODUCT} database name"
echo " -mysqlu, --mysqluser ${PRODUCT} database user"
echo " -mysqlp, --mysqlpassword ${PRODUCT} database password"
echo " -js, --jwtsecret defines the secret key to validate the JWT in the request"
echo " -jh. --jwtheader defines the http header that will be used to send the JWT"
echo " -mk, --machinekey setting for core.machinekey"
echo " -e, --environment environment (default 'production')"
echo " -?, -h, --help this help"
@ -309,7 +317,7 @@ establish_mysql_conn(){
command -v mysql >/dev/null 2>&1 || { echo "MySQL client not found"; exit 1; }
MYSQL="mysql -h$DB_HOST -u$DB_USER"
MYSQL="mysql -P$DB_PORT -h$DB_HOST -u$DB_USER"
if [ -n "$DB_PWD" ]; then
MYSQL="$MYSQL -p$DB_PWD"
fi
@ -321,6 +329,10 @@ establish_mysql_conn(){
$MYSQL -e ";" >/dev/null 2>&1 || { echo "FAILURE"; exit 1; }
fi
if $PACKAGE_MANAGER mysql-server >/dev/null 2>&1 || $PACKAGE_MANAGER mysql-community-server >/dev/null 2>&1; then
change_mysql_config
fi
#Save db settings in .json
CONNECTION_STRING="Server=$DB_HOST;Port=$DB_PORT;Database=$DB_NAME;User ID=$DB_USER;Password=$DB_PWD;Pooling=true; \
Character Set=utf8; AutoEnlist=false; SSL Mode=none;AllowPublicKeyRetrieval=true;Connection Timeout=30;Maximum Pool Size=300"
@ -328,8 +340,7 @@ Character Set=utf8; AutoEnlist=false; SSL Mode=none;AllowPublicKeyRetrieval=true
save_undefined_param "${USER_CONF}" "ConnectionStrings.default.connectionString" "${CONNECTION_STRING}"
save_undefined_param "${APP_DIR}/apisystem.${ENVIRONMENT}.json" "ConnectionStrings.default.connectionString" "${CONNECTION_STRING}"
sed "s_\(\"ConnectionString\":\).*_\1 \"${CONNECTION_STRING//_/\\_}\"_" -i $PRODUCT_DIR/services/ASC.Migration.Runner/appsettings.runner.json
change_mysql_config
sed "s&\(\"ConnectionString\":\).*&\1 \"$(printf "%q" "${CONNECTION_STRING}")\"&" -i $PRODUCT_DIR/services/ASC.Migration.Runner/appsettings.runner.json
#Enable database migration
save_undefined_param "${USER_CONF}" "migration.enabled" "true"
@ -519,25 +530,42 @@ setup_openresty(){
echo "OK"
}
# Function gets Document server host and port using regular expression, we need it to check connection
parse_external_docs_url () {
if [[ $DOCUMENT_SERVER_URL_EXTERNAL =~ ^(https?://)?([^:/]+)(:([0-9]+))?(/.*)?$ ]]; then
DOCUMENT_SERVER_PORT="${BASH_REMATCH[4]:-80}"
DOCUMENT_SERVER_HOST="${BASH_REMATCH[2]}"
[[ -n ${BASH_REMATCH[1]} ]] || DOCUMENT_SERVER_URL_EXTERNAL="http://$DOCUMENT_SERVER_HOST:$DOCUMENT_SERVER_PORT"
fi
}
setup_docs() {
echo -n "Configuring docs... "
local DS_CONF_DIR="/etc/${PACKAGE_SYSNAME}/documentserver"
local DOCUMENT_SERVER_HOST=${DOCUMENT_SERVER_HOST:-localhost}
local DOCUMENT_SERVER_PORT=${DOCUMENT_SERVER_PORT:-$(grep -oP '(?<=:)\d+(?=\s)' ${DS_CONF_DIR}/nginx/ds.conf)}
if [ $1 == "LOCAL_DOCS_SERVER" ]; then
local DS_CONF_DIR="/etc/${PACKAGE_SYSNAME}/documentserver"
local DOCUMENT_SERVER_PORT=$(grep -oP '(?<=:)\d+(?=\s)' ${DS_CONF_DIR}/nginx/ds.conf)
local DOCUMENT_SERVER_JWT_SECRET=${DOCUMENT_SERVER_JWT_SECRET:-$(json -f ${DS_CONF_DIR}/local.json services.CoAuthoring.secret.inbox.string)}
local DOCUMENT_SERVER_JWT_HEADER=${DOCUMENT_SERVER_JWT_HEADER:-$(json -f ${DS_CONF_DIR}/local.json services.CoAuthoring.token.inbox.header)}
$JSON ${DS_CONF_DIR}/local.json -e "this.rabbitmq = { 'url': 'amqp://${RABBITMQ_USER}:${RABBITMQ_PASSWORD}@${RABBITMQ_HOST}:${RABBITMQ_PORT}' }" >/dev/null 2>&1
$JSON ${DS_CONF_DIR}/local.json -e "this.services.CoAuthoring.redis = { 'host': '$REDIS_HOST' }" >/dev/null 2>&1
sed 's/\(listen .*:\)\([0-9]\{2,5\}\b\)\( default_server\)\?\(;\)/\1'${DOCUMENT_SERVER_PORT}'\3\4/' -i ${DS_CONF_DIR}/nginx/ds.conf
elif [ $1 == "EXTERNAL_DOCS_SERVER" ]; then
local APP_HOST=$(curl -s ifconfig.me)
local EXTERNAL_DOCS_FLAG="rewrite"
fi
#Changing the Docs port in nginx conf
sed 's/\(listen .*:\)\([0-9]\{2,5\}\b\)\( default_server\)\?\(;\)/\1'${DOCUMENT_SERVER_PORT}'\3\4/' -i ${DS_CONF_DIR}/nginx/ds.conf
sed "0,/proxy_pass .*;/{s/proxy_pass .*;/proxy_pass http:\/\/${DOCUMENT_SERVER_HOST}:${DOCUMENT_SERVER_PORT};/}" -i ${NGINX_DIR}/conf.d/${PACKAGE_SYSNAME}.conf
local DOCUMENT_SERVER_JWT_SECRET=$(json -f ${DS_CONF_DIR}/local.json services.CoAuthoring.secret.inbox.string)
local DOCUMENT_SERVER_JWT_HEADER=$(json -f ${DS_CONF_DIR}/local.json services.CoAuthoring.token.inbox.header)
sed "0,/proxy_pass .*;/{s#proxy_pass .*;#proxy_pass ${DOCUMENT_SERVER_URL_EXTERNAL:-http://$APP_HOST:$DOCUMENT_SERVER_PORT};#}" -i ${NGINX_DIR}/conf.d/${PACKAGE_SYSNAME}.conf
#Save Docs address and JWT in .json
save_undefined_param "${USER_CONF}" "files.docservice.secret.value" "${DOCUMENT_SERVER_JWT_SECRET}"
save_undefined_param "${USER_CONF}" "files.docservice.secret.header" "${DOCUMENT_SERVER_JWT_HEADER} "
save_undefined_param "${USER_CONF}" "files.docservice.url.public" "/ds-vpath/"
save_undefined_param "${USER_CONF}" "files.docservice.url.internal" "http://${DOCUMENT_SERVER_HOST}:${DOCUMENT_SERVER_PORT}"
save_undefined_param "${USER_CONF}" "files.docservice.url.portal" "http://${APP_HOST}:${APP_PORT}"
save_undefined_param "${USER_CONF}" "files.docservice.secret.value" "${DOCUMENT_SERVER_JWT_SECRET}" "$EXTERNAL_DOCS_FLAG"
save_undefined_param "${USER_CONF}" "files.docservice.secret.header" "${DOCUMENT_SERVER_JWT_HEADER:-"AuthorizationJwt"}" "$EXTERNAL_DOCS_FLAG"
save_undefined_param "${USER_CONF}" "files.docservice.url.public" "${DOCUMENT_SERVER_URL_EXTERNAL:-"/ds-vpath/"}" "$EXTERNAL_DOCS_FLAG"
save_undefined_param "${USER_CONF}" "files.docservice.url.internal" "${DOCUMENT_SERVER_URL_EXTERNAL:-"http://$APP_HOST:$DOCUMENT_SERVER_PORT"}" "$EXTERNAL_DOCS_FLAG"
save_undefined_param "${USER_CONF}" "files.docservice.url.portal" "http://${APP_HOST}:${APP_PORT}" "$EXTERNAL_DOCS_FLAG"
echo "OK"
}
@ -617,10 +645,12 @@ setup_elasticsearch() {
save_undefined_param "${APP_DIR}/elastic.${ENVIRONMENT}.json" "elastic.Port" "${ELK_PORT}"
save_undefined_param "${APP_DIR}/elastic.${ENVIRONMENT}.json" "elastic.Threads" "1"
change_elasticsearch_config
if [ $1 == "LOCAL_ELASTIC_SERVER" ]; then
change_elasticsearch_config
systemctl enable elasticsearch >/dev/null 2>&1
systemctl restart elasticsearch
systemctl enable elasticsearch >/dev/null 2>&1
systemctl restart elasticsearch
fi
echo "OK"
}
@ -629,13 +659,16 @@ setup_redis() {
$JSON $APP_DIR/redis.$ENVIRONMENT.json -e "this.Redis={'Hosts': [ { Host: \"${REDIS_HOST}\", Port: \"${REDIS_PORT}\" } ] }" >/dev/null 2>&1
if [ -e /etc/redis/redis.conf ]; then
sed -i "s~\(redis_host =\).*~\1 \"$REDIS_HOST\"~" "${NGINX_DIR}/conf.d/${PACKAGE_SYSNAME}.conf"
sed -i "s~\(redis_port =\).*~\1 $REDIS_PORT~" "${NGINX_DIR}/conf.d/${PACKAGE_SYSNAME}.conf"
if [ $1 == "LOCAL_REDIS_SERVER" ]; then
sed "s_\(^bind\).*_\1 ${REDIS_HOST}_" -i /etc/redis/redis.conf
sed -r "/^save\s[0-9]+/d" -i /etc/redis/redis.conf
fi
systemctl enable $REDIS_PACKAGE >/dev/null 2>&1
systemctl restart $REDIS_PACKAGE
systemctl enable $REDIS_PACKAGE >/dev/null 2>&1
systemctl restart $REDIS_PACKAGE
fi
echo "OK"
}
@ -649,8 +682,10 @@ setup_rabbitmq() {
save_undefined_param "${APP_DIR}/rabbitmq.${ENVIRONMENT}.json" "RabbitMQ.Port" "${RABBITMQ_PORT}"
save_undefined_param "${APP_DIR}/rabbitmq.${ENVIRONMENT}.json" "RabbitMQ.VirtualHost" "/"
systemctl enable rabbitmq-server >/dev/null 2>&1
systemctl restart rabbitmq-server
if [ $1 == "LOCAL_RABBITMQ_SERVER" ]; then
systemctl enable rabbitmq-server >/dev/null 2>&1
systemctl restart rabbitmq-server
fi
echo "OK"
}
@ -673,6 +708,19 @@ product_configuration(){
echo "OK"
}
# Function below checks if there is a connection to the external service. 0 - OK, connection established
check_connection_external_services() {
exec {FD}<> /dev/tcp/$1/$2 && exec {FD}>&-
HOST_RESPONCE=$?
if [[ $HOST_RESPONCE -ne 0 ]]; then
echo -e "Host is not responding: $1:$2"
return $HOST_RESPONCE
fi
return $HOST_RESPONCE
}
if command -v yum >/dev/null 2>&1; then
DIST="RedHat"
PACKAGE_MANAGER="rpm -q"
@ -694,8 +742,12 @@ if $PACKAGE_MANAGER mysql-client >/dev/null 2>&1 || $PACKAGE_MANAGER mysql-commu
fi
if $PACKAGE_MANAGER ${PACKAGE_SYSNAME}-documentserver >/dev/null 2>&1 || $PACKAGE_MANAGER ${PACKAGE_SYSNAME}-documentserver-de >/dev/null 2>&1 || $PACKAGE_MANAGER ${PACKAGE_SYSNAME}-documentserver-ee >/dev/null 2>&1; then
setup_docs
setup_enterprise
setup_docs "LOCAL_DOCS_SERVER"
setup_enterprise
elif [[ ! -z $DOCUMENT_SERVER_URL_EXTERNAL ]]; then
parse_external_docs_url "$DOCUMENT_SERVER_URL_EXTERNAL"
check_connection_external_services "$DOCUMENT_SERVER_HOST" "$DOCUMENT_SERVER_PORT" || { echo "ONLYOFFICE Docs host is not responding"; }
setup_docs "EXTERNAL_DOCS_SERVER"
fi
if $PACKAGE_MANAGER openresty >/dev/null 2>&1; then
@ -703,15 +755,27 @@ if $PACKAGE_MANAGER openresty >/dev/null 2>&1; then
fi
if $PACKAGE_MANAGER elasticsearch >/dev/null 2>&1; then
setup_elasticsearch
setup_elasticsearch "LOCAL_ELASTIC_SERVER"
elif check_connection_external_services "$ELK_HOST" "$ELK_PORT"; then
setup_elasticsearch "EXTERNAL_ELASTIC_SERVER"
else
echo "Elasticsearch host is not responding"
fi
if $PACKAGE_MANAGER $REDIS_PACKAGE >/dev/null 2>&1 >/dev/null 2>&1; then
setup_redis
setup_redis "LOCAL_REDIS_SERVER"
elif check_connection_external_services "$REDIS_HOST" "$REDIS_PORT"; then
setup_redis "EXTERNAL_REDIS_SERVER"
else
echo "Redis host is not responding"
fi
if $PACKAGE_MANAGER rabbitmq-server >/dev/null 2>&1; then
setup_rabbitmq
setup_rabbitmq "LOCAL_RABBITMQ_SERVER"
elif check_connection_external_services "$RABBITMQ_HOST" "$RABBITMQ_PORT"; then
setup_rabbitmq "EXTERNAL_RABBITMQ_SERVER"
else
echo "Rabbitmq host is not responding"
fi
restart_services

View File

@ -99,7 +99,6 @@
DOCEDITOR_HOST=${CONTAINER_PREFIX}doceditor
LOGIN_HOST=${CONTAINER_PREFIX}login
HELTHCHECKS_HOST=${CONTAINER_PREFIX}healthchecks
REDIS_HOST=${CONTAINER_PREFIX}redis
# proxy upstream environment #
SERVICE_API_SYSTEM=${API_SYSTEM_HOST}:${SERVICE_PORT}

View File

@ -46,7 +46,10 @@ RUN apt-get -y update && \
npm && \
locale-gen en_US.UTF-8 && \
npm install --global yarn && \
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - && \
echo "deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_18.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list && \
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/nodesource.gpg --import && \
chmod 644 /usr/share/keyrings/nodesource.gpg && \
apt-get -y update && \
apt-get install -y nodejs && \
rm -rf /var/lib/apt/lists/*
RUN git clone -b main/community-server https://github.com/ONLYOFFICE/document-templates ${SRC_PATH}/ASC.Files/Server/DocStore

View File

@ -31,7 +31,10 @@ RUN apt-get -y update && \
npm && \
locale-gen en_US.UTF-8 && \
npm install --global yarn && \
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - && \
echo "deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_18.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list && \
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/nodesource.gpg --import && \
chmod 644 /usr/share/keyrings/nodesource.gpg && \
apt-get -y update && \
apt-get install -y nodejs && \
rm -rf /var/lib/apt/lists/*

View File

@ -2,82 +2,68 @@ resolver $DNS_NAMESERVER valid=30s;
map $SERVICE_LOGIN $service_login {
volatile;
$SERVICE_LOGIN $SERVICE_LOGIN;
"" 127.0.0.1:5011;
default $SERVICE_LOGIN;
}
map $SERVICE_DOCEDITOR $service_doceditor {
volatile;
$SERVICE_DOCEDITOR $SERVICE_DOCEDITOR;
}
map $SERVICE_CLIENT $service_client {
volatile;
$SERVICE_CLIENT $SERVICE_CLIENT;
"" 127.0.0.1:5013;
default $SERVICE_DOCEDITOR;
}
map $SERVICE_API_SYSTEM $service_api_system {
volatile;
$SERVICE_API_SYSTEM $SERVICE_API_SYSTEM;
"" 127.0.0.1:5010;
default $SERVICE_API_SYSTEM;
}
map $SERVICE_BACKUP $service_backup {
volatile;
$SERVICE_BACKUP $SERVICE_BACKUP;
"" 127.0.0.1:5012;
default $SERVICE_BACKUP;
}
map $SERVICE_FILES $service_files {
volatile;
$SERVICE_FILES $SERVICE_FILES;
}
map $SERVICE_FILES_SERVICES $service_files_services {
volatile;
$SERVICE_FILES_SERVICES $SERVICE_FILES_SERVICES;
}
map $SERVICE_NOTIFY $service_notify {
volatile;
$SERVICE_NOTIFY $SERVICE_NOTIFY;
"" 127.0.0.1:5007;
default $SERVICE_FILES;
}
map $SERVICE_PEOPLE_SERVER $service_people_server {
volatile;
$SERVICE_PEOPLE_SERVER $SERVICE_PEOPLE_SERVER;
"" 127.0.0.1:5004;
default $SERVICE_PEOPLE_SERVER;
}
map $SERVICE_SOCKET $service_socket {
volatile;
$SERVICE_SOCKET $SERVICE_SOCKET;
}
map $SERVICE_STUDIO_NOTIFY $service_studio_notify {
volatile;
$SERVICE_STUDIO_NOTIFY $SERVICE_STUDIO_NOTIFY;
}
map $SERVICE_THUMBNAILS $service_thumbnails {
volatile;
$SERVICE_THUMBNAILS $SERVICE_THUMBNAILS;
"" 127.0.0.1:9899;
default $SERVICE_SOCKET;
}
map $SERVICE_API $service_api {
volatile;
$SERVICE_API $SERVICE_API;
"" 127.0.0.1:5000;
default $SERVICE_API;
}
map $SERVICE_STUDIO $service_studio {
volatile;
$SERVICE_STUDIO $SERVICE_STUDIO;
"" 127.0.0.1:5003;
default $SERVICE_STUDIO;
}
map $SERVICE_SSOAUTH $service_sso {
volatile;
$SERVICE_SSOAUTH $SERVICE_SSOAUTH;
"" 127.0.0.1:9834;
default $SERVICE_SSOAUTH;
}
map $SERVICE_HELTHCHECKS $service_healthchecks {
volatile;
$SERVICE_HELTHCHECKS $SERVICE_HELTHCHECKS;
"" 127.0.0.1:5033;
default $SERVICE_HELTHCHECKS;
}
map "$DOCUMENT_SERVER_URL_EXTERNAL" "$document_server" {
@ -85,3 +71,9 @@ map "$DOCUMENT_SERVER_URL_EXTERNAL" "$document_server" {
default "$DOCUMENT_SERVER_URL_EXTERNAL";
"" "http://$DOCUMENT_CONTAINER_NAME";
}
map $SERVICE_CLIENT $service_client {
volatile;
"" 127.0.0.1:5001;
default $SERVICE_CLIENT;
}

View File

@ -271,6 +271,9 @@ services:
- SERVICE_HELTHCHECKS=${SERVICE_HELTHCHECKS}
- DOCUMENT_CONTAINER_NAME=${DOCUMENT_CONTAINER_NAME}
- DOCUMENT_SERVER_URL_EXTERNAL=${DOCUMENT_SERVER_URL_EXTERNAL}
- REDIS_CONTAINER_NAME=${REDIS_CONTAINER_NAME}
- REDIS_HOST=${REDIS_HOST}
- REDIS_PORT=${REDIS_PORT}
- SERVICE_PORT=${SERVICE_PORT}
volumes:
- proxy_log:/var/log/nginx

View File

@ -220,7 +220,9 @@ services:
- SERVICE_HELTHCHECKS=${SERVICE_HELTHCHECKS}
- DOCUMENT_CONTAINER_NAME=${DOCUMENT_CONTAINER_NAME}
- DOCUMENT_SERVER_URL_EXTERNAL=${DOCUMENT_SERVER_URL_EXTERNAL}
- REDIS_CONTAINER_NAME=${REDIS_CONTAINER_NAME}
- REDIS_HOST=${REDIS_HOST}
- REDIS_PORT=${REDIS_PORT}
- SERVICE_PORT=${SERVICE_PORT}
volumes:
- proxy_log:/var/log/nginx

View File

@ -1,5 +1,7 @@
#!/bin/sh
REDIS_HOST=${REDIS_HOST:-"onlyoffice-redis"}
REDIS_HOST=${REDIS_HOST:-"${REDIS_CONTAINER_NAME}"}
REDIS_PORT=${REDIS_PORT:-"6379"}
envsubst '$MAP_HASH_BUCKET_SIZE,$COUNT_WORKER_CONNECTIONS' < /etc/nginx/nginx.conf.template > /etc/nginx/nginx.conf
sed -i "s!redis_host = \"127.0.0.1\"!redis_host = \"${REDIS_HOST}\"!g" /etc/nginx/conf.d/onlyoffice.conf
sed -i "s~\(redis_host =\).*~\1 \"$REDIS_HOST\"~" /etc/nginx/conf.d/onlyoffice.conf
sed -i "s~\(redis_port =\).*~\1 $REDIS_PORT~" /etc/nginx/conf.d/onlyoffice.conf

View File

@ -63,6 +63,11 @@ public class CustomExceptionFilterAttribute : ExceptionFilterAttribute
status = HttpStatusCode.Forbidden;
message = "Access denied";
break;
case BruteForceCredentialException:
case RecaptchaException:
status = HttpStatusCode.Forbidden;
withStackTrace = false;
break;
case AuthenticationException:
status = HttpStatusCode.Unauthorized;
withStackTrace = false;

View File

@ -95,6 +95,9 @@ public static class NotifyQueueExtension
.HasColumnName("creation_date")
.HasColumnType("datetime");
entity.HasIndex(e => e.CreationDate)
.HasDatabaseName("creation_date");
entity.Property(e => e.Reciever)
.HasColumnName("reciever")
.HasColumnType("varchar(255)")
@ -155,6 +158,9 @@ public static class NotifyQueueExtension
entity.Property(e => e.CreationDate).HasColumnName("creation_date");
entity.HasIndex(e => e.CreationDate)
.HasDatabaseName("creation_date_notify_queue");
entity.Property(e => e.Reciever)
.HasColumnName("reciever")
.HasMaxLength(255)

View File

@ -34,6 +34,7 @@ public interface ITenantQuotaFeatureChecker
public abstract class TenantQuotaFeatureChecker<T, T1> : ITenantQuotaFeatureChecker where T : TenantQuotaFeature<T1> where T1 : IComparable<T1>
{
private static readonly object _lock = new object();
protected readonly ITenantQuotaFeatureStat<T, T1> _tenantQuotaFeatureStatistic;
protected readonly TenantManager _tenantManager;
@ -64,11 +65,14 @@ public abstract class TenantQuotaFeatureChecker<T, T1> : ITenantQuotaFeatureChec
protected void Check(TenantQuota quota, T1 newValue)
{
var val = quota.GetFeature<T>().Value;
if (newValue.CompareTo(val) > 0)
lock (_lock)
{
throw new TenantQuotaException(string.Format(Exception, val));
var val = quota.GetFeature<T>().Value;
if (newValue.CompareTo(val) > 0)
{
throw new TenantQuotaException(string.Format(Exception, val));
}
}
}
}

View File

@ -35,56 +35,101 @@ public class BackupFileUploadHandler
public async Task Invoke(HttpContext context,
PermissionContext permissionContext,
BackupAjaxHandler backupAjaxHandler)
BackupAjaxHandler backupAjaxHandler,
ICache cache,
TenantManager tenantManager,
IConfiguration configuration)
{
FileUploadResult result;
BackupFileUploadResult result = null;
try
{
if (context.Request.Form.Files.Count == 0)
{
result = Error("No files.");
}
if (!await permissionContext.CheckPermissionsAsync(SecutiryConstants.EditPortalSettings))
{
result = Error("Access denied.");
throw new ArgumentException("Access denied.");
}
var file = context.Request.Form.Files[0];
var filePath = await backupAjaxHandler.GetTmpFilePathAsync();
if (File.Exists(filePath))
var tenantId = tenantManager.GetCurrentTenant().Id;
var path = await backupAjaxHandler.GetTmpFilePathAsync();
if (context.Request.Query["Init"].ToString() == "true")
{
File.Delete(filePath);
}
long.TryParse(context.Request.Query["totalSize"], out var size);
if (size <= 0)
{
throw new ArgumentException("Total size must be greater than 0.");
}
await using (var fileStream = File.Create(filePath))
var maxSize = (await tenantManager.GetCurrentTenantQuotaAsync()).MaxTotalSize;
if (size > maxSize)
{
throw new ArgumentException(BackupResource.LargeBackup);
}
try
{
if (File.Exists(path))
{
File.Delete(path);
}
cache.Insert($"{tenantId} backupTotalSize", size.ToString(), TimeSpan.FromMinutes(10));
int.TryParse(configuration["files:uploader:chunk-size"], out var chunkSize);
chunkSize = chunkSize == 0 ? 10 * 1024 * 1024 : chunkSize;
result = Success(chunkSize);
}
catch
{
throw new ArgumentException("Can't start upload.");
}
}
else
{
await file.CopyToAsync(fileStream);
}
long.TryParse(cache.Get<string>($"{tenantId} backupTotalSize"), out var totalSize);
if (totalSize <= 0)
{
throw new ArgumentException("Need init upload.");
}
result = Success();
var file = context.Request.Form.Files[0];
using var stream = file.OpenReadStream();
using var fs = File.Open(path, FileMode.Append);
await stream.CopyToAsync(fs);
if (fs.Length >= totalSize)
{
cache.Remove($"{tenantId} backupTotalSize");
result = Success(endUpload: true);
}
else
{
result = Success();
}
}
}
catch (Exception error)
{
result = Error(error.Message);
}
await context.Response.WriteAsync(System.Text.Json.JsonSerializer.Serialize(result));
await context.Response.WriteAsync(System.Text.Json.JsonSerializer.Serialize(result, new System.Text.Json.JsonSerializerOptions()
{
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
}));
}
private FileUploadResult Success()
private BackupFileUploadResult Success(int chunk = 0, bool endUpload = false)
{
return new FileUploadResult
return new BackupFileUploadResult
{
Success = true
Success = true,
ChunkSize = chunk,
EndUpload = endUpload
};
}
private FileUploadResult Error(string messageFormat, params object[] args)
private BackupFileUploadResult Error(string messageFormat, params object[] args)
{
return new FileUploadResult
return new BackupFileUploadResult
{
Success = false,
Message = string.Format(messageFormat, args)
@ -92,6 +137,14 @@ public class BackupFileUploadHandler
}
}
internal class BackupFileUploadResult
{
public bool Success { get; set; }
public string Message { get; set; }
public int ChunkSize { get; set; }
public bool EndUpload { get; set; }
}
public static class BackupFileUploadHandlerExtensions
{
public static IApplicationBuilder UseBackupFileUploadHandler(this IApplicationBuilder builder)

View File

@ -77,5 +77,14 @@ namespace ASC.Data.Backup.Core {
return ResourceManager.GetString("ButtonSetPassword", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Backup is larger than the total size of the portal.
/// </summary>
internal static string LargeBackup {
get {
return ResourceManager.GetString("LargeBackup", resourceCulture);
}
}
}
}

View File

@ -1,5 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
@ -53,10 +112,10 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="BackupNotFound" xml:space="preserve">
<value>The backup file is invalid. Please, use a file created in ONLYOFFICE v11.5 or later.</value>
@ -64,4 +123,7 @@
<data name="ButtonSetPassword" xml:space="preserve">
<value>Set Password</value>
</data>
<data name="LargeBackup" xml:space="preserve">
<value>Backup is larger than the total size of the portal</value>
</data>
</root>

View File

@ -33,6 +33,8 @@ global using System.Reflection;
global using System.Security.Cryptography;
global using System.ServiceModel;
global using System.Text;
global using System.Text.Json.Serialization;
global using System.Text.RegularExpressions;
global using System.Xml;
global using System.Xml.Linq;
@ -82,7 +84,6 @@ global using ASC.Notify.Recipients;
global using ASC.Security.Cryptography;
global using ASC.Web.Core.PublicResources;
global using ASC.Web.Core.Users;
global using ASC.Web.Core.Utility;
global using ASC.Web.Core.WhiteLabel;
global using ASC.Web.Files.Utils;
global using ASC.Web.Studio.Core;

View File

@ -110,6 +110,7 @@ public class ChunkZipWriteOperator : IDataWriteOperator
theMemStream.Position = 0;
StoragePath = await _sessionHolder.UploadChunkAsync(_chunkedUploadSession, theMemStream, theMemStream.Length);
_sha.TransformBlock(buffer, 0, bytesRead, buffer, 0);
}
else
{
@ -120,7 +121,6 @@ public class ChunkZipWriteOperator : IDataWriteOperator
await theMemStream.CopyToAsync(_fileStream);
_fileStream.Flush();
}
_sha.TransformBlock(buffer, 0, bytesRead, buffer, 0);
}
}
if (last)

View File

@ -3,7 +3,7 @@
"name": "Onlyoffice Single Sign-On handler",
"port": 9834,
"appsettings": "../../../config",
"machinekey": "1123askdasjklasbnd",
"machinekey": "1123askdasjklasbnd",
"environment": "Development",
"logName": "web.sso.%DATE%.log",
"contact": {
@ -22,8 +22,8 @@
"baseUrl": "http://localhost",
"port": 80,
"ssoUrl": "/ssologin.ashx",
"authUrl": "/Auth.aspx"
}
"authUrl": "/login"
}
},
"routes": {
"login": "/login",
@ -62,6 +62,6 @@
"data": "../../Data",
"image-path": "images",
"rebranding": "rebranding",
"https":"certs"
"https": "certs"
}
}
}

View File

@ -8,8 +8,8 @@
"logSamlData": false,
"portal": {
"ssoUrl": "/ssologin.ashx",
"authUrl": "/Auth.aspx"
}
"authUrl": "/login"
}
},
"routes": {
"login": "/sso/login",
@ -29,4 +29,4 @@
"maxFiles": "30d"
}
}
}
}

View File

@ -42,10 +42,10 @@ global using ASC.Files.Core.EF;
global using ASC.Web.Api.Routing;
global using ASC.Web.Studio.Core.Backup;
global using ASC.Web.Studio.Core.Notify;
global using ASC.Web.Studio.Utility;
global using Microsoft.AspNetCore.Authorization;
global using Autofac;
global using Microsoft.AspNetCore.Authorization;
global using Microsoft.AspNetCore.Http.Features;
global using Microsoft.AspNetCore.Mvc;
global using Microsoft.AspNetCore.Server.Kestrel.Core;

View File

@ -1,4 +1,4 @@
{
{
"AllowedHosts": "*",
"core": {
"base-domain": "",
@ -272,7 +272,7 @@
"url": "/socket.io",
"internal": "http://localhost:9899/"
},
"cultures": "az,cs,el-GR,es,fr,hy-AM,ja-JP,lo-LA,nl,pt,ro,sk,tr,vi,bg,de,en-US,en-GB,fi,it,ko-KR,lv,pl,pt-BR,ru,sl,uk-UA,zh-CN",
"cultures": "az,cs,el-GR,es,fr,hy-AM,ja-JP,lo-LA,nl,pt,ro,sk,tr,vi,bg,de,en-US,en-GB,fi,it,ko-KR,lv,pl,pt-BR,ru,sl,uk-UA,ar-SA,zh-CN",
"controlpanel": {
"url": ""
},
@ -285,7 +285,21 @@
"documentation-email": "documentation@onlyoffice.com",
"max-upload-size": 5242880,
"zendesk-key": "",
"samesite": ""
"samesite": "",
"sso": {
"saml": {
"login": {
"url": "/sso/login"
},
"logout": {
"url": "/sso/slo"
}
}
},
"recaptcha": {
"public-key": "",
"private-key": ""
}
},
"ConnectionStrings": {
"default": {

View File

@ -16,6 +16,7 @@
{
"Period":"00:15:00"
},
"ChunkSize": 20971520
"ChunkSize": 20971520,
"MaxLocalSize": 1048576000
}
}

View File

@ -91,30 +91,6 @@ server {
proxy_set_header Proxy "";
set $csp "";
access_by_lua '
local key = string.format("csp:%s",ngx.var.host)
local redis = require "resty.redis"
local red = redis:new()
local redis_host = "127.0.0.1"
local redis_port = 6379
red:set_timeout(1000) -- 1 second
local ok, err = red:connect(redis_host, redis_port)
if not ok then
ngx.log(ngx.ERR, "failed to connect to redis: ", err)
end
local csp, err = red:hget(key, "data")
if csp == ngx.null then
ngx.log(ngx.ERR, "failed to get redis key: ", err)
else
ngx.header.Content_Security_Policy = csp
end
';
location ~* ^/ds-vpath/ {
rewrite /ds-vpath/(.*) /$1 break;
@ -136,6 +112,31 @@ server {
}
location / {
set $csp "";
access_by_lua '
if ngx.req.get_method() == "GET" then
local key = string.format("csp:%s",ngx.var.host)
local redis = require "resty.redis"
local red = redis:new()
local redis_host = "127.0.0.1"
local redis_port = 6379
red:set_timeout(1000) -- 1 second
local ok, err = red:connect(redis_host, redis_port)
if not ok then
ngx.log(ngx.ERR, "failed to connect to redis: ", err)
end
local csp, err = red:hget(key, "data")
if csp == ngx.null then
ngx.log(ngx.ERR, "failed to get redis key: ", err)
else
ngx.header.Content_Security_Policy = csp
end
end
';
proxy_pass http://127.0.0.1:5001;
location ~* /(manifest.json|sw.js|appIcon(.)*\.png|icon.svg|bg-error.png|favicon.ico|debuginfo.md) {
try_files /$basename /index.html =404;

View File

@ -38,7 +38,10 @@
"🚀 @docspace/client",
"📄 @docspace/editor",
"📦 @docspace/common"
]
],
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
},
"extensions": {
"recommendations": [

View File

@ -38,7 +38,10 @@
"🚀 @docspace/client",
"📄 @docspace/editor",
"📦 @docspace/common"
]
],
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
},
"extensions": {
"recommendations": [

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<babeledit_project be_version="4.0.3" version="1.3">
<babeledit_project be_version="4.1.0" version="1.3">
<!--
BabelEdit project file
@ -19,6 +19,491 @@
<package_node>
<name>main</name>
<children>
<file_node>
<name>DeepLink</name>
<children>
<concept_node>
<name>DeepLinkText</name>
<description/>
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
</translation>
<translation>
<language>bg-BG</language>
<approved>false</approved>
</translation>
<translation>
<language>cs-CZ</language>
<approved>false</approved>
</translation>
<translation>
<language>de-DE</language>
<approved>false</approved>
</translation>
<translation>
<language>el-GR</language>
<approved>false</approved>
</translation>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-ES</language>
<approved>false</approved>
</translation>
<translation>
<language>fi-FI</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-FR</language>
<approved>false</approved>
</translation>
<translation>
<language>hy-AM</language>
<approved>false</approved>
</translation>
<translation>
<language>it-IT</language>
<approved>false</approved>
</translation>
<translation>
<language>ja-JP</language>
<approved>false</approved>
</translation>
<translation>
<language>ko-KR</language>
<approved>false</approved>
</translation>
<translation>
<language>lo-LA</language>
<approved>false</approved>
</translation>
<translation>
<language>lv-LV</language>
<approved>false</approved>
</translation>
<translation>
<language>nl-NL</language>
<approved>false</approved>
</translation>
<translation>
<language>pl-PL</language>
<approved>false</approved>
</translation>
<translation>
<language>pt-BR</language>
<approved>false</approved>
</translation>
<translation>
<language>pt-PT</language>
<approved>false</approved>
</translation>
<translation>
<language>ro-RO</language>
<approved>false</approved>
</translation>
<translation>
<language>ru-RU</language>
<approved>false</approved>
</translation>
<translation>
<language>sk-SK</language>
<approved>false</approved>
</translation>
<translation>
<language>sl-SI</language>
<approved>false</approved>
</translation>
<translation>
<language>tr-TR</language>
<approved>false</approved>
</translation>
<translation>
<language>uk-UA</language>
<approved>false</approved>
</translation>
<translation>
<language>vi-VN</language>
<approved>false</approved>
</translation>
<translation>
<language>zh-CN</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
<concept_node>
<name>OpenInApp</name>
<description/>
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
</translation>
<translation>
<language>bg-BG</language>
<approved>false</approved>
</translation>
<translation>
<language>cs-CZ</language>
<approved>false</approved>
</translation>
<translation>
<language>de-DE</language>
<approved>false</approved>
</translation>
<translation>
<language>el-GR</language>
<approved>false</approved>
</translation>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-ES</language>
<approved>false</approved>
</translation>
<translation>
<language>fi-FI</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-FR</language>
<approved>false</approved>
</translation>
<translation>
<language>hy-AM</language>
<approved>false</approved>
</translation>
<translation>
<language>it-IT</language>
<approved>false</approved>
</translation>
<translation>
<language>ja-JP</language>
<approved>false</approved>
</translation>
<translation>
<language>ko-KR</language>
<approved>false</approved>
</translation>
<translation>
<language>lo-LA</language>
<approved>false</approved>
</translation>
<translation>
<language>lv-LV</language>
<approved>false</approved>
</translation>
<translation>
<language>nl-NL</language>
<approved>false</approved>
</translation>
<translation>
<language>pl-PL</language>
<approved>false</approved>
</translation>
<translation>
<language>pt-BR</language>
<approved>false</approved>
</translation>
<translation>
<language>pt-PT</language>
<approved>false</approved>
</translation>
<translation>
<language>ro-RO</language>
<approved>false</approved>
</translation>
<translation>
<language>ru-RU</language>
<approved>false</approved>
</translation>
<translation>
<language>sk-SK</language>
<approved>false</approved>
</translation>
<translation>
<language>sl-SI</language>
<approved>false</approved>
</translation>
<translation>
<language>tr-TR</language>
<approved>false</approved>
</translation>
<translation>
<language>uk-UA</language>
<approved>false</approved>
</translation>
<translation>
<language>vi-VN</language>
<approved>false</approved>
</translation>
<translation>
<language>zh-CN</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
<concept_node>
<name>OpeningDocument</name>
<description/>
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
</translation>
<translation>
<language>bg-BG</language>
<approved>false</approved>
</translation>
<translation>
<language>cs-CZ</language>
<approved>false</approved>
</translation>
<translation>
<language>de-DE</language>
<approved>false</approved>
</translation>
<translation>
<language>el-GR</language>
<approved>false</approved>
</translation>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-ES</language>
<approved>false</approved>
</translation>
<translation>
<language>fi-FI</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-FR</language>
<approved>false</approved>
</translation>
<translation>
<language>hy-AM</language>
<approved>false</approved>
</translation>
<translation>
<language>it-IT</language>
<approved>false</approved>
</translation>
<translation>
<language>ja-JP</language>
<approved>false</approved>
</translation>
<translation>
<language>ko-KR</language>
<approved>false</approved>
</translation>
<translation>
<language>lo-LA</language>
<approved>false</approved>
</translation>
<translation>
<language>lv-LV</language>
<approved>false</approved>
</translation>
<translation>
<language>nl-NL</language>
<approved>false</approved>
</translation>
<translation>
<language>pl-PL</language>
<approved>false</approved>
</translation>
<translation>
<language>pt-BR</language>
<approved>false</approved>
</translation>
<translation>
<language>pt-PT</language>
<approved>false</approved>
</translation>
<translation>
<language>ro-RO</language>
<approved>false</approved>
</translation>
<translation>
<language>ru-RU</language>
<approved>false</approved>
</translation>
<translation>
<language>sk-SK</language>
<approved>false</approved>
</translation>
<translation>
<language>sl-SI</language>
<approved>false</approved>
</translation>
<translation>
<language>tr-TR</language>
<approved>false</approved>
</translation>
<translation>
<language>uk-UA</language>
<approved>false</approved>
</translation>
<translation>
<language>vi-VN</language>
<approved>false</approved>
</translation>
<translation>
<language>zh-CN</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
<concept_node>
<name>StayInBrowser</name>
<description/>
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
</translation>
<translation>
<language>bg-BG</language>
<approved>false</approved>
</translation>
<translation>
<language>cs-CZ</language>
<approved>false</approved>
</translation>
<translation>
<language>de-DE</language>
<approved>false</approved>
</translation>
<translation>
<language>el-GR</language>
<approved>false</approved>
</translation>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-ES</language>
<approved>false</approved>
</translation>
<translation>
<language>fi-FI</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-FR</language>
<approved>false</approved>
</translation>
<translation>
<language>hy-AM</language>
<approved>false</approved>
</translation>
<translation>
<language>it-IT</language>
<approved>false</approved>
</translation>
<translation>
<language>ja-JP</language>
<approved>false</approved>
</translation>
<translation>
<language>ko-KR</language>
<approved>false</approved>
</translation>
<translation>
<language>lo-LA</language>
<approved>false</approved>
</translation>
<translation>
<language>lv-LV</language>
<approved>false</approved>
</translation>
<translation>
<language>nl-NL</language>
<approved>false</approved>
</translation>
<translation>
<language>pl-PL</language>
<approved>false</approved>
</translation>
<translation>
<language>pt-BR</language>
<approved>false</approved>
</translation>
<translation>
<language>pt-PT</language>
<approved>false</approved>
</translation>
<translation>
<language>ro-RO</language>
<approved>false</approved>
</translation>
<translation>
<language>ru-RU</language>
<approved>false</approved>
</translation>
<translation>
<language>sk-SK</language>
<approved>false</approved>
</translation>
<translation>
<language>sl-SI</language>
<approved>false</approved>
</translation>
<translation>
<language>tr-TR</language>
<approved>false</approved>
</translation>
<translation>
<language>uk-UA</language>
<approved>false</approved>
</translation>
<translation>
<language>vi-VN</language>
<approved>false</approved>
</translation>
<translation>
<language>zh-CN</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
</children>
</file_node>
<file_node>
<name>Editor</name>
<children>
@ -28,6 +513,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -144,6 +633,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -260,6 +753,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -376,6 +873,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -492,6 +993,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -608,6 +1113,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -724,6 +1233,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -840,6 +1353,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -958,6 +1475,9 @@
</folder_node>
<isTemplateProject>false</isTemplateProject>
<languages>
<language>
<code>ar-SA</code>
</language>
<language>
<code>az-Latn-AZ</code>
</language>
@ -1044,6 +1564,10 @@
<translation_package>
<name>main</name>
<translation_urls>
<translation_url>
<path>../packages/editor/public/locales/ar-SA</path>
<language>ar-SA</language>
</translation_url>
<translation_url>
<path>../packages/editor/public/locales/az</path>
<language>az-Latn-AZ</language>

View File

@ -28,6 +28,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -144,6 +148,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -260,6 +268,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -376,6 +388,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -492,6 +508,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -608,6 +628,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -724,6 +748,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -840,6 +868,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -956,6 +988,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -1072,6 +1108,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -1188,6 +1228,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -1304,6 +1348,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -1420,6 +1468,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -1536,6 +1588,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -1652,6 +1708,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -1768,6 +1828,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -1884,6 +1948,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -2005,6 +2073,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -2121,6 +2193,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -2237,6 +2313,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -2353,6 +2433,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -2469,6 +2553,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -2585,6 +2673,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -2701,6 +2793,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -2817,6 +2913,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -2933,6 +3033,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -3049,6 +3153,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -3165,6 +3273,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -3281,6 +3393,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -3397,6 +3513,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -3513,6 +3633,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -3629,6 +3753,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -3745,6 +3873,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -3861,6 +3993,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -3977,6 +4113,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -4093,6 +4233,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -4209,6 +4353,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -4325,6 +4473,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -4442,121 +4594,9 @@
<default_text/>
<translations>
<translation>
<language>az-Latn-AZ</language>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>bg-BG</language>
<approved>false</approved>
</translation>
<translation>
<language>cs-CZ</language>
<approved>false</approved>
</translation>
<translation>
<language>de-DE</language>
<approved>false</approved>
</translation>
<translation>
<language>el-GR</language>
<approved>false</approved>
</translation>
<translation>
<language>en-US</language>
<approved>false</approved>
</translation>
<translation>
<language>es-ES</language>
<approved>false</approved>
</translation>
<translation>
<language>fi-FI</language>
<approved>false</approved>
</translation>
<translation>
<language>fr-FR</language>
<approved>false</approved>
</translation>
<translation>
<language>hy-AM</language>
<approved>false</approved>
</translation>
<translation>
<language>it-IT</language>
<approved>false</approved>
</translation>
<translation>
<language>ja-JP</language>
<approved>false</approved>
</translation>
<translation>
<language>ko-KR</language>
<approved>false</approved>
</translation>
<translation>
<language>lo-LA</language>
<approved>false</approved>
</translation>
<translation>
<language>lv-LV</language>
<approved>false</approved>
</translation>
<translation>
<language>nl-NL</language>
<approved>false</approved>
</translation>
<translation>
<language>pl-PL</language>
<approved>false</approved>
</translation>
<translation>
<language>pt-BR</language>
<approved>false</approved>
</translation>
<translation>
<language>pt-PT</language>
<approved>false</approved>
</translation>
<translation>
<language>ro-RO</language>
<approved>false</approved>
</translation>
<translation>
<language>ru-RU</language>
<approved>false</approved>
</translation>
<translation>
<language>sk-SK</language>
<approved>false</approved>
</translation>
<translation>
<language>sl-SI</language>
<approved>false</approved>
</translation>
<translation>
<language>tr-TR</language>
<approved>false</approved>
</translation>
<translation>
<language>uk-UA</language>
<approved>false</approved>
</translation>
<translation>
<language>vi-VN</language>
<approved>false</approved>
</translation>
<translation>
<language>zh-CN</language>
<approved>false</approved>
</translation>
</translations>
</concept_node>
<concept_node>
<name>Remember</name>
<description/>
<comment/>
<default_text/>
<translations>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -4673,6 +4713,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -4789,6 +4833,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -4905,6 +4953,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -5021,6 +5073,10 @@
<comment/>
<default_text/>
<translations>
<translation>
<language>ar-SA</language>
<approved>false</approved>
</translation>
<translation>
<language>az-Latn-AZ</language>
<approved>false</approved>
@ -5139,6 +5195,9 @@
</folder_node>
<isTemplateProject>false</isTemplateProject>
<languages>
<language>
<code>ar-SA</code>
</language>
<language>
<code>az-Latn-AZ</code>
</language>
@ -5225,6 +5284,10 @@
<translation_package>
<name>main</name>
<translation_urls>
<translation_url>
<path>../packages/login/public/locales/ar-SA</path>
<language>ar-SA</language>
</translation_url>
<translation_url>
<path>../packages/login/public/locales/az</path>
<language>az-Latn-AZ</language>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,27 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace ASC.Migrations.MySql.SaaS.Migrations
{
/// <inheritdoc />
public partial class MigrationContext_Upgrade2 : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateIndex(
name: "creation_date",
table: "notify_queue",
column: "creation_date");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropIndex(
name: "creation_date",
table: "notify_queue");
}
}
}

View File

@ -4618,6 +4618,9 @@ namespace ASC.Migrations.MySql.SaaS.Migrations
b.HasKey("NotifyId")
.HasName("PRIMARY");
b.HasIndex("CreationDate")
.HasDatabaseName("creation_date");
b.HasIndex("TenantId");
b.ToTable("notify_queue", (string)null);

View File

@ -0,0 +1,8 @@
{
"AboutCompanyEmailTitle": "البريد الإلكتروني",
"AboutHeader": "حول هذا البرنامج",
"DocumentManagement": "إدارة الوثائق",
"OnlineEditors": "المحررين عبر الإنترنت",
"Site": "موقع",
"SoftwareLicense": "ترخيص البرنامج"
}

View File

@ -0,0 +1,8 @@
{
"ArchiveHeader": "هل تريد الانتقال إلى الأرشيف؟",
"ArchiveRoom": "أنت على وشك أرشفة الغرفة.",
"ArchiveRooms": "أنت على وشك أرشفة الغرف.",
"RestoreAllRooms": "هل أنت متأكد أنك تريد استعادة جميع الغرف؟",
"RestoreRoom": "هل أنت متأكد أنك تريد استعادة الغرفة؟",
"RestoreRooms": "هل أنت متأكد أنك تريد استعادة الغرف؟"
}

View File

@ -0,0 +1,6 @@
{
"FilesUploaded": "تم تحميل الملفات",
"Upload": "رفع",
"UploadFiles": "رفع الملفات",
"UploadFolder": "رفع مجلد"
}

View File

@ -0,0 +1,8 @@
{
"BackupCodesDescription": "استخدم الرموز الاحتياطية لتسجيل الدخول عندما لا يكون لديك وصول إلى هاتفك.",
"BackupCodesSecondDescription": "يمكن استخدام كل رمز مرة واحدة. يمكنك الحصول على رموز جديدة في أي وقت. فقط الرموز التي تم إنشاؤها في الماضي صالحة.",
"BackupCodesTitle": "رموز النسخ الاحتياطي",
"CodesCounter": "الرموز:",
"PrintButton": "طباعة",
"RequestNewButton": "طلب جديد"
}

View File

@ -0,0 +1,5 @@
{
"EmailActivationDescription": "سيتم إرسال تعليمات التنشيط إلى عنوان البريد الإلكتروني المحدد.",
"EmailChangeTitle": "تغيير الايميل",
"EnterEmail": "أدخل ايميل جديد"
}

View File

@ -0,0 +1,4 @@
{
"ChangeOwner": "تغيير المالك ({{fileName}})",
"ChangeOwnerDescription": "بمجرد تغيير المالك، يحصل المالك الحالي على نفس مستوى الوصول مثل الأعضاء الآخرين في مجموعته."
}

View File

@ -0,0 +1,4 @@
{
"MessageSendPasswordChangeInstructionsOnEmail": "أرسل تعليمات تغيير كلمة المرور إلى عنوان البريد الإلكتروني <1>{{email}}</1>",
"PasswordChangeTitle": "تغيير كلمة المرور"
}

View File

@ -0,0 +1,5 @@
{
"ChangePhoneInstructionSent": "تم إرسال تعليمات تغيير الهاتف بنجاح.",
"MobilePhoneChangeTitle": "تغيير الهاتف المحمول",
"MobilePhoneEraseDescription": "سيتم إرسال التعليمات الخاصة بكيفية تغيير رقم الهاتف المحمول للمستخدم إلى عنوان البريد الإلكتروني للمستخدم."
}

View File

@ -0,0 +1,14 @@
{
"AppointAdmin": "تعيين المسؤولين",
"BackupPortal": "بيانات DocSpace الاحتياطية",
"ChangeInstruction": "لتغيير مالك DocSpace، يرجى اختيار اسم المالك الجديد أدناه.",
"ChangeOwner": "تغيير مالك DocSpace",
"ChangeUser": "تغيير المستخدم",
"DeactivateOrDeletePortal": "قم بإلغاء تنشيط DocSpace أو حذفه",
"DoTheSame": "افعل نفس الشيء مثل المسؤولين",
"ManagePortal": "إدارة تكوين DocSpace",
"ManageUser": "إدارة حسابات المستخدمين",
"NewPortalOwner": "مالك DocSpace جديد",
"PortalOwnerCan": "يمكن لمالك DocSpace:",
"SetAccessRights": "تعيين امكانيات الوصول"
}

View File

@ -0,0 +1,7 @@
{
"ChangeUsersActiveStatus": "مفعل",
"ChangeUsersDisableStatus": "معطل",
"ChangeUserStatusDialog": "المستخدمون الذين لديهم '{{ userStatus }}' سيكونون {{ status }}.",
"ChangeUserStatusDialogHeader": "تغيير الحالة",
"ChangeUserStatusDialogMessage": "لا يمكنك تغيير حالتك او حالة مالك DocSpace."
}

View File

@ -0,0 +1,8 @@
{
"ChangeUserTypeButton": "تغيير النوع",
"ChangeUserTypeHeader": "تغيير نوع المستخدم",
"ChangeUserTypeMessage": "سيتم نقل المستخدمين من النوع \"{{ firstType }}\" إلى النوع '{{ secondType }}'.",
"ChangeUserTypeMessageMulti": "سيتم نقل المستخدمين المحددين إلى النوع \"{{ secondType }}\".",
"ChangeUserTypeMessageWarning": "لا يمكنك تغيير نوع مسؤولي DocSpace ولنفسك.",
"SuccessChangeUserType": "تم تغيير نوع المستخدم بنجاح"
}

View File

@ -0,0 +1,33 @@
{
"ChangePasswordSuccess": "تم تغيير كلمة المرور بنجاح",
"ConfirmOwnerPortalSuccessMessage": "تم تغيير مالك DocSpace بنجاح. ستتم إعادة توجيهك في غضون 10 ثوانٍ.",
"ConfirmOwnerPortalTitle": "الرجاء تأكيد أنك تريد تغيير مالك DocSpace إلى {{newOwner}}.",
"CurrentNumber": "رقم هاتفك المحمول الحالي",
"DeleteProfileBtn": "احذف حسابي",
"DeleteProfileConfirmation": "انتباه! أنت على وشك حذف حسابك.",
"DeleteProfileConfirmationInfo": "بالنقر فوق \\ \"حذف حسابي \\\" ، فإنك توافق على <1> سياسة الخصوصية الخاصة بنا. </ 1>",
"DeleteProfileSuccessMessage": "تم حذف حسابك بنجاح.",
"DeleteProfileSuccessMessageInfo": "راجع <1> سياسة الخصوصية </ 1> لمعرفة المزيد حول حذف حسابك والبيانات المرتبطة به.",
"EmailAndPasswordCopiedToClipboard": "تم نسخ البريد الإلكتروني وكلمة المرور إلى الحافظة",
"EnterAppCodeDescription": "أدخل رمزًا مكونًا من 6 أرقام تم إنشاؤه من تطبيقك. إذا لم يكن لديك وصول إلى هاتفك ، فاستخدم الرموز الاحتياطية.",
"EnterAppCodeTitle": "أدخل الرمز من تطبيق المصادقة",
"EnterCodePlaceholder": "ادخل الرمز",
"EnterPhone": "أدخل رقم الهاتف المحمول",
"GetCode": "احصل على الرمز",
"InviteTitle": "أنت مدعو للانضمام إلى هذه المساحة!",
"LoginRegistryButton": "انضم",
"PassworResetTitle": "الآن يمكنك إنشاء كلمة مرور جديدة.",
"PhoneSubtitle": "تم تمكين المصادقة ذات العاملين لتوفير أمان إضافي. أدخل رقم هاتفك المحمول لمتابعة العمل في DocSpace. يجب إدخال رقم الهاتف المحمول باستخدام تنسيق دولي مع رمز البلد.",
"PortalContinueTitle": "يرجى تأكيد رغبتك في إعادة تنشيط DocSpace الخاص بك.",
"PortalDeactivateTitle": "يرجى تأكيد رغبتك في إلغاء تنشيط DocSpace الخاص بك.",
"PortalRemoveTitle": "يرجى تأكيد رغبتك في حذف DocSpace الخاص بك.",
"Reactivate": "اعادة تفعيل",
"SetAppButton": "ربط التطبيق",
"SetAppDescription": "تم تمكين المصادقة ذات العاملين. قم بتكوين تطبيق المصادقة لمتابعة العمل في DocSpace. يمكنك استخدام مصادقة جوجل لنظام تشغيل <1> أندرويد</1> و <4> iOS </4> أو مصادقة لـ <8> هاتف ويندوز </8>.",
"SetAppInstallDescription": "للربط بالتطبيق، امسح الرمز أو أدخل الرمز السري يدويًا <1>{{ secretKey }}</1>، ثم أدخل رمزًا مكونًا من 6 أرقام من تطبيقك في الحقل أدناه.",
"SetAppTitle": "ضبط تطبيق المصادقة الخاص بك",
"SuccessDeactivate": "تم إلغاء تنشيط حسابك بنجاح. في غضون 10 ثوانٍ، ستتم إعادة توجيهك إلى <1>site</1>.",
"SuccessReactivate": "تم إعادة تنشيط حسابك بنجاح. في غضون 10 ثوانٍ، ستتم إعادة توجيهك إلى <1>portal</1>.",
"SuccessRemoved": "تمت إزالة حسابك بنجاح. في غضون 10 ثوانٍ، ستتم إعادة توجيهك إلى <1>site</1>.",
"WelcomeUser": "مرحبًا بك في DocSpace!\n للبد قم بالتسجيل عبر الشبكات الاجتماعية."
}

View File

@ -0,0 +1,11 @@
{
"ConflictResolveDescription": "الملف الذي يحمل الاسم <1>{{file}}</1> موجود بالفعل في المجلد <1>{{folder}}</1>.",
"ConflictResolveDescriptionFiles": "{{filesCount}} المستندات التي تحمل الاسم نفسه موجودة بالفعل في المجلد <1> {{folder}} </1>.",
"ConflictResolveSelectAction": "الرجاء تحديد الإجراء:",
"ConflictResolveTitle": "تأكيد الكتابة",
"CreateDescription": "سيكون هناك ملفان مختلفان في المجلد.",
"OverwriteDescription": "سيحل الملف الجديد محل الملف الحالي كإصدار جديد.",
"OverwriteTitle": "استبدال محتوى النسخة بالتحديث الجديد",
"SkipDescription": "لن يتم نسخ أي ملف. سيتم الاحتفاظ بالملف الأصلي في المجلد الوجهة.",
"SkipTitle": "تخطى"
}

View File

@ -0,0 +1,8 @@
{
"Account": "حساب",
"ConnectFolderTitle": "عنوان المجلد",
"ConnectionUrl": "رابط الصلة",
"Login": "تسجيل الدخول",
"Reconnect": "أعد الاتصال",
"SuccessfulConnectionOfAThirdParty": "تم ربط خدمة الطرف الثالث بنجاح."
}

View File

@ -0,0 +1,11 @@
{
"ConversionMessage": "سيتم تحويل جميع المستندات التي تقوم بتحميلها إلى تنسيق Office Open XML (docx أو xlsx أو pptx) للتحرير بشكل أسرع.",
"ConvertedFileDestination": "سيتم إنشاء نسخة الملف في المجلد <strong>{{folderTitle}}</strong>.",
"DocumentConversionTitle": "تحويل المستند",
"FailedToConvert": "فشل التحويل",
"FileUploadTitle": "رفع الملف",
"HideMessage": "لا تعرض هذه الرسالة مرة آخرى",
"InfoCreateFileIn": "تم إنشاء ملف '{{fileTitle}}' الجديد في '{{folderTitle}}'",
"OpenFileMessage": "سيتم تحويل ملف المستند الذي تفتحه إلى صيغةOffice Open XML لعرضه وتحريره بسرعة.",
"SaveOriginalFormatMessage": "احفظ نسخة الملف بالتنسيق الأصلي"
}

View File

@ -0,0 +1,6 @@
{
"ConversionPasswordFormCaption": "أدخل كلمة مرور لحفظ القالب",
"ConversionPasswordMasterFormCaption": "أدخل كلمة مرور لحفظها بصيغة ملف",
"CreationError": "خطأ في إنشاء الملف. تم إدخال كلمة مرور خاطئة. تم إنشاء ملف '{{fileTitle}}'",
"SuccessfullyCreated": "تم إنشاء ملف '{{fileTitle}}'"
}

View File

@ -0,0 +1,27 @@
{
"ChooseRoomType": "اختر نوع الغرفة",
"CollaborationRoomDescription": "تعاون في مستند واحد أو عدة مستندات مع فريقك",
"CollaborationRoomTitle": "غرفة التعاون",
"CreateRoomConfirmation": "هل تريد المتابعة بدون توصيل وحدة التخزين؟\nلقد حددت خيار تخزين لجهة خارجية غير متصل بعد. إذا قمت بالمتابعة دون الاتصال بالخدمة ، فلن تتم إضافة هذا الخيار.",
"CreateTagOption": "إنشاء إشارة",
"CustomRoomDescription": "قم بتطبيق الإعدادات الخاصة بك لاستخدام هذه الغرفة لأي غرض مخصص.",
"CustomRoomTitle": "غرفة مخصصة",
"FillingFormsRoomDescription": "يمكنك إنشاء قوالب المستندات ومشاركتها وملؤها أو العمل باستخدام الإعدادات المسبقة الجاهزة لإنشاء مستندات من أي نوع بسرعة.",
"FillingFormsRoomTitle": "املأ نماذج الغرفة",
"Icon": "أيقونة",
"MakeRoomPrivateDescription": "سيتم تشفير جميع الملفات الموجودة في هذه الغرفة.",
"MakeRoomPrivateLimitationsWarningDescription": "باستخدام هذه الميزة، يمكنك دعوة مستخدمي DocSpace الحاليين فقط. بعد إنشاء غرفة، لن تتمكن من تغيير قائمة المستخدمين.",
"MakeRoomPrivateTitle": "اجعل الغرفة خاصة",
"ReviewRoomDescription": "اطلب مراجعة أو تعليق على الوثائق",
"ReviewRoomTitle": "راجع الغرفة",
"RoomEditing": "تعديل الغرفة",
"RootLabel": "المستخدم الرئيسي",
"TagsPlaceholder": "أضف علامة",
"ThirdPartyStorageComboBoxPlaceholder": "حدد المساحة التخزينية",
"ThirdPartyStorageDescription": "استخدام خدمات الجهات الخارجية كتخزين بيانات لهذه الغرفة. سيتم إنشاء مجلد جديد لتخزين بيانات هذه الغرفة في التخزين المتصل.",
"ThirdPartyStorageNoStorageAlert": "قبل ذلك ، تحتاج إلى توصيل الخدمة المقابلة في قسم \"التكامل\". خلاف ذلك ، لن يكون الاتصال ممكنًا.",
"ThirdPartyStoragePermanentSettingDescription": "يتم تخزين الملفات في وحدة تخزين تابعة لجهة خارجية {{thirdpartyTitle}} \\\"{{thirdpartyFolderName}}\\\" مجلد.\n<strong>{{thirdpartyPath}}</strong>",
"ThirdPartyStorageRoomAdminNoStorageAlert": "لتوصيل وحدة تخزين تابعة لجهة خارجية ، تحتاج إلى إضافة الخدمة المقابلة في قسم التكامل من إعدادات DocSpace. اتصل بمالك DocSpace أو المسئول لتمكين التكامل.",
"ViewOnlyRoomDescription": "شارك أي مستندات وتقارير ووثائق جاهزة وملفات أخرى لعرضها.",
"ViewOnlyRoomTitle": "غرفة للعرض فقط"
}

View File

@ -0,0 +1,5 @@
{
"DataLossWarningBody": "قد لا يتم حفظ التغييرات الخاصة بك.",
"DataLossWarningHeader": "هل تريد مغادرة الصفحة؟",
"DataLossWarningLeaveBtn": "مغادرة"
}

View File

@ -0,0 +1,16 @@
{
"DeleteFile": "أنت على وشك حذف هذا الملف. هل أنت متأكد أنك تريد الاستمرار؟",
"DeleteFolder": "أنت على وشك حذف هذا المجلد. هل أنت متأكد أنك تريد الاستمرار؟",
"DeleteItems": "أنت على وشك حذف هذه العناصر. هل أنت متأكد أنك تريد الاستمرار؟",
"DeleteRoom": "أنت على وشك حذف هذه الغرفة. لن تكون قادرًا على استعادته.",
"DeleteRooms": "أنت على وشك حذف هذه الغرف. لن تتمكن من استعادتها.",
"MoveToTrashButton": "انقل الى سلة المهملات",
"MoveToTrashFile": "أنت على وشك حذف هذا الملف. يرجى ملاحظة أنه إذا قمت بمشاركته مع شخص ما ، فلن يكون متاحًا له. سيتم حذف الملف نهائيًا خلال 30 يومًا. هل أنت متأكد أنك تريد الاستمرار؟",
"MoveToTrashFolder": "أنت على وشك حذف هذا المجلد. يرجى ملاحظة أنه إذا قمت بمشاركته مع شخص ما ، فلن يكون متاحًاً له. هل أنت متأكد أنك تريد الاستمرار؟",
"MoveToTrashFolderFromPersonal": "أنت على وشك حذف هذا المجلد. هل أنت متأكد أنك تريد الاستمرار؟",
"MoveToTrashItems": "أنت على وشك حذف هذه العناصر. يرجى ملاحظة أنه إذا قمت بمشاركتها مع شخص ما ، فلن تكون متاحة له. هل أنت متأكد أنك تريد الاستمرار؟",
"MoveToTrashTitle": "هل تريد نقله الى سلة المهملات؟",
"UnsubscribeButton": "إلغاء الاشتراك",
"UnsubscribeNote": "هل أنت متأكد أنك تريد إلغاء الاشتراك من العناصر المحددة من القائمة؟",
"UnsubscribeTitle": "تأكيد إلغاء الاشتراك"
}

View File

@ -0,0 +1,5 @@
{
"DeleteUser": "حذف المستخدم",
"DeleteUserMessage": "{{userCaption}} <strong>{{user}}</strong> سيتم حذفه. سيتم حذف مستندات المستخدم الشخصية المتوفرة للآخرين. هل أنت متأكد أنك تريد المتابعة؟",
"SuccessfullyDeleteUserInfoMessage": "تم حذف المستخدم بنجاح"
}

View File

@ -0,0 +1,5 @@
{
"DeleteOwnerRestrictionText": "لكونك مالكًا لـ DocSpace هذا، يجب عليك نقل الملكية إلى مستخدم آخر قبل أن تتمكن من حذف حسابك. الرجاء اختيار مالك جديد للمتابعة.",
"DeleteProfileInfo": "أرسل تعليمات حذف ملف التعريف إلى عنوان البريد الإلكتروني",
"DeleteProfileTitle": "حذف الملف الشخصي"
}

View File

@ -0,0 +1,5 @@
{
"DisconnectCloudMessage": "هل أنت متأكد أنك تريد إزالة {{service}}? لن يؤثر هذا على حساب {{account}} الخاص بك بأي شكل من الأشكال.",
"DisconnectCloudTitle": "فك ربط التخزين السحابي",
"SuccessDeleteThirdParty": "تم حذف {{service}} الجهة الخارجية"
}

View File

@ -0,0 +1,5 @@
{
"DeleteGroupUsersSuccessMessage": "تم حذف المستخدمين بنجاح.",
"DeleteUsers": "حذف المستخدمين",
"DeleteUsersMessage": "سيتم حذف المستخدمين الغير مفعلين المحددين من +. سيتم حذف المستندات الشخصية لهؤلاء المستخدمين والمتوفرة للآخرين."
}

View File

@ -0,0 +1,7 @@
{
"CannotChangePlan": "لا يمكنك تغيير خطتك لأن حجم التخزين المستخدم أو عدد المسؤولين / المستخدمين المتميزين يتجاوز حدود الخطة المحددة:",
"ChangePricingPlan": "تغيير خطة التسعير",
"PlanStorageLimit": "حدود التعريفة الجديدة هي <1> {{storageValue}} </1> للتخزين، وسعة التخزين المستخدمة حاليًا هي <1> {{currentStorageValue}} </1>.",
"PlanUsersLimit": "أنت ترغب في إرجاع الفريق إلى <1> {{usersCount}} </1> مشرف / مستخدمون متمرسون، والعدد الحالي لهؤلاء المستخدمين في DocSpace هو <1>{{currentUsersCount}}</1>",
"SaveOrChange": "يُرجى التخلص من عدم التطابق في المتغيرات المتضاربة للمتابعة أو الاحتفاظ بخطة التسعير النشطة الخاصة بك."
}

View File

@ -0,0 +1,7 @@
{
"ChooseFormatText": "اختر تنسيق كل ملف ليتم تنزيله",
"ConvertMessage": "إذا اخترت تحويل الملف إلى تنسيق مختلف عن التنسيق الأصلي، فقد يتم فقد بعض البيانات.",
"ConvertToZip": "سيتم ضغط الملفات في <strong> ملف مضغوط </strong>",
"CustomFormat": "تنسيق مخصص",
"OriginalFormat": "التنسيق الأصلي"
}

View File

@ -0,0 +1,8 @@
{
"Auto": "آلي",
"CodeCopySuccess": "تم نسخ الرمز إلى الحافظة",
"EmbedCode": "كود التضمين",
"EmbeddingDocument": "وثيقة التضمين",
"Height": "الطول",
"Width": "العرض"
}

View File

@ -0,0 +1,8 @@
{
"DeleteForeverButton": "احذف للأبد",
"DeleteForeverNote": "سيتم حذف جميع العناصر من المهملات إلى الأبد. لن تتمكن من استعادتها.",
"DeleteForeverNoteArchive": "سيتم حذف جميع العناصر من الأرشيف إلى الأبد.لن تتمكن من استعادتها.",
"DeleteForeverTitle": "هل تريد الحذف للأبد؟",
"SuccessEmptyArchived": "تم تفريغ الأرشيف",
"SuccessEmptyTrash": "تم إفراغ سلة المهملات"
}

View File

@ -0,0 +1,8 @@
{
"Error401Text": "عذرا، المورد غير متاح حاليا.",
"Error403Text": "نأسف، الوصول مرفوض.",
"Error404Text": "عذرا، لا يمكن العثور على المورد.",
"ErrorEmptyResponse": "رد فارغ",
"ErrorOfflineText": "لا يوجد اتصال بالإنترنت",
"ErrorUnavailableText": "DocSpace غير متوفر"
}

View File

@ -0,0 +1,118 @@
{
"AddMembersDescription": "يمكنك إضافة أعضاء الفريق الجدد يدويًا أو دعوتهم عبر رابط.",
"All": "كل",
"AllFiles": "كل الملفات",
"ArchiveAction": "أرشيف فارغ",
"ArchivedRoomAction": "تمت أرشفة الغرفة \"{{name}}\"",
"ArchivedRoomsAction": "تم أرشفة الغرف",
"ArchiveEmptyScreen": "يمكنك أرشفة الغرف التي لا تستخدمها واستعادتها في DocSpace في أي لحظة أو حذفها نهائيًا. ستظهر هذه الغرف هنا.",
"ArchiveEmptyScreenHeader": "لا توجد غرف مؤرشفة هنا حتى الآن",
"ArchiveEmptyScreenUser": "ستظهر هنا الغرف التي تم أرشفتها.",
"Archives": "أرشيف",
"BackToParentFolderButton": "العودة إلى المجلد الأصل",
"ByAuthor": "مؤلف",
"ByCreation": "منشأ",
"ByErasure": "امسح",
"ByLastModified": "تم التعديل",
"CollaborationRooms": "تعاون",
"ContainsSpecCharacter": "لا يمكن أن يحتوي العنوان على أي من الأحرف التالية: * +: \\ \"<>؟ | /",
"Convert": "تحويل",
"CopyItem": "تم نسخ <strong> {{title}} </strong>",
"CopyItems": "تم نسخ عناصر <strong> {{qty}} </strong>",
"CreateRoom": "إنشاء غرفة",
"CustomRooms": "تخصيص",
"DaysRemaining": "الأيام المتبقية: {{daysRemaining}}",
"DisableNotifications": "أوقف التنبيهات",
"Document": "مستند",
"DocumentEdited": "لا يمكن تنفيذ الإجراء لأن المستند قيد التحرير.",
"EditRoom": "تعديل الغرفة",
"EmptyFile": "ملف فارغ",
"EmptyFilterDescriptionText": "لا توجد ملفات أو مجلدات تطابق هذا الفلتر. جرب فلتراً مختلفًا أو فلتراً واضحًا لعرض جميع الملفات.",
"EmptyFilterSubheadingText": "لا توجد ملفات لعرضها لهذا الفلتر هنا",
"EmptyFolderDecription": "قم بإسقاط الملفات هنا أو أنشئ ملفات جديدة",
"EmptyFolderDescriptionUser": "ستظهر هنا الملفات والمجلدات التي تم رفعها بواسطة المسؤولين.",
"EmptyFolderHeader": "لا توجد ملفات في هذا المجلد",
"EmptyRecycleBin": "سلة مهملات فارغة",
"EmptyRootRoomHeader": "مرحبًا بك في DocSpace",
"EmptyScreenFolder": "لا توجد مستندات هنا حتى الآن",
"EnableNotifications": "تفعيل الاشعارات",
"ExcludeSubfolders": "استبعاد المجلدات الفرعية",
"FavoritesEmptyContainerDescription": "لوضع علامة على الملفات كمفضلة أو إزالتها من هذه القائمة ، استخدم قائمة السياق.",
"FileContents": "محتويات الملف",
"FileRemoved": "تم نقل الملف إلى المهملات",
"FileRenamed": "تمت إعادة تسمية المستند \"{{oldTitle}}\" إلى \"{{newTitle}}\"",
"FillingFormRooms": "قم بتعبئة الاستمارة",
"Filter": "الفلتر",
"FinalizeVersion": "النسخة النهائية",
"Folder": "مجلد",
"FolderRemoved": "تم نقل المجلد إلى سلة المهملات",
"FolderRenamed": "تمت إعادة تسمية المجلد \"{{folderTitle}}\" إلى \"{{newFoldedTitle}}\"",
"Forms": "نماذج",
"FormsTemplates": "قوالب النماذج",
"GoToMyRooms": "اذهب إلى الغرف",
"GoToPersonal": "اذهب إلى المستندات",
"Images": "الصور",
"InviteUsersInRoom": "قم بدعوة المستخدمين إلى الغرفة",
"LinkForPortalUsers": "رابط لمستخدمي DocSpace",
"LinkForRoomMembers": "رابط لأعضاء الغرفة",
"MarkAsFavorite": "وضع علامة كمفضلة",
"MarkedAsFavorite": "تمت الإضافة إلى المفضلة",
"MarkRead": "ضع إشارة مقروء",
"Media": "الوسائط",
"MoveItem": "تم نقل <strong> {{title}} </strong>",
"MoveItems": "تم نقل العناصر <strong> {{qty}} </strong>",
"MoveOrCopy": "انقل أو انسخ",
"MoveToArchive": "انقل إلى الأرشيف",
"MoveToFolderMessage": "لا يمكنك نقل المجلد إلى مجلده الفرعي",
"New": "جديد",
"NewRoom": "غرفة جديدة",
"NoAccessRoomDescription": "ستتم إعادة توجيهك إلى غرفتي تلقائيًا خلال 5 ثوانٍ.",
"NoAccessRoomTitle": "عذرا، ليس لديك حق الوصول إلى هذه الغرفة.",
"NoFilesHereYet": "لا توجد ملفات هنا حتى الآن",
"Open": "افتح",
"OpenLocation": "افتح الموقع",
"Pin": "تثبيت",
"PinToTop": "تثبيت في أعلى الصفحة",
"Presentation": "عرض تقديمي",
"PrivateRoomDescriptionEncrypted": "التحرير المشفر والتعاون الفوري في الوقت الحقيقي",
"PrivateRoomDescriptionSafest": "التخزين الأكثر أمانًا لـ docx و xlsx و pptx.",
"PrivateRoomDescriptionSecure": "مشاركة آمنة مع أفراد الفريق الموثوق بهم",
"PrivateRoomDescriptionUnbreakable": "خوارزمية AES-256 غير قابلة للكسر.",
"PrivateRoomHeader": "مرحبًا بكم في غرفة ONLYOFFICE الخاصة حيث يتم تشفير كل رمز تكتبه",
"PrivateRoomSupport": "العمل في الغرفة الخاصة متاح عبر تطبيق سطح المكتب {{organizationName}}. <3> تعليمات </ 3>",
"RecentEmptyContainerDescription": "سيتم عرض آخر مستنداتك التي تم عرضها أو تحريرها في هذا القسم.",
"RecycleBinAction": "سلة فارغة",
"RemovedFromFavorites": "تمت إزالته من المفضلة",
"RemoveFromFavorites": "قم بإزالته من المفضلة",
"RemoveFromList": "قم بإزالته من القائمة",
"RestoreAll": "استعادة الكل",
"RoomCreated": "تم إنشاء الغرفة",
"RoomEmptyContainerDescription": "الرجاء إنشاء الغرفة الأولى.",
"RoomEmptyContainerDescriptionUser": "ستظهر هنا الغرف المشتركة معك.",
"RoomNotificationsDisabled": "تم تعطيل إشعارات الغرفة",
"RoomNotificationsEnabled": "تم تفعيل إشعارات الغرفة",
"RoomPinned": "تم تثبيت الغرفة",
"RoomRemoved": "تمت إزالة الغرفة",
"RoomsRemoved": "تمت إزالة الغرف",
"RoomUnpinned": "الغرفة غير مثبتة",
"SearchByContent": "ابحث من خلال محتويات الملف",
"SendByEmail": "ارسل بالبريد الإلكترونى",
"Share": "شارك",
"ShowVersionHistory": "عرض محفوظات الإصدار",
"Spreadsheet": "جدول",
"TooltipElementCopyMessage": "انسخ {{element}}",
"TooltipElementsCopyMessage": "انسخ {{element}} العناصر",
"TooltipElementsMoveMessage": "انقل عناصر {{element}}",
"TrashEmptyDescription": "يتم نقل جميع الملفات المحذوفة إلى \"المهملات\". استرجع الملفات المحذوفة عن طريق الخطأ أو حذفها نهائيا. يتم حذف الملفات الموجودة في \"المهملات\" تلقائيًا بعد 30 يومًا. يرجى ملاحظة أن الملفات المحذوفة من \"المهملات\" لا يمكن استعادتها بعد الآن.",
"TrashErasureWarning": "يتم حذف العناصر الموجودة في المهملات تلقائيًا بعد 30 يومًا.",
"UnarchivedRoomAction": "تم إخراج الغرفة \"{{name}}\" من الأرشيف.",
"UnarchivedRoomsAction": "الغرف غير مؤرشفة.",
"UnblockVersion": "إلغاء الحظر / تسجيل الوصول",
"Unpin": "إلغاء التثبيت",
"VersionBadge": "V. {{version}}",
"VersionHistory": "تاريخ النسخة",
"ViewList": "القائمة",
"ViewOnlyRooms": "للمشاهدة فقط",
"ViewTiles": "مربعات متساوية الحجم",
"WithSubfolders": "مع المجلدات الفرعية"
}

View File

@ -0,0 +1,16 @@
{
"AdditionalSections": "أقسام إضافية",
"ConnectEmpty": "لا يوجد شيء هنا",
"DisplayFavorites": "اعرض المفضلة",
"DisplayNotification": "اعرض الإشعار عند نقل العناصر إلى المهملات",
"DisplayRecent": "اعرض الأخيرة",
"DisplayTemplates": "اعرض النماذج",
"IntermediateVersion": "احتفظ بجميع النسخ الوسيطة المحفوظة",
"KeepIntermediateVersion": "احتفظ بالإصدارات الوسيطة عند التحرير",
"OriginalCopy": "احفظ نسخة الملف بالتنسيق الأصلي أيضًا",
"StoringFileVersion": "تخزين إصدارات الملفات",
"ThirdPartyAccounts": "حسابات الطرف الثالث",
"ThirdPartyBtn": "السماح بالاتصال بمساحات التخزين الطرف الثالث",
"UpdateOrCreate": "قم بتحديث إصدار الملف للملف الموجود بنفس الاسم. خلاف ذلك، سيتم إنشاء نسخة من الملف.",
"UploadPluginsHere": "رفع الإضافات هنا"
}

View File

@ -0,0 +1,6 @@
{
"EmptyScreenDescription": "يرجى التحقق من اتصالك بالانترنت وتحديث الصفحة أو المحاولة لاحقاً.",
"GalleryEmptyScreenDescription": "حدد أي قالب نموذج لمشاهدة التفاصيل",
"GalleryEmptyScreenHeader": "فشل تحميل قوالب النماذج",
"TemplateInfo": "معلومات النموذج"
}

View File

@ -0,0 +1,43 @@
{
"HotkeysActions": "اتخاذ إجراءات بشأن العناصر المختارة",
"HotkeysActionsInPreview": "إجراءات أخرى",
"HotkeysApplicationActions": "إجراءات التطبيق",
"HotkeysChangeView": "التبديل بين عرض الشبكة والقائمة",
"HotkeysClearAll": "مسح كافة التحديدات",
"HotkeysClose": "إغلاق / تراجع عن الإجراء",
"HotkeysCreateDocument": "أنشئ مستند",
"HotkeysCreateFolder": "أنشئ مجلد",
"HotkeysCreateForm": "أنشئ قالب نموذج فارغ",
"HotkeysCreateFormFromFile": "أنشيء نموذج قالب من ملف",
"HotkeysCreatePresentation": "أنشئ عرض تقديمي",
"HotkeysCreateSpreadsheet": "أنشئ جدول بيانات",
"HotkeysCreatingObjects": "إنشاء العناصر",
"HotkeysEnterKey": "ادخل",
"HotkeysExtendSelectionDown": "تمديد التحديد لأسفل",
"HotkeysExtendSelectionLeft": "تمديد التحديد لليسار",
"HotkeysExtendSelectionRight": "تمديد التحديد لليمين",
"HotkeysExtendSelectionUp": "تمديد التحديد للأعلى",
"HotkeysGoToParentFolder": "القفز الى المجلد الاعلى",
"HotkeysMove": "انتقل بين العناصر",
"HotkeysMoveDown": "انتقل للأسفل من دون تغيير التحديد",
"HotkeysMoveLeft": "انتقل لليسار من دون تغيير التحديد",
"HotkeysMoveRight": "انتقل لليمين من دون تغيير التحديد",
"HotkeysMoveUp": "انتقل للأعلى من دون تغيير التحديد",
"HotkeysNavigation": "التنقل",
"HotkeysOpen": "فتح العنصر المحدد / تأكيد الإجراء",
"HotkeysPlayPause": "تشغيل / إيقاف مؤقت",
"HotkeysRedoLastUndoneAction": "أعد آخر إجراء تم التراجع عنه",
"HotkeysRemove": "احذف العناصر المحددة",
"HotkeysSelectAll": "حدد جميع المجلدات والملفات المرئية",
"HotkeysSelectDown": "حدد العنصر التالي لأسفل",
"HotkeysSelection": "اختيار العناصر",
"HotkeysSelectItem": "حدد أو قم بإلغاء تحديد العنصر",
"HotkeysSelectLeft": "حدد العنصر التالي على اليسار",
"HotkeysSelectRight": "حدد العنصر التالي على اليمين",
"HotkeysSelectUp": "حدد العنصر التالي لأعلى",
"HotkeysShortcuts": "عرض قائمة مفاتيح الاخصار للوحة المفاتيح",
"HotkeysSpaceKey": "إستضافة",
"HotkeysUndoLastAction": "التراجع عن الإجراء الأخير",
"HotkeysUploadFile": "ارفع الملف",
"HotkeysUploadingObjects": "رفع العناصر"
}

View File

@ -0,0 +1,42 @@
{
"AccountsEmptyScreenText": "انظر تفاصيل المستخدمين هنا",
"AndMoreLabel": "و <strong> {{count}} المزيد </ strong>",
"CreationDate": "تاريخ الإنشاء",
"Data": "بيانات",
"DateModified": "تم تعديل التاريخ",
"FeedCreateFileSeveral": "تمت إضافة الملفات",
"FeedCreateFileSingle": "تم إنشاء الملف",
"FeedCreateFolderSeveral": "تم إضافة المجلدات",
"FeedCreateFolderSingle": "تم إنشاء المجلد",
"FeedCreateRoom": "<strong>«{{roomTitle}}»</strong> تم إنشاء غرفة ",
"FeedCreateRoomTag": "تمت إضافة الإشارات",
"FeedCreateUser": "تمت إضافة المستخدمين",
"FeedDeleteFile": "تم حذف الملفات",
"FeedDeleteFolder": "تم حذف المجلدات",
"FeedDeleteRoomTag": "تم حذف الإشارات",
"FeedDeleteUser": "تم حذف المستخدم",
"FeedLocationLabel": "المجلد «{{folderTitle}}»",
"FeedMoveFile": "تم نقل الملفات",
"FeedMoveFolder": "تم نقل المجلدات",
"FeedRenameFile": "تم إعادة تسمية الملف",
"FeedRenameFolder": "تم إعادة تسمية المجلد",
"FeedRenameRoom": "تمت إعادة تسمية الغرفة <strong> «{{oldRoomTitle}}» </strong> إلى <strong> «{{roomTitle}}» </strong>.",
"FeedUpdateFile": "تم تحديث الملف",
"FeedUpdateRoom": "تم تغيير الأيقونة",
"FeedUpdateUser": "تم تعيين الدور {{role}}",
"FileExtension": "امتداد الملف",
"FilesEmptyScreenText": "انظر تفاصيل الملف والمجلد هنا",
"HistoryEmptyScreenText": "سيتم عرض سجل النشاط هنا",
"ItemsSelected": "تم تحديد العناصر",
"LastModifiedBy": "تم التعديل الأخير من قبل",
"PendingInvitations": "الدعوات المعلقة",
"Properties": "الخصائص",
"RoomsEmptyScreenTent": "انظر تفاصيل الغرف هنا",
"SelectedUsers": "الحسابات المحددة",
"StorageType": "نوع التخزين",
"SubmenuDetails": "التفاصيل",
"SubmenuHistory": "التاريخ",
"SystemProperties": "خصائص النظام",
"UsersInRoom": "المستخدمون في الغرفة",
"Versions": "إصدارات"
}

View File

@ -0,0 +1,14 @@
{
"AddManually": "أضف يدوياً",
"AddManuallyDescriptionAccounts": "قم بدعوة المستخدمين الجدد إلى DocSpace شخصيًا عبر البريد الإلكتروني",
"AddManuallyDescriptionRoom": "أضف مستخدمي DocSpace الحاليين إلى الغرفة باستخدام الأسماء أو قم بدعوة مستخدمين جدد شخصيًا عبر البريد الإلكتروني",
"EmailErrorMessage": "عنوان البريد الإلكتروني غير صالح. يمكنك تحرير البريد الإلكتروني بالضغط عليه.",
"InviteAccountSearchPlaceholder": "ادعُ الناس بالبريد الإلكتروني",
"Invited": "مدعو",
"InviteRoomSearchPlaceholder": "ادعُ الناس بالاسم أو بالبريد الإلكتروني",
"InviteViaLink": "دعوة عبر الرابط",
"InviteViaLinkDescriptionAccounts": "قم بإنشاء ارتباط عالمي للمصادقة الذاتية في DocSpace",
"InviteViaLinkDescriptionRoom": "أنشئ رابطًا عالميًا للتصريح الذاتي في الغرفة",
"LinkCopySuccess": "تم نسخ الرابط",
"SendInvitation": "إرسال دعوة"
}

View File

@ -0,0 +1,34 @@
{
"AdvancedDisplay": "إعدادات العرض المتقدمة",
"APILink": "مكتبة API",
"Ascending": "تصاعدي",
"Code": "رمز الإدخال",
"CopyWindowCode": "نسخ رمز متضمن في النافذة",
"CreateSampleHeader": "قم بإنشاء نموذج متضمن في DocSpace",
"CustomizingDisplay": "تخصيص العرض",
"DataDisplay": "إعدادات عرض البيانات",
"Descending": "تنازلي",
"Destroy": "حذف",
"EnterCount": "أدخل العدد",
"EnterHeight": "أدخل الارتفاع",
"EnterId": "أدخل رقم المعرف",
"EnterPage": "أدخل رقم الصفحة",
"EnterWidth": "أدخل العرض",
"Filter": "البحث والتصفية والفرز",
"FolderId": "رقم المعرف للمجلد",
"FrameId": "رقم المعرف للإطار",
"Header": "العنوان الرئيسي",
"InterfaceElements": "عناصر الواجهة",
"ItemsCount": "عدد العناصر في صفحة واحدة",
"ItemsCountDescription": "يمكنك تحديد عدد الملفات / المجلدات المعروضة على صفحة واحدة، بالإضافة إلى تحديد الصفحة التي تبدأ منها العرض",
"JavascriptSdk": "مجموعة أدوات تطوير البرمجيات بلغة جافا سكربت",
"Menu": "القائمة المتبقية",
"MobileOnly": "فقط على أجهزة الهاتف المحمولة",
"Page": "اعرض الصفحة (رقم)",
"RoomOrFolder": "غرفة أو مجلد",
"RoomOrFolderDescription": "يمكنك اختيار القسم، الغرفة أو المجلد الذي ترغب في عرضه.",
"SDKDescription": "باستخدام (مجموعة أدوات تطوير البرمجيات) بلغة جافا سكربت ، يمكنك تضمين غرفة أو مجلد من اونلي يو اوفيس DocSpace في واجهة الويب الخاصة بك كإطار داخلي. هنا ، يمكنك العثور على إعدادات لإنشاء نموذج إطار داخلي وتكوين سياسة أمان المحتوى. لاستخدام مجموعة أدوات تطوير البرمجيات الكامل ، يرجى الرجوع إلى",
"SearchTerm": "مصطلح البحث",
"SortOrder": "رتب الفرز",
"Title": "التصفّح والعنوان"
}

View File

@ -0,0 +1,14 @@
{
"ClickHere": "انقر هنا",
"ConfirmEmailDescription": "استخدم الرابط الموجود في البريد الإلكتروني للتفعيل. لم تستلم بريدًا إلكترونيًا يحتوي على رابط التفعيل؟",
"ConfirmEmailHeader": "يرجى تنشيط بريدك الإلكتروني ({{email}}) للوصول إلى ميزات DocSpace",
"RequestActivation": "اطلب التفعيل مرة أخرى",
"RoomQuotaDescription": "يمكنك أرشفة الغرف غير الضرورية أو <1> {{clickHere}}</1> للعثور على خطة أسعار أكثر ملاءمة لـ DocSpace",
"RoomQuotaHeader": "عدد الغرف على وشك أن يتجاوز: {{currentValue}} / {{maxValue}}",
"StorageAndRoomHeader": "حدود مساحة التخزين والغرف على وشك أن يتم تجاوزها.",
"StorageAndUserHeader": "حدود مساحة التخزين والمشرفين / المستخدمين المتميزين على وشك أن يتم تجاوزها.",
"StorageQuotaDescription": "يمكنك إزالة الملفات غير الضرورية أو <1> {{clickHere}}</1> للعثور على خطة تسعير أكثر ملاءمة لـ DocSpace الخاص بك.",
"StorageQuotaHeader": "حجم مساحة التخزين على وشك أن يتم تجاوزها: {{currentValue}} / {{maxValue}}",
"UserQuotaDescription": "<1>{{clickHere}}</1> للعثور على خطة تسعير أفضل لـ DocSpace الخاص بك.",
"UserQuotaHeader": "عدد المشرفين المستخدمين المتميزين على وشك أن يتم تجاوزه: {{currentValue}} / {{maxValue}}"
}

View File

@ -0,0 +1,4 @@
{
"MarkAsRead": "تحديد الكل كمقروء",
"NewFiles": "ملفات جديدة"
}

View File

@ -0,0 +1,13 @@
{
"ActionsWithFilesDescription": "سيقوم الشارات بإخطارك بالإجراءات مثل التحميل والإنشاء والتغييرات في الملفات.",
"Badges": "شارات",
"DailyFeed": "تغذية يومية لـ DocSpace",
"DailyFeedDescription": "اطلع على الأخبار والفعاليات من DocSpace الخاص بك في ملخص يومي.",
"ManageNotifications": "إدارة",
"Notifications": "الإشعارات",
"RoomsActions": "الإجراءات المتعلقة بالملفات في الغرف",
"RoomsActivity": "نشاط الغرف.",
"RoomsActivityDescription": "اشعارات كل ساعة. ابقَ على اطلاع بجميع الأنشطة في غرفك.",
"UsefulTips": "نصائح مفيدة حول DocSpace",
"UsefulTipsDescription": "احصل على دليل مفيد حول DocSpace"
}

View File

@ -0,0 +1,42 @@
{
"AccessingProblem": "إذا كنت مستخدمًا موجودًا ولديك مشاكل في الوصول إلى هذه المساحة ، فيرجى الاتصال بالمسؤول.",
"AdministratorDescription": "تكوين DocSpace ، وإنشاء الغرفة وإدارتها ، والقدرة على دعوة وإدارة المستخدمين في DocSpace وفي الغرف الافتراضية ، والقدرة على إدارة حقوق الوصول.",
"Benefits": "فوائد",
"BusinessExpired": "انتهت صلاحية خطتك {{planName}} في {{date}}",
"BusinessFinalDateInfo": "سيتم تجديد الاشتراك تلقائيًا في {{finalDate}} بالأسعار والمواصفات المحدّثة. يمكنك إلغاؤه أو تغيير معلومات الفواتير الخاصة بك على بوابة عملاء Stripe.",
"BusinessPlanPaymentOverdue": "لا يمكن إضافة مستخدمين جدد وإنشاء غرف جديدة. تأخر سداد خطة {{planName}}.",
"BusinessRequestDescription": "تتوفر خطط الأسعار مع المزيد من {{peopleNumber}} مشرفين / مستخدمين متمرسين عند الطلب فقط.",
"BusinessSuggestion": "قم بتخصيص خطة {{planName}} الخاصة بك",
"BusinessTitle": "أنت تستخدم خطة {{planName}}",
"BusinessUpdated": "تم تحديث خطة {{planName}}",
"ChooseNewPayer": "اختر طريقة دفع جديدة",
"ChooseNewPlan": "هل ترغب في اختيار خطة تسعير جديدة؟",
"ContactUs": "لأسئلة المبيعات، اتصل بنا على",
"DelayedPayment": "تأجيل دفع الخطة {{planName}} المؤرخة في {{date}}.",
"DowngradeNow": "الرجوع إلى إصدار سابق الآن",
"ErrorNotification": "فشل تحديث خطة التعرفة. حاول مرة أخرى في وقت لاحق أو اتصل بقسم المبيعات.",
"GracePeriodActivatedDescription": "خلال فترة السماح (فترة السماح المؤقتة)، لا يُسمح للمسؤولين بإنشاء غرف جديدة أو إضافة مستخدمين جدد. بعد انتهاء تاريخ استحقاق فترة السماح المؤقتة، سيتم جعل DocSpace غير متوفر حتى يتم سداد الدفعة.",
"GracePeriodActivatedInfo": "فترة السماح سارية <1> من {{fromDate}} إلى {{byDate}} </1> (الأيام المتبقية: {{delayDaysCount}}).",
"InvalidEmailWithActiveSubscription": "اشتراكك ما زال نشطًا، ولكن نوصي باختيار طريقة دفع جديد يحصل على وصول إلى إعدادات الاشتراك في DocSpace.",
"InvalidEmailWithActiveSubscriptionForAdmin": "اشتراكك ما زال نشطًا، ولكن نوصي بالاتصال بمالك DocSpace لاختيار دافع جديد.",
"InvalidEmailWithoutActiveSubscription": "نوصي باختيار دافع جديد يمكنه الوصول إلى إعدادات الاشتراك في DocSpace.",
"InvalidEmailWithoutActiveSubscriptionByAdmin": "نوصي بالاتصال بمالك DocSpace لاختيار دافع جديد.",
"ManagerTypesDescription": "أنواع حسابات المشرفين وامتيازاتهم",
"Pay": "ادفع",
"Payer": "طريقة الدفع",
"PayerDescription": "هذا المستخدم لديه حق الوصول إلى تفاصيل الدفع وهو المستخدم الوحيد الذي يمكنه تعديل الحصة وإجراء المدفوعات. يمكن لمالك DocSpace ، بالإضافة إلى مدير الدفع نفسه ، إعادة تعيين دور مدير الدفع باستخدام بوابة عملاء سترب.",
"PaymentOverdue": "لا يمكن إضافة مستخدمين جدد.",
"PriceCalculation": "احسب سعرك",
"RenewSubscription": "تجديد الاشتراك في خطة {{planName}}",
"RoomManagerDescription": "إدارة الغرف والأرشفة ودعوة المستخدم وإدارتها. يمكن تعيين عدة مدراء للغرفة.",
"StartupSuggestion": "احصل على المزيد مع خطة {{planName}}",
"StartupTitle": "أنت تستخدم خطة {{planName}} المجانية",
"StripeCustomerPortal": "انتقل إلى بوابة عملاء سترب",
"TotalPricePerMonth": "<1> {{currencySymbol}} </1> <2> {{price}} </2> <3> / شهر </ 3>",
"UpgradeNow": "قم بالترقية الآن",
"UpgradePlan": "قم بالترقية إلى خطة جديدة",
"UpgradePlanInfo": "عند إضافة مستخدمين جدد ستتجاوز الحد الأقصى لعدد أعضاء الغرف المسموح به في خطة التسعير الحالية الخاصة بك.",
"UserNotFound": "المستخدم <1> {{email}} </1> غير موجود.",
"UserNotFoundMatchingEmail": "لم نتمكن من العثور على المستخدم الذي يحمل نفس بريد سترب المطابق.",
"YourPrice": "سعرك"
}

View File

@ -0,0 +1,37 @@
{
"ActivateLicense": "تفعيل الترخيص",
"ActivateLicenseActivated": "تم تفعيل الترخيص",
"ActivatePurchaseBuyLicense": "لشراء الترخيص ، انقر فوق الزر أدناه.",
"ActivatePurchaseBuyNow": "اشتري الآن",
"ActivatePurchaseRenewLicense": "للاستمرار في الحصول على الدعم والتحديثات ، قم بشراء تجديد.",
"ActivateRenewDescr": "للحصول على شروط التجديد الشخصية ، اتصل بمديرك المخصص أو راسلنا على <1> {{email}} </1>",
"ActivateRenewSubscriptionHeader": "تجديد الاشتراك للمؤسسات",
"ActivateSwithToProHeader": "قم بالتبديل إلى إصدار المؤسسي الكامل",
"ActivateTariffDescr": "أنت تستخدم ONLYOFFICE DocSpace للمؤسسات.",
"ActivateTariffEnterpriseExpiration": "ينتهي اشتراكك في {{date}}.",
"ActivateTariffEnterpriseTrialExpiration": "تنتهي الفترة التجريبية الخاصة بك في {{date}}.",
"ActivateToProBannerHeaderTrial": "قم بشراء إصدار المؤسسي الكامل للحصول على:",
"ActivateUploadDescr": "لتنشيط الترخيص الخاص بك ، قم بتحميله بالأسفل وانقر فوق تنشيط.",
"FreeDaysLeft": "{{count}} أيام مجانية متبقية",
"UpgradeToProBannerHeader": "احصل على وصول مجاني إلى الميزات الاحترافية لمدة 30 يومًا",
"UpgradeToProBannerInformationAboutShort": "تعرف على المزيد حول نسخة المؤسسات <1> على الموقع الرسمي </ 1>",
"UpgradeToProBannerInformationDemo": "اطلب العرض التوضيحي <1> هنا </ 1>",
"UpgradeToProBannerInformationPurchase": "اطرح أسئلة الشراء على <1>{{email}}</1>",
"UpgradeToProBannerInformationSupport": "احصل على المساعدة الفنية <1>{{helpUrl}}</1>",
"UpgradeToProBannerInstructionDescr": "استخدم الوثائق الرسمية للترقية:",
"UpgradeToProBannerInstructionHeader": "للوصول إلى الميزات الاحترافية، ابدأ نسخة تجريبية مجانية مدتها 30 يومًا من اونلي يو اوفيس DocSpace النسخة المؤسسية.",
"UpgradeToProBannerInstructionItemDocker": " تعليمات دوكر.",
"UpgradeToProBannerInstructionItemLinux": "تعليمات لينكس.",
"UpgradeToProBannerInstructionItemWindows": "تعليمات ويندوز.",
"UpgradeToProBannerInstructionNote": "يرجى ملاحظة أن المحررين لن يكونوا متوفرين أثناء الترقية. نوصي أيضًا بـ <1> نسخ بياناتك احتياطيًا </ 1> قبل البدء.",
"UpgradeToProBannerInstructionReadNow": "اقرا الان",
"UpgradeToProBannerItemLicenseDescr": "+ اشتراك لمدة عام واحد للحصول على تحديثات الوظائف والأمان.",
"UpgradeToProBannerItemLicenseHeader": "رخصة لمدى الحياة.",
"UpgradeToProBannerItemMobileDescr": "تعديل المستندات والجداول والعروض التقديمية على متصفحات الهواتف المحمولة.",
"UpgradeToProBannerItemMobileHeader": "الوصول من الهواتف المحمولة.",
"UpgradeToProBannerItemScalabilityDescr": "يمكنك تحرير المستندات والتعاون في العمل عليها بشكل مريح بغض النظر عن حجم فريقك.",
"UpgradeToProBannerItemScalabilityHeader": "القابلية للتوسع والتجميع.",
"UpgradeToProBannerItemSupportDescr": "احصل على مساعدة احترافية سريعة لجميع المشكلات التي تواجهها.",
"UpgradeToProBannerItemSupportHeader": "دعم تقني.",
"UploadLicenseFile": "تحميل ملف الترخيص"
}

View File

@ -0,0 +1,7 @@
{
"LblInviteAgain": "ادعوه مرة أخرى",
"MessageEmailActivationInstuctionsSentOnEmail": "The email activation instructions have been sent to the <1>{{email}}</1> email address.",
"NotFoundUsers": "لم يتم العثور على مستخدمين",
"NotFoundUsersDescription": "لا يمكن عرض أي أشخاص يطابقون الفلتر الخاص بك. الرجاء تحديد خيارات تصفية أخرى أو امسح عامل التصفية لعرض جميع الأشخاص في هذا القسم.",
"UserStatus": "الحالة"
}

View File

@ -0,0 +1,7 @@
{
"AllAccounts": "جميع الحسابات",
"EmptyDescription": "ستظهر هنا قائمة المستخدمين الذين تمت دعوتهم مسبقًا إلى DocSpace أو الغرف المنفصلة. ستتمكن من دعوة هؤلاء المستخدمين للتعاون في أي وقت.",
"EmptyHeader": "لا توجد حسابات أخرى هنا حتى اللحظة",
"ListAccounts": "قائمة الحسابات",
"SearchEmptyDescription": "لا يمكن عرض أي أشخاص يطابقون الفلتر الخاص بك في هذا القسم. الرجاء تحديد خيارات تصفية أخرى أو امسح عامل التصفية لعرض جميع الأشخاص الموجودين في هذا القسم."
}

View File

@ -0,0 +1,21 @@
{
"AccountLoginType": "نوع تسجيل الدخول للحساب",
"DeleteSelfProfile": "حذف الملف الشخصي",
"DisabledEmployeeStatus": "معطل",
"DisableUserButton": "قم بالتعطيل",
"EmailChangeButton": "تغيير الايميل",
"EnableUserButton": "تمكين",
"InviteLinkTitle": "رابط الدعوة",
"LDAPLbl": "بروتوكول الوصول إلى الدليل الخفيف ",
"NameChangeButton": "تغيير الاسم",
"PasswordChangeButton": "تغيير كلمة المرور",
"PendingTitle": "قيد الانتظار",
"RemoveData": "احذف البيانات الشخصية",
"ResetAuth": "إعادة تعيين المصادقة",
"SendInviteAgain": "أرسل الدعوة مرة أخرى",
"StandardLogin": "تسجيل الدخول القياسي",
"SuccessChangeUserStatus": "تم تغيير حالة المستخدم بنجاح",
"SuccessDeletePersonalData": "تم حذف البيانات الشخصية بنجاح",
"SuccessSentInvitation": "تم إرسال الدعوة بنجاح",
"SuccessSentMultipleInvitatios": "تم إرسال الدعوات بنجاح"
}

View File

@ -0,0 +1,4 @@
{
"AccessingProblem": "إذا كنت تواجه مشكلات في الوصول إلى DocSpace هذا، فيرجى الاتصال بالمسؤول.",
"ContactAdministrator": "اتصل بمسؤول DocSpace"
}

View File

@ -0,0 +1,4 @@
{
"PortalRestoring": "استعادة DocSpace",
"PreparationPortalDescription": "بمجرد انتهاء عملية الاستعادة ، ستتم إعادة توجيهك تلقائيًا إلى DocSpace الخاص بك.\""
}

View File

@ -0,0 +1,10 @@
{
"PrivacyButton": "افتح سطح المكتب اونلي يو اوفيس للمحررين",
"PrivacyClick": "انقر فوق فتح <1> اونلي يو اوفيس النسخة المكتبية </1> في مربع حوار المتصفح للعمل مع المستندات المشفرة.",
"PrivacyDescriptionConnect": "يمكنك فتح هذا الملف من واجهة تطبيق سطح المكتب بمجرد توصيل السحابة الخاصة بك",
"PrivacyDescriptionEditors": "إذا قمت بتثبيت محررات اونلي يو اوفيس النسخة المكتبية ولكن لا يمكنك فتحه من هذه الصفحة، فربما يقوم المستعرض الخاص بك بحظره.",
"PrivacyDialog": "إذا كنت لا ترى مربع حوار ، فانقر فوق الزر أدناه",
"PrivacyEditors": "ليس لديك محررات اونلي يو اوفيس النسخة المكتبية؟",
"PrivacyHeader": "هذا المستند مشفر",
"PrivacyInstall": "ثبت الآن"
}

View File

@ -0,0 +1,29 @@
{
"ActiveSessions": "الجلسات النشطة",
"ChangeEmailSuccess": "تم تغيير البريد الإلكتروني بنجاح",
"ChangePasswordAfterLoggingOut": "تغيير كلمة المرور بعد تسجيل الخروج",
"ConnectSocialNetworks": "ربط حساباتك على الشبكات الاجتماعية",
"DarkTheme": "الوضع الداكن",
"DescriptionForSecurity": "من أجل مزيد من الأمان، يجب عليك تغيير كلمة المرور.",
"EditPhoto": "تحرير الصورة",
"EmailNotVerified": "البريد الإلكتروني غير موثق",
"InterfaceTheme": "واجهة المستخدم",
"LightTheme": "الوضع النهاري",
"LogoutActiveConnection": "تسجيل الخروج من الاتصال النشط",
"LogoutAllActiveConnections": "تسجيل الخروج من جميع الاتصالات النشطة",
"LogoutAllActiveSessions": "تسجيل الخروج من جميع الجلسات النشطة",
"LogoutAllActiveSessionsDescription": "سيتم تسجيل الخروج من جميع الاتصالات النشطة باستثناء هذا الاتصال، حيث أنه قيد الاستخدام حاليًا.",
"LogoutBtn": "تسجيل الخروج",
"LogoutDescription": "ملحوظة. سيتم تسجيل خروج جميع الاتصالات النشطة باستثناء هذا الاتصال ، حيث إنه قيد الاستخدام حاليًا.",
"LogoutFrom": "هل تريد الخروج من {{platform}} {{browser}}؟",
"MyProfile": "ملفي الشخصي",
"ProviderSuccessfullyConnected": "المزود متصل بنجاح",
"ProviderSuccessfullyDisconnected": "تم قطع الاتصال بالمزود بنجاح",
"SendAgain": "أعد الإرسال مرة أخرى",
"ShowBackupCodes": "اعرض الرموز الاحتياطية",
"SuccessLogout": "تم تسجيل خروج الاتصال النشط: {{platform}} ، {{browser}}",
"SystemTheme": "استخدم قالب النظام",
"SystemThemeDescription": "قم بالتبديل تلقائيًا بين القوالب الفاتحة والداكنة عندما يقوم نظامك بذلك.",
"TfaLoginSettings": "إعدادات تسجيل الدخول",
"TwoFactorDescription": "تم تمكين المصادقة الثنائية عبر تطبيق إنشاء التعليمات البرمجية لجميع المستخدمين من قبل المسؤول."
}

View File

@ -0,0 +1,5 @@
{
"ResetApplicationDescription": "ستتم إعادة ضبط تكوين تطبيق المصادقة.",
"ResetApplicationTitle": "إعادة ضبط تكوين التطبيق",
"SuccessResetApplication": "تمت إعادة تعيين إعدادات التطبيق المصادقة بنجاح."
}

View File

@ -0,0 +1,5 @@
{
"EmptyRoomsDescription": "الرجاء إنشاء أول غرفة في غرفي.",
"EmptyRoomsHeader": "لا توجد غرف هنا حتى الآن",
"RoomList": "قائمة الغرف"
}

View File

@ -0,0 +1,18 @@
{
"Authentication": "المصادقة",
"AuthViaNTLM": "المصادقة عبر بروتوكول لمصادقة المستخدمين وإدارة الوصول في بيئات الشبكات المحلية",
"EnableSSL": "تمكين برتوكول تشفير اتصالات الانترنت بين العملاء والخوادم",
"EnterDomain": "أدخل النطاق",
"EnterEmail": "أدخل البريد الإلكتروني",
"EnterLogin": "أدخل تسجيل الدخول",
"EnterPort": "أدخل المنفذ",
"HelpText": "إذا كنت تستخدم حساب جيميل لخادم بروتوكول نقل البريد الالكتروني ، فلن تتمكن من إرسال البريد حتى تقوم بما يلي: تسجيل الدخول إلى حساب الجيميل الذي تستخدمه عبر واجهة الويب القياسية الخاصة به وتأكيد أي أسئلة تحقق حول وصول {{organizationName}} محاولة الحساب في حالة وجود البعض. تحتاج أيضًا إلى إنشاء كلمة مرور التطبيق في إعدادات الأمان على صفحة حسابي على جوجل (لا يمكن استخدام كلمة المرور هذه إلا إذا تم تمكين التحقق بخطوتين). نوصي باستخدام المنفذين 587 أو 25 لإرسال رسائل البريد الإلكتروني ، حيث قد تمنع القيم الأخرى بروتوكول نقل البريد الالكتروني من العمل الصحيح.",
"Host": "المستضيف",
"HostLogin": "تسجيل دخول المستضيف",
"HostPassword": "كلمة مرور المستضيف",
"Port": "المنفذ",
"SenderDisplayName": "اسم عرض المرسل",
"SenderEmailAddress": "عنوان البريد الإلكتروني للمرسل",
"SendTestMail": "إرسال بريد تجريبي",
"SuccessfullyCompletedOperation": "تمت العملية بنجاح."
}

View File

@ -0,0 +1,7 @@
{
"RequestDetails": "يرجى وصف تفاصيل طلبك هنا.",
"SalesDepartmentRequest": "طلب قسم المبيعات",
"SuccessfullySentMessage": "تم إرسال رسالتك بنجاح. سيتم الاتصال بك من قبل قسم المبيعات.",
"YourName": "اسمك",
"YouWillBeContacted": "سيتصل بك فريق المبيعات بعد إنشاء الطلب."
}

View File

@ -0,0 +1,4 @@
{
"FolderContents": "محتويات المجلد '{{folderTitle}}'",
"NotAvailableFolder": "لا يوجد ملفات متاحة"
}

View File

@ -0,0 +1,4 @@
{
"SendInviteAgainDialog": "سيتم إرسال الدعوة مرة أخرى إلى المستخدمين الذين حالتهم معلقة.",
"SendInviteAgainDialogMessage": "بعد قبول المستخدمين للدعوة ، سيتم تغيير حالتهم إلى 'نشط'."
}

View File

@ -0,0 +1,214 @@
{
"AccentColor": "لهجة",
"AccessRightsAccessToProduct": "تم منح حق الوصول إلى الوحدة النمطية {{product}} إلى",
"AccessRightsAllUsers": " جميع {{users}} ",
"AccessRightsChangeOwnerConfirmText": "سيتم تطبيق التغييرات بعد التأكيد عبر البريد الإلكتروني.",
"AccessRightsProductUsersCan": "يمكن لمستخدمي {{category}} القيام بذلك",
"AccessRightsUsersFromList": "{{users}} من القائمة",
"AddAllowedIP": "أضف عنوان IP المسموح به",
"AdditionalResources": "مصادر إضافية",
"AdditionalResourcesDescription": "اختر ما إذا كنت تريد عرض ارتباطات لمصادر إضافية في قائمة DocSpace.",
"AddTrustedDomain": "إضافة مجال موثوق به",
"Admins": "المشرفون",
"AdminsMessage": "إعدادات رسالة المسؤول",
"AdminsMessageDescription": "<1> Administrator Message Settings</1> هي وسيلة للاتصال بمسؤول DocSpace. <br> قم بتمكين هذا الخيار لعرض نموذج الاتصال على صفحة <2>تسجيل الدخول</2> حتى يتمكن الأشخاص من إرسال رسائل إلى مسؤول الفضاء في حال واجهوا مشكلات في الوصول إلى الفضاء. <br> لجعل المعلمات التي قمت بتعيينها تأخذ تأثيرًا، انقر على زر <3>save</3> في أسفل القسم.",
"AdminsMessageHelper": "قم بتمكين هذا الخيار لعرض نموذج الاتصال في صفحة تسجيل الدخول حتى يتمكن الأشخاص من إرسال الرسالة إلى المسؤول في حالة مواجهة مشكلات في الوصول إلى DocSpace.",
"AllDomains": "أي مجالات",
"AmazonBucketTip": "أدخل الاسم الفريد لحاوية Amazon 3S حيث تريد تخزين النسخ الاحتياطية الخاصة بك.",
"AmazonCSE": "تشفير من جانب العميل",
"AmazonForcePathStyleTip": "عندما يكون صحيحًا، ستستخدم الطلبات دائمًا عنونة نمط المسار.",
"AmazonHTTPTip": "إذا تم تعيين هذه الخاصية على \"true\" ، يحاول العميل استخدام بروتوكول HTTP ، إذا كانت نقطة النهاية الهدف تدعمه. فرضيا، تضبط هذه الخاصية على القيمة خطأ.",
"AmazonRegionTip": "أدخل منطقة مجموعة الخدمات السحابية حيث توجد محفظة أمازون الخاصة بك.",
"AmazonServiceTip": "هذه خاصية اختيارية؛ قم بتغييره فقط إذا كنت تريد تجربة نقطة نهاية خدمة مختلفة.",
"AmazonSSE": "التشفير من جانب الخادم",
"AmazonSSETip": "خوارزمية التشفير من جانب الخادم المستخدمة عند تخزين هذا الكائن في خدمة التخزين السحابي المقدمة من أمازون ويب.",
"Api": "واجهة برمجة التطبيقات",
"ApiPageDescription": "قم بإنشاء منصة إنتاجية خاصة بك على أساس منصة مكتبية متكاملة لDocSpace وتعاون في المستندات مع الفرق والعملاء والشركاء.",
"ApiPageHeader": "بناء منصة التعاون الخاصة بك",
"Appearance": "مظهر",
"AuditSubheader": "يتيح لك القسم الفرعي تصفح قائمة أحدث التغييرات (الإنشاء والتعديل والحذف وما إلى ذلك) التي أجراها المستخدمون على الكيانات (الغرف والفرص والملفات وما إلى ذلك) داخل DocSpace الخاص بك.",
"AuditTrailNav": "سجل تدقيق",
"AutoBackup": "النسخ الاحتياطي التلقائي",
"AutoBackupDescription": "استخدم هذا الخيار للنسخ الاحتياطي التلقائي لبيانات DocSpace.",
"AutoBackupHelp": "يُستخدم خيار <strong> النسخ الاحتياطي التلقائي </ strong> لأتمتة عملية النسخ الاحتياطي لبيانات DocSpace لتتمكن من استعادتها لاحقًا إلى خادم محلي.",
"AutoBackupHelpNote": "اختر تخزين البيانات وفترة النسخ الاحتياطي التلقائي والحد الأقصى لعدد النسخ المحفوظة. <br/> <strong> ملاحظة: </ strong> قبل أن تتمكن من حفظ بيانات النسخ الاحتياطي في حساب طرف ثالث (DropBox أو Box.com أو OneDrive أو Google Drive) ، ستحتاج إلى ربط هذا الحساب بالمجلد العام {{organizationName}}.",
"AutoSavePeriod": "فترة الحفظ التلقائي",
"AutoSavePeriodHelp": "الوقت الموضح أدناه يتوافق مع المنطقة الزمنية المحددة في DocSpace.",
"Backup": "النسخ احتياطي",
"BackupCreatedError": "تم مصادفة خطأ. الرجاء الاتصال بالمسؤول الخاص بك.",
"BackupCreatedSuccess": "تم إنشاء النسخة الاحتياطية بنجاح.",
"BackupList": "قائمة النسخ الاحتياطي",
"BackupListWarningText": "إذا قمت بحذف أي عناصر من القائمة ، فسيتم أيضًا حذف الملفات المقابلة لها. لا يمكن التراجع عن هذا الإجراء. لحذف جميع الملفات استخدم الرابط:",
"Branding": "العلامة التجارية",
"BrandingSectionDescription": "حدد معلومات شركتك، وأضف روابط إلى الموارد الخارجية وعناوين البريد الإلكتروني المعروضة في واجهة DocSpace.",
"BrandingSubtitle": "استخدم هذا الخيار لتوفير تجربة على العلامة التجارية للمستخدمين.",
"BreakpointSmallText": "نافذتك صغيرة جدًا لعرض كافة محتويات الصفحة",
"BreakpointSmallTextPrompt": "يرجى تغيير حجم النافذة أو تمكين وضع ملء الشاشة",
"BreakpointWarningText": "هذا القسم متاح فقط في إصدار أجهزة الحاسوب",
"BreakpointWarningTextPrompt": "يرجى استخدام الموقع من خلال جهاز الحاسوب للوصول إلى إعدادات <1> {{sectionName}} </1>.",
"ButtonsColor": "مفاتيح",
"ByApp": "بواسطة تطبيق التحقق",
"BySms": "عن طريق الرسائل القصيرة",
"ChangeLogoButton": "تغيير الشعار",
"Characters": "{{length}} حرفًا",
"ClearBackupList": "احذف جميع النسخ الاحتياطية",
"CompanyInfoSettings": "إعدادات معلومات الشركة",
"CompanyInfoSettingsDescription": "سيتم عرض هذه المعلومات في النافذة <1> {{link}} </1>.",
"ConfirmEmailSended": "تم إرسال بريد التأكيد الإلكتروني إلى {{ownerName}}",
"Custom": "مخصص",
"CustomDomainName": "اسم المجال المخصص",
"CustomDomains": "المجالات المخصصة",
"Customization": "التخصيص",
"CustomizationDescription": "يسمح لك هذا القسم الفرعي بتغيير شكل ومظهر مساحتك. يمكنك استخدام شعار شركتك واسمها ونصها لمطابقة العلامة التجارية لمؤسستك.",
"CustomTitles": "عناوين مخصصة",
"CustomTitlesFrom": "من",
"CustomTitlesSettingsDescription": "تعد إعدادات صفحة الترحيب طريقة لتغيير عنوان المساحة الافتراضي ليتم عرضه في صفحة الترحيب. يتم استخدام نفس الاسم أيضًا للحقل من إشعارات البريد الإلكتروني للمساحة.",
"CustomTitlesSettingsTooltip": "<0>{{welcomeText}}</0> هي طريقة لتغيير عنوان المسافة الافتراضي ليتم عرضه على <2>{{text}}</2> من مساحتك. يتم استخدام نفس الاسم أيضًا في الحقل <4>{{from}}</4> لإشعارات البريد الإلكتروني للمساحة.",
"CustomTitlesSettingsTooltipDescription": "أدخل الاسم الذي تريده في الحقل <1>{{header}}</1>.",
"CustomTitlesText": "صفحة الترحيب",
"CustomTitlesWelcome": "إعدادات صفحة الترحيب",
"DataBackup": "النسخ الاحتياطي للبيانات",
"Deactivate": "تعطيل",
"DeactivateOrDeletePortal": "إلغاء تنشيط أو حذف الفضاء.",
"DefaultSettings": "الإعدادات الافتراضية",
"DeleteDocSpace": "احذف DocSpace",
"DeleteDocSpaceInfo": "قبل حذف المساحة ، يرجى التأكد من إيقاف تشغيل الفوترة التلقائية. يمكنك التحقق من حالة الفوترة التلقائية في<1> بوابة عملاء Stripe الخاصة بك</ 1>.",
"DeleteTheme": "حذف الموضوع",
"DeleteThemeForever": "هل تريد حذف المظهر نهائيًا؟",
"DeleteThemeNotice": "سيتم حذف الموضوع بشكل دائم. لن تتمكن من التراجع عن هذا الإجراء.",
"DeveloperTools": "ادوات المطورين",
"Disabled": "تعطيل",
"DNSSettings": "إعدادات نظام أسماء النطاقات",
"DNSSettingsDescription": "إعدادات نظام أسماء النطاقات هي طريقة لتعيين عنوان موقع ويب بديل لإستضافتك.",
"DNSSettingsMobile": "أرسل طلبك إلى فريق الدعم لدينا ، وسيساعدك المتخصصون لدينا في الإعدادات.",
"DNSSettingsTooltipMain": "تسمح لك إعدادات DNS بتعيين عنوان URL بديل لاستضافتك {{organizationName}}.",
"DNSSettingsTooltipStandalone": "حدد المربع \"خصص اسم النطاق\" وحدد اسم النطاق الخاص بك لمساحة اونلي يو اوفيس (المجموعة المكتبية المتكاملة) في الحقل أدناه. لجعل المعطيات التي قمت بتعيينها نافذة المفعول ، انقر فوق الزر \"حفظ\" في الجزء السفلي من القسم.",
"DownloadCopy": "تنزيل نسخة",
"DownloadReportBtnText": "تنزيل التقرير",
"DownloadReportDescription": "سيتم حفظ التقرير في مستنداتي",
"DownloadStatisticsText": "يمكنك تنزيل التقرير الخاص بالبيانات المتاحة خلال فترة التخزين المحددة لعرض الإحصائيات التفصيلية.",
"EditColorScheme": "تحرير نظام الألوان",
"EditCurrentTheme": "تحرير القالب الحالي",
"Employees": "المستخدمين",
"EmptyBackupList": "لم يتم إنشاء نسخ احتياطية حتى الآن. قم بإنشاء نسخة احتياطية واحدة أو أكثر لكي تظهر في هذه القائمة.",
"EnableAutomaticBackup": "قم بتمكين النسخ الاحتياطي التلقائي.",
"EnableAutomaticBackupDescription": "استخدم هذا الخيار لعمل نسخة احتياطية من بيانات الاستضافة.",
"EnterTitle": "أدخل العنوان",
"EveryDay": "كل يوم",
"EveryMonth": "كل شهر",
"EveryWeek": "كل اسبوع",
"ForcePathStyle": "فرض نمط المسار",
"IntegrationRequest": "هل تفتقد تكاملًا مفيدًا أو مكونًا مفيدًا في اونلي يو اوفيس (المجموعة المكتبية المتكاملة) ل DocSpace؟ اترك طلبًا لفريقنا وسننظر في ذلك.",
"IPSecurity": "أمان بروتوكول الانترنت",
"IPSecurityDescription": "يستخدم <1>IP Security</1> لتقييد تسجيل الدخول إلى الإستضافة من كافة عناوين بروتوكولات الانترنت باستثناء عناوين معينة. يمكنك تعيين عناوين بروتوكولات الانترنت المسموح بها باستخدام إما عناوين بروتوكولات الانترنت الدقيقة بتنسيق IPv4 (#. #. #. # ، حيث يمثل # قيمة رقمية من 0 إلى 255) ، نطاق IP (في #. #. #. # - #. #. #. # تنسيق) ، أو إخفاء CIDR (في تنسيق #. #. #. # / #). لا يعمل أمان برتوكول الانترنت لأصحاب البوابة الإلكترونية، حيث يمكنهم الوصول إلى الإستضافة من أي عنوان برتوكول انترنت. تنطبق القواعد المحددة في قسم لجميع المستخدمين على مسؤولي الوصول الكامل أيضًا. في نفس الوقت ، يمكنك تعيين قواعد إضافية لمسؤولي الوصول الكامل في القسم المقابل.",
"IPSecurityHelper": "يمكنك تعيين عناوين بروتوكولات الانترنت المسموح بها باستخدام إما عناوين بروتوكولات الانترنت الدقيقة بتنسيق IPv4 (#. #. #. # ، حيث يمثل # قيمة رقمية من 0 إلى 255) أو نطاق بروتوكول الانترنت (في شكل #. #. #. # - #.#.#.#).",
"IPSecurityWarningHelper": "أولاً ، تحتاج إلى تحديد بروتوكول الانترنت الحالي الخاص بك أو نطاق بروتوكول الانترنت الذي ينتمي إليه عنوان بروتوكول الانترنت الحالي الخاص بك، وإلا فسيتم حظر الوصول إلى الإستضافة الخاصة بك مباشرةً بعد حفظ الإعدادات. سيتمكن مالك الإستضافة من الوصول إلى الإٍستضافة من أي عنوان بروتوكول للانترنت.",
"LanguageAndTimeZoneSettingsDescription": "تعد إعدادات اللغة والمنطقة الزمنية طريقة لتغيير لغة المساحة لجميع المستخدمين ولتكوين المنطقة الزمنية بحيث يتم عرض جميع الإجراءات بالتاريخ والوقت الصحيحين.",
"LanguageTimeSettingsTooltip": "<0>{{text}}</0> هي طريقة لتغيير لغة الإستضافة لجميع المستخدمين وتهيئة المنطقة الزمنية بحيث يتم عرض جميع الإجراءات الخاصة بإٍستضافة {{organizationName}} بالقيمة الصحيحة للتاريخ و الوقت.",
"LanguageTimeSettingsTooltipDescription": "لتفعيل المعطيات التي قمت بتعيينها ، انقر فوق الزر <1>{{save}}</1> في الجزء السفلي من القسم.<3> {{learnMore}}</3>",
"Lifetime": "الوقت المتبقي (دقيقة)",
"LimitThemesTooltip": "يمكنك فقط إنشاء 3 قوالب مخصصة. لإنشاء واحدة جديدة ، يجب عليك حذف أحد القوالب السابقة.",
"LocalFile": "ملف محلي",
"LoginHistoryTitle": "قم بتسجيل الدخول",
"LoginLatestText": "يتم عرض أحدث نشاط فقط على هذه الصفحة. يتم تخزين البيانات نفسها خلال الفترة المحددة في الحقل أدناه (بحد أقصى 180 يومًا).",
"LoginSubheaderTitle": "يستخدم هذا القسم الفرعي لمراقبة آخر نشاط لتسجيل دخول المستخدم بما في ذلك عمليات تسجيل الدخول الناجحة والمحاولات الفاشلة مع توضيح الأسباب.",
"LogoAbout": "شعار لصفحة \"من نحن",
"LogoCompact": "شعار القائمة اليسرى المدمجة",
"LogoDocsEditor": "شعار ترويسة المحررين",
"LogoDocsEditorEmbedded": "شعار ترويسة المحررين - الوضع المضمن",
"LogoFavicon": "الأيقونة المفضلة",
"LogoLightSmall": "شعار ترويسة الاستضافة",
"LogoLogin": "شعار لصفحة تسجيل الدخول ورسائل البريد الإلكتروني",
"ManagementCategoryDataManagement": "إدارة البيانات",
"ManagementCategoryIntegration": "تكامل",
"ManagementCategorySecurity": "حماية",
"ManualBackupDescription": "استخدم هذا الخيار إذا كنت تريد الحصول على جميع البيانات الموجودة في الاستضافة كملف.",
"ManualBackupHelp": "يتم استخدام خيار<strong> النسخ الاحتياطي للبيانات </ strong>لإجراء نسخ احتياطي لبيانات المساحة لتتمكن من استعادتها لاحقًا إلى الخادم المحلي.",
"MaxCopies": "{{copiesCount}} - الحد الأقصى لعدد النسخ الاحتياطية",
"Migration": "الترحيل",
"NewColorScheme": "نظام ألوان جديد",
"PasswordMinLenght": "الحد الأدنى لطول كلمة المرور",
"Path": "مسار",
"PleaseNote": "يرجى الملاحظة",
"PleaseNoteDescription": "<0>{{pleaseNote}}</0>: سيصبح عنوان إستضافتك القديم غير متاح للمستخدمين الجدد بمجرد النقر فوق الزر <2>{{save}}</2>.",
"Plugins": "الإضافات",
"PortalAccess": "الوصول إلى DocSpace",
"PortalDeactivation": "قم بإلغاء تنشيط DocSpace",
"PortalDeactivationDescription": "استخدم هذا الخيار لإلغاء تنشيط إستضافتك مؤقتًا.",
"PortalDeactivationHelper": "إذا كنت ترغب في إلغاء تنشيط DocSpace هذا ، فسيتم حظر إستضافتك وجميع المعلومات المرتبطة بها حتى لا يتمكن أي شخص من الوصول إليها لفترة معينة. للقيام بذلك ، انقر فوق زر إلغاء التنشيط. سيتم إرسال ارتباط لتأكيد العملية إلى عنوان البريد الإلكتروني لمالك الاستضافة. \\ n في حالة رغبتك في العودة إلى الاستضافة ومتابعة استخدامها ، ستحتاج إلى استخدام الارتباط الثاني الموجود في رسالة البريد الإلكتروني للتأكيد. لذا ، من فضلك ، احتفظ بهذا البريد الإلكتروني في مكان آمن.",
"PortalDeletion": "حذف DocSpace",
"PortalDeletionDescription": "استخدم هذا الخيار لحذف إستضافتك بشكل دائم.",
"PortalDeletionEmailSended": "تم إرسال رابط لتأكيد العملية إلى {{ownerEmail}} (عنوان البريد الإلكتروني لمالك المساحة).",
"PortalDeletionHelper": "إذا كنت لا تعتقد أنك ستستخدم المساحة وترغب في حذف مساحتك نهائيًا ، أرسل طلبك باستخدام زر حذف. من فضلك ، ضع في اعتبارك أنك لن تتمكن من إعادة تنشيط مساحتك أو استعادة أي معلومات مرتبطة بها.",
"PortalIntegration": "تكامل الاستضافة",
"PortalNameEmpty": "اسم الحساب فارغ",
"PortalNameIncorrect": "اسم حساب غير صحيح",
"PortalNameLength": "يجب أن يكون اسم الحساب بين {{minLength}} و {{maxLength}} حرفًا",
"PortalRenaming": "إعادة تسمية DocSpace",
"PortalRenamingDescription": "هنا يمكنك تغيير عنوان مساحتك.",
"PortalRenamingLabelText": "اسم المساحة الجديد",
"PortalRenamingMobile": "أدخل الجزء الذي سيظهر بجوار عنوان إستضافة {{domain}}. يرجى ملاحظة ما يلي: لن يكون عنوان إستضافتك القديم متاحًا للمستخدمين الجدد بمجرد النقر فوق الزر \"حفظ\".",
"PortalRenamingModalText": "أنت على وشك إعادة تسمية البوابة الإلكترونية الخاصة بك. هل أنت متأكد أنك تريد الاستمرار؟",
"PortalRenamingSettingsTooltip": "<0>{{text}}</0> أدخل الجزء الذي سيظهر بجوار عنوان الاستضافة {{domain}}.",
"ProductUserOpportunities": "عرض الملفات الشخصية والمجموعات",
"RecoveryFileNotSelected": "خطأ في الاسترداد. لم يتم تحديد ملف الاسترداد.",
"RestoreBackup": "استرجاع",
"RestoreBackupDescription": "استخدم هذا الخيار لاستعادة إستضافتك من ملف النسخ الاحتياطي المحفوظ مسبقًا.",
"RestoreBackupResetInfoWarningText": "سيتم إعادة تعيين جميع كلمات المرور الحالية. سيتلقى مستخدمو الإستضافة رسالة بريد إلكتروني تحتوي على رابط استعادة الوصول.",
"RestoreBackupWarningText": "ستصبح الإستضافة غير متوفرة أثناء عملية الاستعادة. عند الانتهاء ، ستفقد جميع التغييرات التي تم إجراؤها بعد تاريخ نقطة الاستعادة المحددة.",
"RestoreDefaultButton": "استعادة الى الافتراضي",
"RoomsModule": "غرفة النسخ الاحتياطي",
"RoomsModuleDescription": "يمكنك إنشاء غرفة جديدة خصيصًا للنسخ الاحتياطي ، أو اختيار إحدى الغرف الموجودة ، أو حفظ النسخة في غرفة {{roomName}} الخاصة بهم.",
"SelectFileInGZFormat": "حدد الملف بتنسيق ملف مضغوط",
"SendNotificationAboutRestoring": "إرسال إشعار حول استعادة المساحة للمستخدمين",
"ServerSideEncryptionMethod": "طريقة التشفير من جانب الخادم",
"ServiceUrl": "عنوان موقع الويب للخدمة",
"SessionLifetime": "مدة الجلسة",
"SessionLifetimeDescription": "يسمح <1> مدة الجلسة </ 1> بتعيين الوقت (بالدقائق) قبل أن يحتاج المستخدمون في المساحة إلى إدخال بيانات اعتماد المساحة مرة أخرى للوصول إلى المساحة. بعد الحفظ ، سيتم تسجيل خروج جميع المستخدمين من الفضاء.",
"SessionLifetimeHelper": "بعد الحفظ، سيتم تسجيل خروج جميع المستخدمين من المساحة.",
"SettingPasswordStrength": "تعيين قوة كلمة المرور",
"SettingPasswordStrengthDescription": "<1>إعدادات قوة كلمة المرور</1> هي طريقة لتحديد فعالية كلمة المرور في مقاومة هجمات التخمين والقوة الغاشمة. <br> استخدم شريط <2>الحد الأدنى لطول كلمة المرور</2> لتحديد طول كلمة المرور. حدد المربعات المناسبة أدناه لتحديد مجموعة الأحرف التي يجب استخدامها في كلمة المرور. <br> لجعل المعطيات التي قمت بتعيينها نافذة المفعول ، انقر فوق الزر <3>حفظ</3> في الجزء السفلي من القسم.",
"SettingPasswordStrengthHelper": "استخدم شريط الحد الأدنى لطول كلمة المرور لتحديد طول كلمة المرور. حدد المربعات المناسبة أدناه لتحديد مجموعة الأحرف التي يجب استخدامها في كلمة المرور.",
"ShowFeedbackAndSupport": "إظهار رابط التعليقات والدعم",
"ShowHelpCenter": "إظهار رابط مركز المساعدة",
"ShowVideoGuides": "إظهار رابط لأدلة الفيديو",
"SingleSignOn": "الدخول الموحد",
"SMTPSettings": "إعدادات برتوكول نقل البريد الالكتروني",
"SMTPSettingsDescription": "إعدادات برتوكول نقل البريد الالكتروني ضرورية لإعداد حساب بريد إلكتروني والذي سيتم استخدامه لإرسال إعلامات من البوابة باستخدام خادم برتوكول نقل البريد الالكتروني الخاص بك بدلاً من الخادم الذي تستخدمه {{organizationName}}. يرجى ملء جميع الحقول والنقر فوق الزر \"حفظ\". يمكنك استخدام زر \"إرسال بريد اختبار\" للتحقق مما إذا كانت جميع الإعدادات التي أدخلتها صحيحة وتعمل كما هو مفترض.",
"StoragePeriod": "فترة التخزين",
"StudioTimeLanguageSettings": "إعدادات اللغة والمنطقة الزمنية",
"Submit": "إرسال",
"SuccessfullySaveGreetingSettingsMessage": "تم حفظ إعدادات صفحة الترحيب بنجاح",
"SuccessfullySavePortalNameMessage": "تمت إعادة تسمية الإستضافة بنجاح",
"SuccessfullySaveSettingsMessage": "تم تحديث الإعدادات بنجاح",
"TemporaryStorage": "التخزين المؤقت",
"TemporaryStorageDescription": "يتم تخزين النسخ الاحتياطي في قسم \"النسخ الاحتياطي\" ، وستتمكن من تنزيله في غضون 24 ساعة بعد إنشائه.",
"ThirdPartyAuthorization": "المصادقة مع الطرف الثالث",
"ThirdPartyBodyDescription": "إرشادات مفصلة في <2>مركز المساعدة.</2>",
"ThirdPartyBottomDescription": "هل لديك أي مشاكل؟ اتصل بـ <2>فريق الدعم.</ 2>",
"ThirdPartyPropsActivated": "تم التحديث بنجاح",
"ThirdPartyPropsDeactivated": "تم الإلغاء بنجاح",
"ThirdPartyResource": "مورد الطرف الثالث",
"ThirdPartyResourceDescription": "يمكن حفظ النسخ الاحتياطي في حساب الطرف الثالث الخاص بك (دروب بوكس أو بوكس دوت كوم أو وان درايف أو جوجل درايف). تحتاج إلى توصيل حساب الطرف الثالث الخاص بك (دروب بوكس أو بوكس دوت كوم أو وان درايف أو جوجل درايف) قبل أن تتمكن من حفظ نسختك الاحتياطية هناك.",
"ThirdPartyStorageDescription": "يمكن حفظ النسخ الاحتياطي في وحدة تخزين تابعة لجهة خارجية. قبل ذلك ، تحتاج إلى توصيل الخدمة المقابلة في قسم \"التكامل\". خلاف ذلك ، ستكون الإعدادات التالية غير نشطة.",
"ThirdPartyTitleDescription": "باستخدام مفاتيح المصادقة، يمكنك توصيل خدمات الجهات الخارجية بإٍستضافتك. سجّل الدخول بسهولة باستخدام فيس بوك أو جوجل أو لنكد ان. أضف حسابات دروب بوكس و وان درايف وحسابات أخرى للعمل مع الملفات المخزنة هناك.",
"TimeZone": "وحدة زمنية",
"TrustedMail": "إعدادات مجال البريد الموثوق به",
"TrustedMailDescription": "<1>إعدادات نطاق البريد الموثوق به</ 1> هي طريقة لتحديد خوادم البريد المستخدمة للتسجيل الذاتي للمستخدم. <br> يمكنك إما تحديد الخيار <2>المجالات المخصصة</ 2> وإدخال خادم البريد الموثوق به في الحقل أدناه حتى يتمكن الشخص الذي لديه حساب به من تسجيله بنفسه عن طريق النقر فوق رابط الانضمام في صفحة <3>تسجيل الدخول</ 3> أو تعطيل هذا الخيار. <br> لتفعيل المعلمات التي قمت بتعيينها ، انقر فوق الزر <4>حفظ</4> في الجزء السفلي من القسم.",
"TrustedMailHelper": "يمكنك إما التحقق من خيار المجالات المخصصة وإدخال خادم البريد الموثوق به في الحقل أدناه حتى يتمكن الشخص الذي لديه حساب به من تسجيل نفسه/ها بنفسه عن طريق النقر على رابط الانضمام في صفحة تسجيل الدخول أو تعطيل هذا الخيار.",
"TwoFactorAuth": "المصادقة الثنائية",
"TwoFactorAuthDescription": "تعد <1>المصادقة الثنائية</ 1> طريقة أكثر أمانًا للمستخدمين للدخول إلى DocSpace. بعد إدخال بيانات الاعتماد ، سيتعين على المستخدم إدخال الرمز من رسالة SMS المستلمة إلى الهاتف المحمول بالرقم الذي تم تحديده عند تسجيل الدخول إلى الإستضافة لأول مرة أو الرمز من تطبيق المصادقة. <br> قم بتمكين هذا الخيار لوصول DocSpace أكثر أمانًا من قبل جميع مستخدمي DocSpace. <br> لتطبيق التغييرات التي أجريتها ، انقر فوق الزر <2>حفظ</ 2> أسفل هذا القسم. <br> <3>ملاحظة</ 3>: يمكن إرسال الرسائل النصية القصيرة إذا كان لديك رصيد موجب فقط. يمكنك دائمًا التحقق من رصيدك الحالي في حساب مزود خدمة الرسائل القصيرة الخاص بك. لا تنس تجديد رصيدك في الوقت المناسب.",
"TwoFactorAuthHelper": "ملاحظة: يمكن إرسال الرسائل النصية القصيرة إذا كان لديك رصيد. يمكنك دائمًا التحقق من رصيدك الحالي في حساب مزود خدمة الرسائل القصيرة الخاص بك. لا تنس تجديد رصيدك في الوقت المناسب.",
"UseAsLogoButton": "استخدم كشعار",
"UseDigits": "استخدم الأرقام",
"UseHttp": "استخدم Http",
"UserAgreement": "أؤكد وأريد المتابعة",
"UseSpecialChar": "استخدم أحرفًا خاصة",
"UseUpperCase": "استخدم الاحرف الكبيرة",
"WhiteLabel": "إعدادات الشعار",
"WhiteLabelHelper": "استخدم الصور ذات الخلفية الشفافة (PNG ، SVG، JPG)",
"WhiteLabelSubtitle": "أدخل اسم شركتك وقم بتحميل الشعار وخصص التصميم ليلائم علامتك التجارية.",
"WhiteLabelTooltip": "يتم عرض الأحجام لشاشات ريتينا. بالنسبة لشاشات العرض ذات الدقة القياسية ، سيتم تغيير حجم عرض الشعار وارتفاعه وفقًا لذلك عند التحميل.",
"YouHaveUnsavedChanges": "لقد قمت بعدم حفظ التغييرات",
"YourCurrentDomain": "النطاق الحالي الخاص بك"
}

View File

@ -0,0 +1,18 @@
{
"AddGroupsForSharingButton": "أضف المجموعات",
"AddShareMessage": "اضافة رسالة",
"Comment": "تعليق",
"CopyExternalLink": "انسخ الرابط الخارجي",
"CustomFilter": "تصفية مخصصة",
"DenyAccess": "يمنع الدخول",
"EncryptedFileSharing": "تمت مشاركة الملف <strong>{{title}}</strong> بنجاح",
"ExternalLink": "رابط خارجي",
"FormFilling": "تعبئة النموذج",
"InternalLink": "رابط داخلي",
"Notify users": "أبلغ المستخدمين",
"ReadOnly": "للقراءة فقط",
"ShareEmailBody": "لقد تم منحك حق الوصول إلى المستند {{itemName}}. انقر فوق الرابط أدناه لفتح المستند الآن: {{shareLink}}.",
"ShareEmailSubject": "لقد تم منحك حق الوصول إلى المستند {{itemName}}",
"ShareVia": "شارك عبر",
"SharingSettingsTitle": "إعدادات المشاركة"
}

View File

@ -0,0 +1,62 @@
{
"AddCertificate": "إضافة شهادة",
"AdvancedSettings": "الإعدادات المتقدمة",
"AdvancedSettingsTooltip": "إخفاء صفحة المصادقة الافتراضية وإعادة التوجيه تلقائيًا إلى خدمة Single Sign-On (SSO).",
"AttributeMatching": "تعيين البيانات",
"AttributeMatchingTooltip": "مطابقة سمات Single Sign-On مع إدخالات قسم \"الحسابات\".",
"Binding": "الربط:",
"CertificateExist": "شهادة بنفس نوع الإجراء موجودة بالفعل.",
"ConfirmationText": "سيتم فقدان جميع البيانات التي أدخلتها. هل أنت متأكد أنك ترغب في المتابعة؟",
"CustomEntryButton": "تخصيص تسمية زر تسجيل الدخول",
"CustomEntryTooltip": "التسمية المستخدمة للزر الذي يُستخدم لتسجيل الدخول إلى المساحة باستخدام خدمة تسجيل الدخول الموحدة",
"DownloadMetadataXML": "تنزيل ملف بيانات المزوّد",
"Encryption": "التشفير",
"GenerateCertificate": "إنشاء شهادة جديدة موقعة ذاتيًا ",
"Hide": "إخفاء",
"HideAdditionalParameters": "إخفاء الإعدادات المتقدمة",
"HideAuthPage": "إخفاء صفحة المصادقة",
"idpAuthRequest": "التحقق من توقيع استجابات المصادقة",
"idpCertificates": "شهادات مزود الهوية العامة",
"idpCertificatesTooltip": "شهادات مزود الهوية العامة تستخدم إما للتحقق أو فك التشفير (أو كلاهما) للطلبات والاستجابات من مزود الهوية.",
"idpSignExitRequest": "التحقق من توقيع طلبات الخروج",
"idpSigningAlgorithm": "الخوارزمية الافتراضية للتحقق من تسجيل الدخول",
"idpSignResponseRequest": "تحقق من استجابات تسجيل الخروج",
"LogoutEndpointUrl": "عنوان رابط لنقطة نهاية تسجيل الخروج الفردي لمزود الهوية",
"LogoutEndpointUrlTooltip": "عنوان URL المستخدم لتسجيل الخروج الفردي من جانب مزود الخدمة",
"MetadataLoadError": "لم يتم نقل ملف البيانات الوصفية",
"NameIDFormat": "تنسيق تعريف الهوية",
"NewCertificate": "شهادة جديدة",
"OpenCertificate": "شهادة عامة",
"PlaceholderCert": "لصق أو كتابة نص",
"PrivateKey": "مفتاح سري",
"ProviderURL": "معرف مزود الهوية",
"ProviderURLTooltip": "معرف كيان مزود الهوية (رابط جهة الإصدار)",
"ServiceProviderSettings": "ONLYOFFICE SP اعدادت",
"Show": "عرض",
"ShowAdditionalParameters": "عرض الاعدادات المتقدمة",
"Signing": "التوقيع",
"SigningAndEncryption": "التوقيع والتشفير",
"SignOnEndpointUrl": "عنوان رابط نقطة نهاية تسجيل الدخول الموحد لمزود الهوية.",
"SignOnEndpointUrlTooltip": "عنوان رابط المستخدم للدخول الأحادي من جانب مزود الهوية",
"SPAssertionConsumerURL": "عنوان رابط مُستهلك التأكيد لمزود الخدمة (SP) (يدعم آليتي POST وRedirect للربط).",
"SPAssertionConsumerURLTooltip": "عنوان رابط لمقدم الخدمة حيث يتلقى التأكيدات ويعالجها من مزود الهوية",
"spAuthRequest": "توقيع طلبات المصادقة",
"spCertificates": "شهادات SP",
"spCertificatesTooltip": "شهادات مزود الخدمة المستخدمة لتوقيع وتشفير الطلبات والاستجابات من مقدم الخدمة",
"spDecryptStatements": "فك تشفير التأكيدات",
"SPEntityId": "معرف كيان SP (ارتباط إلى بيانات التعريف لغة التوصيف الموسعة)",
"SPEntityIdTooltip": "عنوان رابط موفر خدمة لغة التوصيف الموسعة والذي يمكن تنزيله واستخدامه بواسطة موفر الهوية لتعريف مقدم الخدمة بشكل لا لبس فيه",
"SpMetadata": "البيانات الوصفية ONLYOFFICE SP",
"spSignExitRequest": "طلبات تسجيل الخروج",
"spSigningAlgorithm": "خوارزمية التوقيع",
"spSignResponseRequest": "استجابات تسجيل الخروج",
"SPSingleLogoutURL": "عنوان رابط لتسجيل الخروج الفردي لـ SP (دعم ربط POST وRedirect):",
"SPSingleLogoutURLTooltip": "عنوان رابط المستخدم لتسجيل الخروج الفردي من جانب مزود الهوية",
"SsoIntro": "يسمح لك قسم الدخول الموحد بتمكين/تعطيل مصادقة الطرف الثالث باستخدام لغة ترميز تأكيد الأمان، وبالتالي توفير طريقة أسرع وأسهل وأكثر أمانًا للوصول إلى المساحة للمستخدمين.",
"StandardDecryptionAlgorithm": "خوارزمية فك التشفير الافتراضية",
"TurnOnSSO": "تمكين مصادقة تسجيل الدخول الموحد",
"TurnOnSSOCaption": "تمكين هذا الخيار إذا كنت تريد إضافة مستخدمين من خدمة المصادقة الموحدة إلى مساحتك تلقائيًا.",
"UploadXML": "تحميل البيانات من لغة التوصيف الموسعة لملىء الحقول المطلوبة تلقائيًا.",
"UploadXMLPlaceholder": "عنوان رابط للبيانات الوصفية لمزود الهوية بتنسيق لغة التوصيف الموسعة",
"UsedFor": "يسخدم من اجل"
}

View File

@ -0,0 +1,6 @@
{
"AppName": "مستندات ONLYOFFICE",
"AppStore": "على App Store",
"GooglePlay": "على Google Play",
"Price": "مجانًا"
}

View File

@ -0,0 +1,74 @@
{
"ArchivingData": "أرشفة البيانات",
"ChooseFromList": "اختر من القائمة",
"ConnectingAccount": "ربط الحساب",
"CopyHere": "انسخ هنا",
"CreateMasterFormFromFile": "إنشاء قالب نموذج من ملف",
"DeleteFromTrash": "تم حذف العناصر المحددة من سلة المهملات بنجاح",
"DeleteOperation": "حذف",
"DeleteSelectedElem": "تم حذف العناصر المحددة بنجاح",
"DownloadApps": "تنزيل التطبيقات",
"DownloadAs": "تحميل بصيغة",
"EncryptedFileSaving": "حفظ ملف مشفر",
"FileLocked": "الملف مؤمن",
"FileProtected": "الملف محمي بكلمة مرور",
"Files": "الملفات",
"FileUnlocked": "ملف مفتوح",
"Folders": "المجلدات",
"FolderSelection": "اختيار مجلد",
"FolderTitleBoxNet": "مجلد Box",
"FolderTitleDocuSign": "حساب DocuSign",
"FolderTitleDropBox": "مجلد Dropbox",
"FolderTitleGoogle": "مجلد Google",
"FolderTitlekDrive": "مجلد kDrive",
"FolderTitleSharePoint": "مجلد SharePoint",
"FolderTitleSkyDrive": "مجلد OneDrive",
"FolderTitleWebDav": "مجلد WebDAV",
"FolderTitleYandex": "مجلد Yandex",
"FormTemplates": "قوالب جاهزة",
"LinkCopySuccess": "تم نسخ الرابط إلى الحافظة",
"LinkValidTime": "هذا الرابط صالح لمدة {{days_count}} أيام فقط.",
"MobileAndroid": "احصل على ONLYOFFICE Documents على Google Play",
"MobileIos": "حمّل ONLYOFFICE Documents من المتجر",
"MobileLinux": "حمّل ONLYOFFICE Desktop Editors لنظام لينوكس",
"MobileMac": "حمّل ONLYOFFICE Desktop Editors لنظام ماك",
"MobileWin": "حمّل ONLYOFFICE Desktop Editors لنظام ويندوز",
"MoveHere": "انقل إلى هنا",
"MoveToOperation": "جارٍ النقل",
"NewForm": "قوالب جاهزة",
"Other": "آخر",
"OwnerChange": "تغيير المالك",
"Presentations": "العروض التقديمية",
"Remove": "إزالة",
"RoleCommentator": "معلّق",
"RoleCommentatorDescription": "العمليات المتاحة على الملفات الحالية: العرض والتعليق.",
"RoleDocSpaceAdminDescription": "يمكن لمسؤولي الموقع الوصول إلى إعدادات وإدارة وأرشفة الغرف، ودعوة مستخدمين جدد، وتعيين أدوار أقل من مستواهم. يحصل جميع المسؤولين على وصول إلى القسم الشخصي.",
"RoleEditor": "محرر",
"RoleEditorDescription": "العمليات المتاحة على الملفات الحالية: العرض والتحرير وملء النماذج والمراجعة والتعليق.",
"RoleFormFiller": "معبّئ النماذج",
"RoleFormFillerDescription": "العمليات المتاحة على الملفات الحالية: العرض وملء النماذج والمراجعة والتعليق.",
"RolePowerUserDescription": "يمكن للمستخدمين ذوي المهارات المتقدمة إنشاء وتحرير الملفات في الغرفة، ولكن لا يمكنهم إنشاء غرف جديدة أو إدارة المستخدمين أو الوصول إلى الإعدادات.",
"RoleReviewer": "المراجع",
"RoleReviewerDescription": "العمليات على الملفات الحالية: العرض والمراجع والتعليق.",
"RoleRoomAdminDescription": "يمكن لمسؤولي الغرف إنشاء وإدارة الغرف المخصصة لهم، ودعوة مستخدمين جدد وتعيين أدوار أقل من مستواهم. يحصل جميع المسؤولين على وصول إلى القسم الشخصي.",
"RoleUserDescription": "يمكن للمستخدمين الوصول فقط إلى الغرف التي يتم دعوتهم لها من قِبل المسؤولين. لا يمكنهم إنشاء غرف أو مجلدات أو ملفات خاصة بهم.",
"RoleViewer": "عارض",
"RoleViewerDescription": "عرض الملفات",
"SearchByOwner": "البحث حسب المالك",
"Spreadsheets": "جداول البيانات",
"SubNewForm": "فارغ",
"SubNewFormFile": "من ملف نصي",
"ThirdPartyInfo": "تغيير معلومات الجهة الخارجية",
"ThirdPartyTitle": "الخدمات الجهة الخارجية",
"TitleShowActions": "عرض إجراءات الملف",
"TitleShowFolderActions": "عرض إجراءات المجلد",
"TypeTitleBoxNet": "Box",
"TypeTitleDocuSign": "DocuSign",
"TypeTitleDropBox": "Dropbox",
"TypeTitleGoogle": "Google Drive",
"TypeTitlekDrive": "kDrive",
"TypeTitleSharePoint": "SharePoint",
"TypeTitleSkyDrive": "OneDrive",
"TypeTitleWebDav": "WebDAV",
"TypeTitleYandex": "Yandex.Disk"
}

View File

@ -0,0 +1,8 @@
{
"CancelUpload": "تمت مقاطعة الرفع. لم يتم رفع بعض الملفات.",
"EnterPassword": "أدخل كلمة المرور",
"HideInput": "اخفاء",
"Ready": "تم",
"UploadAndConvert": "رفع وتحويل الملفات",
"Uploads": "الملفات المرفوعة"
}

View File

@ -0,0 +1,4 @@
{
"EditComment": "تعديل التعليق",
"Version": "الإصدار {{version}}"
}

View File

@ -0,0 +1,3 @@
{
"Add": "إضافة"
}

View File

@ -0,0 +1,16 @@
{
"Desc": "يرجى تعيين بيانات تسجيل DocSpace.",
"Domain": "النطاق",
"ErrorEmail": "عنوان بريد إلكتروني غير صالح",
"ErrorInitWizard": "الخدمة غير متوفرة حاليًا، يُرجى المحاولة مرة أخرى لاحقًا.",
"ErrorInitWizardButton": "حاول مرة أخرى",
"ErrorLicenseBody": "الترخيص غير صالح. تأكد من اختيار الملف الصحيح.",
"ErrorPassword": "كلمة المرور لا تفي بالمتطلبات",
"ErrorUploadLicenseFile": "اختر ملف ترخيص",
"GeneratePassword": "إنشاء كلمة مرور",
"License": "قبول شروط اتفاقية الترخيص",
"LicenseLink": "اتفاقيات الترخيص",
"PlaceholderLicense": "ملف الترخيص الخاص بك",
"Timezone": "المنطقة الزمنية",
"WelcomeTitle": "مرحبًا بك في DocSpace الخاص بك!"
}

Some files were not shown because too many files have changed in this diff Show More