Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions .github/workflows/push-transifex.yml
Original file line number Diff line number Diff line change
@@ -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
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# built application files
*.apk
*.ap_
*.aab

# files for the dex VM
*.dex
Expand Down Expand Up @@ -33,3 +34,7 @@ lint-*ml

# Prevent exidental commits of build folders
opencloudApp/release

# fastlane stuff (some)
fastlane/README.md
fastlane/report.xml
16 changes: 11 additions & 5 deletions .tx/config
Original file line number Diff line number Diff line change
@@ -1,8 +1,14 @@
[main]
host = https://www.transifex.com

[o:opencloud-org:p:opencloud:r:android]
file_filter = opencloudApp/src/main/res/values-<lang>/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-<lang>/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

6 changes: 6 additions & 0 deletions fastlane/Appfile
Original file line number Diff line number Diff line change
@@ -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.
47 changes: 47 additions & 0 deletions fastlane/Fastfile
Original file line number Diff line number Diff line change
@@ -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
29 changes: 13 additions & 16 deletions opencloudApp/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@
<string name="prefs_remember_last_upload_location_summary">Remember last share upload location</string>
<string name="prefs_pattern"> Pattern lock </string>
<string name="prefs_enable_logging">Enable logging</string>
<string name="prefs_enable_logging_summary">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.</string>
<string name="prefs_enable_logging_summary">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.</string>
<string name="prefs_send_feedback">Send feedback</string>
<string name="prefs_app_version">App version</string>
<string name="prefs_app_version_summary">%1$s %2$s version %3$s (%4$s)</string>
Expand Down Expand Up @@ -130,7 +130,7 @@
<string name="bottom_nav_shares">Shares</string>

<string name="recommend_subject">Try %1$s on your smartphone!</string>
<string name="recommend_text">"I want to invite you to use %1$s on your smartphone!\nDownload here: %2$s"</string>
<string name="recommend_text">I want to invite you to use %1$s on your smartphone!\nDownload here: %2$s</string>

<string name="error_reason">because</string>
<string name="auth_failure_snackbar">Authentication failed. Sign in again to regain access.</string>
Expand Down Expand Up @@ -368,8 +368,7 @@
<string name="auth_expired_basic_auth_toast">Please enter the current password</string>
<string name="auth_connecting_auth_server">Connecting to authentication server …</string>
<string name="auth_unsupported_auth_method">The server does not support this authentication method</string>
<string name="auth_fail_get_user_name">Your server is not returning a correct user ID. Please contact an administrator.
</string>
<string name="auth_fail_get_user_name">Your server is not returning a correct user ID. Please contact an administrator.</string>
<string name="auth_can_not_auth_against_server">Cannot authenticate to this server</string>
<string name="auth_account_does_not_exist">Account does not exist in the device yet</string>

