From 26de60d54946322dca7b9d29a77f027011ea4198 Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Thu, 7 May 2026 14:02:34 +0200 Subject: [PATCH] transifex: Re-enable config For https://github.com/opencloud-eu/android/issues/115 --- .github/workflows/push-transifex.yml | 19 ++++++++ .gitignore | 5 +++ .tx/config | 16 ++++--- fastlane/Appfile | 6 +++ fastlane/Fastfile | 47 ++++++++++++++++++++ opencloudApp/src/main/res/values/strings.xml | 29 ++++++------ 6 files changed, 101 insertions(+), 21 deletions(-) create mode 100644 .github/workflows/push-transifex.yml create mode 100644 fastlane/Appfile create mode 100644 fastlane/Fastfile diff --git a/.github/workflows/push-transifex.yml b/.github/workflows/push-transifex.yml new file mode 100644 index 0000000000..6f2a56589c --- /dev/null +++ b/.github/workflows/push-transifex.yml @@ -0,0 +1,19 @@ +name: "Push source language to Transifex" + +on: + push: + branches: + - main + +jobs: + push-translations: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: l10n-push-source + uses: transifex/cli-action@v2 + with: + token: ${{ secrets.TX_TOKEN }} + args: push -s diff --git a/.gitignore b/.gitignore index 973377bc02..91c8510f38 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ # built application files *.apk *.ap_ +*.aab # files for the dex VM *.dex @@ -33,3 +34,7 @@ lint-*ml # Prevent exidental commits of build folders opencloudApp/release + +# fastlane stuff (some) +fastlane/README.md +fastlane/report.xml diff --git a/.tx/config b/.tx/config index 8bf6634b9c..e1cb149441 100644 --- a/.tx/config +++ b/.tx/config @@ -1,8 +1,14 @@ [main] host = https://www.transifex.com -[o:opencloud-org:p:opencloud:r:android] -file_filter = opencloudApp/src/main/res/values-/strings.xml -lang_map = af_ZA: af-rZA, am_ET: am-rET, ar_AE: ar-rAE, ar_BH: ar-rBH, ar_DZ: ar-rDZ, ar_EG: ar-rEG, ar_IQ: ar-rIQ, ar_JO: ar-rJO, ar_KW: ar-rKW, ar_LB: ar-rLB, ar_LY: ar-rLY, ar_MA: ar-rMA, ar_OM: ar-rOM, ar_QA: ar-rQA, ar_SA: ar-rSA, ar_SY: ar-rSY, ar_TN: ar-rTN, ar_YE: ar-rYE, arn_CL: arn-rCL, as_IN: as-rIN, az_AZ: az-rAZ, ba_RU: ba-rRU, be_BY: be-rBY, bg_BG: bg-rBG, bn_BD: bn-rBD, bn_IN: bn-rIN, bo_CN: bo-rCN, br_FR: br-rFR, bs_BA: bs-rBA, ca_ES: ca-rES, co_FR: co-rFR, cs_CZ: cs-rCZ, cy_GB: cy-rGB, da_DK: da-rDK, de_AT: de-rAT, de_CH: de-rCH, de_DE: de-rDE, de_LI: de-rLI, de_LU: de-rLU, dsb_DE: dsb-rDE, dv_MV: dv-rMV, el_GR: el-rGR, en_AU: en-rAU, en_BZ: en-rBZ, en_CA: en-rCA, en_GB: en-rGB, en_IE: en-rIE, en_IN: en-rIN, en_JM: en-rJM, en_MY: en-rMY, en_NZ: en-rNZ, en_PH: en-rPH, en_SG: en-rSG, en_TT: en-rTT, en_US: en-rUS, en_ZA: en-rZA, en_ZW: en-rZW, en@pirate: en-rpirate, es_AR: es-rAR, es_BO: es-rBO, es_CL: es-rCL, es_CO: es-rCO, es_CR: es-rCR, es_DO: es-rDO, es_EC: es-rEC, es_ES: es-rES, es_GT: es-rGT, es_HN: es-rHN, es_MX: es-rMX, es_NI: es-rNI, es_PA: es-rPA, es_PE: es-rPE, es_PR: es-rPR, es_PY: es-rPY, es_SV: es-rSV, es_US: es-rUS, es_UY: es-rUY, es_VE: es-rVE, et_EE: et-rEE, eu_ES: eu-rES, fa_IR: fa-rIR, fi_FI: fi-rFI, fil_PH: fil-rPH, fo_FO: fo-rFO, fr_BE: fr-rBE, fr_CA: fr-rCA, fr_CH: fr-rCH, fr_FR: fr-rFR, fr_LU: fr-rLU, fr_MC: fr-rMC, fy_NL: fy-rNL, ga_IE: ga-rIE, gd_GB: gd-rGB, gl_ES: gl-rES, gsw_FR: gsw-rFR, gu_IN: gu-rIN, ha_NG: ha-rNG, he_IL: he-rIL, hi_IN: hi-rIN, hr_BA: hr-rBA, hr_HR: hr-rHR, hsb_DE: hsb-rDE, hu_HU: hu-rHU, hy_AM: hy-rAM, id_ID: id-rID, ig_NG: ig-rNG, ii_CN: ii-rCN, is_IS: is-rIS, it_CH: it-rCH, it_IT: it-rIT, iu_CA: iu-rCA, ja_JP: ja-rJP, ka_GE: ka-rGE, kk_KZ: kk-rKZ, kl_GL: kl-rGL, km_KH: km-rKH, kn_IN: kn-rIN, ko_KR: ko-rKR, kok_IN: kok-rIN, ku_IQ: ku-rIQ, ky_KG: ky-rKG, lb_LU: lb-rLU, lo_LA: lo-rLA, lt_LT: lt-rLT, lv_LV: lv-rLV, mi_NZ: mi-rNZ, mk_MK: mk-rMK, ml_IN: ml-rIN, mn_CN: mn-rCN, mn_MN: mn-rMN, moh_CA: moh-rCA, mr_IN: mr-rIN, ms_BN: ms-rBN, ms_MY: ms-rMY, my_MM: my, mt_MT: mt-rMT, nb_NO: nb-rNO, ne_NP: ne-rNP, nl_BE: nl-rBE, nl_NL: nl-rNL, nn_NO: nn-rNO, nso_ZA: nso-rZA, oc_FR: oc-rFR, or_IN: or-rIN, pa_IN: pa-rIN, pl_PL: pl-rPL, prs_AF: prs-rAF, ps_AF: ps-rAF, pt_BR: pt-rBR, pt_PT: pt-rPT, qut_GT: qut-rGT, quz_BO: quz-rBO, quz_EC: quz-rEC, quz_PE: quz-rPE, rm_CH: rm-rCH, ro_RO: ro-rRO, ru_RU: ru-rRU, rw_RW: rw-rRW, sa_IN: sa-rIN, sah_RU: sah-rRU, se_FI: se-rFI, se_NO: se-rNO, se_SE: se-rSE, si_LK: si-rLK, sk_SK: sk-rSK, sl_SI: sl-rSI, sma_NO: sma-rNO, sma_SE: sma-rSE, smj_NO: smj-rNO, smj_SE: smj-rSE, smn_FI: smn-rFI, sms_FI: sms-rFI, sq_AL: sq-rAL, sr_BA: sr-rBA, sr_CS: sr-rCS, sr_ME: sr-rME, sr_RS: sr-rRS, sr@latin: sr-rSP, sv_FI: sv-rFI, sv_SE: sv-rSE, sw_KE: sw-rKE, syr_SY: syr-rSY, ta_IN: ta-rIN, ta_LK: ta-rLK, te_IN: te-rIN, tg_TJ: tg-rTJ, th_TH: th-rTH, tk_TM: tk-rTM, tn_ZA: tn-rZA, tr_TR: tr-rTR, tt_RU: tt-rRU, tzm_DZ: tzm-rDZ, ug_CN: ug-rCN, uk_UA: uk-rUA, ur_PK: ur-rPK, uz_UZ: uz-rUZ, vi_VN: vi-rVN, wo_SN: wo-rSN, xh_ZA: xh-rZA, yo_NG: yo-rNG, zh_CN: zh-rCN, zh_CN.GB2312:zh-rBG, zh_HK: zh-rHK, zh_MO: zh-rMO, zh_SG: zh-rSG, zh_TW: zh-rTW, zu_ZA: zu-rZA -source_file = opencloudApp/src/main/res/values/strings.xml -source_lang = en +[o:opencloud-eu:p:opencloud-eu:r:android] +file_filter = opencloudApp/src/main/res/values-/strings.xml +source_file = opencloudApp/src/main/res/values/strings.xml +source_lang = en +lang_map = zh_HK: zh-rHK, ar_JO: ar-rJO, es_SV: es-rSV, fa_IR: fa-rIR, ky_KG: ky-rKG, ne_NP: ne-rNP, pt_PT: pt-rPT, arn_CL: arn-rCL, de_AT: de-rAT, es_ES: es-rES, es_US: es-rUS, lb_LU: lb-rLU, ta_IN: ta-rIN, tr_TR: tr-rTR, as_IN: as-rIN, az_AZ: az-rAZ, en_IE: en-rIE, es_CL: es-rCL, gu_IN: gu-rIN, ps_AF: ps-rAF, dsb_DE: dsb-rDE, prs_AF: prs-rAF, quz_EC: quz-rEC, se_FI: se-rFI, ug_CN: ug-rCN, es_VE: es-rVE, lo_LA: lo-rLA, nl_BE: nl-rBE, sq_AL: sq-rAL, yo_NG: yo-rNG, af_ZA: af-rZA, ar_MA: ar-rMA, es_GT: es-rGT, tzm_DZ: tzm-rDZ, bs_BA: bs-rBA, en_CA: en-rCA, en_IN: en-rIN, ja_JP: ja-rJP, lv_LV: lv-rLV, sr_ME: sr-rME, uk_UA: uk-rUA, de_CH: de-rCH, en_PH: en-rPH, es_MX: es-rMX, ga_IE: ga-rIE, sr@latin: sr-rSP, ar_YE: ar-rYE, be_BY: be-rBY, en_AU: en-rAU, en@pirate: en-rpirate, fy_NL: fy-rNL, hu_HU: hu-rHU, hy_AM: hy-rAM, rw_RW: rw-rRW, id_ID: id-rID, ig_NG: ig-rNG, iu_CA: iu-rCA, my_MM: my, oc_FR: oc-rFR, quz_BO: quz-rBO, se_NO: se-rNO, smj_SE: smj-rSE, ar_EG: ar-rEG, cs_CZ: cs-rCZ, kn_IN: kn-rIN, syr_SY: syr-rSY, zh_MO: zh-rMO, de_LU: de-rLU, kk_KZ: kk-rKZ, mk_MK: mk-rMK, sr_BA: sr-rBA, sr_RS: sr-rRS, vi_VN: vi-rVN, ar_SA: ar-rSA, ca_ES: ca-rES, cy_GB: cy-rGB, es_AR: es-rAR, fr_LU: fr-rLU, mn_MN: mn-rMN, mr_IN: mr-rIN, smj_NO: smj-rNO, br_FR: br-rFR, es_PE: es-rPE, eu_ES: eu-rES, fi_FI: fi-rFI, sw_KE: sw-rKE, tt_RU: tt-rRU, ar_AE: ar-rAE, ar_IQ: ar-rIQ, en_SG: en-rSG, es_EC: es-rEC, hsb_DE: hsb-rDE, sv_SE: sv-rSE, ur_PK: ur-rPK, am_ET: am-rET, es_DO: es-rDO, ku_IQ: ku-rIQ, mi_NZ: mi-rNZ, or_IN: or-rIN, zu_ZA: zu-rZA, es_CR: es-rCR, es_HN: es-rHN, es_PR: es-rPR, et_EE: et-rEE, hi_IN: hi-rIN, ms_BN: ms-rBN, se_SE: se-rSE, xh_ZA: xh-rZA, en_US: en-rUS, hr_BA: hr-rBA, is_IS: is-rIS, it_CH: it-rCH, nb_NO: nb-rNO, sa_IN: sa-rIN, sl_SI: sl-rSI, tg_TJ: tg-rTJ, ar_LB: ar-rLB, es_UY: es-rUY, ha_NG: ha-rNG, ii_CN: ii-rCN, ms_MY: ms-rMY, smn_FI: smn-rFI, ta_LK: ta-rLK, tn_ZA: tn-rZA, ar_BH: ar-rBH, de_DE: de-rDE, dv_MV: dv-rMV, en_BZ: en-rBZ, fr_CH: fr-rCH, he_IL: he-rIL, hr_HR: hr-rHR, nso_ZA: nso-rZA, es_NI: es-rNI, pa_IN: pa-rIN, pl_PL: pl-rPL, quz_PE: quz-rPE, sk_SK: sk-rSK, th_TH: th-rTH, uz_UZ: uz-rUZ, zh_CN: zh-rCN, de_LI: de-rLI, el_GR: el-rGR, fo_FO: fo-rFO, gsw_FR: gsw-rFR, tk_TM: tk-rTM, zh_CN.GB2312: zh-rBG, zh_TW: zh-rTW, en_GB: en-rGB, en_ZW: en-rZW, mn_CN: mn-rCN, ru_RU: ru-rRU, es_PA: es-rPA, es_PY: es-rPY, gl_ES: gl-rES, rm_CH: rm-rCH, si_LK: si-rLK, sr_CS: sr-rCS, bg_BG: bg-rBG, en_ZA: en-rZA, fr_CA: fr-rCA, ro_RO: ro-rRO, sv_FI: sv-rFI, ar_OM: ar-rOM, bn_BD: bn-rBD, bn_IN: bn-rIN, es_BO: es-rBO, fil_PH: fil-rPH, mt_MT: mt-rMT, qut_GT: qut-rGT, sms_FI: sms-rFI, ba_RU: ba-rRU, en_NZ: en-rNZ, en_TT: en-rTT, fr_BE: fr-rBE, it_IT: it-rIT, te_IN: te-rIN, co_FR: co-rFR, fr_FR: fr-rFR, gd_GB: gd-rGB, ko_KR: ko-rKR, lt_LT: lt-rLT, moh_CA: moh-rCA, nl_NL: nl-rNL, sma_SE: sma-rSE, ar_SY: ar-rSY, bo_CN: bo-rCN, es_CO: es-rCO, km_KH: km-rKH, wo_SN: wo-rSN, zh_SG: zh-rSG, ar_DZ: ar-rDZ, ar_LY: ar-rLY, ar_QA: ar-rQA, nn_NO: nn-rNO, sma_NO: sma-rNO, en_JM: en-rJM, en_MY: en-rMY, ka_GE: ka-rGE, kok_IN: kok-rIN, ml_IN: ml-rIN, pt_BR: pt-rBR, sah_RU: sah-rRU, ar_KW: ar-rKW, ar_TN: ar-rTN, da_DK: da-rDK, fr_MC: fr-rMC, kl_GL: kl-rGL +replace_edited_strings = false +keep_translations = false +type = ANDROID +minimum_perc = 20 +resource_name = android + diff --git a/fastlane/Appfile b/fastlane/Appfile new file mode 100644 index 0000000000..013b423a42 --- /dev/null +++ b/fastlane/Appfile @@ -0,0 +1,6 @@ +package_name("eu.opencloud.android") + +# Credentials are read from environment, NOT a file in the repo: +# SUPPLY_JSON_KEY — absolute path to the service-account JSON (local dev) +# SUPPLY_JSON_KEY_DATA — raw JSON contents (CI; e.g. a GitHub Actions secret) +# Set whichever one fits your workflow. diff --git a/fastlane/Fastfile b/fastlane/Fastfile new file mode 100644 index 0000000000..62be829ea8 --- /dev/null +++ b/fastlane/Fastfile @@ -0,0 +1,47 @@ +default_platform(:android) + +platform :android do + desc "Pull latest translations from Transifex" + lane :pull_translations do + Dir.chdir("..") do + sh("tx", "pull", "-a", "-f", "--skip") + #sh("tx" "pull" "--force" "--skip" "--all" "-w" "1" "-m" "onlytranslated") + end + files = Dir.glob("../opencloudApp/src/main/res/values-*/strings.xml") + if files.empty? + UI.important("No values-*/strings.xml present after tx pull — nothing was downloaded.") + else + UI.success("#{files.size} translation file(s) on disk:") + files.sort.each { |f| UI.message(" #{f}") } + end + end + + desc "Build the originalRelease AAB (pulls translations first)" + lane :build_release do + %w[OC_RELEASE_KEYSTORE OC_RELEASE_KEYSTORE_PASSWORD OC_RELEASE_KEY_ALIAS OC_RELEASE_KEY_PASSWORD].each do |var| + UI.user_error!("#{var} is not set — release AAB would be unsigned and rejected by Play.") if ENV[var].to_s.empty? + end + pull_translations + gradle( + task: "bundle", + flavor: "Original", + build_type: "Release" + ) + sh("ls", "-l", "../opencloudApp/build/outputs/bundle/originalRelease/opencloudApp-original-release.aab") + end + + desc "Pull translations, build, and upload to Play Store. Override track with: fastlane deploy track:beta" + lane :deploy do |options| + track = options[:track] || "internal" + build_release + upload_to_play_store( + track: track, + aab: lane_context[SharedValues::GRADLE_AAB_OUTPUT_PATH], + skip_upload_apk: true, + skip_upload_metadata: true, + skip_upload_changelogs: true, + skip_upload_images: true, + skip_upload_screenshots: true + ) + end +end diff --git a/opencloudApp/src/main/res/values/strings.xml b/opencloudApp/src/main/res/values/strings.xml index 35e5873b9b..dfaeb3adc3 100644 --- a/opencloudApp/src/main/res/values/strings.xml +++ b/opencloudApp/src/main/res/values/strings.xml @@ -102,7 +102,7 @@ Remember last share upload location Pattern lock Enable logging - When activated, logs may impact performance and include sensitive information. However the logs are not subject to automatic submission to openCloud servers. Sharing logs with others is sole user responsibility. + When activated, logs may impact performance and include sensitive information. However the logs are not subject to automatic submission to OpenCloud servers. Sharing logs with others is sole user responsibility. Send feedback App version %1$s %2$s version %3$s (%4$s) @@ -130,7 +130,7 @@ Shares Try %1$s on your smartphone! - "I want to invite you to use %1$s on your smartphone!\nDownload here: %2$s" + I want to invite you to use %1$s on your smartphone!\nDownload here: %2$s because Authentication failed. Sign in again to regain access. @@ -368,8 +368,7 @@ Please enter the current password Connecting to authentication server … The server does not support this authentication method - Your server is not returning a correct user ID. Please contact an administrator. - + Your server is not returning a correct user ID. Please contact an administrator. Cannot authenticate to this server Account does not exist in the device yet @@ -391,8 +390,8 @@ Removal failed Enter a new name A folder containing this file is available offline. - "Local copy could not be renamed; try a different name" - "Rename could not be completed" + Local copy could not be renamed; try a different name + Rename could not be completed File already exists Folder already exists File with name %1$s already exists. @@ -411,7 +410,7 @@ File name cannot be that long Wait a moment Checking stored credentials - "Unexpected problem; please select the file from a different app" + Unexpected problem; please select the file from a different app No file was selected Send link to Copying file from private storage @@ -458,8 +457,8 @@ Confirm Are you sure you want to disable this feature? The pending pictures will not be uploaded. Are you sure you want to disable this feature? The pending videos will not be uploaded. - "Please make sure the folder selected is where the camera you are using saves the pictures taken. Otherwise, the feature will not be able to detect your pictures. Keep in mind that pictures will be uploaded in at least 15 minutes after taking them." - "Please make sure the folder selected is where the camera you are using saves the videos recorded. Otherwise, the feature will not be able to detect your videos. Keep in mind that videos will be uploaded in at least 15 minutes after recording them." + Please make sure the folder selected is where the camera you are using saves the pictures taken. Otherwise, the feature will not be able to detect your pictures. Keep in mind that pictures will be uploaded in at least 15 minutes after taking them. + Please make sure the folder selected is where the camera you are using saves the videos recorded. Otherwise, the feature will not be able to detect your videos. Keep in mind that videos will be uploaded in at least 15 minutes after recording them. File in conflict There is a conflict in file %1$s, tap to solve it. Which files do you want to keep? If you select both versions, the local file will have a number added to its name. @@ -477,8 +476,7 @@ It was not possible to retrieve the shares from the server It was not possible to retrieve users and groups from the server It was not possible to retrieve the capabilities from the server - Sorry, sharing is not enabled on your server. Please contact your - administrator. + Sorry, sharing is not enabled on your server. Please contact your administrator. It was not possible to share this file or folder It was not possible to unshare this file or folder It was not possible to update this file or folder @@ -618,8 +616,7 @@ %1$s (remote) %1$s ( at %2$s ) - Sorry, your server version does not allow sharing with users within clients. - \nPlease contact your administrator + Sorry, your server version does not allow sharing with users within clients.\nPlease contact your administrator can share can edit create @@ -655,8 +652,8 @@ This share has no link. Anyone with the link has access to the file/folder. ***** - "Password *" - "Expiration *" + Password * + Expiration * The public link will expire no later than %1$d days after it has been created. %1$s link The password is empty. @@ -691,7 +688,7 @@ Share files and folders You can share privately or publicly Multi account - Connect to all your openCloud servers + Connect to all your OpenCloud servers Camera uploads Your pictures/videos automatically uploaded Video streaming