diff --git a/Dockerfile b/Dockerfile index f1fa4e32df3a4ff776a5fe2177fecb04b42f273f..f6dba3efd9f826c75603298d1712945637019a0b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,38 +1,41 @@ -FROM ubuntu:18.04 +FROM node:10-alpine LABEL maintainer="benoit [dot] lavenier [at] e-is [dot] pro" +LABEL version="1.6.3" +LABEL description="Cesium Wallet for Äž1 libre currency" + +ARG CESIUM_VER="1.6.3" ENV DEBIAN_FRONTEND=noninteractive \ NODE_VERSION=10.20.0 \ NPM_VERSION=6.14.4 \ YARN_VERSION=1.22.4 \ - IONIC_CLI_VERSION=6.5.0 \ + IONIC_CLI_VERSION=6.6.0 \ CORDOVA_VERSION=8.1.2 \ GRADLE_VERSION=4.10.3 \ - GULP_VERSION=2.2.0 + GULP_VERSION=3.9.1 # Install basics -RUN apt-get update && \ - apt-get install -y git wget curl unzip build-essential software-properties-common ruby ruby-dev ruby-ffi gcc make python && \ - curl --retry 3 -SLO "http://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.gz" && \ - tar -xzf "node-v$NODE_VERSION-linux-x64.tar.gz" -C /usr/local --strip-components=1 && \ - rm "node-v$NODE_VERSION-linux-x64.tar.gz" - -RUN mkdir -p /home/root && \ - chmod -R 777 /home/root -WORKDIR /home/root - -# Install global nodeJS dependencies -RUN npm install -g npm@"$NPM_VERSION" && \ - npm install -g yarn@"$YARN_VERSION" gulp@"$GULP_VERSION" cordova@"$CORDOVA_VERSION" cordova-res@"$CORDOVA_RES_VERSION" @ionic/cli@"$IONIC_CLI_VERSION" && \ - npm cache clear --force - -# Install source code -#RUN git config --global user.email "user.name@domain.com" && \ -# git config --global user.name "User Name" && \ -RUN git clone https://git.duniter.org/clients/cesium-grp/cesium.git && \ - cd cesium && \ - yarn install - -WORKDIR cesium +RUN apk update && \ + apk add ca-certificates wget curl git && \ + update-ca-certificates && \ + apk add --update python make g++ + +# create group and user cesium +RUN addgroup -S -g 1111 cesium && \ + adduser -SD -h /cesium -G cesium -u 1111 cesium +#RUN mkdir -p /var/lib/cesium /etc/cesium && chown cesium:cesium /var/lib/cesium /etc/cesium + +# Install global dependencies +RUN yarn global add gulp@"$GULP_VERSION" @ionic/cli@"$IONIC_CLI_VERSION" + +# copy source tree +COPY ./ ./ + +# Install project dependencies +# Workaround need for node-sass (- )see https://github.com/yarnpkg/yarn/issues/4867) +RUN yarn install --ignore-engines && \ + yarn remove node-sass && yarn add node-sass + +WORKDIR /cesium EXPOSE 8100 35729 CMD ["yarn", "run", "start"] diff --git a/config.xml b/config.xml index 0fc189edc00d7dd3e8ce48108498e0c275c96658..1e598a418c258fe1b52595239fb17c75e30c206c 100644 --- a/config.xml +++ b/config.xml @@ -1,5 +1,5 @@ <?xml version='1.0' encoding='utf-8'?> -<widget android-versionCode="106030" id="fr.duniter.cesium" ios-CFBundleIdentifier="org.duniter.cesium" version="1.6.3" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0"> +<widget android-versionCode="106050" id="fr.duniter.cesium" ios-CFBundleIdentifier="org.duniter.cesium" version="1.6.5" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0"> <name>Cesium</name> <description> An simple App for Duniter wallet diff --git a/doc/build_ios.md b/doc/build_ios.md index ddcaf2f84ef1787f31dd219e917f5f80da93a872..155d549d0168a642babaf63b31be58e1793ca6a8 100644 --- a/doc/build_ios.md +++ b/doc/build_ios.md @@ -82,7 +82,7 @@ npm install -g nw-gyp node-pre-gyp 2. Install global dependencies (see [Development Guide](./development_guide.md) for versions to used) : ``` -npm install -g yarn gulp cordova@9.0.0 ionic@1.7.16 +npm install -g yarn gulp@3.9.1 cordova @ionic/cli@6.6.0 ``` 3. Install project dependencies : diff --git a/doc/changelog/changelog_v1.6.2.md b/doc/changelog/changelog_v1.6.2.md index 9063b02335990b977e2e06dde92683b20929c48c..fa61e29e75726d646581aab1ab7510e7f8030349 100644 --- a/doc/changelog/changelog_v1.6.2.md +++ b/doc/changelog/changelog_v1.6.2.md @@ -25,6 +25,8 @@ - [fix] Unable to set avatar and page's pictures - fix [#904](https://git.duniter.org/clients/cesium-grp/cesium/-/issues/904) +## Development environment + ### Build from source Before building Cesium, please launch this commands: diff --git a/doc/changelog/changelog_v1.6.5.md b/doc/changelog/changelog_v1.6.5.md new file mode 100644 index 0000000000000000000000000000000000000000..c8ec8a112289104ec99d978bf0d4752e90a6d89b --- /dev/null +++ b/doc/changelog/changelog_v1.6.5.md @@ -0,0 +1,10 @@ +# Version v1.6.5 + +## All platforms + +- [fix] Unable to report abuse, or like, a profile, if not login - fix [#913](https://git.duniter.org/clients/cesium-grp/cesium/-/issues/913) + +## Android + +- [fix] Fix startup error, under Android 10 (API 28) - [#898](https://git.duniter.org/clients/cesium-grp/cesium/-/issues/898) +- [fix] Fix 'findIndex' error on transaction history, under Android 4.4 (API 19) - fix [#912](https://git.duniter.org/clients/cesium-grp/cesium/-/issues/912) diff --git a/doc/development_guide.md b/doc/development_guide.md index 162087e71b5d4a4206598e25d86509593e8cbe48..596b3a4faf2f7544fa237bc20936dd548b6316f6 100644 --- a/doc/development_guide.md +++ b/doc/development_guide.md @@ -27,7 +27,7 @@ To build Cesium, you will have to: 3. Installing node build tools, as global dependencies: ```bash - npm install -g yarn gulp cordova @ionic/cli web-ext + npm install -g yarn gulp@3.9.1 cordova@8.1.2 @ionic/cli@6.6.0 web-ext ``` ## Get the source code and dependencies diff --git a/doc/fr/development_tutorial-01.md b/doc/fr/development_tutorial-01.md index 3b13012fc44f2175adfc26f57585ff133622fd0b..48d957ab0b70df5d710bb82e4cea70bbfd2c5e02 100644 --- a/doc/fr/development_tutorial-01.md +++ b/doc/fr/development_tutorial-01.md @@ -127,7 +127,7 @@ cd cesium Puis, lancez le téléchargement et l'installation des modules Cesium à l'aide de la commande : ```bash -npm install -g yarn cordova ionic@1.7.16 +npm install -g yarn gulp@3.9.1 cordova@8.1.2 @ionic/cli@6.6.0 web-ext ``` Puis pour les dépendances non globales : diff --git a/install.sh b/install.sh index 719c4af6b6295d465f24b6de23354bf056670df3..c0f955ebb6a216a058f0846db14b9418a74c5c37 100755 --- a/install.sh +++ b/install.sh @@ -15,7 +15,7 @@ if [ "_$CESIUM_DIR" = "_" ]; then fi latest_version() { - echo "v1.6.3" #lastest + echo "v1.6.5" #lastest } api_release_url() { diff --git a/package.json b/package.json index af88040120dedc9aad88bd36a7101da1cadf3210..36d78ed09794828c6dd6fda1a42d46264ed60598 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cesium", - "version": "1.6.3", + "version": "1.6.5", "description": "Cesium Wallet for G1 libre currency", "author": "Benoit Lavenier <benoit.lavenier@e-is.pro>", "license": "AGPL-3.0", @@ -101,10 +101,12 @@ "cordova-plugin-whitelist": "^1.3.4", "cordova-plugin-x-toast": "^2.7.2", "ionic-plugin-keyboard": "^2.2.1", - "phonegap-plugin-barcodescanner": "^8.1.0" + "node-sass": "^4.13.1", + "phonegap-plugin-barcodescanner": "^8.1.0", + "uuid": "3.2.1" }, "devDependencies": { - "@ionic/cli": "^6.5.0", + "@ionic/cli": "^6.6.0", "@ionic/v1-toolkit": "^3.1.2", "cordova-uglify": "^0.3.4", "del": "^3.0.0", @@ -144,7 +146,6 @@ "lazypipe": "^1.0.2", "merge2": "^1.3.0", "mv": "^2.1.1", - "node-sass": "^4.13.0", "playup": "^1.1.0", "vinyl-fs": "^3.0.3", "yargs": "^5.0.0" @@ -223,4 +224,4 @@ "engines": { "yarn": ">= 1.0.0" } -} \ No newline at end of file +} diff --git a/platforms/android b/platforms/android index c7a8b1fcbea7e08dc1a10a948c21bbf7f2e18f41..b1d608bdb8b49d8a71d13efe24ce96c0619c6d23 160000 --- a/platforms/android +++ b/platforms/android @@ -1 +1 @@ -Subproject commit c7a8b1fcbea7e08dc1a10a948c21bbf7f2e18f41 +Subproject commit b1d608bdb8b49d8a71d13efe24ce96c0619c6d23 diff --git a/resources/web-ext/manifest.json b/resources/web-ext/manifest.json index 7eccfba85faf8bcc7587dd93230a9c7d476bdaa4..31f0b51a89a9b41a85def0e2e196afd32296a00e 100644 --- a/resources/web-ext/manifest.json +++ b/resources/web-ext/manifest.json @@ -1,7 +1,7 @@ { "name": "Cesium", "short_name": "Cesium", - "version": "1.6.3", + "version": "1.6.5", "description": "Manage your Duniter Wallet on a libre currency, like Äž1", "background": { "scripts": ["background.js"] diff --git a/scripts/docker-build.sh b/scripts/docker-build.sh new file mode 100755 index 0000000000000000000000000000000000000000..15f15ac935af1e862f86a6541d569820b40fdb9b --- /dev/null +++ b/scripts/docker-build.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +# Get to the root project +if [[ "_" == "_${PROJECT_DIR}" ]]; then + SCRIPT_DIR=$(dirname $0) + PROJECT_DIR=$(cd ${SCRIPT_DIR}/.. && pwd) + export PROJECT_DIR +fi; + +cd ${PROJECT_DIR} + +CMD="sudo docker build ${PROJECT_DIR} -t cesium/release" +echo "Executing: $CMD" +$CMD diff --git a/scripts/docker-start.sh b/scripts/docker-start.sh index d9a1d17197768e0cbe383c2954533acea888ea56..367d4e80c50096344f8ed44a6b41abfc009932a8 100755 --- a/scripts/docker-start.sh +++ b/scripts/docker-start.sh @@ -9,7 +9,6 @@ fi; cd ${PROJECT_DIR} -PWD=$(pwd) -CMD="sudo docker run -ti --rm -p 8100:8100 -p 35729:35729 -v $PWD:/cesium:rw cesium:release" +CMD="sudo docker run -ti --rm -p 8100:8100 -p 35729:35729 -v ${PROJECT_DIR}:/cesium:rw cesium:release" echo "Executing: $CMD" $CMD diff --git a/scripts/env-android.sh b/scripts/env-android.sh index f929fa4e2da88aae6b7e07b4620195db310c435c..32d7d52ddafc864aac662fa50df052afcfd23dcb 100755 --- a/scripts/env-android.sh +++ b/scripts/env-android.sh @@ -9,9 +9,7 @@ fi; # Preparing environment . ${PROJECT_DIR}/scripts/env-global.sh -if [[ $? -ne 0 ]]; then - exit 1 -fi +[[ $? -ne 0 ]] && exit 1 if [[ "_" == "_${CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL}" ]]; then echo "Missing Gradle distribution URL - please export env variable 'CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL'" @@ -36,9 +34,7 @@ fi if [[ ! -d "${ANDROID_SDK_TOOLS_ROOT}" ]]; then cd "${PROJECT_DIR}/scripts" ./install-android-sdk-tools.sh - if [[ $? -ne 0 ]]; then - exit 1 - fi + [[ $? -ne 0 ]] && exit 1 fi # Install Gradle @@ -49,13 +45,9 @@ if [[ "_" == "_$(which gradle)" && ! -d "${GRADLE_HOME}" ]]; then GRADLE_PARENT=$(dirname $GRADLE_HOME) test -e "${GRADLE_PARENT}" || mkdir -p ${GRADLE_PARENT} test -e "${GRADLE_PARENT}/gradle-${GRADLE_VERSION}" || unzip -qq gradle-${GRADLE_VERSION}-all.zip -d "${GRADLE_PARENT}" - if [[ $? -ne 0 ]]; then - exit 1 - fi + [[ $? -ne 0 ]] && exit 1 test -e "${GRADLE_HOME}" || mv "${GRADLE_PARENT}/gradle-${GRADLE_VERSION}" "${GRADLE_HOME}" - if [[ $? -ne 0 ]]; then - exit 1 - fi + [[ $? -ne 0 ]] && exit 1 test -e "${GRADLE_PARENT}/gradle-${GRADLE_VERSION}" || rm "${GRADLE_PARENT}/gradle-${GRADLE_VERSION}" fi @@ -65,18 +57,16 @@ if [[ ! -d "${PROJECT_DIR}/platforms/android" ]]; then echo "Adding Cordova Android platform..." cd "${PROJECT_DIR}" ionic cordova prepare android --color --verbose - if [[ $? -ne 0 ]]; then - exit 1 - fi + [[ $? -ne 0 ]] && exit 1 fi # Copy local files if [[ -d "${PROJECT_DIR}/.local/android" ]]; then echo "Copying files from directory '${PROJECT_DIR}/.local/android' into '${PROJECT_DIR}/platforms/android'..." cp -rf ${PROJECT_DIR}/.local/android/* ${PROJECT_DIR}/platforms/android - if [[ $? -ne 0 ]]; then - exit 1 - fi + [[ $? -ne 0 ]] && exit 1 else echo "No directory '${PROJECT_DIR}/.local/android' found. Please create it, with a file 'release-signing.properties' for release signing" fi + + echo "Environment is ready!" diff --git a/scripts/env-global.sh b/scripts/env-global.sh index 41642fbbabd503e607bcaf37a60c8fb93bb68afb..32ce4400ab7e59330af0fb99cd1bc79f82555b43 100755 --- a/scripts/env-global.sh +++ b/scripts/env-global.sh @@ -24,8 +24,9 @@ NODEJS_VERSION=10 ANDROID_NDK_VERSION=r19c ANDROID_SDK_VERSION=r29.0.2 -ANDROID_SDK_ROOT=/usr/lib/android-sdk ANDROID_SDK_TOOLS_VERSION=4333796 +ANDROID_SDK_ROOT=/usr/lib/android-sdk +ANDROID_SDK_TOOLS_ROOT=${ANDROID_SDK_ROOT}/build-tools ANDROID_OUTPUT_APK=${PROJECT_DIR}/platforms/android/build/outputs/apk ANDROID_OUTPUT_APK_DEBUG=${ANDROID_OUTPUT_APK}/debug ANDROID_OUTPUT_APK_RELEASE=${ANDROID_OUTPUT_APK}/release @@ -33,10 +34,10 @@ ANDROID_OUTPUT_APK_RELEASE=${ANDROID_OUTPUT_APK}/release DIST_WEB=${PROJECT_DIR}/dist/web/build DIST_ANDROID=${PROJECT_DIR}/dist/android -# Addons Modzilla ID +# Addons Mozilla Web extension ID WEB_EXT_ID="{6f9922f7-a054-4609-94ce-d269993246a5}" -#JAVA_HOME= +#JAVA_HOME= /!\ TODO Should be define in your <project>/.local/env.sh file GRADLE_VERSION=4.10.3 GRADLE_HOME=${HOME}/.gradle/${GRADLE_VERSION} @@ -95,9 +96,8 @@ if [[ ! -d "${ANDROID_SDK_ROOT}" ]]; then fi fi -# Export Android SDK tools to path -too=${ANDROID_SDK_ROOT}/tools -PATH=${ANDROID_SDK_TOOLS_ROOT}/bin:${GRADLE_HOME}/bin:$PATH +# Add Java, Android SDK tools to path +PATH=${ANDROID_SDK_TOOLS_ROOT}/bin:${GRADLE_HOME}/bin:${JAVA_HOME}/bin$:$PATH # Export useful variables export PATH \ @@ -121,9 +121,7 @@ if [[ -d "${NVM_DIR}" ]]; then # Or install it if [[ $? -ne 0 ]]; then nvm install ${NODEJS_VERSION} - if [[ $? -ne 0 ]]; then - exit 1; - fi + [[ $? -ne 0 ]] && exit 1 fi else echo "nvm (Node version manager) not found (directory ${NVM_DIR} not found). Please install, and retry" diff --git a/scripts/release-sign-extension.sh b/scripts/release-sign-extension.sh index 8013cd28df7d09c50b5c797755e63c7443bbc552..ebf8c4ab1a403535570357d1cb6dcbf421edc28e 100755 --- a/scripts/release-sign-extension.sh +++ b/scripts/release-sign-extension.sh @@ -66,5 +66,5 @@ if [[ -f "${XPI_FILE}" ]]; then cd ${PROJECT_DIR}/dist/web/build/ # add a 'v' before version - mv ${XPI_BASENAME} ${PROJECT_NAME}-v$current-an+fx.xpi + mv ${XPI_BASENAME} ${PROJECT_NAME}-v$current-extension-firefox.xpi fi diff --git a/scripts/release-to-github.sh b/scripts/release-to-github.sh index 88f19c402cb26a9d2595c080e89a019bbc8d5d90..24fa6f37933f3ce759fe1bccb7a9d53fbdd1c077 100755 --- a/scripts/release-to-github.sh +++ b/scripts/release-to-github.sh @@ -129,8 +129,8 @@ else fi # Upload web extension (XPI) file -WEB_EXT_XPI_BASENAME="${PROJECT_NAME}-v$current-an+fx.xpi" -WEB_EXT_XPI_FILE="${DIST_WEB}/${WEB_EXT_BASENAME}" +WEB_EXT_XPI_BASENAME="${PROJECT_NAME}-v$current-extension-firefox.xpi" +WEB_EXT_XPI_FILE="${DIST_WEB}/${WEB_EXT_XPI_BASENAME}" if [[ -f "${WEB_EXT_XPI_FILE}" ]]; then result=$(curl -s -H ''"$GITHUT_AUTH"'' -H 'Content-Type: application/zip' -T "${WEB_EXT_XPI_FILE}" "${upload_url}?name=${WEB_EXT_XPI_BASENAME}") browser_download_url=$(echo "$result" | grep -P "\"browser_download_url\":[ ]?\"[^\"]+" | grep -oP "\"browser_download_url\":[ ]?\"[^\"]+" | grep -oP "https://[A-Za-z0-9/.-]+") diff --git a/www/i18n/locale-es-ES.json b/www/i18n/locale-es-ES.json index 62b325303741846069636610dde394307d705fc8..40f7d7ef817c2152adb3355e9485b143b043eb9f 100644 --- a/www/i18n/locale-es-ES.json +++ b/www/i18n/locale-es-ES.json @@ -103,6 +103,7 @@ "TRANSACTIONS": "Mis transacciones" }, "ABOUT": { + "BTN_OPEN_DEV_WINDOW": "Abrir ventana de depuración", "TITLE": "Acerca de", "LICENSE": "Software <b>libre</b> (licencia GNU AGPLv3).", "LATEST_RELEASE": "Existe una <b>versión más nueva</b> de {{'COMMON.APP_NAME' | translate}} (<b>v{{version}}</b>)", @@ -115,16 +116,19 @@ "REPORT_ISSUE": "Reportar un problema" }, "HOME": { + "FEED_SOURCE": "Fuente", + "READ_MORE": "Leer más", + "SHOW_ALL_FEED": "Ver todo", "TITLE": "Cesium", - "WELCOME": "Le damos la bienvenida a la aplicación Cesium !", + "WELCOME": "¡Bienvenida/o a la aplicación Cesium!", "MESSAGE": "Reciba y envÃe moneda libre {{currency|abbreviate}} fácilmente", "BTN_CURRENCY": "Explorar la moneda", "BTN_ABOUT": "Acerca de", "BTN_HELP": "Ayuda en lÃnea", - "REPORT_ISSUE": "anomalÃa", + "REPORT_ISSUE": "Reportar anomalÃa", "NOT_YOUR_ACCOUNT_QUESTION": "¿No es suya la cuenta <b><i class=\"ion-key\"></i> {{pubkey|formatPubkey}}</b>?", "BTN_CHANGE_ACCOUNT": "Desconectar esta cuenta", - "CONNECTION_ERROR": "Nodo <b>{{servidor}}</b> inalcanzable o dirección inválida.<br/><br/>Compruebe su conexión a Internet, o nodo de conmutación <a class=\"positive\" ng-click=\"doQuickFix('settings')\">en los ajustes</a>." + "CONNECTION_ERROR": "Nodo <b>{{server}}</b> inalcanzable o dirección inválida.<br/><br/>Compruebe su conexión a Internet, o nodo de conmutación <a class=\"positive\" ng-click=\"doQuickFix('settings')\">en los ajustes</a>." }, "SETTINGS": { "TITLE": "Ajustes", @@ -133,12 +137,14 @@ "NETWORK_SETTINGS": "Red", "PEER": "Dirección del nodo Duniter", "PEER_CHANGED_TEMPORARY": "Dirección utilizada temporalmente", + "PEER_SHORT": "Nodo Duniter", "PERSIST_CACHE": "Conservar los datos de navegación (experimental)", "PERSIST_CACHE_HELP": "Permite una navegación más rápida, conservando localmente los datos recibidos, para usar de una sesión a otra.", "USE_LOCAL_STORAGE": "Activar el almacenamiento local", "USE_LOCAL_STORAGE_HELP": "Permitir conservar sus ajustes", "WALLETS_SETTINGS": "Mis monederos", "USE_WALLETS_ENCRYPTION": "Cifrar el listado", + "USE_WALLETS_ENCRYPTION_HELP": "Permite proteger la lista de sus monederos (mediante cifrado), exigiendo una autenticación para acceder.", "ENABLE_HELPTIP": "Activar la ayuda contextual", "ENABLE_UI_EFFECTS": "Activar los efectos visuales", "HISTORY_SETTINGS": "Transacciones de la cuenta", @@ -157,14 +163,16 @@ "HOUR": "Después de {{value}}h de inactividad", "ALWAYS": "Al finalizar la sesión" }, - "KEYRING_FILE": "Archivo de llavero", + "KEYRING_FILE": "Archivo de llaves", + "KEYRING_FILE_HELP": "Le permite <b>conectarse</b> automáticamente en cada inicio <br/>e incluso de <b>autenticarse</b> (solo si \"Caducidad de la autenticación\" está configurada en modo: \"al finalizar la sesión\").", "REMEMBER_ME": "Recordarme", "REMEMBER_ME_HELP": "Permite mantenerse siempre conectado (no recomendado), conservando localmente la llave pública.", "PLUGINS_SETTINGS": "Extensiones", - "BTN_RESET": "Restaurar los valores por defecto" , + "BTN_RESET": "Restaurar los valores por defecto", "EXPERT_MODE": "Modo experto", "EXPERT_MODE_HELP": "Permite una visualización más detallada", "BLOCK_VALIDITY_WINDOW": "Tiempo de incertitud de los bloques", + "DISABLE_HELPTIP": "Desactivar la opción de ayuda contextual", "BLOCK_VALIDITY_WINDOW_SHORT": "Tiempo de incertitud", "BLOCK_VALIDITY_WINDOW_HELP": "Tiempo de espera antes de considerar una información como validada", "BLOCK_VALIDITY_OPTION": { @@ -407,7 +415,7 @@ "TITLE": "<i class=\"icon ion-locked\"></i> Conexión", "SCRYPT_FORM_HELP": "Ingrese sus credenciales.<br>Recuerde comprobar que la llave pública pertenece a su cuenta.", "PUBKEY_FORM_HELP": "Por favor ingrese una llave pública de cuenta:", - "FILE_FORM_HELP": "Elija el archivo de llavero a usar:", + "FILE_FORM_HELP": "Elija el archivo de llaves a usar:", "SCAN_FORM_HELP": "Escanee el código QR de un monedero.", "SALT": "Identificador secreto", "SALT_HELP": "Identificador secreto", @@ -420,7 +428,7 @@ "CREATE_ACCOUNT": "Crear una cuenta", "CREATE_FREE_ACCOUNT": "Crear una cuenta gratis", "FORGOTTEN_ID": "¿Olvidó su contraseña?", - "ASSOCIATED_PUBKEY": "Llave pública del llavero:", + "ASSOCIATED_PUBKEY": "Llave pública del archivo de llaves:", "BTN_METHODS": "Otros métodos", "BTN_METHODS_DOTS": "Otras vÃas…", "METHOD_POPOVER_TITLE": "Métodos", @@ -435,7 +443,7 @@ "METHOD": { "SCRYPT_DEFAULT": "Estándar (por defecto)", "SCRYPT_ADVANCED": "Aleatoriedad avanzada", - "FILE": "Archivo llavero", + "FILE": "Archivo de llaves", "PUBKEY": "Llave pública o seudónimo", "SCAN": "Escanear un código QR" }, @@ -454,6 +462,99 @@ "HELP": "Formato de archivo esperado: <b>.yml</b> o <b>.dunikey</b> (tipo PubSec, WIF o EWIF)." } }, + "API": { + "COMMON": { + "CONNECTION_ERROR": "Nodo <b>{{server}}</b> inalcanzable o dirección inválida.<br/><br/>Verifique su conexión a Internet, o contacte con la administración del sitio.</a>.", + "LINK_DOC": "Documentación API", + "LINK_DOC_HELP": "Documentación para desarrolladores", + "LINK_STANDARD_APP": "Versión clásica", + "LINK_STANDARD_APP_HELP": "Abrir la versión clásica de {{'COMMON.APP_NAME'|translate}}" + }, + "DOC": { + "AVAILABLE_PARAMETERS": "Lista de parámetros disponibles :", + "DEMO_CANCELLED": "<i class=\"icon ion-close\"></i> Cancelado por el usuario", + "DEMO_DIVIDER": "Probar", + "DEMO_HELP": "Para probar este servicio, haga clic en este botón. El resultado se mostrará debajo.", + "DEMO_RESULT": "Resultado retornado por la llamada :", + "DEMO_RESULT_PEER": "Dirección del nodo utilizado :", + "DEMO_SUCCEED": "<i class=\"icon ion-checkmark\"></i> ¡ Éxito !", + "DESCRIPTION_DIVIDER": "Descripción", + "INTEGRATE_CODE": "Código :", + "INTEGRATE_DIVIDER": "Integrar", + "INTEGRATE_PARAMETERS": "Parámetros", + "INTEGRATE_RESULT": "Previsualización del resultado :", + "PARAMETERS_DIVIDER": "Parámetros", + "TRANSFER": { + "DESCRIPTION": "Desde una web (ej: tienda online) puede delegar el pago en moneda libre con la API de Cesium. Para eso, simplemente ponga un link a la siguiente dirección :", + "EXAMPLE_BUTTON": "Botón HTML", + "EXAMPLE_BUTTON_BG_COLOR": "Color de fondo", + "EXAMPLE_BUTTON_BG_COLOR_HELP": "Ejemplo : #fbc14c, black, lightgrey, rgb(180,180,180)", + "EXAMPLE_BUTTON_DEFAULT_STYLE": "Estilo personalizado", + "EXAMPLE_BUTTON_DEFAULT_TEXT": "Pagar en {{currency|currencySymbol}}", + "EXAMPLE_BUTTON_FONT_COLOR": "Color del texto", + "EXAMPLE_BUTTON_FONT_COLOR_HELP": "Ejemplo : black, orange, rgb(180,180,180)", + "EXAMPLE_BUTTON_ICON_CESIUM": "Logo Cesium", + "EXAMPLE_BUTTON_ICON_DUNITER": "Logo Duniter", + "EXAMPLE_BUTTON_ICON_G1_BLACK": "Logo Äž1 (negro)", + "EXAMPLE_BUTTON_ICON_G1_COLOR": "Logo Äž1", + "EXAMPLE_BUTTON_ICON_NONE": "Ninguno", + "EXAMPLE_BUTTON_TEXT_HELP": "Texto del botón", + "EXAMPLE_BUTTON_TEXT_ICON": "Icono", + "EXAMPLE_BUTTON_TEXT_WIDTH": "Anchura", + "EXAMPLE_BUTTON_TEXT_WIDTH_HELP": "Ejemplo : 200px, 50%", + "EXAMPLES_HELP": "Ejemplos de integración :", + "PARAM_AMOUNT": "CuantÃa", + "PARAM_AMOUNT_HELP": "CuantÃa de la transición (obligatorio). Valores múltiples permitidos utilizando un separador (punto y coma, barra vertical o espacio).", + "PARAM_CANCEL_URL": "Dirección web de cancelación", + "PARAM_CANCEL_URL_HELP": "Dirección web (URL) en caso de anulación del pago por parte del usuario. Puede contener las siguientes palabras que serán remplazadas por sus valores dinámicamente en cada caso: \"{comment}\", \"{amount}\" y \"{pubkey}\".", + "PARAM_COMMENT": "Concepto (o comentario)", + "PARAM_COMMENT_HELP": "Concepto o comentario. Le permitirá por ejemplo identificar el pago en la cadena de bloques (blockchain).", + "PARAM_NAME": "Nombre (del destinatario o de su sitio web)", + "PARAM_NAME_HELP": "El nombre del destinatario, o de su sitio web. Puede ser un nombre leÃble (\"Mi tienda en lÃnea\"), o un dominio (\"Mitienda.com\").", + "PARAM_PREFERRED_NODE": "Dirección del nodo preferido", + "PARAM_PREFERRED_NODE_HELP": "Dirección (URL) del nodo Duniter a utilizar preferentemente (\"g1.domaine.com:443\" o \"https://g1.domaine.com\").", + "PARAM_PUBKEY": "Llave pública del destinatario", + "PARAM_PUBKEY_HELP": "La llave pública del destinatario (obligatoria)", + "PARAM_REDIRECT_URL": "Dirección web de redirección", + "PARAM_REDIRECT_URL_HELP": "Dirección web (URL) de redirección, llamada cuanda el pago ha sido enviado. Puede contener las palabras siguientes, que serán remplazadas por los valores de la transacción dinámicanente : \"{tx}\", \"{hash}\", \"{comment}\", \"{amount}\", \"{pubkey}\" y \"{node}\".", + "TITLE": "Pagos" + }, + "URL_DIVIDER": "Dirección de llamada" + }, + "HOME": { + "DOC_HEADER": "Servicios disponibles :", + "MESSAGE": "Bienvenido/a a la <b>documentación de la API</b> {{'COMMON.APP_NAME'|translate}}.<br/>Conecte sus sitios webs a la cadena de bloques <a href=\"http://duniter.org\" target=\"_system\">Duniter</a> muy fácilmente !", + "MESSAGE_SHORT": "Conecte sus sitios a <a href=\"http://duniter.org\" target=\"_system\">Duniter</a> muy fácilmente !", + "TITLE": "Documentación API {{'COMMON.APP_NAME'|translate}}" + }, + "TRANSFER": { + "AMOUNT": "CuantÃa :", + "AMOUNTS_HELP": "Elija la cuantÃa :", + "COMMENT": "Concepto/Comentario de la operación :", + "DEMO": { + "BAD_CREDENTIALS": "Verifique sus credenciales.<br/>En modo demostración, las credenciales son : {{'API.TRANSFER.DEMO.SALT'|translate}} / {{'API.TRANSFER.DEMO.PASSWORD'|translate}}", + "HELP": "<b>Modo demostración</b> : Ningún pago será enviado realmente durante esta simulación.<br/>Utilice las credenciales : <b>{{'API.TRANSFER.DEMO.SALT'|translate}} / {{'API.TRANSFER.DEMO.PASSWORD'|translate}}</b>", + "PASSWORD": "demo", + "PUBKEY": "3G28bL6deXQBYpPBpLFuECo46d3kfYMJwst7uhdVBnD1", + "SALT": "demo" + }, + "ERROR": { + "TRANSFER_FAILED": "Error en el pago" + }, + "INFO": { + "CANCEL_REDIRECTING": "Pago cancelado.<br/>Redirigiendo al sitio del vendedor...", + "CANCEL_REDIRECTING_WITH_NAME": "Pago cancelado.<br/>Redirigiendo a <b>{{name}}</b>...", + "SUCCESS_REDIRECTING": "Pago enviado.<br/>Redirigiendo al sitio del vendedor...", + "SUCCESS_REDIRECTING_WITH_NAME": "Pago enviado.<br/>Redirigiendo a <b>{{name}}</b>..." + }, + "NAME": "Nombre :", + "NODE": "Dirección del nodo :", + "PUBKEY": "Llave pública del destinatario :", + "SUMMARY": "Resumen del pago :", + "TITLE": "{{'COMMON.APP_NAME'|translate}} - Pago en lÃnea", + "TITLE_SHORT": "Pago en lÃnea" + } + }, "AUTH": { "TITLE": "<i class=\"icon ion-locked\"></i> Autenticación", "BTN_AUTH": "Autenticar", @@ -471,6 +572,7 @@ "SHOW_MORE_TX": "Mostrar más", "SHOW_ALL_TX": "Mostrar todo", "TX_FROM_DATE": "(mostrar solo {{fromTime|medianFromNowShort}})", + "OUT_DISTANCED": "Sus certificaciones recibidas provienen de un grupo demasiado aislado de la <a ng-click=\"showHelpModal('wot')\">Red de Confianza</a> (RdC) : la <a ng-click=\"showHelpModal('distance_rule')\">regla de distancia máxima</a> no se cumple.<br/>Deberá obtener certificaciones provinientes de otros sectores de la RdC, o esperar a que ésta estreche sus vÃnculos.", "PENDING_TX": "Transacciones pendientes", "VALIDATING_TX": "Transacciones validadas", "ERROR_TX": "Transacciones no ejecutadas", @@ -479,9 +581,11 @@ "EVENTS": "Eventos", "WAITING_MEMBERSHIP": "Solicitud de membresÃa emitida. En espera de aceptación.", "WAITING_CERTIFICATIONS": "Debe obtener {{needCertificationCount}} certificación(es) para ser miembro.", + "WAITING_CERTIFICATIONS_HELP": "Para obtener sus certificaciones, solicitelas únicamente a miembros <b>que le conozcan bien (y en persona)</b>, como exige <a ng-click=\"showLicenseModal()\">la licencia de la moneda</a> que usted ha aceptado.<br/>Si no conoce lo suficiente a miembros, hágalo saber en <a ng-click=\"openLink($event, $root.settings.userForumUrl)\">el foro</a> para conocerlos en persona o asistir a algún encuentro.", "WILL_MISSING_CERTIFICATIONS": "Pronto le van a <b>faltar certificaciones</b> (al menos {{willNeedCertificationCount}} son necesarias)", "WILL_NEED_RENEW_MEMBERSHIP": "Su adhesión como miembro <b>va a expirar {{membershipExpiresIn|formatDurationTo}}</b>. Piense en <a ng-click=\"doQuickFix('renew')\">renovar su adhesión</a> mientras tanto.", - "NEED_RENEW_MEMBERSHIP": "No es miembro porque su adhesión <b>ha expirado</b>. Piense en <a ng-click=\"doQuickFix('renew')\">renovar su adhesión</a>.", + "NEED_RENEW_MEMBERSHIP": "Ya no es miembro porque su adhesión <b>ha expirado</b>. Piense en <a ng-click=\"doQuickFix('renew')\">renovar su adhesión</a>.", + "NEED_RENEW_MEMBERSHIP_AFTER_CANCELLED": "Ya no es miembro de la moneda, <b>por falta de certificaciones</b>. Considere <a ng-click=\"doQuickFix('renew')\">renovar su adhesión</a>.", "NO_WAITING_MEMBERSHIP": "No hay adhesión miembro en espera. Si desea <b>convertirse en miembro</b>, por favor <a ng-click=\"doQuickFix('membership')\">envÃe su adhesión como miembro</a>.", "CERTIFICATION_COUNT": "Certificaciones recibidas", "CERTIFICATION_COUNT_SHORT": "Certificaciones", @@ -548,6 +652,12 @@ "TITLE": "Selección de monedero" }, "WALLET_LIST": { + "IMPORT_MODAL": { + "HELP": "Para <b>importar monederos</b>, haga clic para seleccionar o arrastre en la zona de abajo el archivo con la lista de monederos.", + "NO_NEW_WALLET": "Ningún monedero nuevo", + "TITLE": "Importar monederos", + "WALLET_COUNT": "<b>{{count}}</b> nuevo{{count > 1 ? 's' : ''}} monedero{{count > 1 ? 's' : ''}}" + }, "TITLE": "Mis monederos", "BTN_NEW": "Añadir un monedero", "BTN_DOWNLOAD": "Descargue el listado", @@ -556,6 +666,7 @@ "BTN_DELETE": "Eliminar un monedero secundario…", "BTN_RENAME": "Renombrar el monedero", "EXPORT_FILENAME": "monederos-{{pubkey|formatPubkey}}-{{currency}}.csv", + "TOTAL_DOTS": "Total : ", "EDIT_POPOVER": { "TITLE": "Renombrar el monedero", "HELP": "Escribe el nuevo nombre", @@ -563,11 +674,29 @@ } }, "SECURITY": { + "KEYFILE": { + "ERROR": { + "BAD_CHECKSUM": "Suma de control (checksum) incorrecta", + "BAD_PASSWORD": "Frase secreta incorrecta" + }, + "EWIF_FORMAT": "Formato EWIF (Encrypted Wallet Import Format) - v1", + "EWIF_FORMAT_HELP": "Este formato almacena su archivo de llaves <b>de forma cifrada</b> a partir de una frase secreta de su elección. También guarda una suma de control (checksum) para verificar la integridad del archivo.<br/><b>Atención :</b>¡ Asegúrese siempre de recordar su frase secreta !", + "PASSWORD_POPUP": { + "HELP": "Indique la frase secreta :", + "PASSWORD_HELP": "Frase secreta", + "TITLE": "Archivo de llaves cifrado" + }, + "PUBSEC_FORMAT": "Formato PubSec", + "PUBSEC_FORMAT_HELP": "Este formato almacena su archivo de llaves de forma simple. Es compatible con Cesium, ÄŸannonce y Duniter.<br/><b>Atención :</b>El archivo <b>no está cifrado</b> (la llave privada aparece en claro) ; ¡ guárdelo en un lugar seguro !", + "WIF_FORMAT": "Formato WIF (Wallet Import Format) - v1", + "WIF_FORMAT_HELP": "Este formato almacena su archivo de llaves con una suma de control (checksum) para verificar la integridad del archivo. Es compatible con los monederos en papel (Duniter paper wallet).<br/><b>Atención :</b>El archivo <b>no está cifrado</b> (la llave privada aparece en claro) ; ¡ guárdelo en un lugar seguro !" + }, "ADD_QUESTION": "Añadir pregunta personalizada", "BTN_CLEAN": "Limpiar", "BTN_RESET": "Reiniciar", "DOWNLOAD_REVOKE": "Guardar un archivo de revocación", "DOWNLOAD_REVOKE_HELP" : "Tener un archivo de revocación es importante, en caso de perdida de las credenciales. Le permitirá <b>invalidar y sacar su cuenta miembro fuera de la Red de Confianza</b>, convirtÃendose en un monedero simple.", + "RECOVER_ID_SELECT_FILE": "Elija el <b>archivo para salvaguardar sus credenciales</b> a utilizar :", "GENERATE_KEYFILE": "Generar mi archivo de llaves…", "GENERATE_KEYFILE_HELP": "Genera un archivo que le permitirá atenticarse sin tener que introducir las credenciales.<br/><b>Cuidado:</b> este archivo contendrá su llave secreta; ¡Es muy importante conservarlo en un lugar seguro!", "KEYFILE_FILENAME": "llavero-{{pubkey|formatPubkey}}-{{currency}}-{{format}}.dunikey", @@ -637,12 +766,22 @@ } }, "ERROR": { + "ADD_SECONDARY_WALLET_FAILED": "Error añadiendo el monedero secundario.", + "COULD_NOT_ADD_EXISTING_WALLET": "Monedero ya existe en la lista.", + "COULD_NOT_ADD_MAIN_WALLET": "Este monedero <b>corresponde a la cuenta principal</b> con la que se conecta.<br/>Imposible añadirlo como monedero secundario.", + "ISSUE_524_TX_FAILED": "Error en la transferencia.<br/><br/>Un mensaje ha sido enviado a los/as desarrolladores/as para facilitar la resolución del problema. <b>Gracias por su ayuda</b>.", + "LOAD_WALLET_LIST_FAILED": "Error cargando los monederos secundarios.", + "ONLY_MEMBER_OR_WAS_MEMBER_CAN_EXECUTE_THIS_ACTION": "Usted debe <b>ser miembro (o haber sido miembro)</b> para poder efectuar esta acción.", + "RESTORE_WALLET_LIST_FAILED": "Error en la restauración de los monederos secundarios.", + "SAVE_WALLET_LIST_FAILED": "Error al guardar los monederos secundarios.", + "UNKNOWN_WALLET_ID": "Monedero secundario desconocido.", + "UPDATE_WALLET_LIST_FAILED": "Error en la actualización de los monederos secundarios.", "UNKNOWN_URI_FORMAT": "Formato URI desconocido", "PUBKEY_INVALID_CHECKSUM": "Llave pública no válida (suma de comprobación incorrecta).", "POPUP_TITLE": "Error", "UNKNOWN_ERROR": "Error desconocido", "CRYPTO_UNKNOWN_ERROR": "Su navegador parece incompatible con las funcionalidades de cryptografÃa.", - "DOWNLOAD_KEYFILE_FAILED": "Error al generar el archivo de llavero.", + "DOWNLOAD_KEYFILE_FAILED": "Error al generar el archivo de llaves.", "EQUALS_TO_PSEUDO": "Debe ser diferente del seudónimo.", "EQUALS_TO_SALT": "Debe ser diferente del identificador secreto.", "FIELD_REQUIRED": "Campo obligatorio.", @@ -751,6 +890,9 @@ "EMPTY_TX_HISTORY": "Ninguna operación a exportar" }, "CONFIRM": { + "EXIT_APP": "¿ Cerrar la aplicación ?", + "FULLSCREEN": "¿ Mostrar la aplicación en pantalla completa ?", + "ISSUE_524_SEND_LOG": "La transacción ha sido rechazada a causa de una anomalÃa conocida (ticket #524) pero todavÃa <b>no replicable</b>.<br/><br/>Para ayudar a los/as desarrolladores/as a corregir este error, ¿ <b>acepta el envÃo de los logs(trazas del programa)</b> ?<br/><small>(ningún dato confidencia será enviado)</small>.", "POPUP_TITLE": "<b>Confirmación</b>", "POPUP_WARNING_TITLE": "<b>Advertencia</b>", "POPUP_SECURITY_WARNING_TITLE": "<i class=\"icon ion-alert-circled\"></i> <b>Advertencia de seguridad</b>", @@ -788,11 +930,15 @@ "LOGIN": { "SECTION": "Autenticación", "PUBKEY": "Llave pública", - "PUBKEY_DEF": "La llave pública del llavero es generada de las credenciales introducidas (cualquiera que sean), sin estar obligatoriamente vinculadas o contrastadas con ninguna cuenta ya usada. <br/><b>Asegúrese por lo tanto de que la llave pública es la misma con la que se creó originalmente su cuenta</b>. De lo contrario, se autogenerará una cuenta vacÃa que probablemente nunca ha sido usada, ya que el riesgo de coincidir con las credenciales de otra cuenta ajena es muy pequeño.<br/><a href=\"https://es.wikipedia.org/wiki/Criptograf%C3%ADa_de_curva_el%C3%ADptica\" target=\"_ system\">Conozca más sobre criptografÃa</a> con llaves públicas.", + "PUBKEY_DEF": "La llave pública del archivo de llaves es generada de las credenciales introducidas (cualquiera que sean), sin estar obligatoriamente vinculadas o contrastadas con ninguna cuenta ya usada. <br/><b>Asegúrese por lo tanto de que la llave pública es la misma con la que se creó originalmente su cuenta</b>. De lo contrario, se autogenerará una cuenta vacÃa que probablemente nunca ha sido usada, ya que el riesgo de coincidir con las credenciales de otra cuenta ajena es muy pequeño.<br/><a href=\"https://es.wikipedia.org/wiki/Criptograf%C3%ADa_de_curva_el%C3%ADptica\" target=\"_ system\">Conozca más sobre criptografÃa</a> con llaves públicas.", "METHOD": "Métodos de autenticación", "METHOD_DEF": "Diversas opciones están disponibles para conectar a las cuentas: <br/> - La conexión <b>con aleatoriedad (estándar o avanzada)</b> mezcla su contraseña con su identificador secreto, para limitar los intentos de ataque<br/> - La conexión <b>usando llave pública</b> le permite entrar sin credenciales, las cuales solo se le pedirán cuando alguna operación lo necesite.<br/> - La conexión <b>usando archivo de llaves</b> leerá las llave pública y privada de la cuenta desde un archivo sin necesitar sus credenciales. Varios formatos son posibles." }, "GLOSSARY": { + "DISTANCE_RULE": "Regla de distancia", + "DISTANCE_RULE_DEF": "La regle de distancia de la Red de Confianza define <b>una distancia máxima a respetar</b> entre una candidatura y número mÃnimo miembros referentes (aquellos más conectados). Esta distancia es calculada utilizando los enlaces de certificación.", + "WOT": "Red de Confianza (RdC)", + "WOT_DEF": "La Red de Confianza se compone del conjunto de miembros de la moneda, y de los enlaces de certificaciones que los conectan.", "SECTION": "Glosario", "PUBKEY_DEF": "Una llave pública identifica un monedero, que puede estar asociado a un miembro o ser un monedero anónimo. En Cesium se calcula a partir del identificador secreto y la contraseña.", "MEMBER": "Miembro", @@ -833,6 +979,7 @@ "WALLET_CERTIFY": "El botón <b>{{'WOT.BTN_SELECT_AND_CERTIFY'|translate}}</b> permite seleccionar una identidad y certificarla.<br/><br/>Solo quienes son <b>miembros</b> pueden certificar a otras personas.", "WALLET_CERT_STOCK": "Su stock de certificaciones (emitidas) es limitado a <b>{{sigStock}} certificaciones</b>.<br/><br/>Este stock se renueva con el tiempo, a medida que las certificaciones caducan.", "MENU_BTN_TX": "El menú <b>{{'MENU.TRANSACTIONS'|translate}}</b> permite consultar su saldo, el historial de transacciones y realizar nuevos pagos.", + "MENU_BTN_WALLETS": "El menú <b>{{'MENU.WALLETS'|translate}}</b> permite añadir monederos complementarios que usted maneja.", "MENU_BTN_WOT": "El menú <b>{{'MENU.WOT'|translate}}</b> permite buscar <b>usuarios</b> de la moneda (miembro o no).", "WOT_SEARCH_TEXT_XS": "Para buscar en el directorio, escriba las <b>primeras letras de un seudónimo</b> (o de una llave pública).<br/><br/>La búsqueda se iniciará automáticamente.", "WOT_SEARCH_TEXT": "Para buscar en el directorio, escriba las <b>primeras letras de un seudónimo</b> (o de una llave pública). <br/><br/>Luego, pulse en la tecla <b>Intro</b> para iniciar la búsqueda.", diff --git a/www/i18n/locale-fr-FR.json b/www/i18n/locale-fr-FR.json index da23c102caac88173df23aec7448c78f19b08ea1..87ed7d499b5e7220c78087906887c02854186154 100644 --- a/www/i18n/locale-fr-FR.json +++ b/www/i18n/locale-fr-FR.json @@ -910,7 +910,7 @@ "LINK_DOC_HELP": "Documentation pour les développeurs", "LINK_STANDARD_APP": "Version classique", "LINK_STANDARD_APP_HELP": "Ouvrir la version classique de {{'COMMON.APP_NAME'|translate}}", - "CONNECTION_ERROR": "NÅ“ud <b>{{server}}</b> injoignable ou adresse invalide.<br/><br/>Vérifiez votre connexion Internet, ou contactez l'administrateur du site</a>." + "CONNECTION_ERROR": "NÅ“ud <b>{{server}}</b> injoignable ou adresse invalide.<br/><br/>Vérifiez votre connexion Internet, ou contactez l'administrateur du site." }, "HOME": { "TITLE": "Documentation API {{'COMMON.APP_NAME'|translate}}", @@ -974,7 +974,7 @@ "PARAM_REDIRECT_URL": "Adresse web de redirection", "PARAM_REDIRECT_URL_HELP": "Adresse web (URL) de redirection, appelé quand le paiement a été envoyé. Peut contenir les chaînes suivantes, qui seront remplacées par les valeurs de la transaction : \"{tx}\", \"{hash}\", \"{comment}\", \"{amount}\", \"{pubkey}\" et \"{node}\".", "PARAM_CANCEL_URL": "Adresse web d'annulation", - "PARAM_CANCEL_URL_HELP": "Adresse web (URL) en cas d'annulation du paiement, par l'utilisateur. Peut contenir les chaînes suivantes, qui seront remplacées dynamiquement : \"{comment}\", \"{amount}\" et {pubkey}.", + "PARAM_CANCEL_URL_HELP": "Adresse web (URL) en cas d'annulation du paiement, par l'utilisateur. Peut contenir les chaînes suivantes, qui seront remplacées dynamiquement : \"{comment}\", \"{amount}\" et \"{pubkey}\".", "PARAM_PREFERRED_NODE": "Adresse du nÅ“ud préféré", "PARAM_PREFERRED_NODE_HELP": "Adresse (URL) du nÅ“ud Duniter à utiliser de préférence (\"g1.domaine.com:443\" ou \"https://g1.domaine.com\").", "EXAMPLES_HELP": "Voici des exemples d'intégration :", diff --git a/www/js/config.js b/www/js/config.js index 212ae9a290b704bc680699a798f41463f727815e..6132bdb815dc5b1ad5b90ff284498adb0bd5ffff 100644 --- a/www/js/config.js +++ b/www/js/config.js @@ -97,8 +97,8 @@ angular.module("cesium.config", []) "defaultCountry": "France" } }, - "version": "1.6.3", - "build": "2020-04-14T15:27:37.888Z", + "version": "1.6.5", + "build": "2020-04-22T17:36:59.565Z", "newIssueUrl": "https://git.duniter.org/clients/cesium-grp/cesium/issues/new" }) diff --git a/www/js/controllers/app-controllers.js b/www/js/controllers/app-controllers.js index af866782f08eddabc857d0dbf322d13c86e524ef..52b45f23a8fbccff9e57ea4f72617525d4c205fd 100644 --- a/www/js/controllers/app-controllers.js +++ b/www/js/controllers/app-controllers.js @@ -504,7 +504,7 @@ function AppController($scope, $rootScope, $state, $ionicSideMenuDelegate, $q, $ var skip = $scope.fullscreen || !UIUtils.screen.isSmall() || !Device.isWeb(); if (skip) return; - return UIUtils.alert.confirm('CONFIRM.FULLSCREEN', null, { + return UIUtils.alert.confirm('CONFIRM.FULLSCREEN', undefined, { cancelText: 'COMMON.BTN_NO', okText: 'COMMON.BTN_YES' }) diff --git a/www/js/controllers/wallets-controllers.js b/www/js/controllers/wallets-controllers.js index f7a779dc3924b2e40c596fa40f58a3d028cec576..ac03b4b86b64b2cee37f752ff7dacb5c5b31f56d 100644 --- a/www/js/controllers/wallets-controllers.js +++ b/www/js/controllers/wallets-controllers.js @@ -761,7 +761,7 @@ function WalletListImportModalController($scope, $timeout, BMA, csWallet) { $scope.hasContent = angular.isDefined(file) && file !== ''; $scope.fileData = file.fileData ? file.fileData : ''; var isValidFile = $scope.fileData !== '' && - ($scope.fileData.type == 'text/csv' || $scope.fileData.type == 'text/plain' || 'application/vnd.ms-excel' /*fix issue #810*/); + ($scope.fileData.type === 'text/csv' || $scope.fileData.type === 'text/plain' || 'application/vnd.ms-excel' /*fix issue #810*/); // Bad file type: invalid file if (!isValidFile) { diff --git a/www/js/services/tx-services.js b/www/js/services/tx-services.js index 5f9388396c93275b92d88eb96273f610bf6feb92..7c54a7cb1c3370e0d197fefe7e798d103d0feb26 100644 --- a/www/js/services/tx-services.js +++ b/www/js/services/tx-services.js @@ -229,7 +229,7 @@ angular.module('cesium.tx.services', ['ngApi', 'cesium.bma.services', tx.history.sort(function(tx1, tx2) { return (tx2.time - tx1.time); }); - var firstValidatedTxIndex = tx.history.findIndex(function(tx){ + var firstValidatedTxIndex = _.findIndex(tx.history, function(tx){ return (tx.block_number <= current.number - csSettings.data.blockValidityWindow); }); // remove validating from history diff --git a/www/js/services/utils-services.js b/www/js/services/utils-services.js index 7db0244dad3a2586540f93715ecaa251f265e09a..d33e57fca2e6c49e802ee2a79694ddab64ae7460 100644 --- a/www/js/services/utils-services.js +++ b/www/js/services/utils-services.js @@ -43,17 +43,17 @@ angular.module('cesium.utils.services', ['angular-fullscreen-toggle']) function alertError(err, subtitle) { if (!err) { - return $q.when(); + return $q.when(); // Silent } return $q(function(resolve) { - $translate([err, subtitle, 'ERROR.POPUP_TITLE', 'ERROR.UNKNOWN_ERROR', 'COMMON.BTN_OK']) + $translate([err, 'ERROR.POPUP_TITLE', 'ERROR.UNKNOWN_ERROR', 'COMMON.BTN_OK'].concat(subtitle ? [subtitle] : [])) .then(function (translations) { var message = err.message || translations[err]; return $ionicPopup.show({ template: '<p>' + (message || translations['ERROR.UNKNOWN_ERROR']) + '</p>', title: translations['ERROR.POPUP_TITLE'], - subTitle: translations[subtitle], + subTitle: subtitle && translations[subtitle] || undefined, buttons: [ { text: '<b>'+translations['COMMON.BTN_OK']+'</b>', @@ -69,13 +69,14 @@ angular.module('cesium.utils.services', ['angular-fullscreen-toggle']) } function alertInfo(message, subtitle) { + if (!message) return $q.reject("Missing 'message' argument"); return $q(function(resolve) { - $translate([message, subtitle, 'INFO.POPUP_TITLE', 'COMMON.BTN_OK']) + $translate([message, 'INFO.POPUP_TITLE', 'COMMON.BTN_OK'].concat(subtitle ? [subtitle] : [])) .then(function (translations) { $ionicPopup.show({ template: '<p>' + translations[message] + '</p>', title: translations['INFO.POPUP_TITLE'], - subTitle: translations[subtitle], + subTitle: subtitle && translations[subtitle] || undefined, buttons: [ { text: translations['COMMON.BTN_OK'], @@ -159,6 +160,7 @@ angular.module('cesium.utils.services', ['angular-fullscreen-toggle']) } function showToast(message, duration, position) { + if (!message) return $q.reject("Missing 'message' argument"); duration = duration || 'short'; position = position || 'bottom'; diff --git a/www/license/license_g1-es-ES.md b/www/license/license_g1-es-ES.md index d97c51c01794bc426c815662e231ef323473cf31..6887f71de69b2fa5bcf1a82d55c06c7766966ce2 100644 --- a/www/license/license_g1-es-ES.md +++ b/www/license/license_g1-es-ES.md @@ -1,81 +1,79 @@ -Licencia Äž1 - v0.2.8 -=================== +Licencia Äž1 - v0.2.9 +==================== :fecha: 2017-04-04 12:59 -:modificación: 2018-02-24 09:30 +:modificada: 2019-04-16 22:30 **Licencia de la moneda y compromiso de responsabilidad.** -Cualquier certificación de un nuevo miembro de Äž1 debe ir primero acompañada por la transmisión de esta licencia de moneda Äž1 la cual el certificador debe garantizar que ha sido estudiada, entendida y aceptada por la persona que será certificada. +Cualquier certificación de nueva membresÃa de Äž1 debe ir primero acompañada por la transmisión de esta licencia de moneda Äž1 cuyo certificador debe asegurar que ha sido estudiada, entendida y aceptada por la persona que será certificada. Cualquier evento de encuentro relacionado con Äž1 debe ir acompañado de la transmisión de esta licencia, que puede leerse en voz alta y transmitirse por cualquier medio. Red de confianza Äž1 (RdC Äž1) ------------------------------ -** Aviso de advertencia :** Certificar no solo es asegurarte de que has conocido a la persona, es asegurar a la comunidad Äž1 que conoces a la persona lo suficientemente bien y que sabes cómo contactarla fácilmente, y ser capaz de identificar una cuenta duplicada realizada por una persona que has certificado, u otros tipos de problemas (desaparición ...), haciendo verificaciones cruzadas que revelan el problema en caso de que lo haya. +** Aviso de advertencia :** Certificar no solo es asegurarse de que te has encontrado fÃsicamente con la persona. Es asegurar a la comunidad Äž1 que conoces a la persona lo suficientemente bien y que sabrás cómo contactarla fácilmente, y ser capaz de identificar una cuenta duplicada o falsa realizada por una persona que has certificado, u otro tipo de problema (desaparición ...), efectuando verificaciones comparativas que revelen el problema. -**Consejos muy recomendados** +**Consejos fuertemente recomendados** -Bien conocer a una persona significa que puedes comunicarte con ella por varios medios distintos (fÃsicos, electrónicos, otros ...) pero también que conoces a varias personas que la conocen bien y, por lo tanto, pueden comunicarse con ella igualmente. Especialmente si no conoces bien ninguno de sus otros certificadores, es una clara indicación de que no conoces bien a la persona; una certificación de este tipo provoca una alerta hacia toda la comunidad Äž1. En caso de conocimiento insuficiente, es importante NO certificar. +Conocer bien a una persona significa que puedes comunicarte con ella por varios medios distintos (fÃsicos, electrónicos, etc ...) pero también que conoces a varias personas que también la conocen bien y, por lo tanto, pueden contactar con ella igualmente. Además si no conoces bien a nadie de quienes ya le han certificado, es una clara indicación de que no conoces bien a la persona; una certificación de este tipo provoca una alerta hacia toda la comunidad Äž1. En caso de conocimiento insuficiente, es importante NO certificar. -Nunca certifiques solo, sino que acompañado por al menos otro miembro de la RdC Äž1 para evitar cualquier mal manejo. En caso de error, advierte a otros miembros de la RdC Äž1 inmediatamente. +Nunca certifiques solo/a, sino acompáñate por al menos otro/a miembro de la RdC Äž1 para evitar cualquier error de manejo. En caso de error, advierte a quienes ya son miembros de la RdC Äž1 inmediatamente. -Antes de cualquier certificación, asegúrate de verificar si su cuenta (tanto si se esté validando como ya sea miembro) ha recibido ya una o más certificaciones. Si es necesario, solicite información para ponerte en contacto con estos otros certificadores para verificar juntos que conoces bien la persona en cuestión por la creación de la nueva cuenta, asà como la clave pública correspondiente. +Antes de cualquier certificación, asegúrate de verificar si su cuenta (tanto si es nueva candidatura o ya miembro) ha recibido ya una o más certificaciones. Si es necesario, solicite información para ponerte en contacto con quienes ya le hayan certificado para verificar juntos/as que conocéis bien la persona en cuestión concerniente, asà como su llave pública correspondiente. -Comprueba que la persona a punta de ser certificada domina el manejo su cuenta: una buena manera de comprobar esto es transferir unos Äž1 a la cuenta de destino, y luego pedir la vuelta a tu propia cuenta. Esto asegura el control eficaz, por el futuro certificado, de su clave privada. +Comprueba que la persona a ser certificada domina bien el manejo de su cuenta: una buena manera de comprobar esto es transferir unas Äž1 a la cuenta destino, y luego pedir la devolución a tu propia cuenta. Esto asegura el buen manejo por quien va a ser certificado, de su llave privada. -Compruebe que tus contactos hayan estudiado y comprendido a fondo la licencia Äž1 actualizada. +Comprueba que tus contactos hayan estudiado y comprendido la licencia Äž1 actualizada. -Si te das cuenta de que un certificador real o potencial de la cuenta en cuestión no conoce a la persona interesada, avise inmediatamente a los expertos del tema dentro de tus contactos de la RdC Äž1, para que la RdC Äž1 verifique el procedimiento de validación. +Si te percatas de que un/a certificador/a real o potencial de la cuenta candidata no conoce a la persona interesada, avisa inmediatamente a quien tenga experiencia en el tema de tus contactos en la RdC Äž1, para que la RdC Äž1 verifique el proceso de validación. Cuando eres miembro de la RdC Äž1 y estás a punto de certificar una nueva cuenta: -** Estás seguro: ** +** Estás seguro de: ** -1 °) de conocer lo suficiente (no solo "de visu") la persona que declara administrar esta clave pública (nueva cuenta). Vea los consejos altamente recomendados más arriba para asegurarte de que conoces "bien". +1°) Conocer suficientemente bien (además de conocerla fÃsicamente) a la persona que declara poseer esta llave pública (nueva cuenta). Lea los consejos fuertemente recomendados más arriba para asegurarte de que la "conoces bien". -2) Haber comprobado personalmente con ella que esta es la clave pública que está a punto de certificar (consulte las sugerencias anteriores). +2°) Haber comprobado personalmente con ella de que se trata de esta llave pública que está a punto de certificar (lea las sugerencias anteriores). -3°) Haber verificado con la persona interesada que ha generado su documento de revocación de cuenta Duniter que le permitirá, si es necesario, desactivar su estado de miembro (caso de robo de cuenta, un cambio de identificación, una cuenta creada incorrectamente, etc.). +3°) Haber verificado con la persona interesada que ha generado su documento o archivo de revocación de cuenta Duniter que le permitirá, si es necesario, desactivar su estado de miembro (en caso de robo de cuenta, cambio de identificación, cuenta creada incorrectamente, etc.). -4a °) De haberte encontrado con la persona fÃsicamente para asegurarte de que la conoces bien y quién es ella que administra esta clave pública. +4a°) De haberte encontrado con la persona fÃsicamente para asegurarte de que es ella a quien conoces bien y quién posee esta llave pública. -4b °) O verificar de forma remota el enlace entre la clave pública y la persona, contactando a esta persona por diferentes medios de comunicación, como correo en papel + red social + foro + correo electronico + video conferencia + teléfono (reconocer la voz). Porque si se puede piratear una cuenta de correo electrónico o una cuenta de foro, es mucho más difÃcil imaginar piratear cuatro medios de comunicación separados, e imitar la apariencia (video) y la voz de la persona además. +4b°) O realizar de forma remota la verificación entre la llave pública y esa persona (que ya has encontrado fÃsicamente), contactándola por diferentes medios de comunicación, como por correo ordinario + redes sociales + foro + correo electronico + video conferencia + teléfono (reconociendo la voz). Ya que si se puediese piratear una cuenta de correo electrónico o una cuenta en un foro, es mucho más difÃcil imaginar piratear cuatro medios de comunicación separados, e imitar la apariencia (video) e incluso la voz de la persona. -El 4a °) sin embargo, es preferible a 4b °), mientras que los puntos 1 °) 2 °) y 3 °) son previamente indispensables. +El 4a°) sin embargo, es preferible al 4b°), mientras que los puntos 1°) 2°) y 3°) son ante todo indispensables. **Reglas abreviadas de la RdC :** -Cada miembro tiene un stock de 100 posibles certificaciones, que solo puede emitir a razón de 1 certificación cada 5 dÃas. +Cada miembro tiene una reserva de 100 certificaciones posibles, que solo puede emitir a razón de 1 certificación cada 5 dÃas. -Válido por 2 meses, se adopta definitivamente una certificación para un nuevo miembro siesta persona tiene al menos otras 4 certificaciones al cabo de estos 2 meses, de lo contrario, el proceso de inscripción deberá reiniciarse. +Válida durante 2 meses, una certificación se toma en consideración definitivamente para una nueva candidatura de membresÃa si esta persona tiene al menos otras 4 certificaciones al cabo de estos 2 meses, de lo contrario, el proceso de candidatura deberá reiniciarse. -Para convertirse en un nuevo miembro de la RdC Äž1 es necesario obtener 5 certificaciones y y estar a una distancia <= 5 pasos del 80% de los referentes de la RdC. +Para convertirse en nuevo/a miembro de la RdC Äž1 es necesario obtener 5 certificaciones y estar a una distancia de <= 5 pasos con como mÃnimo un 80% del total de miembros referentes de la RdC. -Un miembro de la RdC Äž1 es un miembro referente cuando ha recibido y emitido al menos Y [N] certificaciones donde N es el número de miembros RdC e Y [N] = techo N ^ (1/5). Ejemplos: +Alguien es miembro referente de la RdC Äž1 cuando ha recibido y también emitido al menos Y[N] certificaciones donde N es el total de miembros en la RdC e Y[N] = techo N^(1/5). Ejemplos: -* Para 1024 < N ≤ 3125 tenemos Y[N] = 5 -* Para 7776 < N ≤ 16807 tenemos Y[N] = 7 -* para 59049 < N ≤ 100 000 tenemos Y[N] = 10 +* Para 1024 < N ≤ 3125 se obtiene que Y[N] = 5 +* Para 7776 < N ≤ 16807 se obtiene que Y[N] = 7 +* para 59049 < N ≤ 100.000 se obtiene que Y[N] = 10 -Una vez que el nuevo miembro participa en la RdC Äž1, sus certificaciones seguirán siendo válidas durante 2 años. +Una vez que alguien es nuevo/a miembro de la RdC Äž1, sus certificaciones serán válidas durante 2 años. -Para seguir siendo miembro, debe renovar su acuerdo regularmente con su clave privada (cada 12 meses) y asegurarse de que siempre tenga al menos 5 certificaciones válidas más de allá de los 2 años. +Para seguir siendo miembro, se debe renovar el acuerdo regularmente mediante la llave privada (cada 12 meses) y asegurarse de que siempre se tenga al menos 5 certificaciones válidas después de los 2 años. Moneda Äž1 ---------- -Äž1 se genera a través de un Dividendo Universal (DU) para cada ser humano en el Anillo de Confianza Äž1, que tiene la siguiente forma: +Äž1 se genera a través de un Dividendo Universal (DU) para cada ser humano miembro de la Red de Confianza Äž1, de la siguiente forma: * 1 DU por persona y por dÃa. -**Codigo de la moneda Äž1** +La cantidad en Äž1 del DU es idéntica cada dÃa hasta el próximo equinoccio(cada 6 meses) cuando se re-evaluará el DU según la fórmula : -La cantidad en Äž1 del DU es idéntica cada dÃa hasta el próximo equinoccio en el que se re-evaluará el DU según la fórmula (con 1 dÃa = 86,400 segundos): : - -* DU dÃa (próximo equinoccio) = DU dÃa(equinoccio) + c² (M/N)(equinoccio) / (182,625 dÃas) +* DU diario (próximo equinoccio) = DU diario (equinoccio) + c² (M/N)(equinoccio) / (15778800 segundos) Y como parámetros: @@ -84,14 +82,14 @@ Y como parámetros: Y como variables : -* *M* la oferta de dinero o masa monetaria total en el equinoccio -* *N* el número de miembros al dÃa del equinoccio +* *M* la masa monetaria total en el equinoccio +* *N* el número de miembros el dÃa del equinoccio Software Äž1 y licencia Äž1 -------------------------- -El software Äž1 que permite a los usuarios administrar su uso de Äž1 debe transmitir esta licencia con el software y todos los parámetros técnicos de la moneda Äž1 y de la RdC Äž1 que se ingresan en el bloque 0 de Äž1. El software que no cumple con estas obligaciones de la licencia no es compatible con Äž1. +El software Äž1 que permita a los usuarios administrar su uso de Äž1 debe transmitir esta licencia y todos los parámetros técnicos de la moneda Äž1 y de la RdC Äž1 que han sido configurados en el bloque 0 de Äž1. El software que no cumpla con estas obligaciones de la licencia no es compatible con Äž1. -Para obtener más informaciones en los detalles técnicos, es posible consultar directamente el código de Duniter, que es un software libre asà como los datos de la blockchain Äž1, recuperándolos a través de una instancia de Duniter Äž1 (o nodo). +Para más detalle en los aspectos técnicos, es posible consultar directamente el código de Duniter, que es un software libre asà como los datos de la cadena de bloques (blockchain) Äž1, recuperándolos a través de una instancia (o nodo) de Duniter Äž1. -Más información en el sitio web del equipo de Duniter https://www.duniter.org \ No newline at end of file +Más información en el sitio web del equipo Duniter https://www.duniter.org \ No newline at end of file diff --git a/www/manifest.json b/www/manifest.json index 7151a961d7901ad48d0c3336233d3cf12dce45a5..3aa1c2bb7be22f389df2be2fbcc22d7a2814b22d 100644 --- a/www/manifest.json +++ b/www/manifest.json @@ -2,9 +2,9 @@ "short_name": "Cesium", "name": "Cesium", "manifest_version": 1, - "version": "1.6.2-alpha", + "version": "1.6.5", "default_locale": "fr", - "description": "Manage your Duniter Wallet on a libre currency, like Äž1", + "description": "Cesium Wallet for Äž1 libre currency", "icons": [ { "src": "img/logo_32px.png", diff --git a/www/plugins/es/i18n/locale-es-ES.json b/www/plugins/es/i18n/locale-es-ES.json index db1888aace0b6c08f0765f61347a72dde2abaad8..0e1ae22ca64db8f81633f562825a7b723811fc64 100644 --- a/www/plugins/es/i18n/locale-es-ES.json +++ b/www/plugins/es/i18n/locale-es-ES.json @@ -1,10 +1,31 @@ { "COMMON": { + "ABUSES_TEXT": "{{total}} personne{{total > 1 ? 's' : ''}} {{total > 1 ? 'ont' : 'a'}} signalé un problème", + "BTN_LIKE": "Me gusta", + "BTN_LIKE_REMOVE": "Dejar de gustarme", + "BTN_REMOVE_REPORTED_ABUSE": "Cancelar mi reporte", + "BTN_REPORT_ABUSE_DOTS": "Reportar un problema o un abuso...", + "COMMENT_HELP": "Comentario", + "LIKES_TEXT": "A {{total}} persona{{total > 1 ? 's' : ''}} {{total > 1 ? 'les' : 'le'}} gusta esta página", + "NOTIFICATION": { + "HAS_UNREAD": "Tiene {{count}} notificaci{{count>0?'ones':'ón'}} no leÃda{{count>0?'s':''}}", + "TITLE": "Nueva notificación | {{'COMMON.APP_NAME'|translate}}" + }, + "REPORT_ABUSE": { + "ASK_DELETE": "¿ Solicitar la eliminación ?", + "CONFIRM": { + "SENT": "Reporte enviado. ¡ Gracias !" + }, + "REASON_HELP": "Yo explico el problema...", + "SUB_TITLE": "Por favor explique brevemente el problema :", + "TITLE": "Señalar un problema" + }, + "CATEGORY": "CategorÃa", "CATEGORIES": "CategorÃas", "CATEGORY_SEARCH_HELP": "Búsqueda", "LAST_MODIFICATION_DATE": "Actualización el", - "SUBMIT_BY": "Sometido por", + "SUBMIT_BY": "Enviado por", "BTN_PUBLISH": "Publicar", "BTN_PICTURE_DELETE": "Suprimir", "BTN_PICTURE_FAVORISE": "Principal", @@ -15,7 +36,42 @@ "MARK_ALL_AS_READ": "Marcar todo como leÃdo", "NO_RESULT": "Ningúna notificación", "SHOW_ALL": "Ver todo", - "LOAD_NOTIFICATIONS_FAILED": "Fracaso en la carga de las notificaciones" + "LOAD_NOTIFICATIONS_FAILED": "Fallo en la carga de las notificaciones" + } + }, + "DOCUMENT": { + "HASH": "Hash: ", + "LOOKUP": { + "BTN_COMPACT": "Compactar", + "HAS_CREATE_OR_UPDATE_PROFILE": "ha creado o modificado su perfil", + "LAST_DOCUMENTS_DOTS": "Últimos documentos :", + "TITLE": "Búsqueda de documentos", + "BTN_ACTIONS": "Acciones", + "SEARCH_HELP": "issuer:AAA*, time:1508406169", + "LAST_DOCUMENTS": "Últimos documentos", + "SHOW_QUERY": "Ver la búsqueda", + "HIDE_QUERY": "Esconder la búsqueda", + "HEADER_TIME": "Fecha/Hora", + "HEADER_ISSUER": "Emisor", + "HEADER_RECIPIENT": "Destinatario", + "READ": "LeÃdo", + "BTN_REMOVE": "Sumprimer este documento", + "POPOVER_ACTIONS": { + "TITLE": "Acciones", + "REMOVE_ALL": "Suprimir estos documentos..." + } + }, + "INFO": { + "REMOVED": "Documento suprimido" + }, + "CONFIRM": { + "REMOVE": "¿ Desea <b>suprimir este documento</b> ?", + "REMOVE_ALL": "¿ Desea <b>suprimer estos documentos</b> ?" + }, + "ERROR": { + "LOAD_DOCUMENTS_FAILED": "Error al buscar los documentos", + "REMOVE_FAILED": "Error al suprimir el documento", + "REMOVE_ALL_FAILED": "Error al suprimir los documentos" } }, "MENU": { @@ -31,7 +87,7 @@ "ORGANIZATION_ACCOUNT_HELP": "Si representa una empresa, una asociación, etc.<br/>Ningún dividendo universal será creÃdo por esta cuenta." }, "EVENT": { - "MEMBER_WITHOUT_PROFILE": "Para obtener sus certificaciónes más rapidamente, completa <a ui-sref=\"app.edit_profile\">su perfil usuario</a>. Los miembros concederán más fácilmente su confianza a una identidad verificable." + "MEMBER_WITHOUT_PROFILE": "Para obtener sus certificaciones más rapidamente, complete <a ui-sref=\"app.edit_profile\">su perfil usuario</a>. Los miembros concederán más fácilmente su confianza a una identidad verificable." }, "ERROR": { "WS_CONNECTION_FAILED": "Cesium no puede recibir las notificaciones, a causa de un error técnico (conexión al nodo de datos Cesium+).<br/><br/>Si el problema persiste, por favor <b>elige un otro nodo de datos</b> en los ajustes de Cesium+." @@ -42,11 +98,11 @@ "BTN_ASK_CERTIFICATIONS_DOTS": "Pedir a miembros que le certifiquen…", "BTN_ASK_CERTIFICATION": "Pedir una certificación", "SUGGEST_CERTIFICATIONS_MODAL": { - "TITLE": "Sugerir certificaciónes", + "TITLE": "Sugerir certificaciones", "HELP": "Selectionar sus sugerencias" }, "ASK_CERTIFICATIONS_MODAL": { - "TITLE": "Solicitar certificaciónes", + "TITLE": "Solicitar certificaciones", "HELP": "Selectionar los destinatarios" }, "SEARCH": { @@ -67,7 +123,7 @@ "BTN_DELETE": "Suprimir la invitación", "BTN_NEW_INVITATION": "Nueva invitación", "ASK_CERTIFICATION": "<a href=\"#/app/wot/{{pubkey}}/{{::uid}}\">{{::name||uid}}</a> solicita su certificación", - "SUGGESTION_CERTIFICATION": "<a href=\"#/app/wot/{{::pubkey}}/{{::uid}}\">{{::name||uid}}</a> él es sugerido por certificación", + "SUGGESTION_CERTIFICATION": "<a href=\"#/app/wot/{{::pubkey}}/{{::uid}}\">{{::name||uid}}</a> ha sido sugerido/a para certificación", "SUGGESTED_BY": "Sugerencia mandada por <a class=\"positive\" href=\"#/app/wot/{{::issuer.pubkey}}/{{::issuer.uid}}\">{{::issuer.name||issuer.uid}}</a>", "NOTIFICATIONS": { "TITLE": "Invitaciones" @@ -82,22 +138,22 @@ "RECIPIENTS_MODAL_TITLE": "Destinatarios", "RECIPIENTS_MODAL_HELP": "Por favor, elige los destinatarios :", "SUGGESTION_IDENTITIES": "Sugerencia de certificación", - "SUGGESTION_IDENTITIES_HELP": "Certificaciónes a sugerir", + "SUGGESTION_IDENTITIES_HELP": "Certificaciones a sugerir", "SUGGESTION_IDENTITIES_MODAL_TITLE": "Sugerencias", "SUGGESTION_IDENTITIES_MODAL_HELP": "Por favor, elige sus sugerencias :" }, "CONFIRM": { - "DELETE_ALL_CONFIRMATION": "La supresión de las invitaciones es una <b>operación ireversible</b>.<br/><br/>Desea continuar ?", - "SEND_INVITATIONS_TO_CERTIFY": "Desea <b>mandar esta invitación a certificar</b> ?" + "DELETE_ALL_CONFIRMATION": "La supresión de las invitaciones es una <b>operación ireversible</b>.<br/><br/>¿ Desea continuar ?", + "SEND_INVITATIONS_TO_CERTIFY": "¿ Desea <b>mandar esta invitación a certificar</b> ?" }, "INFO": { "INVITATION_SENT": "Invitación mandada" }, "ERROR": { - "LOAD_INVITATIONS_FAILED": "Fracaso en la carga de las invitaciones", - "REMOVE_INVITATION_FAILED": "Fracaso durante la supresión de la invitación", - "REMOVE_ALL_INVITATIONS_FAILED": "Fracaso durante la supresión de las invitaciones", - "SEND_INVITATION_FAILED": "Fracaso durante el envÃo de la invitación", + "LOAD_INVITATIONS_FAILED": "Fallo en la carga de las invitaciones", + "REMOVE_INVITATION_FAILED": "Fallo durante la supresión de la invitación", + "REMOVE_ALL_INVITATIONS_FAILED": "Fallo durante la supresión de las invitaciones", + "SEND_INVITATION_FAILED": "Fallo durante el envÃo de la invitación", "BAD_INVITATION_FORMAT": "<span class=\"assertive\"><i class=\"ion-close-circled\"></i> Invitación ilegible (formato desconocido)</span> - mandada por <a ui-sref=\"app.wot_identity({pubkey: '{{::pubkey}}', uid: '{{::uid}}' })\">{{::name||uid}}</a>" } }, @@ -108,6 +164,8 @@ "COMMENT_HELP_REPLY_TO": "Su repuesta…", "BTN_SEND": "Mandar", "POPOVER_SHARE_TITLE": "Mensaje #{{number}}", + "MODIFIED_ON": "modificado el {{time|formatDate}}", + "MODIFIED_PARENTHESIS": "(modificado entonces)", "REPLY": "Responder", "REPLY_TO": "Repuesta a :", "REPLY_TO_LINK": "En repuesta a ", @@ -115,8 +173,8 @@ "REPLY_COUNT": "{{replyCount}} repuestas", "DELETED_COMMENT": "Comentario suprimido", "ERROR": { - "FAILED_SAVE_COMMENT": "Fracaso durante el respaldo del comentario", - "FAILED_REMOVE_COMMENT": "Fracaso durante la supresión del comentario" + "FAILED_SAVE_COMMENT": "Fallo durante el respaldo del comentario", + "FAILED_REMOVE_COMMENT": "Fallo durante la supresión del comentario" } }, "MESSAGE": { @@ -140,7 +198,7 @@ "TITLE": "Mensajes", "SEARCH_HELP": "Buscar en mensajes", "POPOVER_ACTIONS": { - "TITLE": "Opciónes", + "TITLE": "Opciones", "DELETE_ALL": "Suprimir todos los mensajes" } }, @@ -154,7 +212,7 @@ "ENCRYPTED_HELP": "Tenga en cuenta que este mensaje será cifrado antes del envÃo, con el fin de que solo el destinatario pueda leerlo, y que se tenga la seguridad de que la autorÃa es suya.", "MESSAGE": "Mensaje", "MESSAGE_HELP": "Contenido del mensaje", - "CONTENT_CONFIRMATION": "El contenido del mensaje es vacÃo.<br/><br/>Sin embargo, quiere mandar el mensaje ?" + "CONTENT_CONFIRMATION": "El contenido del mensaje está vacÃo.<br/><br/>¿ Sin embargo, quiere mandar el mensaje ?" }, "VIEW": { "TITLE": "Mensaje", @@ -164,10 +222,10 @@ "DELETE": "Eliminar el mensaje" }, "CONFIRM": { - "REMOVE": "Desea <b>suprimir este mensaje</b> ?<br/><br/>Esta operación es ireversible.", - "REMOVE_ALL" : "Desea <b>suprimir todos los mensajes</b> ?<br/><br/>Esta operación es ireversible.", - "MARK_ALL_AS_READ": "Desea <b>marcar todos los mensajes como leÃdo</b> ?", - "USER_HAS_NO_PROFILE": "Esta identidad no tiene ningún perfil Cesium+. Se puede que no utilice la extensión Cesium+, y <b>asà no consultará su mensaje</b>.<br/><br/>Desea <b>continuar</b> a pesar de todo ?" + "REMOVE": "¿ Desea <b>suprimir este mensaje</b> ?<br/><br/>Esta operación es ireversible.", + "REMOVE_ALL" : "¿ Desea <b>suprimir todos los mensajes</b> ?<br/><br/>Esta operación es ireversible.", + "MARK_ALL_AS_READ": "¿ Desea <b>marcar todos los mensajes como leÃdo</b> ?", + "USER_HAS_NO_PROFILE": "Esta identidad no tiene ningún perfil Cesium+. Puede que no tenga habilitada la extensión Cesium+, y <b>no podrá ver su mensaje</b>.<br/><br/>¿ Desea <b>continuar</b> a pesar de todo ?" }, "INFO": { "MESSAGE_REMOVED": "Mensaje suprimido", @@ -175,18 +233,18 @@ "MESSAGE_SENT": "Mensaje mandado" }, "ERROR": { - "SEND_MSG_FAILED": "Fracaso durante el envÃo del mensaje.", - "LOAD_MESSAGES_FAILED": "Fracaso durante la recuperación de los mensajes.", - "LOAD_MESSAGE_FAILED": "Fracaso durante la recuperación del mensaje.", + "SEND_MSG_FAILED": "Fallo durante el envÃo del mensaje.", + "LOAD_MESSAGES_FAILED": "Fallo durante la recuperación de los mensajes.", + "LOAD_MESSAGE_FAILED": "Fallo durante la recuperación del mensaje.", "MESSAGE_NOT_READABLE": "Lectura del mensaje imposible.", - "USER_NOT_RECIPIENT": "No esta el destinatario de este mensaje : deciframiento imposible.", - "NOT_AUTHENTICATED_MESSAGE": "La autenticidad del mensaje es dudosa o su contenido es corrupto.", - "REMOVE_MESSAGE_FAILED": "Fracaso en la supresión del mensaje", + "USER_NOT_RECIPIENT": "No está el destinatario de este mensaje : deciframiento imposible.", + "NOT_AUTHENTICATED_MESSAGE": "La autenticidad del mensaje es dudosa o su contenido está corrupto.", + "REMOVE_MESSAGE_FAILED": "Fallo en la supresión del mensaje", "MESSAGE_CONTENT_TOO_LONG": "Valor demasiado largo ({{maxLength}} carácteres max).", "MARK_AS_READ_FAILED": "Imposible marcar el mensaje como 'leÃdo'.", - "LOAD_NOTIFICATIONS_FAILED": "Fracaso durante la recuperación de las notificaciones de mensajes.", - "REMOVE_All_MESSAGES_FAILED": "Fracaso durante la supresión de todos los mensajes.", - "MARK_ALL_AS_READ_FAILED": "Fracaso durante el marcaje de los mensajes como leÃdo.", + "LOAD_NOTIFICATIONS_FAILED": "Fallo durante la recuperación de las notificaciones de mensajes.", + "REMOVE_All_MESSAGES_FAILED": "Fallo durante la supresión de todos los mensajes.", + "MARK_ALL_AS_READ_FAILED": "Fallo durante el marcaje de los mensajes como leÃdo.", "RECIPIENT_IS_MANDATORY": "El destinatario es obligatorio." } }, @@ -209,14 +267,14 @@ } }, "ERROR": { - "SEARCH_BLOCKS_FAILED": "Fracaso en la búsqueda de los bloques." + "SEARCH_BLOCKS_FAILED": "Fallo en la búsqueda de los bloques." } }, "GROUP": { - "GENERAL_DIVIDER": "Informaciónes generales", + "GENERAL_DIVIDER": "Informaciones generales", "LOCATION_DIVIDER": "Dirección", "SOCIAL_NETWORKS_DIVIDER": "Redes sociales y página web", - "TECHNICAL_DIVIDER": "Informaciónes técnicas", + "TECHNICAL_DIVIDER": "Informaciones técnicas", "CREATED_TIME": "Creada {{creationTime|formatFromNow}}", "NOTIFICATIONS": { "TITLE": "Invitaciones" @@ -236,7 +294,7 @@ "OPEN_GROUP": "Grupo abierto", "OPEN_GROUP_HELP": "Un grupo abierto es accesible por cualquier miembro de la moneda.", "MANAGED_GROUP": "Grupo administrado", - "MANAGED_GROUP_HELP": "un grupo administrado es gestionado por administradores y moderadores, que pueden aceptar, rechazar o excluir un miembro en su seno.", + "MANAGED_GROUP_HELP": "Un grupo administrado es gestionado por administradores y moderadores, que pueden aceptar, rechazar o excluir un miembro en su seno.", "ENUM": { "OPEN": "Grupo abierto", "MANAGED": "Grupo administrado" @@ -256,7 +314,7 @@ "RECORD_DESCRIPTION_HELP": "Descripción" }, "ERROR": { - "SEARCH_GROUPS_FAILED": "Fracaso en la búsqueda de grupos", + "SEARCH_GROUPS_FAILED": "Fallo en la búsqueda de grupos", "REMOVE_RECORD_FAILED": "Error al eliminar el grupo" }, "INFO": { @@ -265,10 +323,10 @@ }, "REGISTRY": { "CATEGORY": "Actividad principal", - "GENERAL_DIVIDER": "Informaciónes generales", + "GENERAL_DIVIDER": "Informaciones generales", "LOCATION_DIVIDER": "Dirección", "SOCIAL_NETWORKS_DIVIDER": "Redes sociales y sitio web", - "TECHNICAL_DIVIDER": "Informaciónes técnicas", + "TECHNICAL_DIVIDER": "Informaciones técnicas", "BTN_SHOW_WOT": "Personas", "BTN_SHOW_WOT_HELP": "Buscar personas", "BTN_SHOW_PAGES": "Páginas", @@ -292,16 +350,16 @@ "LAST_RECORD_COUNT_LOCATION": "{{count}} página{{count>0?'s':''}} reciente{{count>0?'s':''}}, cerca de {{location}}", "LAST_RECORD_COUNT": "{{count}} página{{count>0?'s':''}} reciente{{count>0?'s':''}}", "POPOVER_FILTERS": { - "BTN_ADVANCED_SEARCH": "Opciones avanzadas?" + "BTN_ADVANCED_SEARCH": "Opciones avanzadas" } }, "VIEW": { "TITLE": "Anuario", "CATEGORY": "Actividad principal :", "LOCATION": "Dirección :", - "MENU_TITLE": "Opciónes", + "MENU_TITLE": "Opciones", "POPOVER_SHARE_TITLE": "{{title}}", - "REMOVE_CONFIRMATION" : "Desea suprimir esta página ?<br/><br/>Esta operación es ireversible." + "REMOVE_CONFIRMATION" : "¿ Desea suprimir esta página ?<br/><br/>Esta operación es ireversible." }, "TYPE": { "TITLE": "Nueva página", @@ -326,7 +384,7 @@ "RECORD_CITY": "Ciudad", "RECORD_CITY_HELP": "Ciudad", "RECORD_SOCIAL_NETWORKS": "Redes sociales y sitio web", - "RECORD_PUBKEY": "Llave pública" , + "RECORD_PUBKEY": "Llave pública", "RECORD_PUBKEY_HELP": "Llave pública para recibir pagos" }, "WALLET": { @@ -334,11 +392,11 @@ "PAGE_DIVIDER_HELP": "Las páginas se refieren a colectivos que aceptan moneda o la promocionan: tiendas, empresas, negocios, asociaciones, instituciones. Se almacenan fuera de la red de la moneda, en <a ui-sref=\"app.es_network\">la red Cesium+</a>." }, "ERROR": { - "LOAD_CATEGORY_FAILED": "Fracaso en la carga de la lista de actividades", - "LOAD_RECORD_FAILED": "Fracaso durante la carga de la página", - "LOOKUP_RECORDS_FAILED": "Fracaso durante la ejecución de la búsqueda.", - "REMOVE_RECORD_FAILED": "Fracaso en la supresión de la página", - "SAVE_RECORD_FAILED": "Fracaso durante el respaldo", + "LOAD_CATEGORY_FAILED": "Fallo en la carga de la lista de actividades", + "LOAD_RECORD_FAILED": "Fallo durante la carga de la página", + "LOOKUP_RECORDS_FAILED": "Fallo durante la ejecución de la búsqueda.", + "REMOVE_RECORD_FAILED": "Fallo en la supresión de la página", + "SAVE_RECORD_FAILED": "Fallo durante el respaldo", "RECORD_NOT_EXISTS": "Página inexistente", "GEO_LOCATION_NOT_FOUND": "Ciudad o código postal no encontrado" }, @@ -361,9 +419,9 @@ "DESCRIPTION": "Sobre mÃ", "DESCRIPTION_HELP": "Sobre mÃ…", "SOCIAL_HELP": "http://...", - "GENERAL_DIVIDER": "Informaciónes generales", + "GENERAL_DIVIDER": "Informaciones generales", "SOCIAL_NETWORKS_DIVIDER": "Redes sociales, sitios web", - "TECHNICAL_DIVIDER": "Informaciónes técnicas", + "TECHNICAL_DIVIDER": "Informaciones técnicas", "MODAL_AVATAR": { "TITLE": "Foto de perfil", "SELECT_FILE_HELP": "Por favor, <b>elija una imagen</b>, haciendo clic sobre el cuadro de abajo:", @@ -372,12 +430,14 @@ "RESULT_HELP": "<b>Aquà está el resultado</b> tal como se verá sobre su perfil :" }, "CONFIRM": { - "DELETE": "¿Desea <b>eliminar su perfil Cesium+?</b><br/><br/>Esta operación es irreversible." + "DELETE": "¿Desea <b>eliminar su perfil Cesium+?</b><br/><br/>Esta operación es irreversible.", + "DELETE_BY_MODERATOR": "¿Desea <b>eliminar este perfil Cesium+?</b><br/><br/>Esta operación es irreversible." }, "ERROR": { - "REMOVE_PROFILE_FAILED": "Error de eliminación de perfil", - "LOAD_PROFILE_FAILED": "Fracaso en la carga del perfil usuario.", - "SAVE_PROFILE_FAILED": "Fracaso durante el respaldo", + "DELETE_PROFILE_FAILED": "Error durante la eliminación del perfil", + "REMOVE_PROFILE_FAILED": "Error de eliminación del perfil", + "LOAD_PROFILE_FAILED": "Fallo en la carga del perfil usuario.", + "SAVE_PROFILE_FAILED": "Fallo durante el respaldo", "INVALID_SOCIAL_NETWORK_FORMAT": "Formato inválido: por favor, indique una dirección válida.<br/><br/>Ejemplos :<ul><li>- Una página Facebook (https://www.facebook.com/user)</li><li>- Una página web (http://www.misitio.es)</li><li>- Una dirección de correo (joe@dalton.com)</li></ul>", "IMAGE_RESIZE_FAILED": "Falló el redimensionado de la imagen" }, @@ -389,9 +449,14 @@ "WARNING_PUBLIC_DATA": "La información de su perfil <b>es pública</b>: visible también por personas <b>sin cuenta</b>.<br/>{{'PROFILE.PROFILE_DIVIDER_HELP'|translate}}" } }, + "LIKE": { + "ERROR": { + "FAILED_TOGGLE_LIKE": "Imposible ejecutar esta acción." + } + }, "LOCATION": { "BTN_GEOLOC_ADDRESS": "Actualizar desde la dirección", - "USE_GEO_POINT": "Aparecer en el mapa {{'COMMON.APP_NAME'|translate}} ?", + "USE_GEO_POINT": "Aparecer en el mapa {{'COMMON.APP_NAME'|translate}}", "LOADING_LOCATION": "Encontrar la dirección…", "LOCATION_DIVIDER": "Dirección", "ADDRESS": "Calle", @@ -435,7 +500,7 @@ } }, "CONFIRM": { - "DELETE_SUBSCRIPTION": "Deseas <b>eliminar</b> esta suscripción ?" + "DELETE_SUBSCRIPTION": "¿ Deseas <b>eliminar</b> esta suscripción ?" }, "ERROR": { "LOAD_SUBSCRIPTIONS_FAILED": "Error al cargar servicios en lÃnea", @@ -454,12 +519,20 @@ "PROVIDER": "Proveedor de servicio :" } }, + "ES_PEER": { + "DOCUMENT_COUNT": "Número de documentos", + "DOCUMENTS": "Documentos", + "EMAIL_SUBSCRIPTION_COUNT": "{{emailSubscription}} suscrito/a{{emailSubscription ? 's' : ''}} a notificaciones por correo", + "NAME": "Nombre", + "SOFTWARE": "Software" + }, "ES_SETTINGS": { "PLUGIN_NAME": "Cesium+", "PLUGIN_NAME_HELP": "Perfiles, notificaciones, mensajes privados", "ENABLE_TOGGLE": "Activar la extensión", "ENABLE_MESSAGE_TOGGLE": "Activar los mensajes privados", - "ENABLE_SETTINGS_TOGGLE": "Activar el almacenamiento a distancia de los ajustes", + "ENABLE_REMOTE_STORAGE": "Activar el almacenamiento remoto", + "ENABLE_REMOTE_STORAGE_HELP": "Permite almacenar (con cifrado) sus ajustes en los nodos Cesium+", "PEER": "Dirección del nodo de datos", "POPUP_PEER": { "TITLE" : "Nodo de datos", @@ -471,8 +544,8 @@ "HELP_TEXT": "Active los tipos de notificaciones que desea recibir:", "ENABLE_TX_SENT": "Notificar la validación de los <b>pagos emitidos</b>", "ENABLE_TX_RECEIVED": "Notificar la validación de los <b>pagos recibidos</b>", - "ENABLE_CERT_SENT": "Notificar la validación de las <b>certificaciónes emitidas</b>", - "ENABLE_CERT_RECEIVED": "Notificar la validación de las <b>certificaciónes recibidas</b>", + "ENABLE_CERT_SENT": "Notificar la validación de las <b>certificaciones emitidas</b>", + "ENABLE_CERT_RECEIVED": "Notificar la validación de las <b>certificaciones recibidas</b>", "ENABLE_HTML5_NOTIFICATION": "Avisar con cada nueva notificación", "ENABLE_HTML5_NOTIFICATION_HELP": "Abre una pequeña ventana emergente con cada nueva notificación." }, @@ -501,7 +574,25 @@ "TX_RECEIVED_MULTI": "Ha <b>recibido un pago</b> de <b>{{params[1]}}</b>.", "CERT_SENT": "Su <b>certificación</b> a <span ng-class=\"{'gray': !notification.uid, 'positive':notification.uid}\" ><i class=\"icon\" ng-class=\"{'ion-person': notification.uid, 'ion-key': !notification.uid}\"></i> {{name||uid||params[1]}}</span> fue efectuada.", "CERT_RECEIVED": "Ha <b>recibido una certificación</b> de <span ng-class=\"{'gray': !notification.uid, 'positive':notification.uid}\"><i class=\"icon\" ng-class=\"{'ion-person': notification.uid, 'ion-key': !notification.uid}\"></i> {{name||uid||params[1]}}</span>.", + "USER": { + "ABUSE_RECEIVED": "<span class=\"positive\"><i class=\"icon ion-person\"></i> {{name||params[1]}}</span> ha reportardo su perfil", + "DELETION_RECEIVED": "<span class=\"positive\"><i class=\"icon ion-person\"></i> {{name||params[1]}}</span> ha reportado un perfil para suprimir : <b>{{params[2]}}</b>", + "FOLLOW_RECEIVED": "<span class=\"positive\"><i class=\"icon ion-person\"></i> {{name||params[1]}}</span> sigue la actividad de su perfil", + "LIKE_RECEIVED": "A <span class=\"positive\"><i class=\"icon ion-person\"></i> {{name||params[1]}}</span> le ha gustado su perfil</b>", + "MODERATION_RECEIVED": "<span class=\"positive\"><i class=\"icon ion-person\"></i> {{name||params[1]}}</span> os pide moderación sobre el perfil : <b>{{params[2]}}</b><br/><b class=\"dark ion-quote\"> </b><span class=\"text-italic\">{{params[3]}}</span>", + "STAR_RECEIVED": "<span class=\"positive\"><i class=\"icon ion-person\"></i> {{name||params[1]}}</span> os ha puntuado con ({{params[3]}} <b class=\"ion-star\">)" + }, "PAGE": { + "ABUSE_RECEIVED": "<span class=\"positive\"><i class=\"icon ion-person\"></i> {{name||params[1]}}</span> ha reportardo su página : <b>{{params[2]}}</b>", + "DELETION_RECEIVED": "<span class=\"positive\"><i class=\"icon ion-person\"></i> {{name||params[1]}}</span> ha reportado una página para suprimir : <b>{{params[2]}}</b>", + "FOLLOW_CLOSE": "<span class=\"positive\"><i class=\"icon ion-person\"></i> {{name||params[1]}}</span> ha cerrado la página : <b>{{params[2]}}</b>", + "FOLLOW_NEW": "<span class=\"positive\"><i class=\"icon ion-person\"></i> {{name||params[1]}}</span> ha añadido la página : <b>{{params[2]}}</b>", + "FOLLOW_NEW_COMMENT": "<span class=\"positive\"><i class=\"icon ion-person\"></i> {{name||params[1]}}</span> ha comentado la página : <b>{{params[2]}}</b>", + "FOLLOW_RECEIVED": "<span class=\"positive\"><i class=\"icon ion-person\"></i> {{name||params[1]}}</span> sigue su página : <b>{{params[2]}}</b>", + "FOLLOW_UPDATE": "<span class=\"positive\"><i class=\"icon ion-person\"></i> {{name||params[1]}}</span> ha modificado la página : <b>{{params[2]}}</b>", + "FOLLOW_UPDATE_COMMENT": "<span class=\"positive\"><i class=\"icon ion-person\"></i> {{name||params[1]}}</span> ha modificado su comentario en la página : <b>{{params[2]}}</b>", + "MODERATION_RECEIVED": "<span class=\"positive\"><i class=\"icon ion-person\"></i> {{name||params[1]}}</span> os pide moderación sobre la página : <b>{{params[2]}}</b><br/><b class=\"dark ion-quote\"> </b><span class=\"text-italic\">{{params[3]}}</span>", + "NEW_COMMENT": "<span ng-class=\"{'gray': !notification.uid, 'positive':notification.uid}\"><i class=\"icon\" ng-class=\"{'ion-person': notification.uid, 'ion-key': !notification.uid}\"></i> {{name||uid||params[1]}}</span> ha comentado su referencia : <b>{{params[2]}}</b>", "UPDATE_COMMENT": "<span ng-class=\"{'gray': !notification.uid, 'positive':notification.uid }\"><i class=\"icon\" ng-class=\"{'ion-person': notification.uid, 'ion-key': !notification.uid}\"></i> {{name||uid||params[1]}}</span> ha modificado su comentario sobre su referencia : <b>{{params[2]}}</b>", "NEW_REPLY_COMMENT": "<span ng-class=\"{'gray': !notification.uid, 'positive':notification.uid}\"><i class=\"icon\" ng-class=\"{'ion-person': notification.uid, 'ion-key': !notification.uid}\"></i> {{name||uid||params[1]}}</span> ha contestado a su comentario sobre la referencia : <b>{{params[2]}}</b>", diff --git a/www/plugins/es/js/controllers/like-controllers.js b/www/plugins/es/js/controllers/like-controllers.js index 439f9a80fb3d18e71ea2a0d96473207a1ca062c1..2982ce9f7c614c2bd2308cccf2e7006137b62619 100644 --- a/www/plugins/es/js/controllers/like-controllers.js +++ b/www/plugins/es/js/controllers/like-controllers.js @@ -112,6 +112,15 @@ function ESLikesController($scope, $q, $timeout, $translate, $ionicPopup, UIUtil $scope.initLikes(); if (!$scope.likeData.id) throw new Error("Missing 'likeData.id' in scope. Cannot apply toggle"); + // Make sure tobe auth before continue + if (!csWallet.isLogin()) { + return csWallet.auth({minData: true}) + .then(function(){ + UIUtils.loading.hide(); + return $scope.reportAbuse(event, options); // loop + }); + } + options = options || {}; options.kind = options.kind && options.kind.toUpperCase() || 'LIKE'; var key = options.kind.toLowerCase() + 's'; @@ -124,14 +133,19 @@ function ESLikesController($scope, $q, $timeout, $translate, $ionicPopup, UIUtil return $q.reject(); } - // Select the wallet, if many if (!options.pubkey) { - return (csWallet.children.count() ? Modals.showSelectWallet({displayBalance: false}) : $q.when(csWallet)) - .then(function(wallet) { - if (!wallet) throw 'CANCELLED'; - options.pubkey = wallet.data.pubkey; - return $scope.toggleLike(event, options); // Loop - }); + if (csWallet.children.count() === 0) { + options.pubkey = csWallet.data.pubkey; + } + // Select the wallet, if many + else { + return Modals.showSelectWallet({displayBalance: false}) + .then(function (wallet) { + if (!wallet) throw 'CANCELLED'; + options.pubkey = wallet.data.pubkey; + return $scope.reportAbuse(event, options); // Loop + }); + } } var wallet = csWallet.getByPubkey(options.pubkey); @@ -225,19 +239,34 @@ function ESLikesController($scope, $q, $timeout, $translate, $ionicPopup, UIUtil }; $scope.reportAbuse = function(event, options) { + + // Make sure tobe auth before continue + if (!csWallet.isLogin()) { + return csWallet.auth({minData: true}) + .then(function(){ + UIUtils.loading.hide(); + return $scope.reportAbuse(event, options); // loop + }); + } + if (!$scope.likeData || !$scope.likeData.abuses || $scope.likeData.abuses.wasHitCount) return; // skip if ($scope.likeData.abuses.wasHitCount) return; // already report options = options || {}; - // Select the wallet, if many if (!options.pubkey) { - return (csWallet.children.count() ? Modals.showSelectWallet({displayBalance: false}) : $q.when(csWallet)) - .then(function(wallet) { - if (!wallet) throw 'CANCELLED'; - options.pubkey = wallet.data.pubkey; - return $scope.reportAbuse(event, options); // Loop - }); + if (csWallet.children.count() === 0) { + options.pubkey = csWallet.data.pubkey; + } + // Select the wallet, if many + else { + return Modals.showSelectWallet({displayBalance: false}) + .then(function (wallet) { + if (!wallet) throw 'CANCELLED'; + options.pubkey = wallet.data.pubkey; + return $scope.reportAbuse(event, options); // Loop + }); + } } var wallet = csWallet.getByPubkey(options.pubkey); diff --git a/yarn.lock b/yarn.lock index 5a30262ea604164fc13b1f3a1280b90ca9b21376..7304f38e7c77013bb868c4e3f65f70f8d3ed7d0f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -301,10 +301,10 @@ wrap-ansi "^6.0.0" write-file-atomic "^3.0.0" -"@ionic/cli@^6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@ionic/cli/-/cli-6.5.0.tgz#8198bef2034e819a324bb7cb80a6de0a69db0180" - integrity sha512-FyalQsiBAD/YhJ4FKpfRsFDXLEQ68E8tVivl8vfERAo8MLrQUwO0TSqtZKh5dWmRfkpMFnJa4joPo/9Qj6sn5Q== +"@ionic/cli@^6.6.0": + version "6.6.0" + resolved "https://registry.yarnpkg.com/@ionic/cli/-/cli-6.6.0.tgz#508fd89e3fac51dd3758acf637d8d47469ee656c" + integrity sha512-AmF4tMdIGf2XTf6Riune6MwkKl0WImYwnStNDm0871qS8GRFtRSTmMOWnPfkW4lGrIo+OkKfi+NOdziLJ+KmFA== dependencies: "@ionic/cli-framework" "4.1.2" "@ionic/cli-framework-prompts" "2.1.1" @@ -7049,7 +7049,7 @@ node-gyp@^3.8.0: tar "^2.0.0" which "1" -node-sass@^4.13.0, node-sass@^4.8.3: +node-sass@^4.13.1, node-sass@^4.8.3: version "4.13.1" resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.13.1.tgz#9db5689696bb2eec2c32b98bfea4c7a2e992d0a3" integrity sha512-TTWFx+ZhyDx1Biiez2nB0L3YrCZ/8oHagaDalbuBSlqXgUPsdkUSzJsVxeDO9LtPB49+Fh3WQl3slABo6AotNw== @@ -10131,6 +10131,11 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= +uuid@3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" + integrity sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA== + uuid@^2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a"