Expand All @@ -391,8 +390,8 @@
<string name="remove_fail_msg">Removal failed</string>
<string name="rename_dialog_title">Enter a new name</string>
<string name="available_offline_inherited_msg">A folder containing this file is available offline.</string>
<string name="rename_local_fail_msg">"Local copy could not be renamed; try a different name"</string>
<string name="rename_server_fail_msg">"Rename could not be completed"</string>
<string name="rename_local_fail_msg">Local copy could not be renamed; try a different name</string>
<string name="rename_server_fail_msg">Rename could not be completed</string>
<string name="file_already_exists">File already exists</string>
<string name="folder_already_exists">Folder already exists</string>
<string name="file_already_exists_description">File with name %1$s already exists.</string>
Expand All @@ -411,7 +410,7 @@
<string name="filename_too_long">File name cannot be that long</string>
<string name="wait_a_moment">Wait a moment</string>
<string name="wait_checking_credentials">Checking stored credentials</string>
<string name="filedisplay_unexpected_bad_get_content">"Unexpected problem; please select the file from a different app"</string>
<string name="filedisplay_unexpected_bad_get_content">Unexpected problem; please select the file from a different app</string>
<string name="filedisplay_no_file_selected">No file was selected</string>
<string name="activity_chooser_title">Send link to</string>
<string name="wait_for_tmp_copy_from_private_storage">Copying file from private storage</string>
Expand Down Expand Up @@ -458,8 +457,8 @@
<string name="confirmation_disable_camera_uploads_title">Confirm</string>
<string name="confirmation_disable_pictures_upload_message">Are you sure you want to disable this feature? The pending pictures will not be uploaded.</string>
<string name="confirmation_disable_videos_upload_message">Are you sure you want to disable this feature? The pending videos will not be uploaded.</string>
<string name="proper_pics_folder_warning_camera_upload">"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."</string>
<string name="proper_videos_folder_warning_camera_upload">"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."</string>
<string name="proper_pics_folder_warning_camera_upload">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.</string>
<string name="proper_videos_folder_warning_camera_upload">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.</string>
<string name="conflict_title">File in conflict</string>
<string name="conflict_description">There is a conflict in file %1$s, tap to solve it.</string>
<string name="conflict_message">Which files do you want to keep? If you select both versions, the local file will have a number added to its name.</string>
Expand All @@ -477,8 +476,7 @@
<string name="get_shares_error">It was not possible to retrieve the shares from the server</string>
<string name="get_sharees_error">It was not possible to retrieve users and groups from the server</string>
<string name="get_capabilities_error">It was not possible to retrieve the capabilities from the server</string>
<string name="share_link_no_support_share_api">Sorry, sharing is not enabled on your server. Please contact your
administrator.</string>
<string name="share_link_no_support_share_api">Sorry, sharing is not enabled on your server. Please contact your administrator.</string>
<string name="share_link_file_error">It was not possible to share this file or folder</string>
<string name="unshare_link_file_error">It was not possible to unshare this file or folder</string>
<string name="update_link_file_error">It was not possible to update this file or folder</string>
Expand Down Expand Up @@ -618,8 +616,7 @@
<string name="share_remote_clarification">%1$s (remote)</string>
<string name="share_known_remote_clarification">%1$s ( at %2$s )</string>

<string name="share_sharee_unavailable">Sorry, your server version does not allow sharing with users within clients.
\nPlease contact your administrator</string>
<string name="share_sharee_unavailable">Sorry, your server version does not allow sharing with users within clients.\nPlease contact your administrator</string>
<string name="share_privilege_can_share">can share</string>
<string name="share_privilege_can_edit">can edit</string>
<string name="share_privilege_can_edit_create">create</string>
Expand Down Expand Up @@ -655,8 +652,8 @@
<string name="share_no_link_in_this_share">This share has no link.</string>
<string name="share_warning_about_forwarding_public_links">Anyone with the link has access to the file/folder.</string>
<string name="share_via_link_default_password">*****</string>
<string name="share_via_link_password_enforced_label">"Password *"</string>
<string name="share_via_link_expiration_date_enforced_label">"Expiration *"</string>
<string name="share_via_link_password_enforced_label">Password *</string>
<string name="share_via_link_expiration_date_enforced_label">Expiration *</string>
<string name="share_via_link_expiration_date_explanation_label">The public link will expire no later than %1$d days after it has been created.</string>
<string name="share_via_link_default_name_template">%1$s link</string>
<string name="share_via_link_empty_password">The password is empty.</string>
Expand Down Expand Up @@ -691,7 +688,7 @@
<string name="welcome_feature_2_title">Share files and folders</string>
<string name="welcome_feature_2_text">You can share privately or publicly</string>
<string name="welcome_feature_3_title">Multi account</string>
<string name="welcome_feature_3_text">Connect to all your openCloud servers</string>
<string name="welcome_feature_3_text">Connect to all your OpenCloud servers</string>
<string name="welcome_feature_4_title">Camera uploads</string>
<string name="welcome_feature_4_text">Your pictures/videos automatically uploaded</string>
<string name="welcome_feature_5_title">Video streaming</string>
Expand Down
Loading