Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
Loading items

Target

Select target project
  • cordeliaze/cesium
  • pfouque06/cesium
  • wellno1/cesium
  • 1000i100/cesium
  • vincentux/cesium
  • calbasi/cesium
  • thomasbromehead/cesium
  • matograine/cesium
  • clients/cesium-grp/cesium
  • cedricmenec/cesium
  • Pamplemousse/cesium
  • etienneleba/cesium
  • tnntwister/cesium
  • scanlegentil/cesium
  • morvanc/cesium
  • yyy/cesium
  • Axce/cesium
  • Bertrandbenj/cesium
  • Lupus/cesium
  • elmau/cesium
  • MartinDelille/cesium
  • tykayn/cesium
  • numeropi/cesium
  • Vivakvo/cesium
  • pokapow/cesium
  • pini-gh/cesium
  • anam/cesium
  • RavanH/cesium
  • bpresles/cesium
  • am97/cesium
  • tuxmain/cesium
  • jytou/cesium
  • oliviermaurice/cesium
  • 666titi999/cesium
  • Yvv/cesium
35 results
Select Git revision
Loading items
Show changes
Showing
with 2935 additions and 338 deletions
{
"name": "Cesium",
"short_name": "Cesium",
"version": "1.6.9",
"version": "1.7.14",
"description": "Manage your Duniter Wallet on a libre currency, like Ğ1",
"background": {
"scripts": ["background.js"]
......@@ -13,14 +13,23 @@
"32": "img/logo_32px.png",
"60": "img/logo_60px.png",
"96": "img/logo_96px.png",
"128": "img/logo_128px.png"
"128": "img/logo_128px.png",
"192": "img/logo.svg"
}
},
"icons": {
"32": "img/logo_32px.png",
"60": "img/logo_60px.png",
"96": "img/logo_96px.png",
"128": "img/logo_128px.png"
"128": "img/logo_128px.png",
"192": "img/logo.svg"
},
"protocol_handlers": [
{
"protocol": "web+june",
"name": "web Ğ1",
"uriTemplate": "index.html#/app/home?uri=%s"
}
],
"manifest_version": 2
}
......@@ -15,11 +15,16 @@ fi
cd ${PROJECT_DIR}
if [[ ! -d "${ANDROID_SDK_CLI_ROOT}/bin" ]]; then
echo "Failed to find the Android SDK CLI. Please run first: \`scripts/install-android-sdk-tools.sh\`"
exit 1
fi
# Run the build
echo "Cleaning previous android APK files..."
rm -rf ${ANDROID_OUTPUT_APK_DEBUG}/*.apk
rm -rf ${ANDROID_OUTPUT_APK_RELEASE}/*.apk
rm -f ${ANDROID_OUTPUT_APK_DEBUG}/*.apk
rm -f ${ANDROID_OUTPUT_APK_RELEASE}/*.apk*
echo "Running cordova build android..."
ionic cordova build android --warning-mode=none --color $*
#ionic cordova build android --warning-mode=none --color --verbose
ionic cordova build android --warning-mode=none --color $* -- -- --packageType=apk
#ionic cordova build android --warning-mode=none --color --verbose -- -- --packageType=apk
......@@ -9,16 +9,20 @@ export PROJECT_DIR
# Preparing environment
. "${PROJECT_DIR}/scripts/env-global.sh"
BUILD_TOOLS_DIR="${ANDROID_SDK_ROOT}/build-tools/${ANDROID_SDK_VERSION}/"
if test -z "${CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL}"; then
echo "ERROR: Missing Gradle distribution URL - please export env variable 'CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL'"
fi
echo "Preparing Android environment:"
echo " - using Android SDK: ${ANDROID_SDK_ROOT}"
echo " - using Android SDK tools: ${ANDROID_SDK_TOOLS_ROOT}"
echo " - using Gradle: ${GRADLE_HOME}"
echo " - using Java: ${JAVA_HOME}"
echo " - project dir: ${PROJECT_DIR}"
echo "--- Preparing Android environment:"
echo " Root: ${PROJECT_DIR}"
echo " NodeJS: ${NODE_VERSION} with options: ${NODE_OPTIONS}"
echo " Android SDK: ${ANDROID_SDK_ROOT}"
echo " Android CLI: ${ANDROID_SDK_CLI_ROOT}"
echo " Build Tools: ${ANDROID_BUILD_TOOLS_ROOT}"
echo " Gradle: ${GRADLE_HOME} with options: ${GRADLE_OPTS}"
echo " Java: ${JAVA_HOME}"
# Make sure javac exists
JAVAC_PATH=$(which javac)
......@@ -28,18 +32,20 @@ if test -z "${JAVAC_PATH}"; then
fi
# Prepare Android SDK tools
if ! test -d "${ANDROID_SDK_TOOLS_ROOT}"; then
cd "${PROJECT_DIR}/scripts"
./install-android-sdk-tools.sh
if ! test -d "${ANDROID_SDK_CLI_ROOT}"; then
. ${PROJECT_DIR}/scripts/install-android-sdk-tools.sh
if test $? -ne 0; then
echo "ERROR: Unable to install Android SDK Tools"
echo "ERROR: Unable to install Android SDK Tools & CLI"
fi
else
# Add SDK CLI to path
export PATH=${ANDROID_SDK_CLI_ROOT}/bin:$PATH
fi
# Install Gradle
if test -z "$(which gradle)" && ! test -d "${GRADLE_HOME}"; then
cd "${PROJECT_DIR}/scripts"
echo "Installing gradle... ${GRADLE_HOME}"
echo "--- Installing gradle... ${GRADLE_HOME}"
test -e "gradle-${GRADLE_VERSION}-all.zip" || wget -kL ${CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL}
GRADLE_PARENT=$(dirname $GRADLE_HOME)
test -e "${GRADLE_PARENT}" || mkdir -p ${GRADLE_PARENT}
......@@ -55,10 +61,9 @@ if test -z "$(which gradle)" && ! test -d "${GRADLE_HOME}"; then
fi
fi
# Prepare Android platform
if ! test -d "${PROJECT_DIR}/platforms/android"; then
echo "Adding Cordova Android platform..."
echo "--- Adding Cordova Android platform..."
cd "${PROJECT_DIR}"
ionic cordova prepare android --color --verbose
if test $? -ne 0; then
......@@ -78,6 +83,18 @@ else
echo "No directory '${ANDROID_OVERWRITE_DIR}' not found. Please create it, with a file 'release-signing.properties' for release signing"
fi
export PATH=${GRADLE_HOME}/bin:${PATH}
echo
echo "--- Checking Android requirements..."
cordova requirements android --verbose
if test $? -ne 0; then
echo "ERROR: Check Cordova requirements failed"
fi
# Add Gradle to path
PATH=${GRADLE_HOME}/bin:${PATH}
# Export useful variables
export PATH \
BUILD_TOOLS_DIR
echo "Android environment is ready!"
echo "--- Android environment is ready!"
......@@ -20,30 +20,38 @@ REPO="duniter/cesium"
REPO_API_URL="https://api.github.com/repos/${REPO}"
REPO_PUBLIC_URL="https://github.com/${REPO}"
NODEJS_VERSION=12
ANDROID_NDK_VERSION=r19c
ANDROID_SDK_VERSION=r29.0.2
ANDROID_SDK_TOOLS_VERSION=4333796
ANDROID_SDK_ROOT=/usr/lib/android-sdk
ANDROID_ALTERNATIVE_SDK_ROOT="${HOME}/Android/Sdk"
ANDROID_SDK_TOOLS_ROOT=${ANDROID_SDK_ROOT}/build-tools
ANDROID_OUTPUT_APK=${PROJECT_DIR}/platforms/android/app/build/outputs/apk
NODE_VERSION=16
#NODE_OPTIONS=--max-old-space-size=4096
IONIC_CLI_VERSION=6.20.9
ANDROID_NDK_VERSION=21.0.6113669 # Should be compatible with 'cordova-sqlite-storage' plugin
ANDROID_SDK_VERSION=33.0.2
ANDROID_SDK_CLI_VERSION=8512546 # See https://developer.android.com/studio#command-tools
ANDROID_SDK_ROOT="${HOME}/Android/Sdk"
ANDROID_ALTERNATIVE_SDK_ROOT=/usr/lib/android-sdk
ANDROID_SDK_CLI_ROOT=${ANDROID_SDK_ROOT}/cmdline-tools/${ANDROID_SDK_CLI_VERSION}
ANDROID_BUILD_TOOLS_ROOT="${ANDROID_SDK_ROOT}/build-tools/${ANDROID_SDK_VERSION}"
ANDROID_OUTPUT_APK_PREFIX=app
ANDROID_OUTPUT_APK=${PROJECT_DIR}/platforms/android/${ANDROID_OUTPUT_APK_PREFIX}/build/outputs/apk
ANDROID_OUTPUT_APK_DEBUG=${ANDROID_OUTPUT_APK}/debug
ANDROID_OUTPUT_APK_RELEASE=${ANDROID_OUTPUT_APK}/release
ANDROID_OUTPUT_MIN_SDK_VERSION=22 # Used by release-android-sign.sh
ANDROID_OUTPUT_MAX_SDK_VERSION=34 # Used by release-android-sign.sh
DIST_WEB=${PROJECT_DIR}/dist/web/build
DIST_ANDROID=${PROJECT_DIR}/dist/android
DIST_ANDROID=${PROJECT_DIR}/dist/android/build # Where APK are stored
SOURCES_ANDROID=${PROJECT_DIR}/dist/android/sources # Where git cesium-android is checkout
# Addons Mozilla Web extension ID
WEB_EXT_ID="{6f9922f7-a054-4609-94ce-d269993246a5}"
WEB_EXT_ID=${WEB_EXT_ID:-"{6f9922f7-a054-4609-94ce-d269993246a5}"}
# /!\ WARN can be define in your <project>/.local/env.sh file
#JAVA_HOME=
GRADLE_VERSION=6.5.1
GRADLE_VERSION=6.7.1
GRADLE_HOME=${HOME}/.gradle/${GRADLE_VERSION}
CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL=https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-all.zip
GRADLE_OPTS=-Dorg.gradle.jvmargs=-Xmx512m
# Override with a local file, if any
if test -f "${PROJECT_DIR}/.local/env.sh"; then
......@@ -54,7 +62,7 @@ else
fi
# Checking Java installed
if test -z "${JAVA_HOME}"; then
if test -d "${JAVA_HOME}"; then
JAVA_CMD=`which java`
if test -z "${JAVA_CMD}"; then
echo "ERROR: No Java installed. Please install java, or set env variable JAVA_HOME "
......@@ -66,10 +74,12 @@ if test -z "${JAVA_HOME}"; then
if test $? -ne 0 || test -z "${JAVA_VERSION}"; then
echo "No Java JRE 1.8 found in machine. This is required for Android artifacts."
else
if ! test "${JAVA_VERSION}" -eq "11"; then
JAVA_MAJOR_VERSION=$(echo ${JAVA_VERSION} | awk '{split($0, array, ".")} END{print array[1]}')
JAVA_MINOR_VERSION=$(echo ${JAVA_VERSION} | awk '{split($0, array, ".")} END{print array[2]}')
if ! test "${JAVA_MAJOR_VERSION}" == "1" || ! test "${JAVA_MINOR_VERSION}" == "8"; then
echo "ERROR: Require a Java JRE in version 1.8, but found ${JAVA_VERSION}. You can override your default JAVA_HOME in '.local/env.sh'."
if ! test "${JAVA_MAJOR_VERSION}" -eq "11" || ! test "${JAVA_MINOR_VERSION}" -eq "0"; then
echo "ERROR: Require a Java SDK in version 11, but found ${JAVA_VERSION}. You can override your default JAVA_HOME in '.local/env.sh'."
fi
fi
fi
fi
......@@ -83,18 +93,18 @@ if test -z "${ANDROID_SDK_ROOT}" || ! test -d "${ANDROID_SDK_ROOT}"; then
fi
fi
# Add Java, Android SDK tools to path
PATH=${ANDROID_SDK_TOOLS_ROOT}/bin:${GRADLE_HOME}/bin:${JAVA_HOME}/bin$:$PATH
PATH=${ANDROID_SDK_CLI_ROOT}/bin:${GRADLE_HOME}/bin:${JAVA_HOME}/bin$:$PATH
# Export useful variables
export PATH \
PROJECT_DIR \
JAVA_HOME \
ANDROID_SDK_ROOT \
ANDROID_SDK_TOOLS_ROOT \
ANDROID_SDK_CLI_ROOT \
CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL
# Node JS
export NVM_DIR="$HOME/.nvm"
if test -d "${NVM_DIR}"; then
......@@ -103,26 +113,32 @@ if test -d "${NVM_DIR}"; then
. "${NVM_DIR}/nvm.sh"
# Switch to expected version
nvm use ${NODEJS_VERSION}
nvm use ${NODE_VERSION}
# Or install it
if test $? -ne 0; then
nvm install ${NODEJS_VERSION}
nvm install ${NODE_VERSION}
fi
else
echo "nvm (Node version manager) not found (directory ${NVM_DIR} not found). Please install, and retry"
fi
# Checking if some global dependencies are missing
GLOBAL_TOOLS="yarn gulp ionic cordova web-ext cordova-res native-run"
MISSING_GLOBAL_TOOLS=
for GLOBAL_TOOL in ${GLOBAL_TOOLS}
do
GLOBAL_TOOL_PATH=$(which ${GLOBAL_TOOL})
if test -z "${GLOBAL_TOOL_PATH}"; then
echo "- Missing global dependency: ${GLOBAL_TOOL}"
MISSING_GLOBAL_TOOLS="${GLOBAL_TOOL} ${MISSING_GLOBAL_TOOLS}"
fi
done
# Install global dependencies
YARN_PATH=`which yarn`
IONIC_PATH=`which ionic`
CORDOVA_PATH=`which cordova`
CORDOVA_RES_PATH=`which cordova-res`
NATIVE_RUN_PATH=`which native-run`
WEB_EXT_PATH=`which web-ext`
if test -z "${YARN_PATH}" || test -z "${IONIC_PATH}" || test -z "${CORDOVA_PATH}" || test -z "${CORDOVA_RES_PATH}" || test -z "${NATIVE_RUN_PATH}" || test -z "${WEB_EXT_PATH}"; then
if ! test -z "${MISSING_GLOBAL_TOOLS}"; then
echo "Installing global dependencies..."
npm install -g yarn cordova cordova-res @ionic/cli web-ext native-run
npm install -g yarn gulp cordova @ionic/cli@$IONIC_CLI_VERSION web-ext cordova-res native-run
if ! test $? == 0; then
echo "ERROR: Unable to install global dependencies"
#exit 1
......@@ -134,26 +150,44 @@ fi
# Install project dependencies
if ! test -d "${PROJECT_DIR}/node_modules"; then
echo "Installing project dependencies..."
cd "${PROJECT_DIR}"
echo "--- Installing project dependencies..."
cd ${PROJECT_DIR}
yarn install
fi
# Install project submodules
if ! test -d "${PROJECT_DIR}/platforms/android" || ! test -d "${PROJECT_DIR}/dist/desktop"; then
#echo "Installing project submodules..."
#cd "${PROJECT_DIR}"
#git submodule init && git submodule sync && git submodule update --remote --merge
# Install platform Android
if ! test -d "${PROJECT_DIR}/platforms/android"; then
echo "-- Installing platform Android..."
cd ${PROJECT_DIR}
ionic cordova platform add android
if ! test $? == 0; then
echo "ERROR: Unable to install Android platform. Will not be able to build Android artifacts!"
#exit 1
fi
fi
if ! test -d "${PROJECT_DIR}/dist/desktop"; then
echo "-- Checkout submodules (dist/desktop) ..."
cd "${PROJECT_DIR}"
git submodule init && git submodule sync && git submodule update --remote --merge
if ! test $? == 0; then
echo "ERROR: Unable to sync git submodule. Will not be able to build android and desktop artifacts!"
echo "ERROR: Unable to sync git submodule. Will not be able to build desktop artifacts!"
#exit 1
fi
fi
export PROJECT_DIR PROJECT_NAME REPO REPO_API_URL REPO_PUBLIC_URL NODEJS_VERSION \
ANDROID_NDK_VERSION ANDROID_SDK_VERSION ANDROID_SDK_TOOLS_VERSION ANDROID_SDK_ROOT ANDROID_ALTERNATIVE_SDK_ROOT \
ANDROID_SDK_TOOLS_ROOT ANDROID_OUTPUT_APK ANDROID_OUTPUT_APK_DEBUG ANDROID_OUTPUT_APK_RELEASE DIST_WEB \
DIST_ANDROID WEB_EXT_ID
export PATH \
PROJECT_DIR PROJECT_NAME \
REPO REPO_API_URL REPO_PUBLIC_URL \
NODE_VERSION \
JAVA_HOME \
ANDROID_NDK_VERSION ANDROID_SDK_VERSION ANDROID_SDK_CLI_VERSION \
ANDROID_HOME ANDROID_SDK_ROOT ANDROID_ALTERNATIVE_SDK_ROOT ANDROID_SDK_CLI_ROOT \
ANDROID_OUTPUT_APK ANDROID_OUTPUT_APK_DEBUG ANDROID_OUTPUT_APK_RELEASE \
CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL \
GRADLE_HOME GRADLE_OPTS \
DIST_WEB DIST_ANDROID \
WEB_EXT_ID
echo "Project environment is ready!"
#!/bin/bash
#!/bin/bash -e
# Load global variables
. "$(dirname $0)/env-global.sh"
......@@ -8,28 +8,34 @@ if [[ "_" == "_${ANDROID_SDK_ROOT}" ]]; then
echo "Please set env variable ANDROID_SDK_ROOT"
exit 1
fi
if [[ "_" == "_${ANDROID_SDK_TOOLS_ROOT}" ]]; then
echo "Please set env variable ANDROID_SDK_TOOLS_ROOT"
if [[ "_" == "_${ANDROID_SDK_CLI_ROOT}" ]]; then
echo "Please set env variable ANDROID_SDK_CLI_ROOT"
exit 1
fi
if [[ ! -d "${ANDROID_SDK_TOOLS_ROOT}/bin" ]]; then
echo "Installing Android SDK tools... ${ANDROID_SDK_TOOLS_ROOT}"
test -e "sdk-tools-linux-${ANDROID_SDK_TOOLS_VERSION}.zip" || wget -kL https://dl.google.com/android/repository/sdk-tools-linux-${ANDROID_SDK_TOOLS_VERSION}.zip
# Get parent folder
ANDROID_SDK_TOOLS_PARENT=$(dirname $ANDROID_SDK_ROOT)
test -e "${ANDROID_SDK_TOOLS_PARENT}" || mkdir -p "${ANDROID_SDK_TOOLS_PARENT}"
test -e "${ANDROID_SDK_TOOLS_ROOT}" || unzip -qq sdk-tools-linux-${ANDROID_SDK_TOOLS_VERSION}.zip -d "${ANDROID_SDK_TOOLS_PARENT}"
test -e "${ANDROID_SDK_TOOLS_ROOT}" && rm "sdk-tools-linux-${ANDROID_SDK_TOOLS_VERSION}.zip"
if [[ ! -d "${ANDROID_SDK_CLI_ROOT}/bin" ]]; then
echo "-------------------------------------------"
echo "Installing Android SDK CLI... ${ANDROID_SDK_CLI_ROOT}"
mkdir -vp "${ANDROID_SDK_CLI_ROOT}"
ANDROID_SDK_CLI_FILE="commandlinetools-linux-${ANDROID_SDK_CLI_VERSION}_latest.zip"
test -e "${ANDROID_SDK_CLI_FILE}" || wget -kL https://dl.google.com/android/repository/${ANDROID_SDK_CLI_FILE}
test -e "${ANDROID_SDK_CLI_ROOT}" || sudo mkdir -p "${ANDROID_SDK_CLI_ROOT}"
test -e "/tmp/cmdline-tools" && sudo rm -rf /tmp/cmdline-tools
test -e "${ANDROID_SDK_CLI_ROOT}" && sudo unzip -qq ${ANDROID_SDK_CLI_FILE} -d /tmp
test -e "/tmp/cmdline-tools" && sudo mv /tmp/cmdline-tools/* "${ANDROID_SDK_CLI_ROOT}"
test -e "${ANDROID_SDK_CLI_FILE}" && sudo rm "${ANDROID_SDK_CLI_FILE}"
fi
export PATH=${ANDROID_SDK_TOOLS_ROOT}/bin:$PATH
if [[ ! -d "${ANDROID_SDK_CLI_ROOT}/bin" ]]; then
echo "Failed to install Android SDK CLI. If you are not root, try with \`sudo -E ./install-android-sdk-tools.sh\`"
exit 1
fi
mkdir -p ${ANDROID_SDK_ROOT}/licenses
echo 8933bad161af4178b1185d1a37fbf41ea5269c55 > ${ANDROID_SDK_ROOT}/licenses/android-sdk-license
echo 601085b94cd77f0b54ff86406957099ebe79c4d6 > ${ANDROID_SDK_ROOT}/licenses/android-googletv-license
echo 33b6a2b64607f11b759f320ef9dff4ae5c47d97a > ${ANDROID_SDK_ROOT}/licenses/google-gdk-license
yes | sdkmanager --licenses
yes | sdkmanager --licenses "--sdk_root=${ANDROID_SDK_ROOT}"
mkdir -p ~/.android
touch ~/.android/repositories.cfg
......@@ -37,21 +43,30 @@ touch ~/.android/repositories.cfg
echo y | sdkmanager "platform-tools" "--sdk_root=${ANDROID_SDK_ROOT}" | tee sdkmanager.log
echo y | sdkmanager "extras;android;m2repository" "--sdk_root=${ANDROID_SDK_ROOT}" | tee -a sdkmanager.log
echo y | sdkmanager "extras;google;m2repository" "--sdk_root=${ANDROID_SDK_ROOT}" | tee -a sdkmanager.log
echo y | sdkmanager "cmdline-tools;latest" "--sdk_root=${ANDROID_SDK_ROOT}" | tee sdkmanager.log
# Install build tools
echo y | sdkmanager "build-tools;23.0.2" --sdk_root=${ANDROID_SDK_ROOT} | tee -a sdkmanager.log
echo y | sdkmanager "build-tools;23.0.3" --sdk_root=${ANDROID_SDK_ROOT} | tee -a sdkmanager.log
echo y | sdkmanager "build-tools;25.0.2" --sdk_root=${ANDROID_SDK_ROOT} | tee -a sdkmanager.log
echo y | sdkmanager "build-tools;27.0.3" --sdk_root=${ANDROID_SDK_ROOT} | tee -a sdkmanager.log
echo y | sdkmanager "build-tools;28.0.3" --sdk_root=${ANDROID_SDK_ROOT} | tee -a sdkmanager.log
echo y | sdkmanager "build-tools;29.0.2" --sdk_root=${ANDROID_SDK_ROOT} | tee -a sdkmanager.log
echo ""
echo "-------------------------------------------"
echo "--- Installing Android build-tools ${ANDROID_SDK_VERSION}..."
echo y | sdkmanager "build-tools;${ANDROID_SDK_VERSION}" --sdk_root=${ANDROID_SDK_ROOT} | tee -a sdkmanager.log
[[ $? -ne 0 ]] && exit 1
# Install platforms
echo y | sdkmanager "platforms;android-16" --sdk_root=${ANDROID_SDK_ROOT} | tee -a sdkmanager.log
echo y | sdkmanager "platforms;android-21" --sdk_root=${ANDROID_SDK_ROOT} | tee -a sdkmanager.log
echo y | sdkmanager "platforms;android-23" --sdk_root=${ANDROID_SDK_ROOT} | tee -a sdkmanager.log
echo y | sdkmanager "platforms;android-24" --sdk_root=${ANDROID_SDK_ROOT} | tee -a sdkmanager.log
echo y | sdkmanager "platforms;android-25" --sdk_root=${ANDROID_SDK_ROOT} | tee -a sdkmanager.log
echo y | sdkmanager "platforms;android-27" --sdk_root=${ANDROID_SDK_ROOT} | tee -a sdkmanager.log
echo y | sdkmanager "platforms;android-28" --sdk_root=${ANDROID_SDK_ROOT} | tee -a sdkmanager.log
echo y | sdkmanager "platforms;android-29" --sdk_root=${ANDROID_SDK_ROOT} | tee -a sdkmanager.log
TARGET_VERSIONS="22 23 24 25 26 27 28 29 30 31 32 33"
for TARGET_VERSION in $TARGET_VERSIONS
do
echo "-------------------------------------------"
echo "--- Installing Android target ${TARGET_VERSION}..."
echo y | sdkmanager "platforms;android-${TARGET_VERSION}" --sdk_root=${ANDROID_SDK_ROOT} | tee -a sdkmanager.log
[[ $? -ne 0 ]] && exit 1
done
# Install NDK
echo "-------------------------------------------"
echo "--- Installing Android NDK..."
echo y | sdkmanager "ndk;22.0.7026061" --sdk_root=${ANDROID_SDK_ROOT} | tee -a sdkmanager.log
#echo y | sdkmanager "ndk;25.2.9519653" --sdk_root=${ANDROID_SDK_ROOT} | tee -a sdkmanager.log
echo y | sdkmanager "ndk;${ANDROID_NDK_VERSION}" --sdk_root=${ANDROID_SDK_ROOT} | tee -a sdkmanager.log
echo "--- Installing Android [OK]"
## Chat GPT prompt for translations
I need translations for the following messages in a web application, in these languages/locales: en, en-GB, de-DE, eo-EO, es-CT, es-ES, it-IT, nl-NL, pt-PT. Please follow these constraints: maintain the input JSON format, indentation, and message keys; preserve HTML tags and case; and keep proper nouns untranslated (e.g., "Duniter" and "Cesium"). Here is the source message in French:
```json
"ORIGINAL_KEY_UNCHANGED": "<your_translation>"
```
Please provide the translations for each language/locale in this format:
- <language_code> (e.g., en, en-GB, ...):
```json
{
"ORIGINAL_KEY_UNCHANGED": "<your_translation>"
}
```
If you have any questions before starting, please ask for clarifications to avoid mistakes.
\ No newline at end of file
......@@ -7,54 +7,75 @@ if [[ "_" == "_${PROJECT_DIR}" ]]; then
export PROJECT_DIR
fi;
# Default env (can be override in file <PROJECT>/.local/env.sh)
# Default env variables (can be override in '.local/env.sh' file)
KEYSTORE_FILE=${PROJECT_DIR}/.local/android/Cesium.keystore
KEY_ALIAS=Cesium
KEYSTORE_PWD=
APK_RELEASE_DIR=${PROJECT_DIR}/platforms/android/app/build/outputs/apk/release
APK_UNSIGNED_FILE=${APK_RELEASE_DIR}/app-release-unsigned.apk
APK_SIGNED_FILE=${APK_RELEASE_DIR}/app-release.apk
# Preparing Android environment
. ${PROJECT_DIR}/scripts/env-android.sh
[[ $? -ne 0 ]] && exit 1
APK_SIGNED_FILE=${APK_SIGNED_FILE:-"${ANDROID_OUTPUT_APK_RELEASE}/${ANDROID_OUTPUT_APK_PREFIX}-release-signed.apk"}
APK_UNSIGNED_FILE=${ANDROID_OUTPUT_APK_RELEASE}/${ANDROID_OUTPUT_APK_PREFIX}-release-unsigned.apk
APK_UNSIGNED_FILE_ALTERNATIVE=${ANDROID_OUTPUT_APK_RELEASE}/${ANDROID_OUTPUT_APK_PREFIX}-release.apk
cd ${PROJECT_DIR}
# Sign files
echo "Signing APK file..."
if [[ ! -f "${APK_UNSIGNED_FILE}" ]]; then
echo "APK file not found: ${APK_UNSIGNED_FILE}"
# Checking files
if [[ ! -f "${KEYSTORE_FILE}" ]]; then
echo "ERROR: Keystore file not found: ${KEYSTORE_FILE}"
exit 1
fi
if [[ ! -f "${KEYSTORE_FILE}" ]]; then
echo "Keystore file not found: ${KEYSTORE_FILE}"
if [[ ! -f "${APK_UNSIGNED_FILE}" ]]; then
# Check in an alternative path (e.g. Android default signed file)
if [[ ! -f "${APK_UNSIGNED_FILE_ALTERNATIVE}" ]]; then
echo "ERROR: Unsigned APK file not found: ${APK_UNSIGNED_FILE}"
exit 1
fi
APK_UNSIGNED_FILE=${APK_UNSIGNED_FILE_ALTERNATIVE}
fi
echo "--- Signing Android APK..."
echo ""
# Remove previous version
# Remove previous version (only if unsigned exists)
if [[ -f "${APK_SIGNED_FILE}" ]]; then
echo "Delete previous signed APK file: ${APK_SIGNED_FILE}"
rm -f ${APK_SIGNED_FILE}
rm -f ${APK_SIGNED_FILE}*
fi
echo "Executing jarsigner..."
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ${KEYSTORE_FILE} ${APK_UNSIGNED_FILE} Cesium
[[ $? -ne 0 ]] && exit 1
echo "Executing jarsigner [OK]"
#echo "Executing jarsigner..."
#jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -storepass ${KEYSTORE_PWD} -keystore ${KEYSTORE_FILE} ${APK_UNSIGNED_FILE} ${KEY_ALIAS}
#[[ $? -ne 0 ]] && exit 1
#echo "Executing jarsigner [OK]"
BUILD_TOOLS_DIR="${ANDROID_SDK_ROOT}/build-tools/28.*/"
cd ${BUILD_TOOLS_DIR}
cd ${ANDROID_BUILD_TOOLS_ROOT}
[[ $? -ne 0 ]] && exit 1
echo "Executing zipalign..."
./zipalign -v 4 ${APK_UNSIGNED_FILE} ${APK_SIGNED_FILE}
[[ $? -ne 0 ]] && exit 1
echo "Executing zipalign [OK]"
echo ""
echo "Executing apksigner..."
./apksigner sign --ks ${KEYSTORE_FILE} --ks-pass "pass:${KEYSTORE_PWD}" --ks-key-alias ${KEY_ALIAS} \
--min-sdk-version ${ANDROID_OUTPUT_MIN_SDK_VERSION} \
--max-sdk-version ${ANDROID_OUTPUT_MAX_SDK_VERSION} \
${APK_SIGNED_FILE}
[[ $? -ne 0 ]] && exit 1
echo "Executing apksigner [OK]"
echo ""
echo "Verify APK signature..."
./apksigner verify ${APK_SIGNED_FILE}
./apksigner verify --verbose --print-certs ${APK_SIGNED_FILE}
[[ $? -ne 0 ]] && exit 1
echo "Verify APK signature [OK]"
echo ""
echo "Successfully generated signed APK at: ${APK_SIGNED_FILE}"
export APK_SIGNED_FILE
echo "--- Successfully generated signed APK at: ${APK_SIGNED_FILE}"
exit 0
......@@ -7,22 +7,58 @@ if [[ "_" == "_${PROJECT_DIR}" ]]; then
export PROJECT_DIR
fi;
### Get version to release
cd ${PROJECT_DIR}
current=$(grep -m1 -P "version\": \"\d+.\d+.\d+(-\w+[-0-9]*)?\"" package.json | grep -oP "\d+.\d+.\d+(-\w+[-0-9]*)?")
if [[ "_$current" == "_" ]]; then
echo " - Make sure the file 'package.json' exists and is readable."
echo " - Check version format is: x.y.z (x and y should be an integer)"
exit 1
fi
# Preparing the environment
source ${PROJECT_DIR}/scripts/env-global.sh
[[ $? -ne 0 ]] && exit 1
# Commit android project
cd ${PROJECT_DIR}/platforms/android || exit 1
git reset HEAD
# Make sure to checkout the source project
if ! test -d "${SOURCES_ANDROID}"; then
echo "-- Checkout submodules (dist/android/sources) ..."
cd "${PROJECT_DIR}"
git submodule init && git submodule sync && git submodule update --remote --merge
if ! test $? == 0; then
echo "ERROR: Unable to sync git submodule. Will not be able commit android sources !"
#exit 1
else
echo "-- Checkout submodules (dist/android/sources) [OK]"
fi
fi
if test -d "${SOURCES_ANDROID}"; then
# Revert changes in the Android sources project
cd ${SOURCES_ANDROID} || exit 1
git fetch && git reset --hard --merge HEAD
# Update sources, from platforms/android
echo "--- Copy Android sources from 'platforms/android' to '${SOURCES_ANDROID}' ..."
rsync -rlptgocq --exclude=.* --exclude=build --exclude=release-signing.* --exclude=*.keystore --delete --force "${PROJECT_DIR}/platforms/android/" "${SOURCES_ANDROID}/"
echo "--- Copy Android sources [OK] ..."
echo ""
echo "--- Git push Android sources, and tag as 'v$current'..."
cd ${SOURCES_ANDROID} || exit 1
git add -A
git commit -m "v$1"
git tag -f -a "v$1" -m "Release v$1"
git commit -a -m "v$current"
git tag -f -a "v$current" -m "Release v$current"
# Push the tag
git push -f origin "v$1"
git push -f origin "v$current"
# Push the master branch
git push -f origin
if [[ $? -ne 0 ]]; then
echo "ERROR: cannot push platform/android project ! Continue anyway..."
echo "ERROR: cannot push Android sources at '${SOURCES_ANDROID}' ! Continue anyway..."
else
echo "--- Git push Android sources, and tag [OK]"
fi
fi
......@@ -7,58 +7,57 @@ if [[ "_" == "_${PROJECT_DIR}" ]]; then
export PROJECT_DIR
fi;
# Preparing Android environment
source ${PROJECT_DIR}/scripts/env-android.sh
[[ $? -ne 0 ]] && exit 1
cd ${PROJECT_DIR}
# Run the build
echo "Running cordova build..."
ionic cordova build android --warning-mode=none --color --prod --release
[[ $? -ne 0 ]] && exit 1
# Signature
# Default env variables (can be override in '.local/env.sh' file)
KEYSTORE_FILE=${PROJECT_DIR}/.local/Cesium.keystore
KEY_ALIAS=Cesium
KEY_PWD=
APK_DIR=${PROJECT_DIR}/platforms/android/build/outputs/apk/release
APK_UNSIGNED_FILE=${APK_DIR}/android-release.apk
BUILD_TOOLS_DIR="${ANDROID_SDK_ROOT}/build-tools/28.*/"
if [[ ! -f "${APK_UNSIGNED_FILE}" ]]; then
echo "APK file not found at: ${APK_UNSIGNED_FILE}"
exit 1
fi
# Preparing Android environment
cd ${PROJECT_DIR}
source scripts/env-android.sh
[[ $? -ne 0 ]] && exit 1
# Check if signed
cd ${BUILD_TOOLS_DIR}
./apksigner verify ${APK_UNSIGNED_FILE}
APK_SIGNED_FILE=${ANDROID_OUTPUT_APK_RELEASE}/${ANDROID_OUTPUT_APK_PREFIX}-release-signed.apk
APK_UNSIGNED_FILE=${ANDROID_OUTPUT_APK_RELEASE}/${ANDROID_OUTPUT_APK_PREFIX}-release-unsigned.apk
# Not signed ? Do it !
if [[ $? -ne 0 ]]; then
echo "It seems that the APK file ${APK_UNSIGNED_FILE} is not signed !"
if [[ ! -f "${KEYSTORE_FILE}" ]]; then
echo "ERROR: Unable to sign: no keystore file found at ${KEYSTORE_FILE} !"
exit 1
fi
echo "--- Cleaning previous Android APK ..."
rm -f ${ANDROID_OUTPUT_APK_RELEASE}/*.apk*
echo "--- Cleaning previous Android APK [OK]"
echo ""
echo "Signing APK file ${APK_UNSIGNED_FILE}..."
APK_SIGNED_FILE=${APK_DIR}/android-release-signed.apk
# Run the build
echo "--- Building Android APK..."
echo ""
yarn run build:android
[[ $? -ne 0 ]] && exit 1
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ${KEYSTORE_FILE} ${APK_UNSIGNED_FILE} Cesium
echo "--- Building Android APK [OK]"
echo ""
BUILD_TOOLS_DIR="${ANDROID_SDK_ROOT}/build-tools/28.*/"
cd ${BUILD_TOOLS_DIR}
./zipalign -v 4 ${APK_UNSIGNED_FILE} ${APK_SIGNED_FILE}
# Sign APK file
cd ${PROJECT_DIR}/scripts
./release-android-sign.sh
./apksigner verify ${APK_SIGNED_FILE}
if [[ $? -ne 0 ]]; then
echo "Signing failed !"
# Check signed APK exists
if [[ ! -f "${APK_SIGNED_FILE}" ]]; then
echo "Missing signed APK file at: ${APK_SIGNED_FILE}"
exit 1
fi
# Do file replacement
rm ${APK_UNSIGNED_FILE}
mv ${APK_SIGNED_FILE} ${APK_UNSIGNED_FILE}
# Get current version
cd ${PROJECT_DIR}
current=$(grep -m 1 -oP "version\": \"\d+.\d+.\d+(-\w+[-0-9]*)?\"" package.json | grep -m 1 -oP "\d+.\d+.\d+(-\w+[-0-9]*)?")
if [[ "_$current" == "_" ]]; then
echo "Unable to read the current version in 'package.json'. Please check version format is: x.y.z (x and y should be an integer)."
exit 1;
fi
# Copy signed APK to 'dist/android/build'
echo ""
echo "--- Copying Android APK to '${APK_FINAL_FILE}'..."
APK_BASENAME="${PROJECT_NAME}-v${current}-android.apk"
APK_FINAL_FILE="${DIST_ANDROID}/${APK_BASENAME}"
mkdir -p "${DIST_ANDROID}"
cp -f "${APK_SIGNED_FILE}" "${APK_FINAL_FILE}"
echo "--- Copying Android APK [OK]"
echo ""
......@@ -22,7 +22,7 @@ then
fi
### Get version to release
current=$(grep -P "version\": \"\d+.\d+.\d+(\w*)" package.json | grep -m 1 -oP "\d+.\d+.\d+(\w*)")
current=$(grep -P "version\": \"\d+.\d+.\d+(-\w+[-0-9]*)?\"" package.json | grep -m 1 -oP "\d+.\d+.\d+(-\w+[-0-9]*)?")
if [[ "_$current" == "_" ]]; then
echo "Unable to read the current version in 'package.json'. Please check version format is: x.y.z (x and y should be an integer)."
exit 1;
......@@ -57,7 +57,8 @@ if [[ "${DESKTOP_ASSETS}" == "linux" ]]; then
echo "Skipping windows assets, because DESKTOP_ASSETS env was set to 'linux'."
EXPECTED_ASSETS="${PROJECT_NAME}-desktop-v$current-linux-x64.deb
${PROJECT_NAME}-desktop-v$current-linux-x64.tar.gz"
${PROJECT_NAME}-desktop-v$current-linux-x64.tar.gz
${PROJECT_NAME}-desktop-v$current-linux-x64.AppImage"
fi
# Build desktop assets
......
......@@ -9,12 +9,7 @@ fi;
# Preparing Android environment
cd ${PROJECT_DIR}
source ${PROJECT_DIR}/scripts/env-global.sh
XPI_BASENAME=${PROJECT_NAME}-$current-an+fx.xpi
XPI_FILE=${PROJECT_DIR}/dist/web/build/${XPI_BASENAME}
XPI_FINAL_BASENAME=${PROJECT_NAME}-v$current-extension-firefox.xpi
XPI_FINAL_FILE=${PROJECT_DIR}/dist/web/build/${XPI_FINAL_BASENAME}
source scripts/env-global.sh
### Control that the script is run on `dev` branch
branch=$(git rev-parse --abbrev-ref HEAD)
......@@ -25,16 +20,21 @@ then
fi
### Get version to release
current=$(grep -P "version\": \"\d+.\d+.\d+(\w*)" package.json | grep -m 1 -oP "\d+.\d+.\d+(\w*)")
current=$(grep -m 1 -oP "version\": \"\d+.\d+.\d+(-\w+[-0-9]*)?\"" package.json | grep -m 1 -oP "\d+.\d+.\d+(-\w+[-0-9]*)?")
if [[ "_$current" == "_" ]]; then
echo "Unable to read the current version in 'package.json'. Please check version format is: x.y.z (x and y should be an integer)."
exit 1;
fi
echo "Sending v$current extension for Mozilla..."
XPI_BASENAME=${PROJECT_NAME}-$current-an+fx.xpi
XPI_FILE=${PROJECT_DIR}/dist/web/build/${XPI_BASENAME}
XPI_FINAL_BASENAME=${PROJECT_NAME}-v$current-extension-firefox.xpi
XPI_FINAL_FILE=${PROJECT_DIR}/dist/web/build/${XPI_FINAL_BASENAME}
### Check AMO account
if [[ "_" == "_${AMO_JWT_ISSUER}" || "_" == "_${AMO_JWT_SECRET}" ]]; then
echo "ERROR: Unable to find Addons Modzilla account: "
echo "ERROR: Unable to find Addons Mozilla account: "
echo " - Please add environment variables 'AMO_JWT_ISSUER' or 'AMO_JWT_SECRET', then retry."
echo " - You can use the file './local/env.sh'."
exit 1
......@@ -43,6 +43,7 @@ fi
### Sign extension
case "$1" in
pre)
echo "web-ext sign \"--api-key=${AMO_JWT_ISSUER}\" \"--api-secret=${AMO_JWT_SECRET}\" \"--source-dir=${PROJECT_DIR}/dist/web/ext\" \"--artifacts-dir=${PROJECT_DIR}/dist/web/build\" --id=${WEB_EXT_ID} --channel=unlisted"
web-ext sign "--api-key=${AMO_JWT_ISSUER}" "--api-secret=${AMO_JWT_SECRET}" "--source-dir=${PROJECT_DIR}/dist/web/ext" "--artifacts-dir=${PROJECT_DIR}/dist/web/build" --id=${WEB_EXT_ID} --channel=unlisted
if [[ $? -ne 0 ]]; then
if [[ -f "${XPI_FILE}" || -f "${XPI_FINAL_FILE}" ]]; then
......
......@@ -20,21 +20,25 @@ then
fi
### Get version to release
current=$(grep -P "version\": \"\d+.\d+.\d+(\w*)" package.json | grep -m 1 -oP "\d+.\d+.\d+(\w*)")
current=$(grep -m1 -P "version\": \"\d+.\d+.\d+(-\w+[-0-9]*)?\"" package.json | grep -oP "\d+.\d+.\d+(-\w+[-0-9]*)?")
if [[ "_$current" == "_" ]]; then
echo "Unable to read the current version in 'package.json'. Please check version format is: x.y.z (x and y should be an integer)."
exit 1;
echo " - Make sure the file 'package.json' exists and is readable."
echo " - Check version format is: x.y.z (x and y should be an integer)"
exit 1
fi
echo "Sending v$current extension to Github..."
### get auth token
if [[ "_${GITHUB_TOKEN}" == "_" ]]; then
# Get it from user config dir
GITHUB_TOKEN=$(cat ~/.config/${PROJECT_NAME}/.github)
if [[ "_$GITHUB_TOKEN" != "_" ]]; then
GITHUT_AUTH="Authorization: token $GITHUB_TOKEN"
fi
if [[ "_${GITHUB_TOKEN}" != "_" ]]; then
GITHUT_AUTH="Authorization: token ${GITHUB_TOKEN}"
else
echo "ERROR: Unable to find github authentication token file: "
echo " - You can create such a token at https://github.com/settings/tokens > 'Generate a new token'."
echo " - Then copy the token and paste it in the file '~/.config/${PROJECT_NAME}/.github' using a valid token."
echo " - [if CI] Add a pipeline variable named 'GITHUB_TOKEN';"
echo " - [else] Or copy/paste the token into the file '~/.config/${PROJECT_NAME}/.github'."
exit 1
fi
......@@ -44,20 +48,20 @@ case "$1" in
result=$(curl -i "$REPO_API_URL/releases/tags/v$current")
release_url=$(echo "$result" | grep -P "\"url\": \"[^\"]+" | grep -oP "$REPO_API_URL/releases/\d+")
if [[ $release_url != "" ]]; then
echo "Deleting existing release..."
curl -H 'Authorization: token $GITHUB_TOKEN' -XDELETE $release_url
echo "--- Deleting existing release..."
curl -H ''"$GITHUT_AUTH"'' -XDELETE $release_url
fi
exit 0;
;;
pre)
prerelease="true"
echo "Creating new pre-release v$current..."
echo "--- Creating new pre-release v$current..."
;;
rel)
prerelease="false"
echo "Creating new release v$current..."
echo "--- Creating new release v$current..."
;;
*)
echo "No task given, or wrong arguments"
......@@ -79,7 +83,7 @@ fi
result=$(curl -s -H ''"$GITHUT_AUTH"'' "$REPO_API_URL/releases/tags/v$current")
release_url=$(echo "$result" | grep -P "\"url\": \"[^\"]+" | grep -oP "https://[A-Za-z0-9/.-]+/releases/\d+")
if [[ "_$release_url" != "_" ]]; then
echo "Deleting existing release... $release_url"
echo "--- Deleting existing release... $release_url"
result=$(curl -H ''"$GITHUT_AUTH"'' -s -XDELETE $release_url)
if [[ "_$result" != "_" ]]; then
error_message=$(echo "$result" | grep -P "\"message\": \"[^\"]+" | grep -oP ": \"[^\"]+\"")
......@@ -90,9 +94,14 @@ else
echo "Release not exists yet on github."
fi
### Create the release
result=$(curl -H ''"$GITHUT_AUTH"'' -s $REPO_API_URL/releases -d '{"tag_name": "v'"$current"'","target_commitish": "master","name": "'"$current"'","body": "'"$description"'","draft": false,"prerelease": '"$prerelease"'}')
#echo "DEBUG - $result"
echo "--- Clean previous SHA256 files..."
rm -rf ${PROJECT_DIR}/dist/**/*.sha256
echo ""
echo "--- Creating new release..."
echo " - tag: v$current"
echo " - description: $description"
result=$(curl -X POST -H "Accept: application/vnd.github+json" -H "X-GitHub-Api-Version: 2022-11-28" -H ''"$GITHUT_AUTH"'' -s $REPO_API_URL/releases -d '{"tag_name": "v'"$current"'","target_commitish": "master","name": "'"$current"'","body": "'"$description"'","draft": false,"prerelease": '"$prerelease"'}')
upload_url=$(echo "$result" | grep -P "\"upload_url\": \"[^\"]+" | grep -oP "https://[A-Za-z0-9/.-]+")
if [[ "_$upload_url" = "_" ]]; then
echo "Failed to create new release for repo $REPO."
......@@ -101,8 +110,8 @@ if [[ "_$upload_url" = "_" ]]; then
exit 1
fi
### Send files
echo "Uploading artifacts to ${upload_url} ..."
### Sending files
echo "--- Uploading files to ${upload_url} ..."
# Upload web file
WEB_BASENAME="${PROJECT_NAME}-v$current-web.zip"
......@@ -111,9 +120,12 @@ if [[ -f "${WEB_FILE}" ]]; then
result=$(curl -s -H ''"$GITHUT_AUTH"'' -H 'Content-Type: application/zip' -T "${WEB_FILE}" "${upload_url}?name=${WEB_BASENAME}")
browser_download_url=$(echo "$result" | grep -P "\"browser_download_url\":[ ]?\"[^\"]+" | grep -oP "\"browser_download_url\":[ ]?\"[^\"]+" | grep -oP "https://[A-Za-z0-9/.-]+")
WEB_SHA256=$(cd ${DIST_WEB} && sha256sum "${WEB_BASENAME}")
echo " - ${browser_download_url} | Checksum: ${WEB_SHA256}"
echo " - ${browser_download_url} | SHA256 Checksum: ${WEB_SHA256}"
echo "${WEB_SHA256} ${WEB_BASENAME}" > "${WEB_FILE}.sha256"
result=$(curl -s -H ''"$GITHUT_AUTH"'' -H 'Content-Type: text/plain' -T "${WEB_FILE}.sha256" "${upload_url}?name=${WEB_BASENAME}.sha256")
else
echo " - ERROR: Web artifact (ZIP) not found! Skipping."
echo " - ERROR: Web release (ZIP) not found! Skipping."
missing_file=true
fi
# Upload web extension (ZIP) file
......@@ -124,8 +136,11 @@ if [[ -f "${WEB_EXT_ZIP_FILE}" ]]; then
browser_download_url=$(echo "$result" | grep -P "\"browser_download_url\":[ ]?\"[^\"]+" | grep -oP "\"browser_download_url\":[ ]?\"[^\"]+" | grep -oP "https://[A-Za-z0-9/.-]+")
WEB_EXT_ZIP_SHA256=$(cd ${DIST_WEB} && sha256sum "${WEB_EXT_ZIP_BASENAME}")
echo " - ${browser_download_url} | Checksum: ${WEB_EXT_ZIP_SHA256}"
echo "${WEB_EXT_ZIP_SHA256} ${WEB_EXT_ZIP_BASENAME}" > "${WEB_EXT_ZIP_FILE}.sha256"
result=$(curl -s -H ''"$GITHUT_AUTH"'' -H 'Content-Type: text/plain' -T "${WEB_EXT_ZIP_FILE}.sha256" "${upload_url}?name=${WEB_EXT_ZIP_BASENAME}.sha256")
else
echo " - ERROR: Web extension artifact (ZIP) not found! Skipping."
missing_file=true
fi
# Upload web extension (XPI) file
......@@ -136,8 +151,11 @@ if [[ -f "${WEB_EXT_XPI_FILE}" ]]; then
browser_download_url=$(echo "$result" | grep -P "\"browser_download_url\":[ ]?\"[^\"]+" | grep -oP "\"browser_download_url\":[ ]?\"[^\"]+" | grep -oP "https://[A-Za-z0-9/.-]+")
WEB_EXT_XPI_SHA256=$(cd ${DIST_WEB} && sha256sum "${WEB_EXT_XPI_BASENAME}")
echo " - ${browser_download_url} | Checksum: ${WEB_EXT_XPI_SHA256}"
echo "${WEB_EXT_XPI_SHA256} ${WEB_EXT_XPI_BASENAME}" > "${WEB_EXT_XPI_FILE}.sha256"
result=$(curl -s -H ''"$GITHUT_AUTH"'' -H 'Content-Type: text/plain' -T "${WEB_EXT_XPI_FILE}.sha256" "${upload_url}?name=${WEB_EXT_XPI_BASENAME}.sha256")
else
echo " - ERROR: Web signed extension artifact (XPI) not found! Skipping."
missing_file=true
fi
# Upload Android APK file
......@@ -146,20 +164,24 @@ APK_FILE="${DIST_ANDROID}/${APK_BASENAME}"
if [[ -f "${APK_FILE}" ]]; then
result=$(curl -s -H ''"$GITHUT_AUTH"'' -H 'Content-Type: application/vnd.android.package-archive' -T "${APK_FILE}" "${upload_url}?name=${APK_BASENAME}")
browser_download_url=$(echo "$result" | grep -P "\"browser_download_url\":[ ]?\"[^\"]+" | grep -oP "\"browser_download_url\":[ ]?\"[^\"]+" | grep -oP "https://[A-Za-z0-9/.-]+")
APK_SHA256=$(cd ${DIST_ANDROID} && sha256sum "${APK_BASENAME}")
echo " - ${browser_download_url} | Checksum: ${APK_SHA256}"
APK_SHA256=$(sha256sum "${APK_FILE}" | sed 's/ /\n/gi' | head -n 1)
echo " - ${browser_download_url} | SHA256 Checksum: ${APK_SHA256}"
echo "${APK_SHA256} ${APK_BASENAME}" > "${APK_FILE}.sha256"
result=$(curl -s -H ''"$GITHUT_AUTH"'' -H 'Content-Type: text/plain' -T "${APK_FILE}.sha256" "${upload_url}?name=${APK_BASENAME}.sha256")
else
echo "- ERROR: Android artifact (APK) not found! Skipping."
echo "- ERROR: Android release (APK) not found! Skipping."
missing_file=true
fi
# Upload sha256 file (checksum)
SHA_BASENAME=${PROJECT_NAME}-v$current.sha256
SHA_FILE=${PROJECT_DIR}/dist/${SHA_BASENAME}
echo "${WEB_SHA256}" > ${SHA_FILE}
echo "${WEB_EXT_ZIP_SHA256}" >> ${SHA_FILE}
echo "${APK_SHA256}" >> ${SHA_FILE}
echo "${WEB_EXT_XPI_SHA256}" >> ${SHA_FILE}
result=$(curl -s -H ''"$GITHUT_AUTH"'' -H 'Content-Type: text/plain' -T "${SHA_FILE}" "${upload_url}?name=${SHA_BASENAME}")
### Success message
echo "Successfully uploaded files to: ${REPO_PUBLIC_URL}/releases/tag/v${current}"
echo ""
if [[ ${missing_file} == true ]]; then
echo "-------------------------------------------"
echo "ERROR: missing some artifacts (see logs)"
echo " -> Release url: ${REPO_PUBLIC_URL}/releases/tag/${version}"
exit 1
else
echo "-------------------------------------------"
echo "Successfully uploading files !"
echo " -> Release url: ${REPO_PUBLIC_URL}/releases/tag/${version}"
exit 0
fi
......@@ -9,7 +9,7 @@ fi;
cd ${PROJECT_DIR}
### Control that the script is run on `dev` branch
### Control that the script is run on `master` branch
branch=$(git rev-parse --abbrev-ref HEAD)
if [[ ! "$branch" == "master" ]];
then
......@@ -18,7 +18,7 @@ then
fi
### Get current version (package.json)
current=$(grep -oP "version\": \"\d+.\d+.\d+((a|b)[0-9]+)?" package.json | grep -m 1 -oP "\d+.\d+.\d+((a|b)[0-9]+)?")
current=$(grep -m1 -P "version\": \"\d+.\d+.\d+(-\w+[-0-9]*)?\"" package.json | grep -oP "\d+.\d+.\d+(-\w+[-0-9]*)?")
if [[ "_$current" == "_" ]]; then
echo "Unable to read the current version in 'package.json'. Please check version format is: x.y.z (x and y should be an integer)."
exit 1;
......@@ -34,7 +34,7 @@ fi
echo "Current Android version: $currentAndroid"
# Check version format
if [[ ! $2 =~ ^[0-9]+.[0-9]+.[0-9]+(-(alpha|beta|rc)[-0-9]*)?$ || ! $3 =~ ^[0-9]+$ ]]; then
if [[ ! $2 =~ ^[0-9]+.[0-9]+.[0-9]+(-[a-z]+[-0-9]*)?$ || ! $3 =~ ^[0-9]+$ ]]; then
echo "Wrong version format"
echo "Usage:"
echo " > ./release.sh [pre|rel] <version> <android-version> <release_description>"
......@@ -53,16 +53,16 @@ case "$1" in
rel|pre)
# Change the version in files: 'package.json' and 'config.xml'
sed -i "s/version\": \"$current\"/version\": \"$2\"/g" package.json
currentConfigXmlVersion=$(grep -oP "version=\"\d+.\d+.\d+((a|b)[0-9]+)?\"" config.xml | grep -oP "\d+.\d+.\d+((a|b)[0-9]+)?")
currentConfigXmlVersion=$(grep -m 1 -oP "version=\"\d+.\d+.\d+(-\w+[-0-9]*)?\"" config.xml | grep -oP "\d+.\d+.\d+(-\w+[-0-9]*)?")
sed -i "s/ version=\"$currentConfigXmlVersion\"/ version=\"$2\"/g" config.xml
sed -i "s/ android-versionCode=\"$currentAndroid\"/ android-versionCode=\"$3\"/g" config.xml
# Change version in file: 'www/manifest.json'
currentManifestJsonVersion=$(grep -oP "version\": \"\d+.\d+.\d+((a|b)[0-9]+)?\"" www/manifest.json | grep -oP "\d+.\d+.\d+((a|b)[0-9]+)?")
currentManifestJsonVersion=$(grep -m 1 -oP "version\": \"\d+.\d+.\d+(-\w+[-0-9]*)?\"" www/manifest.json | grep -oP "\d+.\d+.\d+(-\w+[-0-9]*)?")
sed -i "s/version\": \"$currentManifestJsonVersion\"/version\": \"$2\"/g" www/manifest.json
# Change version in file: 'resources/web-ext/manifest.json'
currentExtManifestJsonVersion=$(grep -oP "version\": \"\d+.\d+.\d+((a|b)[0-9]+)?\"" resources/web-ext/manifest.json | grep -oP "\d+.\d+.\d+((a|b)[0-9]+)?")
currentExtManifestJsonVersion=$(grep -m 1 -oP "version\": \"\d+.\d+.\d+(-\w+[-0-9]*)?\"" resources/web-ext/manifest.json | grep -oP "\d+.\d+.\d+(-\w+[-0-9]*)?")
sed -i "s/version\": \"$currentExtManifestJsonVersion\"/version\": \"$2\"/g" resources/web-ext/manifest.json
# Bump the install.sh
......@@ -77,50 +77,29 @@ esac
# Preparing the environment
. ${PROJECT_DIR}/scripts/env-global.sh
if [[ $? -ne 0 ]]; then
exit 1
fi
[[ $? -ne 0 ]] && exit 1
echo "----------------------------------"
echo "- Compiling sources..."
echo "----------------------------------"
cd ${PROJECT_DIR} || exit 1
gulp config build --env default_fr || exit 1
echo "Clean previous sha256 files..."
rm -rf ${PROJECT_DIR}/dist/*.sha256
gulp config build --env default || exit 1
echo "----------------------------------"
echo "- Building Android artifact..."
echo "----------------------------------"
mkdir -p ${DIST_ANDROID} || exit 1
rm -rf ${DIST_ANDROID}/*.apk || exit 1
rm -rf ${ANDROID_OUTPUT_APK_RELEASE}/*.apk || exit 1
. scripts/build-android.sh --release
[[ $? -ne 0 ]] && exit 1
APK_RELEASE_FILE="${ANDROID_OUTPUT_APK_RELEASE}/app-release.apk"
APK_RELEASE_UNSIGNED_FILE="${ANDROID_OUTPUT_APK_RELEASE}/app-release-unsigned.apk"
if [[ ! -f "${APK_RELEASE_FILE}" ]]; then
if [[ ! -f "${APK_RELEASE_UNSIGNED_FILE}" ]]; then
echo "ERROR: Missing android artifact at ${APK_RELEASE_FILE}"
exit 1
else
. scripts/release-android-sign.sh
[[ $? -ne 0 ]] && exit 1
fi
fi
mkdir -p ${DIST_ANDROID} || exit 1
cp ${APK_RELEASE_FILE} "${DIST_ANDROID}/${PROJECT_NAME}-v$2-android.apk" || exit 1
cd ${PROJECT_DIR}/scripts || exit 1
./release-android.sh
#[[ $? -ne 0 ]] && exit 1
echo "----------------------------------"
echo "- Building web and extension artifacts..."
echo "----------------------------------"
cd ${PROJECT_DIR} || exit 1
# Gnerate config (only once, to keep same config if web and web-extension artifacts)
# Generate config (only once, to keep same config if web and web-extension artifacts)
cd ${PROJECT_DIR} || exit 1
gulp config --env default
# Run web build
......@@ -166,8 +145,9 @@ git push -f origin
echo "----------------------------------"
echo "- Uploading web extension to Mozilla ..."
echo "----------------------------------"
. ${PROJECT_DIR}/scripts/release-sign-extension.sh $1
# FIXME: always failed: but continue
cd ${PROJECT_DIR}/scripts || exit 1
./release-sign-extension.sh $1 ''"$description"''
# FIXME: always failed, but continue
#[[ $? -ne 0 ]] && exit 1
echo "----------------------------------"
......@@ -198,5 +178,5 @@ echo "**********************************"
cd ${PROJECT_DIR}
# Back to nodejs project version
nvm use ${NODEJS_VERSION}
nvm use ${NODE_VERSION}
......@@ -491,7 +491,7 @@ $screen-menu: $screen-sm;
}
.bar-header {
background-color: $positive-900-bg;
background-color: $positive;
color: #fff;
height: 150px;
padding-right: 0 !important;
......@@ -938,13 +938,20 @@ html, body {
display: inline-block !important;
vertical-align: bottom;
}
.loader {
zoom: unset;
top: 49px;
width: 100%;
}
.loader .logo,
#home .logo {
margin-top: 15px;
width: 100%;
background-position: center center;
background-repeat: no-repeat;
}
.loader .center,
#home .center {
float: none;
text-align: center;
......@@ -955,7 +962,8 @@ html, body {
display: inline-block;
}
@media screen and (max-width: $screen-xs-max) {
@media screen and (max-width: $screen-xxs-max) {
.loader .logo,
#home .logo {
height: 96px;
background-image: url('../img/logo_96px.png');
......@@ -966,7 +974,9 @@ html, body {
}
}
@media screen and (min-width: $screen-sm) and (max-width: $screen-sm-max) {
@media screen and (min-width: $screen-xs) and (max-width: $screen-sm-max) {
.loader .logo,
#home .logo {
height: 144px;
background-image: url('../img/logo_144px.png');
......@@ -979,6 +989,7 @@ html, body {
}
@media screen and (min-width: $screen-md) {
.loader .logo,
#home .logo {
height: 200px;
background-image: url('../img/logo_200px.png');
......@@ -991,9 +1002,6 @@ html, body {
}
}
@media screen and (min-width: $screen-md) {
.circle-bg-dark {
background-image: url('../../resources/logo/svg/white/logo.large.empty.transparent.svg');
background-repeat: no-repeat;
......@@ -1001,6 +1009,16 @@ html, body {
background-size: 1024px 1024px;
}
@media screen and (max-width: $screen-sm-max) {
.circle-bg-dark {
background-blend-mode: soft-light;
}
}
@media screen and (min-width: $screen-md) {
.circle-bg-dark {
background-blend-mode: hard-light;
}
}
.gray {
......@@ -1282,10 +1300,11 @@ html, body {
}
}
.stable-100-bg {
background-color: $stable-100-bg !important;
.popover-wallet-tx-actions {
height: 120px;
}
/******
* TX view (wallet or identity)
*******/
......@@ -1296,7 +1315,6 @@ html, body {
padding-top: 8px;
margin: 0 !important;
.badge-energized {
background-color: rgba(255, 201, 0, 0.3);
color: #888 !important;
......@@ -1309,18 +1327,6 @@ html, body {
background-color: white; // Fix issue #847
}
.vertical-center{
position: absolute;
top: 30%;
width: 40%;
}
p.comment{
width: 100%;
white-space: nowrap;
text-overflow: ellipsis;
}
p.text-wrap {
white-space: normal;
a {
......@@ -1328,17 +1334,38 @@ html, body {
}
}
p.comment {
margin: 8px 0;
padding-left: 16px; // For icon
i.ion-ios-chatbubble-outline {
margin-left: -16px;
position: absolute;
}
}
.col-pubkey {
max-width: 80%;
.pubkeys {
display: block;
white-space: nowrap;
text-overflow: ellipsis;
a {
display: block;
overflow: hidden;
text-overflow: ellipsis;
}
.pubkeys {
display: block;
max-height: 130px;
overflow: hidden;
}
}
.col-comment {
white-space: normal;
}
}
......@@ -1386,6 +1413,7 @@ html, body {
filter: alpha(opacity=80);
}
.card.stable-900-bg,
.card .stable-900-bg,
.item.stable-900-bg,
......@@ -1936,11 +1964,20 @@ $ionicon-var-badge-editable: $ionicon-var-edit + "\00a0";
}
}
/**********
About modal
**********/
.modal.about .bar.bar-header .button + .title {
left: 0 !important; /* avoid title offset on large screens, if button are 'visible-xs')'*/
}
.modal.about {
.ion-telegram:before {
content: url('../img/logo_telegram.svg');
}
}
/**********
Item buttons
**********/
......@@ -1983,7 +2020,7 @@ $ionicon-var-badge-editable: $ionicon-var-edit + "\00a0";
}
.item.item-thumbnail-left, .item-thumbnail-left {
min-height: 100px !important;
min-height: 100px;
}
.item-thumbnail-left > i:first-child,
......@@ -2419,6 +2456,10 @@ body.demo {
height: 204px;
}
.popover.popover-login-methods.auth.scan {
height: 252px;
}
@media (max-width: $screen-xs-max) {
.popover.popover-login-methods {
height: 256px;
......@@ -2558,6 +2599,11 @@ div[drop-zone]:hover {
/**********
Wot identity
**********/
.stable-100-bg {
background-color: $stable-100-bg !important;
}
.hero.dark-100-bg {
background-color: $dark-100-bg;
}
......@@ -2657,6 +2703,11 @@ div[drop-zone]:hover {
overflow: hidden;
}
}
.icon-eye-toggle:before {
font-size: 24px;
padding-top: 8px;
}
}
/**********
......@@ -2747,6 +2798,19 @@ div[drop-zone]:hover {
color: white !important;
}
h1, .h1 {
font-size: 18pt;
}
h2, .h2 {
font-size: 16pt;
}
h3, .h3 {
font-size: 14pt;
}
h4, .h4 {
font-size: 12pt;
}
ul {
list-style: unset;
padding-left: 40px;
......@@ -2770,24 +2834,63 @@ div[drop-zone]:hover {
border: 1px solid $positive;
}
.avatar-left-padding {
padding-left: 30px;
padding-inline-start: 30px;
}
}
.feed-title,
.card .title {
margin-top: 5px;
font-size: 18pt;
a {
color: white !important;;
}
}
.tags {
font-size: small;
color: grey !important;
}
.feed-content,
.card .content {
text-align: start;
color: lightgrey !important;
img.emoji {
display: unset;
max-width: 12px;
max-height: 12px;
}
blockquote p {
font-weight: unset;
font-size: unset;
line-height: unset;
}
blockquote, .quote .title {
padding: 5px 10px;
border-left: 5px solid gray;
margin: 0 0 10px 0;
font-size: 10pt;
}
.quote .title {
margin: 0;
font-size: 10pt;
padding-left: 32px;
.avatar {
position: absolute;
margin-top: -1px;
margin-left: -3px;
height: 20px;
width: 20px;
border: 1px solid $positive;
}
}
}
.feed-footer,
.card .footer {
a:hover {
......
......@@ -27,6 +27,30 @@
color: grey;
}
#home .progress-bar {
display: inline-block;
width: 50vw;
max-width: 300px;
position: relative;
height: 12px;
border-radius: 5px;
border: 1px solid gray;
}
#home .progress-fill {
height: 100%;
background-color: currentColor;
position: absolute;
left: 0;
top: 0;
border-radius: 5px;
transition: width 0.2s ease;
}
#home .progress-text {
font-size: 12px;
color: currentColor !important;
opacity: 0.7;
}
#modal-license {
color:rgb(0, 0, 0);
}
......@@ -173,7 +197,9 @@
padding-top: 9px;
padding-bottom: 3px;
}
.list .item-peer .col h3 {
margin-bottom: 0 !important;
}
.list .item-peer .badge {
top: 14px;
right: 6%;
......@@ -202,8 +228,54 @@
.list .item-peer.compacted > * {
display: none;
}
.list .item-peer .col-server {
overflow: hidden;
text-overflow: ellipsis;
}
.list .item-peer .col-api {
vertical-align: center;
}
.list .item-peer .col-api h4 {
min-width: 50px;
height: 100%;
white-space: normal;
padding-top: 5px;
}
.list .item-peer .col-api h4 span {
white-space: nowrap;
font-size: 14px;
line-height: 12px;
}
.list .item-peer .col-api h4 span small {
font-size: 85%;
}
.list .item-peer .col-sandboxes h3 {
display: block;
color: gray;
padding: 0;
}
.list .item-peer .col-sandboxes .progress-bar {
display: inline-block;
width: 50px;
position: relative;
height: 12px;
border-radius: 5px;
border: 1px solid gray;
}
.list .item-peer .col-sandboxes .progress-fill {
height: 100%;
background-color: currentColor;
position: absolute;
left: 0;
top: 0;
border-radius: 5px;
transition: width 0.2s ease;
}
.list .item-peer .col-sandboxes .progress-text {
width: 100%;
font-size: 10px;
text-align: center;
}
/**********
Block items
**********/
......
This diff is collapsed.
This diff is collapsed.
......@@ -49,8 +49,9 @@
"NO_ACCOUNT_QUESTION": "Not a member yet? Register now!",
"SEARCH_NO_RESULT": "No result found",
"LOADING": "Loading...",
"LOADING_WAIT": "Loading...<br/><small>(Waiting for node availability)</small>",
"LOADING_WAIT": "Loading...<br/><small>(Cesium is querying the Duniter peer)</small>",
"SEARCHING": "Searching...",
"DOWNLOADING_DOTS": "Downloading...",
"FROM": "From",
"TO": "To",
"COPY": "Copy",
......@@ -110,7 +111,11 @@
"CODE": "Source code:",
"OFFICIAL_WEB_SITE": "Official web site:",
"DEVELOPERS": "Developers:",
"FORUM": "Forum:",
"USER_FORUM": "User forum:",
"TECH_FORUM": "Technical forum:",
"TELEGRAM": "Telegram group:",
"USER_HELP_DIVIDER": "Community",
"CONTRIBUTE_DIVIDER": "Contribute",
"PLEASE_REPORT_ISSUE": "Please report any issue to us!",
"REPORT_ISSUE": "Report an issue",
"BTN_OPEN_DEV_WINDOW": "Open the debug window"
......@@ -131,19 +136,24 @@
"REPORT_ISSUE": "Report an issue",
"NOT_YOUR_ACCOUNT_QUESTION" : "You do not own the account <b><i class=\"ion-key\"></i> {{pubkey|formatPubkey}}</b>?",
"BTN_CHANGE_ACCOUNT": "Disconnect this account",
"CONNECTION_ERROR": "Peer <b>{{server}}</b> unreachable or invalid address.<br/><br/>Check your Internet connection, or change node <a class=\"positive\" ng-click=\"doQuickFix('settings')\">in the settings</a>.",
"PEER_CONNECTION_ERROR": "Peer <b>{{server}}</b> is unreachable or address is invalid.<br/><br/>Check your Internet connection, or change the peer <a class=\"positive\" ng-click=\"doQuickFix('settings')\">in the settings</a>.",
"NETWORK_CONNECTION_ERROR": "Network is unreachable.<br/><br/>Check your Internet connection, or select a peer manually <a class=\"positive\" ng-click=\"doQuickFix('settings')\">in the settings</a>.",
"SHOW_ALL_FEED": "Show all",
"READ_MORE": "Read more",
"FEED_SOURCE": "Source"
"FEED_SOURCE": "Source",
"FEEDS_TITLE": "News"
},
"SETTINGS": {
"TITLE": "Settings",
"DISPLAY_DIVIDER": "Display",
"STORAGE_DIVIDER": "Storage",
"NETWORK_SETTINGS": "Network",
"PEER": "Duniter peer address",
"PEER_SHORT": "Peer address",
"PEER": "Duniter peer",
"PEER_CHANGED_TEMPORARY": "Address used temporarily",
"PEER_SELECTED_AUTOMATICALLY": "Peer selected automatically at startup",
"NETWORK_ANALYZE_TIMEOUT": "Maximum waiting time (timeout)",
"NETWORK_ANALYZE_TIMEOUT_HELP": "Maximum waiting time for network analysis",
"NETWORK_ANALYZE_TIMEOUT_AUTO": "Auto",
"PERSIST_CACHE": "Keep navigation data (experimental)",
"PERSIST_CACHE_HELP": "Allows faster navigation, locally retaining the data received, for use from one session to another.",
"USE_LOCAL_STORAGE": "Enable local storage",
......@@ -154,6 +164,7 @@
"ENABLE_HELPTIP": "Enable contextual help tips",
"DISABLE_HELPTIP": "Disable contextual help tips",
"ENABLE_UI_EFFECTS": "Enable visual effects",
"ENABLE_UI_EFFECTS_HELP": "Transition between pages, animation of list",
"HISTORY_SETTINGS": "Account operations",
"DISPLAY_UD_HISTORY": "Display produced dividends?",
"TX_HISTORY_AUTO_REFRESH": "Enable automatic refresh?",
......@@ -190,7 +201,7 @@
"HOST" : "Address",
"HOST_HELP": "Address: server:port",
"USE_SSL" : "Secured?",
"USE_SSL_HELP" : "(SSL Encryption)",
"USE_SSL_HELP" : "SSL Encryption",
"BTN_SHOW_LIST" : "Peer's list"
}
},
......@@ -312,7 +323,9 @@
}
},
"INFO": {
"ONLY_SSL_PEERS": "Non-SSL nodes have a degraded display because Cesium works in HTTPS mode."
"CONNECTING_TO_NETWORK": "Connecting to the network...",
"ANALYZING_NETWORK": "Analyzing the {{currency|abbreviate}} network...",
"ONLY_SSL_PEERS": "Non-SSL peers have a degraded display because Cesium works in HTTPS mode."
}
},
"PEER": {
......@@ -327,6 +340,9 @@
"ALL_PEERS" : "All peers",
"DIFFICULTY" : "Difficulty",
"API" : "API",
"SANDBOXES": "Queue",
"PENDING_TX": "{{count}} transaction(s) / {{size}} max, {{free}} space(s) remaining",
"PENDING_MEMBERSHIPS": "{{count}} pending membership(s) / {{size}} max, {{free}} space(s) remaining",
"CURRENT_BLOCK" : "Block #",
"POPOVER_FILTER_TITLE": "Filter",
"OFFLINE": "Offline",
......@@ -523,15 +539,15 @@
"INTRO_WARNING_SECURITY": "Check that the hardware you are currently using (computer, tablet, phone) <b>is secure and trustworthy </b>.",
"INTRO_WARNING_SECURITY_HELP": "Up-to-date anti-virus, firewall enabled, session protected by password or pin code...",
"INTRO_HELP": "Click <b> {{'COMMON.BTN_START'|translate}}</b> to begin creating an account. You will be guided step by step.",
"REGISTRATION_NODE": "Your registration will be registered via the Duniter peer <b>{{server}}</b> node, which will then be distributed to the rest of the currency network.",
"REGISTRATION_NODE": "Your registration will be registered via the Duniter peer <b>{{server}}</b>, which will then be distributed to the rest of the currency network.",
"REGISTRATION_NODE_HELP": "If you do not trust this peer, please change <a ng-click=\"doQuickFix('settings')\">in the settings</a> of Cesium.",
"SELECT_ACCOUNT_TYPE": "Choose the type of account to create:",
"MEMBER_ACCOUNT": "Member account",
"MEMBER_ACCOUNT_TITLE": "Create a member account",
"MEMBER_ACCOUNT_HELP": "If you are not yet registered as an individual (one account possible per individual).",
"MEMBER_ACCOUNT_HELP": "You know enough about libre money and want to participate in its production?<br/>As an individual, you can create your member account (only one per individual). This works like a simple wallet account, but also allows you to co-produce the money, by <b>receiving for each {{parameters.dt|formatPeriod}} a universal dividend</b>: it's then up to you to put to good use!",
"WALLET_ACCOUNT": "Simple wallet",
"WALLET_ACCOUNT_TITLE": "Create a wallet",
"WALLET_ACCOUNT_HELP": "If you represent a company, association, etc. or simply need an additional wallet. No universal dividend will be created by this account.",
"WALLET_ACCOUNT_HELP": "Are you <b>new to libre money</b>? You need an additional account?<br/>This type of account will suit you. Although it does not co-produce the money (unlike a member account - see below), you will be able to receive and send payments there, as soon as registration is complete.<br/>If necessary, you can convert it into a member account later.",
"SALT_WARNING": "Choose a secret identifier.<br/>You need it for each connection to this account.<br/><br/><b>Make sure to remember this identifier</b>.<br/>If lost, there are no means to retrieve it!",
"PASSWORD_WARNING": "Choose a password.<br/>You need it for each connection to this account.<br/><br/><b>Make sure to remember this password</b>.<br/>If lost, there are no means to retrieve it!",
"PSEUDO_WARNING": "Choose a pseudonym.<br/>It may be used by other people to find you more easily.<br/><br/>.Use of <b>commas, spaces and accents</b> is not allowed.<br/><div class='hidden-xs'><br/>Example: <span class='gray'>JohnDalton, JackieChan, etc.</span>",
......@@ -564,6 +580,24 @@
"SELECT_WALLET_MODAL": {
"TITLE": "Wallet selection"
},
"CERTIFICATION_MODAL": {
"CHECKLIST_TITLE": "Certification check list",
"INFOS": "Each member is responsible for the security of Ğ1 currency. Before certifying this person's identity, you should have performed few checks. Please answer following questions:",
"BTN_ALL_CHECK": "Certify",
"CHECKLIST_CONDITIONS_NOT_MET": "The certification has not been sent. All answers are not right. Please recheck each point with the person to be certified.",
"QUESTIONS": {
"WELL_KNOWN": "Do you know <b>well</b> the person you are about to certify? Do you know other people who also know this person well?",
"REVOCATION": "Has this person downloaded their <b>revocation document</b> and do they know where to find it?",
"CONTACT": "Have you <b>had contact</b> with this person by many means, and did they answer?",
"DOUBLE_IDENTITY": "The person should own <b>only one active member identity</b>. Do you think they own another one?",
"MASTER_ACCOUNT": "Does this person own their accounts secrets? Have they already <b>sent money from their account</b> at least once?",
"LICENSE": "Has this person <b>understood the Duniter license</b>? Do they agree to comply with it for future certifications?",
"CREDENTIALS": "Was the account created with <b>long and complex secret identifier and password</b> (ex. passphrases)? Did the person understand that both secret identifier and password must remain secret ? Are they <b>sure to remember them</b> or to be able to find them?",
"PUBLIC_KEY_DIFFERENT": "The <b>public key</b> that is shown must be <b>identical</b> to the one the person gave you. The public keys are they <b>different</b>?"
},
"REMINDER_TITLE": "Reminder",
"SHORT_LICENSE_REMINDER": "You may remind the person to certify different certification parameters:<br/><br/><ul><li> - Each member can certify 100 other identities at most.</li><li> - The certifications are saved with a 5 days interval.</li><li> - A new identity must gather at least 5 certifications in less than 2 months.</li><li>- A member must renew its membership at least once a year.</li><li> - Certifications have a lifespan of two years.</li></ul>"
},
"WALLET_LIST": {
"TITLE": "My wallets",
"BTN_NEW": "Add a wallet",
......@@ -572,7 +606,7 @@
"NO_WALLET": "No secondary wallet",
"BTN_DELETE": "Remove a secondary wallet...",
"BTN_RENAME": "Rename the wallet",
"EXPORT_FILENAME": "my_wallets-{{pubkey|formatPubkey}}-{{currency}}.csv",
"EXPORT_FILENAME": "{{currency}}-my_wallets-{{pubkey}}.csv",
"TOTAL_DOTS": "Total: ",
"EDIT_POPOVER": {
"TITLE": "Rename the wallet",
......@@ -594,7 +628,7 @@
"DOWNLOAD_REVOKE_HELP" : "Having a revocation file is important, for example in case of loss of identifiers. It allows you to <b>get this account out of the Web Of Trust</b>, thus becoming a simple wallet.",
"GENERATE_KEYFILE": "Generate my keychain file ...",
"GENERATE_KEYFILE_HELP": "Generate a file allowing you to authenticate without entering your identifiers.<br/><b>Warning:</b> this file will contain your secret key; It is therefore very important to put it in a safe place!",
"KEYFILE_FILENAME": "keychain-{{pubkey|formatPubkey}}-{{currency}}-{{format}}.dunikey",
"KEYFILE_FILENAME": "{{currency}}-keychain-{{pubkey}}-{{format}}.dunikey",
"MEMBERSHIP_IN": "Register as member...",
"MEMBERSHIP_IN_HELP": "Allows you to <b>transform </b> a simple wallet account <b>into a member account</b>, by sending a membership request. Useful only if you do not already have another member account.",
"SEND_IDENTITY": "Publish identity...",
......@@ -630,7 +664,7 @@
"REVOCATION_WITH_FILE_HELP": "To <b>permanently revoke</ b> a member account, please drag the revocation file in the box below, or click in the box to search for a file.",
"REVOCATION_WALLET": "Revoke this account immediately",
"REVOCATION_WALLET_HELP": "Requesting revocation of your identity causes <b>will revoke your membership</ b> (definitely for the associated pseudonym and public key). The account will no longer be able to produce a Universal Dividend.<br/>However, you can still use it as a simple wallet.",
"REVOCATION_FILENAME": "revocation-{{uid}}-{{pubkey|formatPubkey}}-{{currency}}.txt",
"REVOCATION_FILENAME": "{{currency}}-revocation-{{uid}}-{{pubkey}}.txt",
"SAVE_ID": "Save my credentials...",
"SAVE_ID_HELP": "Creating a backup file, to <b>retrieve your password</b> (and the secret identifier) <b> in case of forgetting</b>. The file is <b>secured</ b> (encrypted) using personal questions.",
"STRONG_LEVEL": "Strong <span class=\"hidden-xs \">(6 questions minimum)</span>",
......@@ -684,6 +718,8 @@
"PUBKEY_INVALID_CHECKSUM": "Invalid public key (bad checksum).",
"POPUP_TITLE": "Error",
"UNKNOWN_ERROR": "Unknown error",
"TIMEOUT_REACHED": "Peer timeout exceeded ({{timeout|formatDurationMs}}).<br/><br/><small>{{url}}</small>",
"TOO_MANY_REQUESTS": "You have made too many requests in a short period of time. Please wait a while before trying again.<br/><br/><small>{{url}}</small>",
"CRYPTO_UNKNOWN_ERROR": "Your browser is not compatible with cryptographic features.",
"DOWNLOAD_KEYFILE_FAILED": "Failed to generate the keychain file.",
"EQUALS_TO_PSEUDO": "Must be different from pseudonym",
......@@ -740,7 +776,7 @@
"IDENTITY_PENDING_REVOCATION": "The <b>revocation of this identity</b> has been requested and is awaiting processing. Certification is therefore disabled.",
"IDENTITY_INVALID_BLOCK_HASH": "This membership application is no longer valid (because it references a block that network peers are cancelled): the person must renew its application for membership <b>before</b> being certified.",
"IDENTITY_EXPIRED": "This identity has expired: this person must re-apply <b>before</b> being certified.",
"IDENTITY_SANDBOX_FULL": "Could not register, because peer's sandbox is full.<br/><br/>Please retry later or choose another Duniter peer (in <b>Settings</b>).",
"IDENTITY_SANDBOX_FULL": "Could not register, because Duniter peer's sandbox is full.<br/><br/>Please retry later or choose another peer (in the <b>settings</b>).",
"IDENTITY_NOT_FOUND": "Identity not found",
"IDENTITY_TX_FAILED": "Error while getting identity's transactions",
"WOT_PENDING_INVALID_BLOCK_HASH": "Membership not valid.",
......@@ -764,6 +800,7 @@
"GET_BLOCK_FAILED": "Error while getting block",
"INVALID_BLOCK_HASH": "Block not found (incorrect hash)",
"DOWNLOAD_REVOCATION_FAILED": "Error while downloading revocation file.",
"DOWNLOAD_SAVE_ID_FAILED": "Failed to download the credentials backup file.",
"REVOCATION_FAILED": "Error while trying to revoke the identity.",
"SALT_OR_PASSWORD_NOT_CONFIRMED": "Wrong secret identifier or password ",
"RECOVER_ID_FAILED": "Could not recover password",
......@@ -786,7 +823,10 @@
"UNKNOWN_WALLET_ID": "Unknown secondary wallet.",
"RESTORE_WALLET_LIST_FAILED": "Unable to restore the list of wallets.",
"INVALID_FILE_FORMAT": "Invalid file format.",
"SAME_TX_RECIPIENT": "The recipient must be different from the issuer."
"SAME_TX_RECIPIENT": "The recipient must be different from the issuer.",
"SELF_CERTIFICATION": "You cannot certify your own identity.",
"TX_SANDBOX_FULL": "The Duniter peer used by Cesium can no longer process new transfers, as its queue is full.<br/><br/>Please try again later or change the peer (in the <b>Settings</b>).",
"DOWNLOAD_TX_HISTORY_FAILED": "Error downloading the account statement"
},
"INFO": {
"POPUP_TITLE": "Information",
......@@ -802,9 +842,12 @@
"REVOCATION_SENT": "Revocation sent successfully",
"REVOCATION_SENT_WAITING_PROCESS": "Revocation <b>has been sent successfully</b>. It is awaiting processing.",
"FEATURES_NOT_IMPLEMENTED": "This features is not implemented yet.<br/><br/>Why not to contribute to get it faster? ;)",
"EMPTY_TX_HISTORY": "No operations to export"
"EMPTY_TX_HISTORY": "No operations to export",
"LOADING_PENDING_TX": "Please wait...<br/><small>(Retrieving pending operations)</small>",
"FILE_DOWNLOADED": "File downloaded"
},
"CONFIRM": {
"CAN_CONTINUE": "<b>Are you sure</b> you want to continue?",
"POPUP_TITLE": "<b>Confirmation</b>",
"POPUP_WARNING_TITLE": "<b>Warning</b>",
"POPUP_SECURITY_WARNING_TITLE": "<i class=\"icon ion-alert-circled\"></i> <b>Security warning</b>",
......@@ -828,8 +871,10 @@
"SAVE_BEFORE_LEAVE": "Do you want to <b>save your changes</b> before leaving the page?",
"SAVE_BEFORE_LEAVE_TITLE": "Changes not saved",
"LOGOUT": "Are you sure you want to logout?",
"USE_FALLBACK_NODE": "Peer <b>{{old}}</b> unreachable or invalid address.<br/><br/>Do you want to temporarily use the <b>{{new}}</b> node?",
"ISSUE_524_SEND_LOG": "The transaction was rejected because of a known problem (issue #524) but not reproduced.<br/><br/>To help developers correct this error, do you accept <b>the transmission of your logs</b> per message?<br/><small>(No confidential data is sent)</small>"
"USE_FALLBACK_NODE": "Peer <b>{{old}}</b> unreachable or invalid address.<br/><br/>Do you want to temporarily use the <b>{{new}}</b> peer?",
"USE_SYNC_FALLBACK_NODE": "Peer <b>{{old}}</b> seems to be out of sync.<br/><br/>Do you want to temporarily use the synchronized peer <b>{{new}}</b>?",
"ISSUE_524_SEND_LOG": "The transaction was rejected because of a known problem (issue #524) but not reproduced.<br/><br/>To help developers correct this error, do you accept <b>the transmission of your logs</b> per message?<br/><small>(No confidential data is sent)</small>",
"ENABLE_EXPERT_MODE_TO_CHANGE_NODE": "<b class=\"assertive\">Warning:</b> Do you want to <b>manually change</b> the Duniter peer?<br/><br/>If you continue:<ul><li> - <b>Expert mode</b> will be activated;</li><li> - You can return to automatic peer selection by simply <b>deactivating expert mode</b>.</li></ul>"
},
"MODE": {
"DEMO": {
......
This diff is collapsed.
......@@ -49,8 +49,9 @@
"NO_ACCOUNT_QUESTION": "Ankoraŭ sen konto? Kreu ĝin senpage!",
"SEARCH_NO_RESULT": "Neniu rezulto trovita",
"LOADING": "Bonvolu pacienci...",
"LOADING_WAIT": "Bonvolu pacienci...<br/><small>(Atendado pri disponebleco de la nodo)</small>",
"LOADING_WAIT": "Bonvolu pacienci...<br/><small>(Cesium demandas la Duniter-nodon)</small>",
"SEARCHING": "Serĉanta...",
"DOWNLOADING_DOTS": "Elŝutanta...",
"FROM": "De",
"TO": "Al",
"COPY": "Kopii",
......@@ -110,7 +111,11 @@
"CODE": "Fonto-kodo:",
"OFFICIAL_WEB_SITE": "Oficiala retejo:",
"DEVELOPERS": "Programita de:",
"FORUM": "Forumo:",
"USER_FORUM": "Uzant-Forumo:",
"TECH_FORUM": "Teknika Forumo:",
"TELEGRAM": "Telegram-Grupo:",
"USER_HELP_DIVIDER": "Komunumo",
"CONTRIBUTE_DIVIDER": "Kontribui",
"PLEASE_REPORT_ISSUE": "Ne hezitu sciigi al ni la renkontitajn fuŝaĵojn",
"REPORT_ISSUE": "Sciigi problemon",
"BTN_OPEN_DEV_WINDOW": "Malfermi la fenestron pri malfuŝigado"
......@@ -131,21 +136,26 @@
"REPORT_ISSUE": "fuŝaĵo",
"NOT_YOUR_ACCOUNT_QUESTION" : "Vi ne posedas la konton <b class=\"ion-key\"> {{pubkey|formatPubkey}}</b>&nbsp;?",
"BTN_CHANGE_ACCOUNT": "Malkonektu tiun ĉi konton",
"CONNECTION_ERROR": "Nodo <b>{{server}}</b> neatingebla aŭ adreso nevalida.<br/><br/>Kontrolu vian retkonekton, aŭ elektu alian nodon <a class=\"positive\" ng-click=\"doQuickFix('settings')\">ĉe la parametroj</a>.",
"PEER_CONNECTION_ERROR": "Nodo <b>{{server}}</b> neatingebla aŭ adreso nevalida.<br/><br/>Kontrolu vian retkonekton, aŭ elektu alian nodon <a class=\"positive\" ng-click=\"doQuickFix('settings')\">ĉe la parametroj</a>.",
"NETWORK_CONNECTION_ERROR": "Reto neatingeblas.<br/><br/>Kontrolu vian interreta konekto, aŭ selektu nodon permane <a class=\"positive\" ng-click=\"doQuickFix('settings')\">en la agordoj</a>.",
"SHOW_ALL_FEED": "Vidi ĉion",
"READ_MORE": "Legi la sekvon",
"FEED_SOURCE": "Fonto"
"FEED_SOURCE": "Fonto",
"FEEDS_TITLE": "Novaĵoj"
},
"SETTINGS": {
"TITLE": "Parametroj",
"DISPLAY_DIVIDER": "Afiŝado",
"STORAGE_DIVIDER": "Stokado",
"NETWORK_SETTINGS": "Reto",
"PEER": "Adreso de la nodo Duniter",
"PEER_SHORT": "Adreso de la nodo",
"PEER": "Nodo Duniter",
"PEER_CHANGED_TEMPORARY": "Adreso provizore uzata",
"PEER_SELECTED_AUTOMATICALLY": "Nodo aŭtomate elektita ĉe starto",
"NETWORK_ANALYZE_TIMEOUT": "Maksimuma atendotempo (eltempigo)",
"NETWORK_ANALYZE_TIMEOUT_HELP": "Maksimuma atendotempo por reto analizo",
"NETWORK_ANALYZE_TIMEOUT_AUTO": "Auto",
"PERSIST_CACHE": "Konservi la datenojn pri retumado (provaĵo)",
"PERSIST_CACHE_HELP": "Ebligas pli rapidan retumadon, loke konservante la ricevitajn datenojn, por uzi ilin de sesio al alia.",
"PERSIST_CACHE_HELP": "Ebligas pli rapidan retumadon, loke konservante la ricevitajn datenojn, por uzi ilin de seanco al alia.",
"USE_LOCAL_STORAGE": "Aktivigi lokan stokadon",
"USE_LOCAL_STORAGE_HELP": "Ebligas konservi viajn parametrojn",
"WALLETS_SETTINGS": "Miaj monujoj",
......@@ -190,7 +200,7 @@
"HOST": "Adreso",
"HOST_HELP": "Adreso: servilo: konektujo",
"USE_SSL": "Sekurigita?",
"USE_SSL_HELP": "(SSL-ĉifrado)",
"USE_SSL_HELP": "SSL-ĉifrado",
"BTN_SHOW_LIST": "Listo de la nodoj"
}
},
......@@ -312,6 +322,8 @@
}
},
"INFO": {
"CONNECTING_TO_NETWORK": "Konektiĝo al la reto...",
"ANALYZING_NETWORK": "Analizo de la {{currency|abbreviate}} reto...",
"ONLY_SSL_PEERS": "La nodoj ne-SSL estas mis-afiŝitaj, ĉar Cesium funkcias laŭ moduso HTTPS."
}
},
......@@ -327,6 +339,9 @@
"ALL_PEERS" : "Ĉiuj nodoj",
"DIFFICULTY" : "Malfacileco",
"API" : "API",
"SANDBOXES": "Atendovico",
"PENDING_TX": "{{count}} transakcio(j) / {{size}} maksimume, {{free}} lokoj restantaj",
"PENDING_MEMBERSHIPS": "{{count}} membreco(j) atendantaj / {{size}} maksimume, {{free}} lokoj restantaj",
"CURRENT_BLOCK" : "Bloko #",
"POPOVER_FILTER_TITLE": "Filtrilo",
"OFFLINE": "Nekonektita",
......@@ -564,6 +579,24 @@
"SELECT_WALLET_MODAL": {
"TITLE": "Elekto de la monujo"
},
"CERTIFICATION_MODAL": {
"CHECKLIST_TITLE": "Kontrolisto antaŭ atesto",
"INFOS": "La sekureco de la monero Ğ1 dependas de ĉiu membro. Antaŭ atesti la identon de tiu ĉi persono, vi devus fari kelkajn kontroladetojn. Bonvolu respondi la jenajn demandojn:",
"BTN_ALL_CHECK": "Atesti",
"CHECKLIST_CONDITIONS_NOT_MET": "La atesto ne estis sendita. La kontrolado ŝajnas nesufiĉa. Bonvolu rekontroli ĉiun punkton kun la persono, kiun vi volas atesti.",
"QUESTIONS": {
"WELL_KNOWN": "<b>Ĉu vi bone konas</b> la personon, kiun vi volas atesti, kaj ĉu vi konas aliajn homojn, kiuj ankaŭ bone konas tiun personon?",
"REVOCATION": "Ĉu tiu ĉi persono elŝutis sian <b>malkonfirmadon dokumenton</b> kaj ĉu ŝi scias, kie trovi ĝin?",
"CONTACT": "Ĉu vi <b>kontaktis</b> kun tiu ĉi persono per diversaj metodoj, kaj ĉu ŝi respondis?",
"DOUBLE_IDENTITY": "La persono devus havi <b>nur unu aktivan membro-identon</b>. Ĉu vi pensas, ke ŝi posedas alian?",
"MASTER_ACCOUNT": "Ĉu tiu ĉi persono posedas siajn kontosekretojn? Ĉu ŝi jam <b>sendis monon de sia konto</b> almenaŭ unufoje?",
"LICENSE": "Ĉu tiu ĉi persono <b>komprenis la permesilon</b> de Duniter, kaj ĉu ŝi konsentas konformiĝi al ĝi por estontaj atestoj?",
"CREDENTIALS": "Ĉu la konto estis kreita kun <b>longa kaj kompleksa identigilo/pasvorto</b> (ekz. pasfrazoj)? Ĉu la persono komprenis, ke ambaŭ la identigilo kaj la pasvorto devas resti sekretaj? Ĉu ŝi estas <b>certa, ke ŝi memoros ilin</b> aŭ povos retrovi ilin?",
"PUBLIC_KEY_DIFFERENT": "La montrata <b>publika ŝlosilo</b> devas esti <b>identa</b> al tiu, kiun la persono donis al vi. Ĉu la publika ŝlosiloj estas <b>malsamaj</b>?"
},
"REMINDER_TITLE": "Memorigo",
"SHORT_LICENSE_REMINDER": "Vi povas rememorigi al la atestota persono diversajn parametrojn pri atestoj:<br/><br/><ul><li> - Ĉiu membro povas atesti maksimume 100 aliajn identecojn.</li><li> - La atestoj estas konservataj kun intervolo de 5 tagoj.</li><li> - Nova membro devas kolekti minimume 5 atestojn en malpli ol 2 monatoj.</li><li> - Membro devas renovigi sian membrecon minimume unufoje jare.</li><li> - Atestoj estas validaj dum du jaroj.</li></ul>"
},
"WALLET_LIST": {
"TITLE": "Miaj monujoj",
"BTN_NEW": "Aldoni monujon",
......@@ -572,7 +605,7 @@
"NO_WALLET": "Neniu kroma monujo",
"BTN_DELETE": "Forigi kroman monujon...",
"BTN_RENAME": "Renomi la monujon",
"EXPORT_FILENAME": "miaj_monujoj-{{pubkey|formatPubkey}}-{{currency}}.csv",
"EXPORT_FILENAME": "{{currency}}-miaj_monujoj-{{pubkey}}.csv",
"TOTAL_DOTS": "Sumo: ",
"EDIT_POPOVER": {
"TITLE": "Renomi la monujon",
......@@ -594,7 +627,7 @@
"DOWNLOAD_REVOKE_HELP": "Disponi dosieron pri nuligo estas grave, ekzemple kaze de perdo de viaj identigiloj. Ĝi ebligas al vi <b>elirigi tiun konton el la reto de fido</b>, tiel ke ĝi refariĝu simpla monujo.",
"GENERATE_KEYFILE": "Krei mian dosieron pri ŝlosilaro...",
"GENERATE_KEYFILE_HELP": "Kreas dosieron, kiu ebligas al vi aŭtentiĝi sen tajpi viajn identigilojn.<br/><b>Atenton:</b> tiu dosiero entenos vian konto-ŝlosilaron (publikan kaj sekretan ŝlosilojn); do tre gravas meti ĝin en sekuran lokon!",
"KEYFILE_FILENAME": "ŝlosilaro-{{pubkey|formatPubkey}}-{{currency}}-{{format}}.dunikey",
"KEYFILE_FILENAME": "{{currency}}-ŝlosilaro-{{pubkey}}-{{format}}.dunikey",
"MEMBERSHIP_IN": "Transformi en membro-konton...",
"MEMBERSHIP_IN_HELP": "Ebligas <b>transformi</b> simplan monujo-konton <b>en membro-konton</b>, sendante aliĝo-peton. Utilas nur se vi ne havas jam alian membro-konton.",
"SEND_IDENTITY": "Publikigi sian identecon...",
......@@ -630,9 +663,10 @@
"REVOCATION_WITH_FILE_HELP": "Por <b>definitive nuligi</b> membro-konton, bonvolu glitigi en la ĉi-suban zonon vian dosieron pri nuligo, aŭ alklaki la zonon por serĉadi dosieron.",
"REVOCATION_WALLET": "Nuligi tiun ĉi konton tuj",
"REVOCATION_WALLET_HELP": "Peti la nuligon de via identeco estigas la <b>eliradon el la reto de fido</b> (definitivan por la pseŭdonimo kaj la publika ŝlosilo kunligitaj). La konto ne plu povos produkti Universalan Dividendon.<br/>Vi tamen daŭre povos konektiĝi al ĝi, kiel al simpla monujo.",
"REVOCATION_FILENAME": "nuligo-{{uid}}-{{pubkey|formatPubkey}}-{{currency}}.txt",
"REVOCATION_FILENAME": "{{currency}}-nuligo-{{uid}}-{{pubkey}}.txt",
"SAVE_ID": "Konservi miajn identigilojn...",
"SAVE_ID_HELP": "Kreado de konserv-dosiero, por <b>retrovi vian pasvorton</b> (kaj la sekretan identigilon) <b>kaze de forgeso</b>. La dosiero estas <b>sekurigita</b> (ĉifrita) dank'al personaj demandoj.",
"SAVE_ID_FILENAME": "{{currency}}-ensalutigiloj-{{pubkey}}.txt",
"STRONG_LEVEL": "Forta <span class=\"hidden-xs \">(6 demandoj minimume)</span>",
"TITLE": "Konto kaj sekureco",
"KEYFILE": {
......@@ -684,6 +718,8 @@
"PUBKEY_INVALID_CHECKSUM": "Publika ŝlosilo nevalida (bad checksum).",
"POPUP_TITLE": "Eraro",
"UNKNOWN_ERROR": "Eraro nekonata",
"TIMEOUT_REACHED": "La atendo de la nodo superis la tempon ({{timeout|formatDurationMs}}).<br/><br/><small>{{url}}</small>",
"TOO_MANY_REQUESTS": "Vi sendis tro da petojn en mallonga tempodaŭro. Bonvolu atendi iomete antaŭ ol reprovu.<br/><br/><small>{{url}}</small>",
"CRYPTO_UNKNOWN_ERROR": "Via retumilo ŝajnas ne kongrua kun la kriptografiaj funkcioj.",
"DOWNLOAD_KEYFILE_FAILED": "Malsukceso por la kreado de la dosiero pri ŝlosilaro.",
"EQUALS_TO_PSEUDO": "Devas esti malsama ol la pseŭdonimo",
......@@ -740,7 +776,7 @@
"IDENTITY_PENDING_REVOCATION": "La <b>nuligo de tiu ĉi identeco</b> estis petita kaj atendas traktadon. La atestado estas do malaktivigita.",
"IDENTITY_INVALID_BLOCK_HASH": "Tiu ĉi aliĝo-peto ne plu validas (ĉar ĝi rilatas al bloko, kiun nuligis la nodoj de la reto): tiu persono devas refari sian aliĝo-peton <b>antaŭ ol</b> esti atestita.",
"IDENTITY_EXPIRED": "La publikigo de tiu ĉi identeco finiĝis: tiu persono devas fari novan aliĝo-peton <b>antaŭ ol</b> esti atestita.",
"IDENTITY_SANDBOX_FULL": "La nodo Duniter uzata de Cesium ne plu povas ricevi novajn identecojn, ĉar ĝia atendo-vico estas plena.<br/><br/>Bonvolu reprovi poste aŭ ŝanĝi la nodon (per la menuo <b>Parametroj</b>).",
"IDENTITY_SANDBOX_FULL": "La nodo Duniter uzata de Cesium ne plu povas ricevi novajn identecojn, ĉar ĝia atendovico estas plena.<br/><br/>Bonvolu reprovi poste aŭ ŝanĝi la nodon (per la menuo <b>Parametroj</b>).",
"IDENTITY_NOT_FOUND": "Identeco ne trovita.",
"IDENTITY_TX_FAILED": "Malsukceso por ŝarĝi la spezojn.",
"WOT_PENDING_INVALID_BLOCK_HASH": "Aliĝo ne valida.",
......@@ -764,6 +800,7 @@
"GET_BLOCK_FAILED": "Malsukceso por ricevi la blokon.",
"INVALID_BLOCK_HASH": "Bloko ne trovita (haketo malsama)",
"DOWNLOAD_REVOCATION_FAILED": "Malsukceso por elŝuti la dosieron pri nuligo.",
"DOWNLOAD_SAVE_ID_FAILED": "Malsukcesis elŝuti la dosieron por konservi la ensalutigilojn.",
"REVOCATION_FAILED": "Malsukceso pri nuligo.",
"SALT_OR_PASSWORD_NOT_CONFIRMED": "Sekreta identigilo aŭ pasvorto malĝusta.",
"RECOVER_ID_FAILED": "Malsukceso por ricevi la identigilojn",
......@@ -786,7 +823,10 @@
"UNKNOWN_WALLET_ID": "Kroma monujo nekonata.",
"RESTORE_WALLET_LIST_FAILED": "Malsukceso por restarigi la kromajn monujojn.",
"INVALID_FILE_FORMAT": "Strukturo de dosiero nevalida.",
"SAME_TX_RECIPIENT": "La adresito devas malsami ol la sendanto."
"SAME_TX_RECIPIENT": "La adresito devas malsami ol la sendanto.",
"SELF_CERTIFICATION": "Vi ne povas certigi vian propran identecon.",
"TX_SANDBOX_FULL": "La nodo Duniter uzata de Cesium ne plu povas prilabori novajn elspezojn, ĉar ĝia atendovico estas plena.<br/><br/>Bonvolu provi denove poste aŭ ŝanĝi la nodon (en la <b>Agordoj</b>).",
"DOWNLOAD_TX_HISTORY_FAILED": "Eraro dum la elŝuto de la konta raporto"
},
"INFO": {
"POPUP_TITLE": "Informo",
......@@ -802,9 +842,12 @@
"REVOCATION_SENT": "Nuligo sendita",
"REVOCATION_SENT_WAITING_PROCESS": "La <b>nuligo de tiu ĉi identeco</b> estis petita kaj atendas traktadon.",
"FEATURES_NOT_IMPLEMENTED": "Tiu ĉi funkciaro ankoraŭ estas programiĝanta.<br/>Kial ne <b>kontribui al Cesium</b>, por ekhavi ĝin pli rapide? ;)",
"EMPTY_TX_HISTORY": "Neniu spezo elportota"
"EMPTY_TX_HISTORY": "Neniu spezo elportota",
"LOADING_PENDING_TX": "Bonvolu pacienci...<br/><small>(Prenado de pendaj operacioj)</small>",
"FILE_DOWNLOADED": "Dosiero elŝutita"
},
"CONFIRM": {
"CAN_CONTINUE": "<b>Ĉu vi certas</b>, ke vi volas daŭrigi?",
"POPUP_TITLE": "<b>Konfirmo</b>",
"POPUP_WARNING_TITLE": "<b>Averto</b>",
"POPUP_SECURITY_WARNING_TITLE": "<i class=\"icon ion-alert-circled\"></i> <b>Averto pri sekureco</b>",
......@@ -829,7 +872,9 @@
"SAVE_BEFORE_LEAVE_TITLE": "Modifoj ne registritaj",
"LOGOUT": "Ĉu vi certas, ke vi volas malkonektiĝi?",
"USE_FALLBACK_NODE": "Nodo <b>{{old}}</b> neatingebla aŭ adreso nevalida.<br/><br/>Ĉu vi volas provizore uzi la nodon <b>{{new}}</b> ?",
"ISSUE_524_SEND_LOG": "La spezo estis forĵetita, pro konata anomalio (petslipo #524) sed <b>ne ripetita</b>.<br/><br/>Por helpi la programistojn korekti tiun eraron, <b>ĉu vi akceptas la sendadon de viaj protokolaj dosieroj</b> per mesaĝo?<br/><small>(neniu konfidenca dateno estas sendita)</small>."
"USE_SYNC_FALLBACK_NODE": "Ŝajnas, ke nodo <b>{{old}}</b> ne estas sinkronigita.<br/><br/>Ĉu vi volas provizore uzi la sinkronigitan nodon <b>{{new}}</b>?",
"ISSUE_524_SEND_LOG": "La spezo estis forĵetita, pro konata anomalio (petslipo #524) sed <b>ne ripetita</b>.<br/><br/>Por helpi la programistojn korekti tiun eraron, <b>ĉu vi akceptas la sendadon de viaj protokolaj dosieroj</b> per mesaĝo?<br/><small>(neniu konfidenca dateno estas sendita)</small>.",
"ENABLE_EXPERT_MODE_TO_CHANGE_NODE": "<b class=\"assertive\">Averto:</b> Ĉu vi volas <b>mane ŝanĝi</b> la nodon?<br/><br/>Se vi daŭrigas:<ul><li> - La <b>eksperta reĝimo</b> estos aktivigita;</li><li> - Vi povos reveni al aŭtomata nodo-selekto simple <b>malaktivigante la ekspertan reĝimon</b>.</li></ul>"
},
"MODE": {
"DEMO": {
......