Compare commits
108 Commits
auth-v4.2.
...
auth-v4.2.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1952e5278d | ||
|
|
c5019da4bd | ||
|
|
acb898ecf9 | ||
|
|
aea531ee21 | ||
|
|
22c4a50c2b | ||
|
|
290716e8ca | ||
|
|
f96a336b4b | ||
|
|
a6600b4718 | ||
|
|
ce0798fbec | ||
|
|
7cbc5ffb2d | ||
|
|
88ac10d96c | ||
|
|
0a7fd03df7 | ||
|
|
9b47595f2c | ||
|
|
af5e072ea5 | ||
|
|
2bc9251a09 | ||
|
|
12a19a484c | ||
|
|
8906cb2a1d | ||
|
|
6f936a42c4 | ||
|
|
497e546129 | ||
|
|
2736ab5334 | ||
|
|
f04b8ffce6 | ||
|
|
b7f33233d9 | ||
|
|
6dffb1f289 | ||
|
|
5a131e7f83 | ||
|
|
2138ef602a | ||
|
|
6adadcaf93 | ||
|
|
0ce4ed494d | ||
|
|
77257aa6ab | ||
|
|
184bb6ec6c | ||
|
|
2e7e9c1ca8 | ||
|
|
7ef3a7a726 | ||
|
|
fbf27b4544 | ||
|
|
67ba7614db | ||
|
|
b05e675820 | ||
|
|
ff3033f1ae | ||
|
|
4dda92219a | ||
|
|
53618d0e1f | ||
|
|
0642e41a2e | ||
|
|
0be4aed185 | ||
|
|
ef93482523 | ||
|
|
bb161ad3a9 | ||
|
|
bf7be69c3d | ||
|
|
82358812bd | ||
|
|
e52e61c0af | ||
|
|
17ea9dfaaa | ||
|
|
6e045affa4 | ||
|
|
1232b956c9 | ||
|
|
9a284f916f | ||
|
|
df321f9dea | ||
|
|
543411254b | ||
|
|
a3b9b6bb90 | ||
|
|
5b9e1abec3 | ||
|
|
a1e97239c3 | ||
|
|
2f372cdbe1 | ||
|
|
9910049d1d | ||
|
|
fe2771f2e0 | ||
|
|
2e517535b3 | ||
|
|
e459fb5686 | ||
|
|
9498571c10 | ||
|
|
f2a9675911 | ||
|
|
ede505d939 | ||
|
|
65a92f1a77 | ||
|
|
56cdb9064d | ||
|
|
7ddf70eb86 | ||
|
|
6592ddedfd | ||
|
|
1b74049eb5 | ||
|
|
568377d4e7 | ||
|
|
4bd416fd10 | ||
|
|
634ae71a5d | ||
|
|
0ae1557508 | ||
|
|
93071af19a | ||
|
|
ab15263a17 | ||
|
|
d2d02f3591 | ||
|
|
1e79409f73 | ||
|
|
866d2bb00a | ||
|
|
1832005d72 | ||
|
|
b054c070ad | ||
|
|
64a47694d0 | ||
|
|
8af02aa4c8 | ||
|
|
a4e09a40e8 | ||
|
|
82fc1a1434 | ||
|
|
b511aeb401 | ||
|
|
6812527607 | ||
|
|
2263eb684c | ||
|
|
8df68cf529 | ||
|
|
ba11a5a755 | ||
|
|
e31b55499b | ||
|
|
89f917220d | ||
|
|
fad26a960d | ||
|
|
6e3d285428 | ||
|
|
2198eeb372 | ||
|
|
184c044377 | ||
|
|
63d41434a9 | ||
|
|
310f180c5a | ||
|
|
5da05467d6 | ||
|
|
a2decb5030 | ||
|
|
6f891a45de | ||
|
|
4e7d764722 | ||
|
|
9aae713207 | ||
|
|
17aa1b67c1 | ||
|
|
5e22c95bfb | ||
|
|
182fd89356 | ||
|
|
6516b457cb | ||
|
|
bf78b2e671 | ||
|
|
58afaa9405 | ||
|
|
1bffbdad03 | ||
|
|
267d5cef65 | ||
|
|
d391db2dd5 |
2
.github/workflows/cli-release.yml
vendored
2
.github/workflows/cli-release.yml
vendored
@@ -45,7 +45,7 @@ jobs:
|
||||
goarch: ${{ matrix.goarch }}
|
||||
asset_name: ente-${{ github.ref_name }}-${{ matrix.goos }}-${{ matrix.goarch }}
|
||||
release_name: ${{ github.ref_name }}
|
||||
goversion: "1.20"
|
||||
goversion: "1.23"
|
||||
project_path: "./cli"
|
||||
pre_command: export CGO_ENABLED=0
|
||||
build_flags: "-trimpath"
|
||||
|
||||
7
.github/workflows/server-publish.yml
vendored
7
.github/workflows/server-publish.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: "Publish (server)"
|
||||
name: "Publish ghcr (server)"
|
||||
|
||||
on:
|
||||
# Run manually, providing it the commit.
|
||||
@@ -39,7 +39,6 @@ jobs:
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Tag as server/ghcr
|
||||
- name: Update branch server/ghcr to point to source commit
|
||||
run: |
|
||||
git tag -f server/ghcr
|
||||
git push -f origin server/ghcr
|
||||
git push -f origin HEAD:server/ghcr
|
||||
|
||||
@@ -72,6 +72,10 @@
|
||||
"NGA社区"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Belo",
|
||||
"hex": "5717d4"
|
||||
},
|
||||
{
|
||||
"title": "Bethesda",
|
||||
"altNames": [
|
||||
@@ -175,6 +179,9 @@
|
||||
{
|
||||
"title": "Bybit"
|
||||
},
|
||||
{
|
||||
"title": "Caixa"
|
||||
},
|
||||
{
|
||||
"title": "Canva"
|
||||
},
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
<svg width="500" height="500" viewBox="0 0 500 500" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M442.375 441.562C390.672 479.687 315.75 500 251.25 500C160.625 500 79.344 466.562 17.7346 410.89C13.0471 406.515 17.2346 400.547 23.0471 403.953C89.5315 442.656 171.875 465.937 256.656 465.937C317.884 465.655 378.451 453.272 434.875 429.5C443.625 425.781 450.969 435.218 442.375 441.562ZM463.875 416.968C457.313 408.531 420.188 412.984 403.563 414.937C398.485 415.562 397.719 411.14 402.281 407.968C431.969 387.187 480.313 393.172 485.969 400.156C491.625 407.14 484.5 455.781 456.75 478.968C452.485 482.531 448.422 480.64 450.5 475.906C456.75 460.343 470.719 425.437 464.094 416.968" fill="#FF9900"/>
|
||||
<g style="mix-blend-mode:difference">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M287.969 216.625C287.969 243.063 288.641 265.109 275.281 288.578C264.344 307.641 247.156 319.406 228.328 319.406C202.281 319.406 187.016 299.563 187.016 270.266C187.016 212.453 238.828 201.938 287.984 201.938L287.969 216.625ZM356.422 382C351.938 386.016 345.453 386.297 340.391 383.625C317.891 364.922 313.766 356.234 301.453 338.391C264.234 376.359 237.797 387.719 189.609 387.719C132.453 387.719 88.0781 352.5 88.0781 281.984C88.0781 226.922 117.844 189.422 160.422 171.094C197.25 154.875 248.703 152.031 288 147.656V139.062C288 122.938 289.25 103.844 279.719 89.9219C271.516 77.4219 255.656 72.2656 241.641 72.2656C215.781 72.2656 192.781 85.5469 187.156 113.016C186.016 119.266 181.531 125.141 175.328 125.422L109.375 118.047C103.844 116.797 97.6563 112.328 99.2656 103.984C114.5 24.0625 186.641 0 251.156 0C284.172 0 327.313 8.78125 353.344 33.7812C386.359 64.6094 383.219 105.734 383.219 150.5V256.25C383.219 288.031 396.391 301.953 408.797 319.141C413.094 325.391 414.047 332.578 408.516 337.172C391.003 351.98 373.669 366.997 356.516 382.219L356.422 382.031" fill="white"/>
|
||||
</g>
|
||||
</svg>
|
||||
<svg width="500" height="500" viewBox="0 0 500 500" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M16.05 385.03C13.89 386.74 13.44 389.58 14.69 393.56C15.83 397.09 18.5 401.47 22.71 406.7C39.65 427.63 59.84 445.03 83.27 458.9C106.7 472.78 131.78 483.01 158.51 489.61C185.35 496.32 212.76 499.68 240.73 499.68C276.56 499.68 310.68 494.44 343.09 483.98C375.51 473.63 402.58 459.07 424.3 440.31C431.92 433.6 435.73 428.25 435.73 424.27C435.73 422.79 435.1 421.31 433.85 419.83C432.15 418.13 430.1 417.56 427.71 418.13C425.32 418.7 421.97 420.12 417.65 422.39C396.83 433.31 371.47 442.01 341.56 448.49C311.76 455.09 280.65 458.39 248.24 458.39C208.09 458.39 169.31 452.93 131.89 442.01C94.47 431.09 61.32 414.03 32.43 390.83C28.22 387.53 24.81 385.43 22.19 384.52C19.69 383.61 17.65 383.78 16.05 385.03Z"
|
||||
fill="#FF6200"/>
|
||||
<path d="M395.12 393.57C392.73 395.85 392.11 398.24 393.24 400.74C394.04 402.56 395.58 403.58 397.85 403.81C400.12 404.15 403.37 403.92 407.57 403.13C414.4 401.65 421.51 400.62 428.9 400.06C436.29 399.6 442.72 399.71 448.18 400.4C453.64 401.19 457.05 402.56 458.41 404.49C460.46 407.56 459.72 414.04 456.2 423.94C452.78 433.83 448.12 443.44 442.21 452.77C439.93 456.52 438.57 459.48 438.11 461.64C437.66 463.8 438.23 465.62 439.82 467.1C440.84 468.12 441.98 468.64 443.23 468.64C446.53 468.64 451.31 465.74 457.56 459.94C468.82 450.16 476.72 438.55 481.27 425.13C483.78 418.2 485.31 410.92 485.88 403.3C486.45 395.68 485.6 390.22 483.32 386.92C481.16 383.73 476.38 381.12 468.99 379.07C461.71 377.02 454.38 376 446.98 376C432.54 376 418.83 379.41 405.87 386.24C401.09 388.85 397.51 391.3 395.12 393.57Z"
|
||||
fill="#FF6200"/>
|
||||
<g style="mix-blend-mode:difference">
|
||||
<path d="M209.76 387.72C188.61 387.72 170 383.1 153.92 373.87C137.84 364.34 125.33 351.24 116.4 334.56C107.47 317.59 103 298.09 103 276.05C103 249.55 109.55 226.32 122.65 206.37C136.05 186.42 154.96 171.08 179.38 160.36C204.1 149.64 232.98 144.28 266.04 144.28C281.23 144.28 293.58 145.32 303.11 147.41V138.03C303.11 115.39 298.94 98.57 290.61 87.55C282.27 76.23 269.61 70.58 252.64 70.58C225.24 70.58 207.67 85.02 199.93 113.9C197.55 122.24 192.63 125.82 185.19 124.62L124.44 113.9C119.97 113.01 116.85 111.08 115.06 108.1C113.57 105.12 113.42 101.1 114.61 96.04C122.36 65.66 138.74 42.14 163.75 25.46C189.06 8.49 220.78 0 258.89 0C304.16 0 338.55 12.21 362.08 36.63C385.9 61.05 397.81 96.63 397.81 143.39V368.07C397.81 371.34 396.62 374.17 394.24 376.55C392.15 378.64 389.47 379.68 386.2 379.68H328.13C320.98 379.68 316.51 375.81 314.73 368.07L305.79 326.08H302.22C294.18 345.73 282.12 360.92 266.04 371.64C250.26 382.36 231.49 387.72 209.76 387.72ZM200.38 265.33C200.38 281.11 204.4 293.77 212.44 303.3C220.78 312.53 231.94 317.14 245.94 317.14C264.4 317.14 278.55 308.95 288.37 292.58C298.2 275.9 303.11 252.08 303.11 221.11V197.43C294.78 195.94 286.88 195.2 279.44 195.2C255.02 195.2 235.66 201.6 221.37 214.41C207.37 226.91 200.38 243.89 200.38 265.33Z"
|
||||
fill="white"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 2.9 KiB |
1
auth/assets/custom-icons/icons/belo.svg
Normal file
1
auth/assets/custom-icons/icons/belo.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="87" height="87" fill="none"><rect width="86.1667" height="86.2257" fill="#5717D4" rx="14.7344"/><path fill="#00FFB2" fill-rule="evenodd" d="M24.448 35.976c.461-.504 1.242-.536 1.767-.098a26.25 26.25 0 0 0 16.867 6.09 26.25 26.25 0 0 0 16.867-6.09c.525-.438 1.306-.406 1.767.098l4.178 4.562a1.204 1.204 0 0 1-.092 1.732 34.9 34.9 0 0 1-22.72 8.36 34.9 34.9 0 0 1-22.72-8.36 1.204 1.204 0 0 1-.092-1.732z" clip-rule="evenodd"/></svg>
|
||||
|
After Width: | Height: | Size: 478 B |
9
auth/assets/custom-icons/icons/caixa.svg
Normal file
9
auth/assets/custom-icons/icons/caixa.svg
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="500px" height="500px" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g><path style="opacity:0.99" fill="#0170ae" d="M 268.5,114.5 C 268.343,115.873 268.51,117.207 269,118.5C 291.11,156.392 312.943,194.392 334.5,232.5C 281.008,234.166 227.341,235.166 173.5,235.5C 135.941,171.393 98.6076,107.06 61.5,42.5C 116.5,41.1667 171.5,41.1667 226.5,42.5C 240.022,66.8911 254.022,90.8911 268.5,114.5 Z"/></g>
|
||||
<g><path style="opacity:0.982" fill="#f5812a" d="M 499.5,43.5 C 499.5,44.5 499.5,45.5 499.5,46.5C 449.174,108.835 399.174,171.502 349.5,234.5C 345.217,235.492 340.884,235.826 336.5,235.5C 336.573,233.973 335.906,232.973 334.5,232.5C 312.943,194.392 291.11,156.392 269,118.5C 268.51,117.207 268.343,115.873 268.5,114.5C 286.953,90.8749 305.619,67.3749 324.5,44C 382.832,43.5 441.166,43.3333 499.5,43.5 Z"/></g>
|
||||
<g><path style="opacity:0.561" fill="#337394" d="M 334.5,232.5 C 335.906,232.973 336.573,233.973 336.5,235.5C 282.167,235.5 227.833,235.5 173.5,235.5C 227.341,235.166 281.008,234.166 334.5,232.5 Z"/></g>
|
||||
<g><path style="opacity:0.988" fill="#f5812a" d="M 325.5,264.5 C 322.22,267.043 319.387,270.043 317,273.5C 289.381,309.454 261.381,345.12 233,380.5C 231.121,382.527 229.954,384.86 229.5,387.5C 211.307,410.688 192.973,433.855 174.5,457C 116.168,457.5 57.8343,457.667 -0.5,457.5C -0.5,456.5 -0.5,455.5 -0.5,454.5C 50.0174,391.474 100.017,327.974 149.5,264C 208.335,263.168 267.001,263.335 325.5,264.5 Z"/></g>
|
||||
<g><path style="opacity:0.99" fill="#0170ae" d="M 325.5,264.5 C 364.664,327.999 402.998,391.999 440.5,456.5C 383.829,456.833 327.163,456.5 270.5,455.5C 256.822,432.806 243.155,410.139 229.5,387.5C 229.954,384.86 231.121,382.527 233,380.5C 261.381,345.12 289.381,309.454 317,273.5C 319.387,270.043 322.22,267.043 325.5,264.5 Z"/></g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
@@ -258,6 +258,10 @@
|
||||
"areYouSureYouWantToLogout": "Наистина ли искате да излезете от профила си?",
|
||||
"yesLogout": "Да, излез",
|
||||
"exit": "Изход",
|
||||
"theme": "Тема",
|
||||
"lightTheme": "Светла",
|
||||
"darkTheme": "Тъмна",
|
||||
"systemTheme": "Системна",
|
||||
"verifyingRecoveryKey": "Проверка на ключа за възстановяване...",
|
||||
"recoveryKeyVerified": "Ключът за възстановяване е проверен",
|
||||
"recoveryKeySuccessBody": "Страхотно! Вашият ключ за възстановяване е валиден. Благодарим Ви за проверката.\n\nМоля, не забравяйте да запазите безопасно архивирания си ключ за възстановяване.",
|
||||
@@ -490,5 +494,13 @@
|
||||
"appLockNotEnabled": "Заключването на приложението не е активирано",
|
||||
"appLockNotEnabledDescription": "Моля, активирайте заключването на приложението от Сигурност > Заключване на приложението",
|
||||
"authToViewPasskey": "Моля, удостоверете се, за да видите Вашите ключове за парола",
|
||||
"appLockOfflineModeWarning": "Избрахте да продължите без резервни копия. Ако забравите паролата на приложението си, ще бъдете заключени от достъп до вашите данни."
|
||||
"appLockOfflineModeWarning": "Избрахте да продължите без резервни копия. Ако забравите паролата на приложението си, ще бъдете заключени от достъп до вашите данни.",
|
||||
"duplicateCodes": "Повтарящи се кодове",
|
||||
"noDuplicates": "✨ Няма дубликати",
|
||||
"youveNoDuplicateCodesThatCanBeCleared": "Нямате повтарящи се кодове, които могат да бъдат изчистени",
|
||||
"deduplicateCodes": "Премахване на повтарящи се кодове",
|
||||
"deselectAll": "Демаркиране на всички",
|
||||
"selectAll": "Избиране на всички",
|
||||
"deleteDuplicates": "Изтриване на дубликатите",
|
||||
"plainHTML": "Обикновен HTML"
|
||||
}
|
||||
@@ -156,6 +156,7 @@
|
||||
"twoFactorAuthTitle": "Autenticació de dos factors",
|
||||
"passkeyAuthTitle": "Verificació per passkey",
|
||||
"verifyPasskey": "Verifica la passkey",
|
||||
"loginWithTOTP": "Inici de sessió amb TOTP",
|
||||
"recoverAccount": "Recupera el compte",
|
||||
"enterRecoveryKeyHint": "Introdueix la teva clau de recuperació",
|
||||
"recover": "Recupera",
|
||||
@@ -257,6 +258,10 @@
|
||||
"areYouSureYouWantToLogout": "Segur que vols tancar la sessió?",
|
||||
"yesLogout": "Sí, tanca la sessió",
|
||||
"exit": "Surt",
|
||||
"theme": "Tema",
|
||||
"lightTheme": "Clar",
|
||||
"darkTheme": "Fosc",
|
||||
"systemTheme": "Del sistema",
|
||||
"verifyingRecoveryKey": "Verificant clau de recuperació...",
|
||||
"recoveryKeyVerified": "Clau de recuperació verificada",
|
||||
"recoveryKeySuccessBody": "Perfecte! La teva clau de recuperació és vàlida. Gràcies per verificar-ho.\n\nSi us plau, recorda mantenir una còpia de seguretat de la teva clau de recuperació en un lloc segur.",
|
||||
@@ -327,6 +332,10 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"manualSort": "Personalitzat",
|
||||
"editOrder": "Edita l'ordre",
|
||||
"mostFrequentlyUsed": "Usats sovint",
|
||||
"mostRecentlyUsed": "Usats recentment",
|
||||
"activeSessions": "Sessions actives",
|
||||
"somethingWentWrongPleaseTryAgain": "S'ha produït un error, si us plau, intenta-ho de nou",
|
||||
"thisWillLogYouOutOfThisDevice": "Això tancarà la sessió en aquest dispositiu!",
|
||||
@@ -446,6 +455,9 @@
|
||||
"customEndpoint": "Connectat a {endpoint}",
|
||||
"pinText": "Fixa",
|
||||
"unpinText": "Desfixa",
|
||||
"pinnedCodeMessage": "{code} s'ha fixat",
|
||||
"unpinnedCodeMessage": "{code} s'ha deixat de fixar",
|
||||
"pinned": "Fixat",
|
||||
"tags": "Etiquetes",
|
||||
"createNewTag": "Crea una nova etiqueta",
|
||||
"tag": "Etiqueta",
|
||||
@@ -482,5 +494,13 @@
|
||||
"appLockNotEnabled": "Bloqueig de l'aplicació no habilitat",
|
||||
"appLockNotEnabledDescription": "Si us plau, habilita el bloqueig de l'aplicació a Seguretat > Bloqueig de l'aplicació",
|
||||
"authToViewPasskey": "Autentica't per veure la passkey",
|
||||
"appLockOfflineModeWarning": "Has triat procedir sense còpies de seguretat. Si oblides el bloqueig de l'aplicació, no podràs accedir a les teves dades."
|
||||
"appLockOfflineModeWarning": "Has triat procedir sense còpies de seguretat. Si oblides el bloqueig de l'aplicació, no podràs accedir a les teves dades.",
|
||||
"duplicateCodes": "Codis duplicats",
|
||||
"noDuplicates": "✨ Sense duplicats",
|
||||
"youveNoDuplicateCodesThatCanBeCleared": "No teniu codis duplicats que es puguin esborrar",
|
||||
"deduplicateCodes": "Desduplica codis",
|
||||
"deselectAll": "Desselecciona-ho tot",
|
||||
"selectAll": "Seleccionar-ho tot",
|
||||
"deleteDuplicates": "Elimina duplicats",
|
||||
"plainHTML": "HTML pla"
|
||||
}
|
||||
@@ -487,7 +487,7 @@
|
||||
"hideContentDescriptioniOS": "Ocultar el contenido de la aplicación en el selector de aplicaciones",
|
||||
"autoLockFeatureDescription": "Tiempo tras el cual la aplicación se bloquea después de ser colocada en segundo plano",
|
||||
"appLockDescription": "Elija entre la pantalla de bloqueo por defecto de su dispositivo y una pantalla de bloqueo personalizada con un PIN o contraseña.",
|
||||
"pinLock": "Bloqueo con Pin",
|
||||
"pinLock": "Bloqueo con PIN",
|
||||
"enterPin": "Ingresa el PIN",
|
||||
"setNewPin": "Establecer nuevo PIN",
|
||||
"importFailureDescNew": "No se pudo analizar el archivo seleccionado.",
|
||||
@@ -501,5 +501,6 @@
|
||||
"deduplicateCodes": "Desduplicar códigos",
|
||||
"deselectAll": "Deseleccionar todo",
|
||||
"selectAll": "Seleccionar todo",
|
||||
"deleteDuplicates": "Eliminar duplicados"
|
||||
"deleteDuplicates": "Eliminar duplicados",
|
||||
"plainHTML": "HTML plano"
|
||||
}
|
||||
@@ -1,16 +1,16 @@
|
||||
{
|
||||
"account": "Akun\n",
|
||||
"account": "Akun",
|
||||
"unlock": "Buka",
|
||||
"recoveryKey": "Kunci pemulihan",
|
||||
"counterAppBarTitle": "Pencacah",
|
||||
"counterAppBarTitle": "Penghitung",
|
||||
"@counterAppBarTitle": {
|
||||
"description": "Text shown in the AppBar of the Counter Page"
|
||||
},
|
||||
"onBoardingBody": "Cadangkan kode autentikasi 2 langkah Anda dengan aman",
|
||||
"onBoardingBody": "Cadangkan kode 2FA Anda dengan aman",
|
||||
"onBoardingGetStarted": "Mulai",
|
||||
"setupFirstAccount": "Siapkan akun pertama Anda",
|
||||
"importScanQrCode": "Pindai Kode Respons Cepat (QR)",
|
||||
"qrCode": "Kode Respons Cepat (QR)",
|
||||
"importScanQrCode": "Pindai Kode QR",
|
||||
"qrCode": "Kode QR",
|
||||
"importEnterSetupKey": "Masukkan kunci penyiapan",
|
||||
"importAccountPageTitle": "Masukkan rincian akun",
|
||||
"secretCanNotBeEmpty": "Rahasia tidak boleh kosong",
|
||||
@@ -22,7 +22,7 @@
|
||||
"secret": "Rahasia",
|
||||
"all": "Semua",
|
||||
"notes": "Catatan",
|
||||
"notesLengthLimit": "Banyaknya karakter pada catatan yang diperbolehkan paling banyak adalah sebanyak {count} karakter",
|
||||
"notesLengthLimit": "Catatan dapat memiliki panjang maksimal {count} karakter",
|
||||
"@notesLengthLimit": {
|
||||
"description": "Text to indicate the maximum number of characters allowed for notes",
|
||||
"placeholders": {
|
||||
@@ -33,29 +33,29 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"codeAccountHint": "Akun (nama@domain.com)",
|
||||
"codeAccountHint": "Akun (anda@domain.com)",
|
||||
"codeTagHint": "Tag",
|
||||
"accountKeyType": "Jenis kunci",
|
||||
"sessionExpired": "Sesi berakhir",
|
||||
"@sessionExpired": {
|
||||
"description": "Title of the dialog when the users current session is invalid/expired"
|
||||
},
|
||||
"pleaseLoginAgain": "Silakan masuk akun lagi",
|
||||
"loggingOut": "Keluar dari akun...",
|
||||
"pleaseLoginAgain": "Silakan masuk lagi",
|
||||
"loggingOut": "Mengeluarkan akun...",
|
||||
"timeBasedKeyType": "Berbasis waktu (TOTP)",
|
||||
"counterBasedKeyType": "Berbasis pencacah (HOTP)",
|
||||
"counterBasedKeyType": "Berbasis Penghitung (HOTP)",
|
||||
"saveAction": "Simpan",
|
||||
"nextTotpTitle": "berikutnya",
|
||||
"deleteCodeTitle": "Hapus kode?",
|
||||
"deleteCodeMessage": "Anda yakin ingin menghapus kode ini? Tindakan ini tidak dapat dikembalikan ke semula.",
|
||||
"deleteCodeMessage": "Apakah Anda yakin ingin menghapus kode ini? Tindakan ini tidak dapat dibatalkan.",
|
||||
"trashCode": "Hapus kode?",
|
||||
"trashCodeMessage": "Anda yakin ingin menghapus kode untuk akun {account}?",
|
||||
"trashCodeMessage": "Apakah anda yakin ingin menghapus kode untuk {account}?",
|
||||
"trash": "Hapus",
|
||||
"viewLogsAction": "Lihat log",
|
||||
"sendLogsDescription": "Langkah ini akan mengirimkan log untuk membantu kami menyelesaikan masalah Anda. Kami menyarankan Anda untuk meninjau log-log berikut sebelum dibagikan walaupun kami sudah berupaya untuk memastikan agar segala informasi yang bersifat sensitif tidak terlog.",
|
||||
"preparingLogsTitle": "Menyiapkan log...",
|
||||
"emailLogsTitle": "Log surel",
|
||||
"emailLogsMessage": "Harap kirim log ke {email}",
|
||||
"viewLogsAction": "Lihat catatan",
|
||||
"sendLogsDescription": "Ini akan mengirimkan catatan untuk membantu kami memecahkan masalah Anda. Meskipun kami mengambil langkah-langkah untuk memastikan informasi sensitif tidak tercatat, kami menyarankan Anda untuk melihat catatan ini sebelum membagikannya.",
|
||||
"preparingLogsTitle": "Menyiapkan catatan...",
|
||||
"emailLogsTitle": "Catatan email",
|
||||
"emailLogsMessage": "Harap kirim catatan ke {email}",
|
||||
"@emailLogsMessage": {
|
||||
"placeholders": {
|
||||
"email": {
|
||||
@@ -63,12 +63,12 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"copyEmailAction": "Salin surel",
|
||||
"exportLogsAction": "Ekspor log",
|
||||
"reportABug": "Laporkan keberadaan kutu",
|
||||
"crashAndErrorReporting": "Pelaporan Galat dan Kemogokan",
|
||||
"reportBug": "Laporkan kutu",
|
||||
"emailUsMessage": "Harap kirimkan surel ke {email}",
|
||||
"copyEmailAction": "Salin alamat email",
|
||||
"exportLogsAction": "Ekspor catatan",
|
||||
"reportABug": "Laporkan bug",
|
||||
"crashAndErrorReporting": "Pelaporan Kerusakan & Kesalahan",
|
||||
"reportBug": "Laporkan bug",
|
||||
"emailUsMessage": "Harap kirim email kepada kami di {email}",
|
||||
"@emailUsMessage": {
|
||||
"placeholders": {
|
||||
"email": {
|
||||
@@ -76,91 +76,91 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"contactSupport": "Hubungi bantuan",
|
||||
"rateUsOnStore": "Beri kami penilaian di {storeName}",
|
||||
"contactSupport": "Hubungi dukungan",
|
||||
"rateUsOnStore": "Nilai kami di {storeName}",
|
||||
"blog": "Blog",
|
||||
"merchandise": "Toko kami",
|
||||
"merchandise": "Merchandise",
|
||||
"verifyPassword": "Verifikasi kata sandi",
|
||||
"pleaseWait": "Mohon tunggu...",
|
||||
"generatingEncryptionKeysTitle": "Membuat kunci enkripsi...",
|
||||
"generatingEncryptionKeysTitle": "Sedang membuat kunci enkripsi...",
|
||||
"recreatePassword": "Buat ulang kata sandi",
|
||||
"recreatePasswordMessage": "Gawai ini tidak cukup mutakhir untuk memverifikasi kata sandi Anda, sehingga kami perlu membuat ulang kata sandi Anda sekali lagi dengan cara yang dapat digunakan di semua perangkat.\n\nSilakan masuk dengan kunci pemulihan dan buat ulang kata sandi Anda (Gunakan kata sandi yang sama lagi jika Anda mau).",
|
||||
"recreatePasswordMessage": "Perangkat saat ini tidak cukup kuat untuk memverifikasi kata sandi Anda, jadi kami perlu membuat ulang kata sandi Anda dengan cara yang dapat digunakan di semua perangkat.\n\nHarap masuk menggunakan kunci pemulihan Anda dan buat ulang kata sandi Anda (Anda dapat menggunakan yang sama lagi jika diinginkan).",
|
||||
"useRecoveryKey": "Gunakan kunci pemulihan",
|
||||
"incorrectPasswordTitle": "Kata sandi salah",
|
||||
"welcomeBack": "Selamat datang kembali!",
|
||||
"madeWithLoveAtPrefix": "dibuat dengan ❤️ di ",
|
||||
"supportDevs": "Berlangganan <bold-green>ente</bold-green> untuk memberikan kami dukungan",
|
||||
"supportDiscount": "Gunakan kode kupon \"AUTH\" untuk mendapatkan diskon 10% pada tahun Anda berlangganan",
|
||||
"changeEmail": "Ubah surel",
|
||||
"supportDevs": "Berlangganan <bold-green>ente</bold-green> untuk mendukung kami",
|
||||
"supportDiscount": "Gunakan kode kupon \"AUTH\" untuk mendapatkan potongan 10% untuk tahun pertama",
|
||||
"changeEmail": "Ubah alamat email",
|
||||
"changePassword": "Ubah kata sandi",
|
||||
"data": "Data",
|
||||
"importCodes": "Impor kode",
|
||||
"importTypePlainText": "Teks biasa",
|
||||
"importTypeEnteEncrypted": "Eksporan Ente Terenkripsi",
|
||||
"passwordForDecryptingExport": "Kata sandi untuk mendekripsi eksporan",
|
||||
"passwordForDecryptingExport": "Kata sandi untuk mendekripsi ekspor",
|
||||
"passwordEmptyError": "Kata sandi tidak boleh kosong",
|
||||
"importFromApp": "Impor kode dari {appName}",
|
||||
"importGoogleAuthGuide": "Ekspor semua akun Anda dari Google Authenticator ke kode respons cepat (QR) dengan pilihan \"Transfer Akun\". Kemudian, pindai kode respons cepat tersebut dengan perangkat lain.\n\nKiat: webcam laptop juga dapat digunakan untuk untuk memindai kode respons cepat.",
|
||||
"importGoogleAuthGuide": "Ekspor akun Anda dari Google Authenticator ke kode QR menggunakan opsi \"Transfer Akun\". Kemudian, gunakan perangkat lain untuk memindai kode QR tersebut.\n\nTip: Anda bisa menggunakan webcam laptop Anda untuk memotret kode QR.",
|
||||
"importSelectJsonFile": "Pilih berkas JSON",
|
||||
"importSelectAppExport": "Pilih berkas eksporan dari {appName}",
|
||||
"importEnteEncGuide": "Pilih berkas JSON terenkripsi yang telah diekspor dari Ente",
|
||||
"importRaivoGuide": "Gunakan pilihan \"Export OTPs to Zip archive\" pada pengaturan Raivo.\n\nEkstrak berkas zip dan impor berkas JSON tersebut.",
|
||||
"importBitwardenGuide": "Gunakan pilihan \"Export vault\" pada Bitwarden Tools dan impor ber JSON yang takterenkripsi.",
|
||||
"importAegisGuide": "Gunakan pilihan \"Export vault\" pada pengaturan Aegis.\n\nJika brankas terenkripsi, masukkan kata sandi brankas untuk mendekripsi brankas.",
|
||||
"import2FasGuide": "Gunakan pilihan \"Pengaturan->Cadangkan -Eksport\" pada 2FAS.\n\nJika cadangan Anda dienkripsi, kata sandi akan Anda perlukan untuk mendekripsi cadangan",
|
||||
"importLastpassGuide": "Gunakan pilihan \"Transfer accounts\" pada pengaturan Lastpass Authenticator dan tekan \"Export accounts to file\". Impor berkas JSON terunduh.",
|
||||
"exportCodes": "Kode pengeksporan",
|
||||
"importEnteEncGuide": "Pilih file enkripsi JSON yang telah diekspor dari Ente",
|
||||
"importRaivoGuide": "Gunakan opsi \"Export OTPs to Zip archive\" pada pengaturan Raivo.\n\nEkstrak file zip dan impor file JSON tersebut.",
|
||||
"importBitwardenGuide": "Gunakan opsi \"Export vault\" di Bitwarden dan impor file JSON yang tidak terenkripsi.",
|
||||
"importAegisGuide": "Gunakan opsi \"Export the vault\" di Pengaturan Aegis.\n\nJika brankas Anda terenkripsi, Anda perlu memasukkan kata sandi brankas untuk mendekripsi brankas.",
|
||||
"import2FasGuide": "Gunakan opsi \"Settings->Backup -Export\" di 2FAS.\n\nJika cadangan Anda terenkripsi, Anda perlu memasukkan kata sandi untuk mendekripsi cadangan",
|
||||
"importLastpassGuide": "Gunakan opsi \"Transfer accounts\" di Pengaturan Lastpass Authenticator dan tekan \"Export accounts to file\". Impor file JSON yang diunduh.",
|
||||
"exportCodes": "Ekspor kode",
|
||||
"importLabel": "Impor",
|
||||
"importInstruction": "Mohon pilih berkas yang mengandung daftar kode dalam format seperti berikut",
|
||||
"importCodeDelimiterInfo": "Kode dapat dipisahkan oleh tanda koma atau baris baru",
|
||||
"importInstruction": "Harap pilih file yang berisi daftar kode Anda dalam format berikut",
|
||||
"importCodeDelimiterInfo": "Kode dapat dipisahkan dengan koma atau baris baru",
|
||||
"selectFile": "Pilih file",
|
||||
"emailVerificationToggle": "Verifikasi surel",
|
||||
"emailVerificationEnableWarning": "Agar tidak akun Anda tidak terkunci, pastikan simpan salinan pengaturan 2FA surel Anda di luar aplikasi Ente Auth sebelum verifikasi surel Anda nyalakan.",
|
||||
"authToChangeEmailVerificationSetting": "Mohon autentikasikan untuk mengubah verifikasi surel",
|
||||
"authenticateGeneric": "Mohon autentikasikan",
|
||||
"authToViewYourRecoveryKey": "Mohon autentikasikan untuk menampilkan kunci pemulihan",
|
||||
"authToChangeYourEmail": "Moohn autentikasikan untuk mengubah surel",
|
||||
"authToChangeYourPassword": "Mohon autentikasikan untuk mengubah kata sandi",
|
||||
"authToViewSecrets": "Mohon autentikasikan untuk menampilkan RahasiaKu",
|
||||
"authToInitiateSignIn": "Mohon autentikasikan untuk memulai proses pencadangan.",
|
||||
"emailVerificationToggle": "Verifikasi email",
|
||||
"emailVerificationEnableWarning": "Untuk menghindari terkunci dari akun Anda, pastikan untuk menyimpan salinan 2FA email Anda di luar Ente Auth sebelum mengaktifkan verifikasi email.",
|
||||
"authToChangeEmailVerificationSetting": "Harap lakukan autentikasi untuk mengubah verifikasi email",
|
||||
"authenticateGeneric": "Harap lakukan autentikasi",
|
||||
"authToViewYourRecoveryKey": "Harap lakukan autentikasi untuk melihat kunci pemulihan Anda",
|
||||
"authToChangeYourEmail": "Harap lakukan autentikasi untuk mengubah email Anda",
|
||||
"authToChangeYourPassword": "Harap lakukan autentikasi untuk mengubah kata sandi Anda",
|
||||
"authToViewSecrets": "Harap lakukan autentikasi untuk melihat rahasia Anda",
|
||||
"authToInitiateSignIn": "Harap lakukan autentikasi untuk memulai proses masuk untuk pencadangan.",
|
||||
"ok": "Oke",
|
||||
"cancel": "Batal",
|
||||
"yes": "Ya",
|
||||
"no": "Tidak",
|
||||
"email": "Surel",
|
||||
"support": "Bantuan",
|
||||
"email": "Email",
|
||||
"support": "Dukungan",
|
||||
"general": "Umum",
|
||||
"settings": "Pengaturan",
|
||||
"copied": "Disalin",
|
||||
"pleaseTryAgain": "Mohon coba lagi",
|
||||
"existingUser": "Pengguna yang Sudah Ada",
|
||||
"pleaseTryAgain": "Harap coba lagi",
|
||||
"existingUser": "Pengguna yang ada",
|
||||
"newUser": "Baru di Ente",
|
||||
"delete": "Hapus",
|
||||
"enterYourPasswordHint": "Masukkan kata sandi Anda",
|
||||
"forgotPassword": "Lupa kata sandi",
|
||||
"oops": "Aduh",
|
||||
"oops": "Ups",
|
||||
"suggestFeatures": "Sarankan fitur",
|
||||
"faq": "Tanya Jawab Umum",
|
||||
"faq": "Pertanyaan yang sering ditanyakan",
|
||||
"somethingWentWrongMessage": "Terjadi kesalahan, silakan coba lagi",
|
||||
"leaveFamily": "Tinggalkan keluarga",
|
||||
"leaveFamilyMessage": "Anda yakin sudah tidak ingin berlangganan paket keluarga ini?",
|
||||
"leaveFamilyMessage": "Apakah Anda yakin sudah tidak ingin berlangganan paket keluarga ini?",
|
||||
"inFamilyPlanMessage": "Anda sedang berlangganan paket keluarga!",
|
||||
"hintForMobile": "Tekan lama kode untuk menyunting atau menghapus.",
|
||||
"hintForDesktop": "Klik kanan kode untuk menyunting atau menghapus.",
|
||||
"hintForMobile": "Tekan lama kode untuk mengedit atau menghapusnya.",
|
||||
"hintForDesktop": "Klik kanan kode untuk mengedit atau menghapus.",
|
||||
"scan": "Pindai",
|
||||
"scanACode": "Pindai kode",
|
||||
"verify": "Verifikasi",
|
||||
"verifyEmail": "Verifikasi email",
|
||||
"enterCodeHint": "Masukkan kode 6 angka pada aplikasi pengautentikasi Anda",
|
||||
"enterCodeHint": "Masukkan kode 6 digit dari aplikasi autentikator Anda",
|
||||
"lostDeviceTitle": "Perangkat hilang?",
|
||||
"twoFactorAuthTitle": "Autentikasi dua langkah",
|
||||
"passkeyAuthTitle": "Verifikasi passkey",
|
||||
"verifyPasskey": "Verifikasi passkey",
|
||||
"loginWithTOTP": "Login menggunakan TOTP",
|
||||
"loginWithTOTP": "Masuk menggunakan TOTP",
|
||||
"recoverAccount": "Pulihkan akun",
|
||||
"enterRecoveryKeyHint": "Masukkan kunci pemulihanmu",
|
||||
"enterRecoveryKeyHint": "Masukkan kunci pemulihan Anda",
|
||||
"recover": "Pulihkan",
|
||||
"contactSupportViaEmailMessage": "Silakan kirimkan surel ke {email} dari alamat surelmu yang terdaftar",
|
||||
"contactSupportViaEmailMessage": "Harap kirim email ke {email} dari alamat email terdaftar Anda",
|
||||
"@contactSupportViaEmailMessage": {
|
||||
"placeholders": {
|
||||
"email": {
|
||||
@@ -168,13 +168,13 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"invalidQRCode": "Kode QR tidak sah",
|
||||
"invalidQRCode": "Kode QR tidak valid",
|
||||
"noRecoveryKeyTitle": "Tidak punya kunci pemulihan?",
|
||||
"enterEmailHint": "Masukkan alamat surelmu",
|
||||
"invalidEmailTitle": "Alamat surel tidak sah",
|
||||
"invalidEmailMessage": "Harap masukkan alamat surel yang sah.",
|
||||
"enterEmailHint": "Masukkan alamat email Anda",
|
||||
"invalidEmailTitle": "Alamat email tidak valid",
|
||||
"invalidEmailMessage": "Harap masukkan alamat email yang valid.",
|
||||
"deleteAccount": "Hapus akun",
|
||||
"deleteAccountQuery": "Sayang sekali Anda harus pergi. Apakah ada masalah?",
|
||||
"deleteAccountQuery": "Kami akan merasa kehilangan Anda. Apakah Anda menghadapi masalah?",
|
||||
"yesSendFeedbackAction": "Ya, kirim umpan balik",
|
||||
"noDeleteAccountAction": "Tidak, hapus akun",
|
||||
"initiateAccountDeleteTitle": "Harap autentikasi untuk memulai penghapusan akun",
|
||||
@@ -183,37 +183,37 @@
|
||||
"weakStrength": "Lemah",
|
||||
"strongStrength": "Kuat",
|
||||
"moderateStrength": "Sedang",
|
||||
"confirmPassword": "Konfirmasi sandi",
|
||||
"confirmPassword": "Konfirmasi kata sandi",
|
||||
"close": "Tutup",
|
||||
"oopsSomethingWentWrong": "Ups, sepertinya ada yang salah.",
|
||||
"oopsSomethingWentWrong": "Ups, Ada yang tidak beres.",
|
||||
"selectLanguage": "Pilih bahasa",
|
||||
"language": "Bahasa",
|
||||
"social": "Sosial",
|
||||
"security": "Keamanan",
|
||||
"lockscreen": "Layar kunci",
|
||||
"authToChangeLockscreenSetting": "Mohon autentikan untuk mengganti pengaturan layar kunci",
|
||||
"authToChangeLockscreenSetting": "Harap lakukan autentikasi untuk mengubah pengaturan layar kunci",
|
||||
"deviceLockEnablePreSteps": "Pasang kunci sandi atau kunci layar pada pengaturan sistem untuk menyalakan Pengunci Gawai.",
|
||||
"viewActiveSessions": "Tampilkan sesi yang aktif",
|
||||
"authToViewYourActiveSessions": "Mohon autentikasikan untuk menampilkan sesi aktif Anda",
|
||||
"viewActiveSessions": "Lihat sesi aktif",
|
||||
"authToViewYourActiveSessions": "Harap lakukan autentikasi untuk melihat sesi aktif Anda",
|
||||
"searchHint": "Cari...",
|
||||
"search": "Cari",
|
||||
"sorryUnableToGenCode": "Maaf, kami tidak dapat membuat kode untuk {issuerName}",
|
||||
"noResult": "Tiada hasil",
|
||||
"sorryUnableToGenCode": "Maaf, tidak dapat menghasilkan kode untuk {issuerName}",
|
||||
"noResult": "Tidak ada hasil",
|
||||
"addCode": "Tambahkan kode",
|
||||
"scanAQrCode": "Pindai kode Respons Cepat (QR)",
|
||||
"scanAQrCode": "Pindai kode QR",
|
||||
"enterDetailsManually": "Masukkan rincian secara manual",
|
||||
"edit": "Sunting",
|
||||
"edit": "Edit",
|
||||
"share": "Bagikan",
|
||||
"shareCodes": "Bagikan kode",
|
||||
"shareCodesDuration": "Pilih durasi untuk membagikan kode.",
|
||||
"shareCodesDuration": "Pilih durasi untuk berbagi kode.",
|
||||
"restore": "Pulihkan",
|
||||
"copiedToClipboard": "Tersalin ke papan klip",
|
||||
"copiedNextToClipboard": "",
|
||||
"error": "Galat",
|
||||
"recoveryKeyCopiedToClipboard": "Kunci pemulihan tersalin ke papan klip",
|
||||
"recoveryKeyOnForgotPassword": "Jika Anda lupa kata sandi Anda, satu-satunya cara untuk memulihkan data Anda adalah dengan kunci ini.",
|
||||
"recoveryKeySaveDescription": "Kami tidak menyimpan kunci ini, tolong simpan kunci berisikan 24 kata ini di tempat yang aman.",
|
||||
"doThisLater": "Nanti saja",
|
||||
"copiedToClipboard": "Disalin ke papan klip",
|
||||
"copiedNextToClipboard": "Kode berikutnya telah disalin ke papan klip",
|
||||
"error": "Kesalahan",
|
||||
"recoveryKeyCopiedToClipboard": "Kunci pemulihan disalin ke papan klip",
|
||||
"recoveryKeyOnForgotPassword": "Jika Anda lupa kata sandi, satu-satunya cara memulihkan data Anda adalah dengan kunci ini.",
|
||||
"recoveryKeySaveDescription": "Kami tidak menyimpan kunci ini, jadi harap simpan kunci yang berisi 24 kata ini dengan aman.",
|
||||
"doThisLater": "Lakukan lain kali",
|
||||
"saveKey": "Simpan kunci",
|
||||
"save": "Simpan",
|
||||
"send": "Kirim",
|
||||
@@ -248,7 +248,7 @@
|
||||
"passwordChangedSuccessfully": "Kata sandi sukses diubah",
|
||||
"generatingEncryptionKeys": "Sedang membuat kunci enkripsi...",
|
||||
"continueLabel": "Lanjutkan",
|
||||
"insecureDevice": "Gawai takaman",
|
||||
"insecureDevice": "Perangkat tidak aman",
|
||||
"sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": "Maaf, kami tidak dapat membuat kunci yang aman pada perangkat ini.\n\nHarap mendaftar dengan perangkat lain.",
|
||||
"howItWorks": "Cara kerjanya",
|
||||
"ackPasswordLostWarning": "Saya mengerti bahwa jika saya lupa kata sandi saya, data saya dapat hilang karena data saya <underline>terenkripsi secara end-to-end</underline>.",
|
||||
@@ -258,6 +258,10 @@
|
||||
"areYouSureYouWantToLogout": "Anda yakin ingin keluar dari akun ini?",
|
||||
"yesLogout": "Ya, keluar akun",
|
||||
"exit": "Keluar",
|
||||
"theme": "Tema",
|
||||
"lightTheme": "Terang",
|
||||
"darkTheme": "Gelap",
|
||||
"systemTheme": "Sistem",
|
||||
"verifyingRecoveryKey": "Memverifikasi kunci pemulihan...",
|
||||
"recoveryKeyVerified": "Kunci pemulihan terverifikasi",
|
||||
"recoveryKeySuccessBody": "Bagus! Kunci pemulihan ada valid. Terima kasih.\n\nMohon ingat-ingat untuk mencadangkan kunci pemulihan Anda dengan aman.",
|
||||
@@ -391,7 +395,7 @@
|
||||
"@androidCancelButton": {
|
||||
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on Android side. Maximum 30 characters."
|
||||
},
|
||||
"androidSignInTitle": "Autentikasi",
|
||||
"androidSignInTitle": "Autentikasi diperlukan",
|
||||
"@androidSignInTitle": {
|
||||
"description": "Message showed as a title in a dialog which indicates the user that they need to scan biometric to continue. It is used on Android side. Maximum 60 characters."
|
||||
},
|
||||
@@ -399,15 +403,15 @@
|
||||
"@androidBiometricRequiredTitle": {
|
||||
"description": "Message showed as a title in a dialog which indicates the user has not set up biometric authentication on their device. It is used on Android side. Maximum 60 characters."
|
||||
},
|
||||
"androidDeviceCredentialsRequiredTitle": "Kredensial gawal diperlukan",
|
||||
"androidDeviceCredentialsRequiredTitle": "Kredensial perangkat diperlukan",
|
||||
"@androidDeviceCredentialsRequiredTitle": {
|
||||
"description": "Message showed as a title in a dialog which indicates the user has not set up credentials authentication on their device. It is used on Android side. Maximum 60 characters."
|
||||
},
|
||||
"androidDeviceCredentialsSetupDescription": "Kredensial gawal diperlukan",
|
||||
"androidDeviceCredentialsSetupDescription": "Kredensial perangkat diperlukan",
|
||||
"@androidDeviceCredentialsSetupDescription": {
|
||||
"description": "Message advising the user to go to the settings and configure device credentials on their device. It shows in a dialog on Android side."
|
||||
},
|
||||
"goToSettings": "Ke pengaturan",
|
||||
"goToSettings": "Pergi ke pengaturan",
|
||||
"@goToSettings": {
|
||||
"description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters."
|
||||
},
|
||||
@@ -447,45 +451,56 @@
|
||||
"serverEndpoint": "Peladen endpoint",
|
||||
"invalidEndpoint": "Endpoint takvalid",
|
||||
"invalidEndpointMessage": "Maaf, endpoint yang Anda masukkan takvalid. Mohon masukkan endpoint yang valid, lalu coba kembali.",
|
||||
"endpointUpdatedMessage": "Endpoint sukses dimutakhirkan",
|
||||
"customEndpoint": "Terkoneksi ke {endpoint}",
|
||||
"endpointUpdatedMessage": "Endpoint berhasil diubah",
|
||||
"customEndpoint": "Terhubung ke {endpoint}",
|
||||
"pinText": "Sematkan",
|
||||
"unpinText": "Awasematkan",
|
||||
"pinnedCodeMessage": "{code} telah disematkan",
|
||||
"unpinnedCodeMessage": "{code} telah dilepas",
|
||||
"pinned": "Disematkan",
|
||||
"tags": "Tanda",
|
||||
"createNewTag": "Buat Tanda Baru",
|
||||
"tag": "Tanda",
|
||||
"create": "Buat",
|
||||
"editTag": "Sunting tanda",
|
||||
"editTag": "Ubah tanda",
|
||||
"deleteTagTitle": "Hapus tanda?",
|
||||
"deleteTagMessage": "Anda yakin ingin menghapus tanda? Langkah ini tidak akan dapat dikembalikan seperti semula.",
|
||||
"deleteTagMessage": "Apakah Anda yakin ingin menghapus tanda ini? Tindakan ini tidak dapat dibatalkan.",
|
||||
"somethingWentWrongParsingCode": "Kode {x} tidak dapat kami urai.",
|
||||
"updateNotAvailable": "Pemutakhiran tidak tersedia",
|
||||
"viewRawCodes": "Tampilkan kode mentahan",
|
||||
"rawCodes": "Kode mentahan",
|
||||
"rawCodeData": "Data kode mentahan",
|
||||
"appLock": "Pengunci Apl",
|
||||
"noSystemLockFound": "Pengunci sistem tidak ditemukan",
|
||||
"toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Untuk menyalakan Pengunci Apl, mohon pasang kode sandi atau kunci layar di pengaturan sistem gawai Anda",
|
||||
"autoLock": "Autokunci",
|
||||
"immediately": "Dengan segera",
|
||||
"updateNotAvailable": "Pembaruan tidak tersedia",
|
||||
"viewRawCodes": "Lihat kode mentah",
|
||||
"rawCodes": "Kode mentah",
|
||||
"rawCodeData": "Data kode mentah",
|
||||
"appLock": "Kunci aplikasi",
|
||||
"noSystemLockFound": "Tidak ditemukan kunci sistem",
|
||||
"toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Untuk mengaktifkan kunci aplikasi, harap atur kode sandi perangkat atau kunci layar di pengaturan sistem Anda.",
|
||||
"autoLock": "Kunci otomatis",
|
||||
"immediately": "Segera",
|
||||
"reEnterPassword": "Masukkan kembali kata sandi",
|
||||
"reEnterPin": "Masukkan kembali PIN",
|
||||
"next": "Selanjutnya",
|
||||
"tooManyIncorrectAttempts": "Terlalu banyak percobaan yang salah",
|
||||
"tapToUnlock": "Ketuk untuk membuka",
|
||||
"setNewPassword": "Pasang kata sandi baru",
|
||||
"deviceLock": "Pengunci bawaan gawai",
|
||||
"deviceLock": "Kunci perangkat",
|
||||
"hideContent": "Sembunyikan isi",
|
||||
"hideContentDescriptionAndroid": "Sembunyikan isi aplikasi pada pengganti apl dan matikan penangkap layar",
|
||||
"hideContentDescriptioniOS": "Sembunyikan isi aplikasi di pengganti apl",
|
||||
"hideContentDescriptionAndroid": "Menyembunyikan konten aplikasi di pemilih aplikasi dan menonaktifkan tangkapan layar",
|
||||
"hideContentDescriptioniOS": "Menyembunyikan konten aplikasi di pemilih aplikasi",
|
||||
"autoLockFeatureDescription": "Durasi waktu aplikasi akan terkunci setelah aplikasi ditutup",
|
||||
"appLockDescription": "Pilih layar kunci bawaan gawai Anda ATAU layar kunci kustom dengan PIN atau kata sandi.",
|
||||
"pinLock": "PIN",
|
||||
"enterPin": "Masukkan PIN",
|
||||
"setNewPin": "Pasang PIN yang baru",
|
||||
"importFailureDescNew": "Berkas yang dipilih tidak dapat diurai",
|
||||
"appLockNotEnabled": "Pengunci Apl tidak dinyalakan",
|
||||
"appLockNotEnabled": "Kunci aplikasi tidak diaktifkan",
|
||||
"appLockNotEnabledDescription": "Mohon nyalakan pengunci apl di Keamanan > Pengunci Apl",
|
||||
"authToViewPasskey": "Mohon autentikasikan untuk menampilkan kunci sandi",
|
||||
"appLockOfflineModeWarning": "Anda telah memilih untuk mengunci aplikasi tanpa cadangan apa pun. Jika Anda lupa kode Pengunci Apl Anda, Anda tidak akan dapat mengakses data-data Anda."
|
||||
"appLockOfflineModeWarning": "Anda telah memilih untuk mengunci aplikasi tanpa cadangan apa pun. Jika Anda lupa kode Pengunci Apl Anda, Anda tidak akan dapat mengakses data-data Anda.",
|
||||
"duplicateCodes": "Kode duplikat",
|
||||
"noDuplicates": "✨ Tak ada duplikat",
|
||||
"youveNoDuplicateCodesThatCanBeCleared": "Kamu tidak memiliki kode duplikat yang dapat dihapus",
|
||||
"deduplicateCodes": "Hapus kode duplikat",
|
||||
"deselectAll": "Batalkan semua pilihan",
|
||||
"selectAll": "Pilih semua",
|
||||
"deleteDuplicates": "Hapus duplikat",
|
||||
"plainHTML": "HTML Sederhana"
|
||||
}
|
||||
@@ -258,6 +258,10 @@
|
||||
"areYouSureYouWantToLogout": "Sei sicuro di volerti disconnettere?",
|
||||
"yesLogout": "Si, effettua la disconnessione",
|
||||
"exit": "Esci",
|
||||
"theme": "Tema",
|
||||
"lightTheme": "Chiaro",
|
||||
"darkTheme": "Scuro",
|
||||
"systemTheme": "Sistema",
|
||||
"verifyingRecoveryKey": "Verifica della chiave di recupero...",
|
||||
"recoveryKeyVerified": "Chiave di recupero verificata",
|
||||
"recoveryKeySuccessBody": "Ottimo! La tua chiave di recupero è valida. Grazie per averla verificata.\n\nRicordati di effettuare il backup sicuro della tua chiave di recupero.",
|
||||
@@ -497,5 +501,6 @@
|
||||
"deduplicateCodes": "Codici deduplicati",
|
||||
"deselectAll": "Deselezionare tutti",
|
||||
"selectAll": "Seleziona tutti",
|
||||
"deleteDuplicates": "Elimina i duplicati"
|
||||
"deleteDuplicates": "Elimina i duplicati",
|
||||
"plainHTML": "HTML semplice"
|
||||
}
|
||||
@@ -258,6 +258,10 @@
|
||||
"areYouSureYouWantToLogout": "로그아웃 하시겠습니까?",
|
||||
"yesLogout": "네, 로그아웃하기",
|
||||
"exit": "나가기",
|
||||
"theme": "테마",
|
||||
"lightTheme": "라이트",
|
||||
"darkTheme": "다크",
|
||||
"systemTheme": "시스템",
|
||||
"verifyingRecoveryKey": "복구 키 확인 중...",
|
||||
"recoveryKeyVerified": "복구 키 확인 됨",
|
||||
"recoveryKeySuccessBody": "좋습니다! 복구 키가 확인되었습니다. 확인 절차를 거쳐주셔서 감사합니다.\n\n잊지 마시고 꼭 복구 키를 안전하게 보관해주세요.",
|
||||
@@ -490,5 +494,13 @@
|
||||
"appLockNotEnabled": "어플 잠금 설정되지 않음",
|
||||
"appLockNotEnabledDescription": "설정 > 어플 잠금에서 어플 잠금을 활성화해주세요",
|
||||
"authToViewPasskey": "패스키를 보려면 인증절차를 거쳐주세요",
|
||||
"appLockOfflineModeWarning": "백업 없이 진행하는 것을 선택하셨습니다. 어플 잠금 방법을 잊어버리신 경우, 데이터에 접근하실 수 없게 됩니다."
|
||||
"appLockOfflineModeWarning": "백업 없이 진행하는 것을 선택하셨습니다. 어플 잠금 방법을 잊어버리신 경우, 데이터에 접근하실 수 없게 됩니다.",
|
||||
"duplicateCodes": "중복된 코드",
|
||||
"noDuplicates": "✨ 중복 없음",
|
||||
"youveNoDuplicateCodesThatCanBeCleared": "지울 수 있는 중복 코드가 없습니다",
|
||||
"deduplicateCodes": "중복된 코드 제거",
|
||||
"deselectAll": "모두 선택 해제",
|
||||
"selectAll": "모두 선택",
|
||||
"deleteDuplicates": "중복 제거",
|
||||
"plainHTML": "일반 HTML"
|
||||
}
|
||||
@@ -495,7 +495,7 @@
|
||||
"appLockNotEnabledDescription": "Prosimy włączyć blokadę aplikacji z Zabezpieczenia > Blokada aplikacji",
|
||||
"authToViewPasskey": "Prosimy uwierzytelnić się, aby wyświetlić klucz dostępu",
|
||||
"appLockOfflineModeWarning": "Wybrano kontynuowanie bez kopii zapasowych. Jeśli zapomnisz blokady aplikacji, utracisz dostęp do swoich danych.",
|
||||
"duplicateCodes": "Duplikuj kody",
|
||||
"duplicateCodes": "Zduplikowane kody",
|
||||
"noDuplicates": "✨ Brak duplikatów",
|
||||
"youveNoDuplicateCodesThatCanBeCleared": "Nie masz duplikatów kodów, które mogą być wyczyszczone",
|
||||
"deduplicateCodes": "Deduplikuj kody",
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
"setupFirstAccount": "Configure sua primeira conta",
|
||||
"importScanQrCode": "Escanear QR code",
|
||||
"qrCode": "QR Code",
|
||||
"importEnterSetupKey": "Insira uma chave de configuração",
|
||||
"importEnterSetupKey": "Inserir chave de config.",
|
||||
"importAccountPageTitle": "Inserir detalhes da conta",
|
||||
"secretCanNotBeEmpty": "A chave secreta não pode estar vazia",
|
||||
"bothIssuerAndAccountCanNotBeEmpty": "O emissor e a conta não podem estar vazios",
|
||||
@@ -40,16 +40,16 @@
|
||||
"@sessionExpired": {
|
||||
"description": "Title of the dialog when the users current session is invalid/expired"
|
||||
},
|
||||
"pleaseLoginAgain": "Entre novamente",
|
||||
"loggingOut": "Saindo...",
|
||||
"pleaseLoginAgain": "Registre-se novamente",
|
||||
"loggingOut": "Desconectando...",
|
||||
"timeBasedKeyType": "Baseado no horário (TOTP)",
|
||||
"counterBasedKeyType": "Baseado no contador (HOTP)",
|
||||
"saveAction": "Salvar",
|
||||
"nextTotpTitle": "avançar",
|
||||
"nextTotpTitle": "próximo",
|
||||
"deleteCodeTitle": "Excluir código?",
|
||||
"deleteCodeMessage": "Deseja mesmo excluir este código? Esta ação é irreversível.",
|
||||
"trashCode": "Excluir código?",
|
||||
"trashCodeMessage": "Você tem certeza de que quer excluir o código para {account}?",
|
||||
"trashCodeMessage": "Deseja mesmo excluir o código da {account}?",
|
||||
"trash": "Excluir",
|
||||
"viewLogsAction": "Ver registros",
|
||||
"sendLogsDescription": "Isso compartilhará seus dados para lhe ajudarmos a resolver seu problema. Enquanto tomamos precauções para ter certeza que as informações sensíveis não estejam registradas, nós encorajamos você a visualizar esses dados antes de compartilhá-los.",
|
||||
@@ -65,7 +65,7 @@
|
||||
},
|
||||
"copyEmailAction": "Copiar e-mail",
|
||||
"exportLogsAction": "Exportar registros",
|
||||
"reportABug": "Informe um erro",
|
||||
"reportABug": "Informar erro",
|
||||
"crashAndErrorReporting": "Relatórios de erros e falhas",
|
||||
"reportBug": "Informar erro",
|
||||
"emailUsMessage": "Envie um e-mail para {email}",
|
||||
@@ -77,7 +77,7 @@
|
||||
}
|
||||
},
|
||||
"contactSupport": "Contatar suporte",
|
||||
"rateUsOnStore": "Avalie nós na {storeName}",
|
||||
"rateUsOnStore": "Avalie-nos na {storeName}",
|
||||
"blog": "Blog",
|
||||
"merchandise": "Produtos",
|
||||
"verifyPassword": "Verificar senha",
|
||||
@@ -89,7 +89,7 @@
|
||||
"incorrectPasswordTitle": "Senha incorreta",
|
||||
"welcomeBack": "Bem-vindo(a) de volta!",
|
||||
"madeWithLoveAtPrefix": "feito com ❤️ em ",
|
||||
"supportDevs": "Inscreva-se no <bold-green>ente</bold-green> para nos apoiar",
|
||||
"supportDevs": "Inscreva-se no <bold-green>Ente</bold-green> para apoiar-nos",
|
||||
"supportDiscount": "Use o cupom \"AUTH\" para obter 10% de desconto no primeiro ano",
|
||||
"changeEmail": "Alterar e-mail",
|
||||
"changePassword": "Alterar senha",
|
||||
@@ -112,25 +112,25 @@
|
||||
"exportCodes": "Exportar códigos",
|
||||
"importLabel": "Importar",
|
||||
"importInstruction": "Selecione um arquivo que contenha uma lista de códigos no formato a seguir",
|
||||
"importCodeDelimiterInfo": "Os códigos podem ser separados por uma vírgula ou uma nova linha",
|
||||
"importCodeDelimiterInfo": "Códigos podem ser separados por vírgula ou uma nova linha",
|
||||
"selectFile": "Selecionar arquivo",
|
||||
"emailVerificationToggle": "Verificação por e-mail",
|
||||
"emailVerificationEnableWarning": "Para evitar ser bloqueado da sua conta, certifique-se de guardar uma cópia do seu e-mail 2FA fora do Ente Auth antes de ativar a verificação de e-mail.",
|
||||
"authToChangeEmailVerificationSetting": "Autentique-se para alterar a verificação de e-mail",
|
||||
"authenticateGeneric": "Autentique",
|
||||
"authToViewYourRecoveryKey": "Autentique para ver sua chave de recuperação",
|
||||
"authToChangeYourEmail": "Autentique para alterar o seu e-mail",
|
||||
"authToChangeYourPassword": "Autentique para alterar sua senha",
|
||||
"authToViewSecrets": "Autentique para ver suas chaves secretas",
|
||||
"authToInitiateSignIn": "Autentique para iniciar sessão para fazer uma cópia de segurança.",
|
||||
"ok": "OK",
|
||||
"authenticateGeneric": "Autentique-se",
|
||||
"authToViewYourRecoveryKey": "Autentique-se para ver sua chave de recuperação",
|
||||
"authToChangeYourEmail": "Autentique-se para alterar o seu e-mail",
|
||||
"authToChangeYourPassword": "Autentique-se para alterar sua senha",
|
||||
"authToViewSecrets": "Autentique-se para ver suas chaves secretas",
|
||||
"authToInitiateSignIn": "Autentique-se para registrar e fazer uma cópia de segurança.",
|
||||
"ok": "Ok",
|
||||
"cancel": "Cancelar",
|
||||
"yes": "Sim",
|
||||
"no": "Não",
|
||||
"email": "E-mail",
|
||||
"support": "Suporte",
|
||||
"general": "Geral",
|
||||
"settings": "Ajustes",
|
||||
"settings": "Opções",
|
||||
"copied": "Copiado",
|
||||
"pleaseTryAgain": "Tente novamente",
|
||||
"existingUser": "Usuário existente",
|
||||
@@ -151,8 +151,8 @@
|
||||
"scanACode": "Escanear código",
|
||||
"verify": "Verificar",
|
||||
"verifyEmail": "Verificar e-mail",
|
||||
"enterCodeHint": "Digite o código de 6 dígitos\ndo seu app autenticador",
|
||||
"lostDeviceTitle": "Perdeu um dispositivo?",
|
||||
"enterCodeHint": "Insira o código de 6 dígitos do aplicativo autenticador",
|
||||
"lostDeviceTitle": "Perdeu o dispositivo?",
|
||||
"twoFactorAuthTitle": "Autenticação de dois fatores",
|
||||
"passkeyAuthTitle": "Verificação de chave de acesso",
|
||||
"verifyPasskey": "Verificar chave de acesso",
|
||||
@@ -177,7 +177,7 @@
|
||||
"deleteAccountQuery": "Estamos tristes por vê-lo sair. Você enfrentou algum problema?",
|
||||
"yesSendFeedbackAction": "Sim, enviar feedback",
|
||||
"noDeleteAccountAction": "Não, excluir conta",
|
||||
"initiateAccountDeleteTitle": "Autentique para iniciar a exclusão de conta",
|
||||
"initiateAccountDeleteTitle": "Autentique-se para iniciar a exclusão de conta",
|
||||
"sendEmail": "Enviar e-mail",
|
||||
"createNewAccount": "Criar nova conta",
|
||||
"weakStrength": "Fraca",
|
||||
@@ -186,15 +186,15 @@
|
||||
"confirmPassword": "Confirmar senha",
|
||||
"close": "Fechar",
|
||||
"oopsSomethingWentWrong": "Opa. Algo deu errado.",
|
||||
"selectLanguage": "Trocar idioma",
|
||||
"selectLanguage": "Alterar idioma",
|
||||
"language": "Idioma",
|
||||
"social": "Redes sociais",
|
||||
"security": "Segurança",
|
||||
"lockscreen": "Tela de bloqueio",
|
||||
"authToChangeLockscreenSetting": "Autentique para alterar a opção de tela de bloqueio",
|
||||
"authToChangeLockscreenSetting": "Autentique-se para alterar a opção da tela de bloqueio",
|
||||
"deviceLockEnablePreSteps": "Para ativar o bloqueio do dispositivo, configure a senha do dispositivo ou o bloqueio de tela nas configurações do seu sistema.",
|
||||
"viewActiveSessions": "Ver sessões ativas",
|
||||
"authToViewYourActiveSessions": "Autentique para ver suas sessões ativas",
|
||||
"authToViewYourActiveSessions": "Autentique-se para ver suas sessões ativas",
|
||||
"searchHint": "Buscar...",
|
||||
"search": "Buscar",
|
||||
"sorryUnableToGenCode": "Desculpe, não foi possível gerar um código para {issuerName}",
|
||||
@@ -208,7 +208,7 @@
|
||||
"shareCodesDuration": "Selecione a duração em que você queira compartilhar os códigos.",
|
||||
"restore": "Restaurar",
|
||||
"copiedToClipboard": "Copiado para a área de transferência",
|
||||
"copiedNextToClipboard": "Próximo código copiado para a área de transferência",
|
||||
"copiedNextToClipboard": "Copiado próximo código à área de transferência",
|
||||
"error": "Erro",
|
||||
"recoveryKeyCopiedToClipboard": "Chave de recuperação copiada para a área de transferência",
|
||||
"recoveryKeyOnForgotPassword": "Caso esqueça sua senha, a única maneira de recuperar seus dados é com esta chave.",
|
||||
@@ -217,8 +217,8 @@
|
||||
"saveKey": "Salvar chave",
|
||||
"save": "Salvar",
|
||||
"send": "Enviar",
|
||||
"saveOrSendDescription": "Deseja mesmo salvar em seu armazenamento (pasta Downloads por padrão) ou enviar para outros apps?",
|
||||
"saveOnlyDescription": "Deseja mesmo salvar em seu armazenamento (pasta Downloads por padrão)?",
|
||||
"saveOrSendDescription": "Deseja mesmo salvar isso no armazenamento (pasta de Downloads por padrão) ou enviar a outros aplicativos?",
|
||||
"saveOnlyDescription": "Deseja mesmo salvar em seu armazenamento (pasta de Downloads por padrão)?",
|
||||
"back": "Voltar",
|
||||
"createAccount": "Criar conta",
|
||||
"passwordStrength": "Força da senha: {passwordStrengthValue}",
|
||||
@@ -303,7 +303,7 @@
|
||||
"description": "Text for the button to confirm the user understands the warning"
|
||||
},
|
||||
"authToExportCodes": "Autentique para exportar seus códigos",
|
||||
"importSuccessTitle": "Oba!",
|
||||
"importSuccessTitle": "Sucesso!",
|
||||
"importSuccessDesc": "Você importou {count} códigos!",
|
||||
"@importSuccessDesc": {
|
||||
"placeholders": {
|
||||
@@ -387,7 +387,7 @@
|
||||
"@androidBiometricNotRecognized": {
|
||||
"description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters."
|
||||
},
|
||||
"androidBiometricSuccess": "Êxito",
|
||||
"androidBiometricSuccess": "Sucesso",
|
||||
"@androidBiometricSuccess": {
|
||||
"description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters."
|
||||
},
|
||||
@@ -403,15 +403,15 @@
|
||||
"@androidBiometricRequiredTitle": {
|
||||
"description": "Message showed as a title in a dialog which indicates the user has not set up biometric authentication on their device. It is used on Android side. Maximum 60 characters."
|
||||
},
|
||||
"androidDeviceCredentialsRequiredTitle": "Credenciais do dispositivo necessárias",
|
||||
"androidDeviceCredentialsRequiredTitle": "Credenciais necessários do dispositivo",
|
||||
"@androidDeviceCredentialsRequiredTitle": {
|
||||
"description": "Message showed as a title in a dialog which indicates the user has not set up credentials authentication on their device. It is used on Android side. Maximum 60 characters."
|
||||
},
|
||||
"androidDeviceCredentialsSetupDescription": "Credenciais do dispositivo necessárias",
|
||||
"androidDeviceCredentialsSetupDescription": "Credenciais necessários do dispositivo",
|
||||
"@androidDeviceCredentialsSetupDescription": {
|
||||
"description": "Message advising the user to go to the settings and configure device credentials on their device. It shows in a dialog on Android side."
|
||||
},
|
||||
"goToSettings": "Ir para Ajustes",
|
||||
"goToSettings": "Ir para Opções",
|
||||
"@goToSettings": {
|
||||
"description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters."
|
||||
},
|
||||
@@ -438,7 +438,7 @@
|
||||
"signOutOtherDevices": "Sair em outros dispositivos",
|
||||
"doNotSignOut": "Não sair",
|
||||
"hearUsWhereTitle": "Como você descobriu o Ente? (opcional)",
|
||||
"hearUsExplanation": "Não sabemos como você encontrou nosso app. Seria útil se você nos contasse!",
|
||||
"hearUsExplanation": "Não rastreamos instalações. Ajudaria bastante se você contasse onde nos achou!",
|
||||
"recoveryKeySaved": "Chave de recuperação salva na pasta Downloads!",
|
||||
"waitingForBrowserRequest": "Aguardando solicitação do navegador...",
|
||||
"waitingForVerification": "Aguardando verificação...",
|
||||
@@ -446,8 +446,8 @@
|
||||
"passKeyPendingVerification": "A verificação ainda está pendente",
|
||||
"loginSessionExpired": "Sessão expirada",
|
||||
"loginSessionExpiredDetails": "Sua sessão expirou. Registre-se novamente.",
|
||||
"developerSettingsWarning": "Deseja mesmo alterar os ajustes de Desenvolvedor?",
|
||||
"developerSettings": "Ajustes de Desenvolvedor",
|
||||
"developerSettingsWarning": "Deseja mesmo alterar as Opções de Desenvolvedor?",
|
||||
"developerSettings": "Opções de Desenvolvedor",
|
||||
"serverEndpoint": "Endpoint do servidor",
|
||||
"invalidEndpoint": "Endpoint inválido",
|
||||
"invalidEndpointMessage": "Desculpe, o ponto de acesso inserido é inválido. Insira um ponto de acesso válido e tente novamente.",
|
||||
@@ -463,16 +463,16 @@
|
||||
"tag": "Etiqueta",
|
||||
"create": "Criar",
|
||||
"editTag": "Editar etiqueta",
|
||||
"deleteTagTitle": "Apagar etiqueta?",
|
||||
"deleteTagTitle": "Excluir etiqueta?",
|
||||
"deleteTagMessage": "Deseja mesmo excluir esta etiqueta? Essa ação é irreversível.",
|
||||
"somethingWentWrongParsingCode": "Não foi possível analisar os códigos {x}.",
|
||||
"updateNotAvailable": "Atualização indisponível",
|
||||
"viewRawCodes": "Ver códigos brutos",
|
||||
"rawCodes": "Códigos brutos",
|
||||
"rawCodeData": "Dados de códigos brutos",
|
||||
"appLock": "Bloqueio do app",
|
||||
"appLock": "Bloqueio do aplicativo",
|
||||
"noSystemLockFound": "Nenhum bloqueio do sistema encontrado",
|
||||
"toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Para ativar o bloqueio do app, configure uma senha no dispositivo ou tela de bloqueio nas configurações do sistema.",
|
||||
"toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Para ativar o bloqueio do aplicativo, configure uma senha no dispositivo ou tela de bloqueio nas opções do sistema.",
|
||||
"autoLock": "Bloqueio automático",
|
||||
"immediately": "Imediatamente",
|
||||
"reEnterPassword": "Reinserir senha",
|
||||
@@ -483,17 +483,17 @@
|
||||
"setNewPassword": "Defina a nova senha",
|
||||
"deviceLock": "Bloqueio do dispositivo",
|
||||
"hideContent": "Ocultar conteúdo",
|
||||
"hideContentDescriptionAndroid": "Oculta o conteúdo do app no seletor de apps e desativa as capturas de tela",
|
||||
"hideContentDescriptioniOS": "Oculta o conteúdo do seletor de apps",
|
||||
"autoLockFeatureDescription": "Tempo de bloqueio do app em segundo plano",
|
||||
"hideContentDescriptionAndroid": "Oculta o conteúdo do aplicativo no seletor de aplicativos e desativa as capturas de tela",
|
||||
"hideContentDescriptioniOS": "Oculta o conteúdo do seletor de aplicativos",
|
||||
"autoLockFeatureDescription": "Tempo de bloqueio do aplicativo em segundo plano",
|
||||
"appLockDescription": "Escolha entre a tela de bloqueio padrão do seu dispositivo e uma tela de bloqueio personalizada com PIN ou senha.",
|
||||
"pinLock": "Bloqueio PIN",
|
||||
"enterPin": "Insira o PIN",
|
||||
"pinLock": "PIN de bloqueio",
|
||||
"enterPin": "Inserir PIN",
|
||||
"setNewPin": "Definir novo PIN",
|
||||
"importFailureDescNew": "Não foi possível analisar o arquivo selecionado.",
|
||||
"appLockNotEnabled": "Bloqueio de aplicativo não ativado",
|
||||
"appLockNotEnabledDescription": "Ative o bloqueio de aplicativo em Segurança > Bloqueio de aplicativo",
|
||||
"authToViewPasskey": "Autentique para ver a sua chave de acesso",
|
||||
"authToViewPasskey": "Autentique-se para ver a sua chave de acesso",
|
||||
"appLockOfflineModeWarning": "Você prosseguiu sem cópias de segurança. Caso, se esqueça de seu aplicativo de bloqueio, você não poderá mais acessar seus dados.",
|
||||
"duplicateCodes": "Duplicar códigos",
|
||||
"noDuplicates": "✨ Sem duplicados",
|
||||
|
||||
@@ -501,5 +501,6 @@
|
||||
"deduplicateCodes": "Loại bỏ mã trùng lặp",
|
||||
"deselectAll": "Bỏ chọn tất cả",
|
||||
"selectAll": "Chọn tất cả",
|
||||
"deleteDuplicates": "Xóa trùng lặp"
|
||||
"deleteDuplicates": "Xóa trùng lặp",
|
||||
"plainHTML": "HTML thuần"
|
||||
}
|
||||
@@ -22,9 +22,6 @@ class _CodeTimerProgressState extends State<CodeTimerProgress> {
|
||||
late final ValueNotifier<double> _progress;
|
||||
late final int _periodInMicros;
|
||||
|
||||
// Cache the start time to avoid repeated system calls
|
||||
late final int _startMicros;
|
||||
|
||||
// Reduce update frequency
|
||||
final int _updateIntervalMs =
|
||||
(Platform.isAndroid || Platform.isIOS) ? 16 : 500; // approximately 60 FPS
|
||||
@@ -34,9 +31,8 @@ class _CodeTimerProgressState extends State<CodeTimerProgress> {
|
||||
super.initState();
|
||||
_periodInMicros = widget.period * 1000000;
|
||||
_progress = ValueNotifier<double>(0.0);
|
||||
_startMicros = DateTime.now().microsecondsSinceEpoch;
|
||||
_updateTimeRemaining(DateTime.now().microsecondsSinceEpoch);
|
||||
|
||||
// Use a Timer instead of a Ticker
|
||||
_timer = Timer.periodic(Duration(milliseconds: _updateIntervalMs), (timer) {
|
||||
final now = DateTime.now().microsecondsSinceEpoch;
|
||||
_updateTimeRemaining(now);
|
||||
@@ -45,11 +41,20 @@ class _CodeTimerProgressState extends State<CodeTimerProgress> {
|
||||
|
||||
void _updateTimeRemaining(int currentMicros) {
|
||||
// More efficient time calculation using modulo
|
||||
final elapsed = (currentMicros - _startMicros) % _periodInMicros;
|
||||
final elapsed = (currentMicros) % _periodInMicros;
|
||||
final timeRemaining = _periodInMicros - elapsed;
|
||||
_progress.value = timeRemaining / _periodInMicros;
|
||||
}
|
||||
|
||||
@override
|
||||
void didUpdateWidget(covariant CodeTimerProgress oldWidget) {
|
||||
super.didUpdateWidget(oldWidget);
|
||||
if (oldWidget.period != widget.period) {
|
||||
_periodInMicros = widget.period * 1000000;
|
||||
_updateTimeRemaining(DateTime.now().microsecondsSinceEpoch);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_timer.cancel();
|
||||
|
||||
@@ -21,8 +21,10 @@ Future<ButtonResult?> showDialogWidget({
|
||||
required List<ButtonWidget> buttons,
|
||||
IconData? icon,
|
||||
bool isDismissible = true,
|
||||
bool useRootNavigator = false,
|
||||
}) {
|
||||
return showDialog(
|
||||
useRootNavigator: useRootNavigator,
|
||||
barrierDismissible: isDismissible,
|
||||
barrierColor: backdropFaintDark,
|
||||
context: context,
|
||||
|
||||
@@ -4,6 +4,7 @@ import 'package:ente_auth/services/preference_service.dart';
|
||||
import 'package:ente_auth/theme/ente_theme.dart';
|
||||
import 'package:ente_auth/ui/utils/icon_utils.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
|
||||
class CustomIconPage extends StatefulWidget {
|
||||
final Map<String, AllIconData> allIcons;
|
||||
@@ -29,12 +30,15 @@ class _CustomIconPageState extends State<CustomIconPage> {
|
||||
|
||||
// Used to request focus on the search box when clicked the search icon
|
||||
late FocusNode searchBoxFocusNode;
|
||||
final Set<LogicalKeyboardKey> _pressedKeys = <LogicalKeyboardKey>{};
|
||||
final ScrollController _scrollController = ScrollController();
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
_filteredIcons = widget.allIcons;
|
||||
_showSearchBox = _autoFocusSearch;
|
||||
searchBoxFocusNode = FocusNode();
|
||||
ServicesBinding.instance.keyboard.addHandler(_handleKeyEvent);
|
||||
super.initState();
|
||||
}
|
||||
|
||||
@@ -42,9 +46,41 @@ class _CustomIconPageState extends State<CustomIconPage> {
|
||||
void dispose() {
|
||||
_textController.dispose();
|
||||
searchBoxFocusNode.dispose();
|
||||
_scrollController.dispose();
|
||||
ServicesBinding.instance.keyboard.removeHandler(_handleKeyEvent);
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
bool _handleKeyEvent(KeyEvent event) {
|
||||
if (event is KeyDownEvent) {
|
||||
_pressedKeys.add(event.logicalKey);
|
||||
if ((_pressedKeys.contains(LogicalKeyboardKey.controlLeft) ||
|
||||
_pressedKeys.contains(LogicalKeyboardKey.control) ||
|
||||
_pressedKeys.contains(LogicalKeyboardKey.controlRight)) &&
|
||||
event.logicalKey == LogicalKeyboardKey.keyF) {
|
||||
setState(() {
|
||||
_showSearchBox = true;
|
||||
searchBoxFocusNode.requestFocus();
|
||||
_textController.clear();
|
||||
_searchText = "";
|
||||
});
|
||||
return true;
|
||||
}
|
||||
if (event.logicalKey == LogicalKeyboardKey.escape) {
|
||||
setState(() {
|
||||
_textController.clear();
|
||||
_searchText = "";
|
||||
_showSearchBox = false;
|
||||
_applyFilteringAndRefresh();
|
||||
});
|
||||
return true;
|
||||
}
|
||||
} else if (event is KeyUpEvent) {
|
||||
_pressedKeys.remove(event.logicalKey);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void _applyFilteringAndRefresh() {
|
||||
if (_searchText.isEmpty) {
|
||||
setState(() {
|
||||
@@ -121,8 +157,11 @@ class _CustomIconPageState extends State<CustomIconPage> {
|
||||
children: [
|
||||
Expanded(
|
||||
child: Scrollbar(
|
||||
controller: _scrollController,
|
||||
thumbVisibility: true,
|
||||
interactive: true,
|
||||
child: GridView.builder(
|
||||
controller: _scrollController,
|
||||
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
|
||||
crossAxisCount: (MediaQuery.sizeOf(context).width ~/ 90)
|
||||
.clamp(1, double.infinity)
|
||||
|
||||
@@ -83,6 +83,7 @@ class _HomePageState extends State<HomePage> {
|
||||
bool isCompactMode = false;
|
||||
|
||||
late CodeSortKey _codeSortKey;
|
||||
final Set<LogicalKeyboardKey> _pressedKeys = <LogicalKeyboardKey>{};
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
@@ -109,6 +110,40 @@ class _HomePageState extends State<HomePage> {
|
||||
_showSearchBox = _autoFocusSearch;
|
||||
|
||||
searchBoxFocusNode = FocusNode();
|
||||
ServicesBinding.instance.keyboard.addHandler(_handleKeyEvent);
|
||||
}
|
||||
|
||||
bool _handleKeyEvent(KeyEvent event) {
|
||||
if (event is KeyDownEvent) {
|
||||
_pressedKeys.add(event.logicalKey);
|
||||
bool isMetaKeyPressed = Platform.isMacOS || Platform.isIOS
|
||||
? (_pressedKeys.contains(LogicalKeyboardKey.metaLeft) ||
|
||||
_pressedKeys.contains(LogicalKeyboardKey.meta) ||
|
||||
_pressedKeys.contains(LogicalKeyboardKey.metaRight))
|
||||
: (_pressedKeys.contains(LogicalKeyboardKey.controlLeft) ||
|
||||
_pressedKeys.contains(LogicalKeyboardKey.control) ||
|
||||
_pressedKeys.contains(LogicalKeyboardKey.controlRight));
|
||||
|
||||
if (isMetaKeyPressed && event.logicalKey == LogicalKeyboardKey.keyF) {
|
||||
setState(() {
|
||||
_showSearchBox = true;
|
||||
searchBoxFocusNode.requestFocus();
|
||||
});
|
||||
return true;
|
||||
}
|
||||
if (event.logicalKey == LogicalKeyboardKey.escape) {
|
||||
setState(() {
|
||||
_textController.clear();
|
||||
_searchText = "";
|
||||
_showSearchBox = false;
|
||||
_applyFilteringAndRefresh();
|
||||
});
|
||||
return true;
|
||||
}
|
||||
} else if (event is KeyUpEvent) {
|
||||
_pressedKeys.remove(event.logicalKey);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void _loadCodes() {
|
||||
@@ -208,8 +243,9 @@ class _HomePageState extends State<HomePage> {
|
||||
_streamSubscription?.cancel();
|
||||
_triggerLogoutEvent?.cancel();
|
||||
_iconsChangedEvent?.cancel();
|
||||
_textController.dispose();
|
||||
_textController.removeListener(_applyFilteringAndRefresh);
|
||||
|
||||
ServicesBinding.instance.keyboard.removeHandler(_handleKeyEvent);
|
||||
searchBoxFocusNode.dispose();
|
||||
|
||||
super.dispose();
|
||||
|
||||
@@ -20,6 +20,14 @@ class _ReorderCodesPageState extends State<ReorderCodesPage> {
|
||||
bool hasChanged = false;
|
||||
final logger = Logger('ReorderCodesPage');
|
||||
|
||||
final ScrollController _scrollController = ScrollController();
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_scrollController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final bool isCompactMode = PreferenceService.instance.isCompactMode();
|
||||
@@ -55,33 +63,40 @@ class _ReorderCodesPageState extends State<ReorderCodesPage> {
|
||||
),
|
||||
],
|
||||
),
|
||||
body: ReorderableListView(
|
||||
buildDefaultDragHandles: false,
|
||||
proxyDecorator: (Widget child, int index, Animation<double> animation) {
|
||||
return AnimatedBuilder(
|
||||
animation: animation,
|
||||
builder: (BuildContext context, _) {
|
||||
final animValue = Curves.easeInOut.transform(animation.value);
|
||||
final scale = lerpDouble(1, 1.05, animValue)!;
|
||||
return Transform.scale(scale: scale, child: child);
|
||||
},
|
||||
);
|
||||
},
|
||||
children: [
|
||||
for (final code in widget.codes)
|
||||
ReorderableDragStartListener(
|
||||
key: ValueKey('${code.hashCode}_${code.generatedID}'),
|
||||
index: widget.codes.indexOf(code),
|
||||
child: CodeWidget(
|
||||
key: ValueKey(code.generatedID),
|
||||
code,
|
||||
isCompactMode: isCompactMode,
|
||||
body: Scrollbar(
|
||||
controller: _scrollController,
|
||||
thumbVisibility: true,
|
||||
interactive: true,
|
||||
child: ReorderableListView(
|
||||
scrollController: _scrollController,
|
||||
buildDefaultDragHandles: false,
|
||||
proxyDecorator:
|
||||
(Widget child, int index, Animation<double> animation) {
|
||||
return AnimatedBuilder(
|
||||
animation: animation,
|
||||
builder: (BuildContext context, _) {
|
||||
final animValue = Curves.easeInOut.transform(animation.value);
|
||||
final scale = lerpDouble(1, 1.05, animValue)!;
|
||||
return Transform.scale(scale: scale, child: child);
|
||||
},
|
||||
);
|
||||
},
|
||||
children: [
|
||||
for (final code in widget.codes)
|
||||
ReorderableDragStartListener(
|
||||
key: ValueKey('${code.hashCode}_${code.generatedID}'),
|
||||
index: widget.codes.indexOf(code),
|
||||
child: CodeWidget(
|
||||
key: ValueKey(code.generatedID),
|
||||
code,
|
||||
isCompactMode: isCompactMode,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
onReorder: (oldIndex, newIndex) {
|
||||
updateCodeIndex(oldIndex, newIndex);
|
||||
},
|
||||
],
|
||||
onReorder: (oldIndex, newIndex) {
|
||||
updateCodeIndex(oldIndex, newIndex);
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -329,7 +329,7 @@ class _LockScreenState extends State<LockScreen> with WidgetsBindingObserver {
|
||||
_isShowingLockScreen = false;
|
||||
if (result) {
|
||||
lastAuthenticatingTime = DateTime.now().millisecondsSinceEpoch;
|
||||
AppLock.of(context)!.didUnlock();
|
||||
AppLock.of(context)?.didUnlock();
|
||||
await _lockscreenSetting.setInvalidAttemptCount(0);
|
||||
setState(() {
|
||||
lockedTimeInSeconds = 15;
|
||||
|
||||
@@ -413,9 +413,11 @@ Future<dynamic> showTextInputDialog(
|
||||
TextCapitalization textCapitalization = TextCapitalization.none,
|
||||
bool alwaysShowSuccessState = false,
|
||||
bool isPasswordInput = false,
|
||||
bool useRootNavigator = false,
|
||||
}) {
|
||||
return showDialog(
|
||||
barrierColor: backdropFaintDark,
|
||||
useRootNavigator: useRootNavigator,
|
||||
context: context,
|
||||
builder: (context) {
|
||||
final bottomInset = MediaQuery.of(context).viewInsets.bottom;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
name: ente_auth
|
||||
description: ente two-factor authenticator
|
||||
version: 4.2.2+422
|
||||
version: 4.2.3+423
|
||||
publish_to: none
|
||||
|
||||
environment:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM golang:1.20-alpine3.17 AS builder
|
||||
FROM golang:1.23-alpine3.21 AS builder
|
||||
RUN apk add --no-cache gcc musl-dev git build-base pkgconfig libsodium-dev
|
||||
|
||||
ENV GOOS=linux
|
||||
@@ -14,7 +14,7 @@ COPY . .
|
||||
RUN --mount=type=cache,target=/root/.cache/go-build \
|
||||
go build -o ente-cli main.go
|
||||
|
||||
FROM alpine:3.17
|
||||
FROM alpine:3.21
|
||||
RUN apk add libsodium-dev
|
||||
COPY --from=builder /etc/ente/ente-cli .
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM golang:1.20-alpine3.17@sha256:9c2f89db6fda13c3c480749787f62fed5831699bb2c32881b8f327f1cf7bae42 AS builder386
|
||||
FROM golang:1.23-alpine3.21@sha256:6c5c9590f169f77c8046e45c611d3b28fe477789acd8d3762d23d4744de69812 AS builder386
|
||||
RUN apt-get update
|
||||
RUN apt-get install -y gcc
|
||||
RUN apt-get install -y git
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
module github.com/ente-io/cli
|
||||
|
||||
go 1.20
|
||||
go 1.23
|
||||
|
||||
require (
|
||||
github.com/go-resty/resty/v2 v2.7.0
|
||||
@@ -33,7 +33,7 @@ require (
|
||||
github.com/spf13/cast v1.5.1 // indirect
|
||||
github.com/spf13/cobra v1.7.0
|
||||
github.com/spf13/jwalterweatherman v1.1.0 // indirect
|
||||
github.com/spf13/pflag v1.0.5 // indirect
|
||||
github.com/spf13/pflag v1.0.5
|
||||
github.com/spf13/viper v1.16.0
|
||||
github.com/subosito/gotenv v1.6.0 // indirect
|
||||
go.etcd.io/bbolt v1.3.7
|
||||
|
||||
@@ -64,6 +64,7 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7
|
||||
github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs=
|
||||
github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw=
|
||||
github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY=
|
||||
github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
|
||||
github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
|
||||
github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
|
||||
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
||||
@@ -110,6 +111,7 @@ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
|
||||
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
|
||||
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
|
||||
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
|
||||
github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
|
||||
@@ -146,9 +148,11 @@ github.com/kong/go-srp v0.0.0-20191210190804-cde1efa3c083/go.mod h1:Zde5RRLiH8/2
|
||||
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
|
||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
||||
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
|
||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
|
||||
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
|
||||
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
|
||||
@@ -169,6 +173,7 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN
|
||||
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
|
||||
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
|
||||
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
|
||||
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||
github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM=
|
||||
|
||||
@@ -2,56 +2,56 @@
|
||||
|
||||
## v1.7.8 (Unreleased)
|
||||
|
||||
- .
|
||||
- .
|
||||
|
||||
## v1.7.7
|
||||
|
||||
- Retain JPEG originals even on date modifications.
|
||||
- Support Portuguese and Vietnamese translations.
|
||||
- Retain JPEG originals even on date modifications.
|
||||
- Support Portuguese and Vietnamese translations.
|
||||
|
||||
## v1.7.6
|
||||
|
||||
- Face merging and suggestions (beta).
|
||||
- Parse description from metadata JSON.
|
||||
- Support Italian, Ukrainian and Lithuanian translations.
|
||||
- Fix an out of memory crash on uploading large libraries.
|
||||
- Face merging and suggestions (beta).
|
||||
- Parse description from metadata JSON.
|
||||
- Support Italian, Ukrainian and Lithuanian translations.
|
||||
- Fix an out of memory crash on uploading large libraries.
|
||||
|
||||
## v1.7.5
|
||||
|
||||
- Face grouping (beta).
|
||||
- Include shared files in export.
|
||||
- Directly upload to selected album on drag and drop.
|
||||
- Improve heuristics for clubbing a photo and video into a live photo.
|
||||
- Face grouping (beta).
|
||||
- Include shared files in export.
|
||||
- Directly upload to selected album on drag and drop.
|
||||
- Improve heuristics for clubbing a photo and video into a live photo.
|
||||
|
||||
## v1.7.4
|
||||
|
||||
- Improved date search, including support for day of week and hour of day.
|
||||
- Fix video thumbnail generation and upload on Intel macOS.
|
||||
- Club a photo and video into a live photo only if both are within 2 minutes.
|
||||
- Fix an issue causing ZIP uploads to sometimes fail.
|
||||
- Improved date search, including support for day of week and hour of day.
|
||||
- Fix video thumbnail generation and upload on Intel macOS.
|
||||
- Club a photo and video into a live photo only if both are within 2 minutes.
|
||||
- Fix an issue causing ZIP uploads to sometimes fail.
|
||||
|
||||
## v1.7.3
|
||||
|
||||
- Face recognition and magic search (public beta).
|
||||
- Support Polish translations.
|
||||
- Face recognition and magic search (public beta).
|
||||
- Support Polish translations.
|
||||
|
||||
## v1.7.2
|
||||
|
||||
- Significantly improve the speed of the metadata parsing step during imports
|
||||
of Google takeouts.
|
||||
- Add a option to set and use a custom endpoint.
|
||||
- Fix an issue preventing subscription purchases and renewals.
|
||||
- Clear cached password after changing it on a different device.
|
||||
- Reconcile exported files with disk on app start and resync.
|
||||
- Significantly improve the speed of the metadata parsing step during imports of
|
||||
Google takeouts.
|
||||
- Add a option to set and use a custom endpoint.
|
||||
- Fix an issue preventing subscription purchases and renewals.
|
||||
- Clear cached password after changing it on a different device.
|
||||
- Reconcile exported files with disk on app start and resync.
|
||||
|
||||
## v1.7.1
|
||||
|
||||
- Support for passkeys as a second factor authentication mechanism.
|
||||
- Remember the window size across app restarts.
|
||||
- Revert changes to the Linux icon.
|
||||
- Fix an issue causing deleted items in watched folders to not move to
|
||||
uncategorized.
|
||||
- Fix duplicate file uploads when initializing a folder watch (sometimes).
|
||||
- Support for passkeys as a second factor authentication mechanism.
|
||||
- Remember the window size across app restarts.
|
||||
- Revert changes to the Linux icon.
|
||||
- Fix an issue causing deleted items in watched folders to not move to
|
||||
uncategorized.
|
||||
- Fix duplicate file uploads when initializing a folder watch (sometimes).
|
||||
|
||||
## v1.7.0
|
||||
|
||||
@@ -61,138 +61,138 @@ communicate only using a predefined IPC boundary.
|
||||
|
||||
Other highlights:
|
||||
|
||||
- View your photos on big screens and Chromecast devices by using the "Play
|
||||
album on TV" option in the album menu.
|
||||
- Support Brazilian Portuguese, German and Russian.
|
||||
- Provide a checkbox to select all photos in a day.
|
||||
- Fix a case where the dedup screen would not refresh after removing items.
|
||||
- View your photos on big screens and Chromecast devices by using the "Play
|
||||
album on TV" option in the album menu.
|
||||
- Support Brazilian Portuguese, German and Russian.
|
||||
- Provide a checkbox to select all photos in a day.
|
||||
- Fix a case where the dedup screen would not refresh after removing items.
|
||||
|
||||
## v1.6.63
|
||||
|
||||
### New
|
||||
|
||||
- Option to select file download location.
|
||||
- Add support for searching popular cities
|
||||
- Sorted duplicates in desecending order of size
|
||||
- Add Counter to upload section
|
||||
- Display full name and collection name on hover on dedupe screen photos
|
||||
- Option to select file download location.
|
||||
- Add support for searching popular cities
|
||||
- Sorted duplicates in desecending order of size
|
||||
- Add Counter to upload section
|
||||
- Display full name and collection name on hover on dedupe screen photos
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Fix add to album padding issue
|
||||
- Fix double uncategorized album issue
|
||||
- Hide Hidden collection files from all section
|
||||
- Fix add to album padding issue
|
||||
- Fix double uncategorized album issue
|
||||
- Hide Hidden collection files from all section
|
||||
|
||||
## v1.6.62
|
||||
|
||||
### New
|
||||
|
||||
- Integrated onnx clip runner
|
||||
- Integrated onnx clip runner
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Fixes login button requiring double click issue
|
||||
- Fixes Collection sort state not preserved issue
|
||||
- Fixes continuous export causing app crash
|
||||
- Improves ML related copies for better distinction from clip
|
||||
- Added Better favicon for light mode
|
||||
- Fixed face indexing issues
|
||||
- Fixed thumbnail load issue
|
||||
- Fixes login button requiring double click issue
|
||||
- Fixes Collection sort state not preserved issue
|
||||
- Fixes continuous export causing app crash
|
||||
- Improves ML related copies for better distinction from clip
|
||||
- Added Better favicon for light mode
|
||||
- Fixed face indexing issues
|
||||
- Fixed thumbnail load issue
|
||||
|
||||
## v1.6.60
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Fix Thumbnail Orientation issue
|
||||
- Fix ML logging issue
|
||||
- Fix Thumbnail Orientation issue
|
||||
- Fix ML logging issue
|
||||
|
||||
## v1.6.59
|
||||
|
||||
### New
|
||||
|
||||
- Added arm64 builds for linux
|
||||
- Added arm64 builds for linux
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Fix Editor file not loading issue
|
||||
- Fix ML results missing thumbnail issue
|
||||
- Fix Editor file not loading issue
|
||||
- Fix ML results missing thumbnail issue
|
||||
|
||||
## v1.6.58
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Fix File load issue
|
||||
- Fix File load issue
|
||||
|
||||
## v1.6.57
|
||||
|
||||
### New Features
|
||||
|
||||
- Added encrypted Disk caching for files
|
||||
- Added option to customize cache folder location
|
||||
- Added encrypted Disk caching for files
|
||||
- Added option to customize cache folder location
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Fixed caching issue,causing multiple download of file during ml sync
|
||||
- Fixed caching issue,causing multiple download of file during ml sync
|
||||
|
||||
## v1.6.55
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Added manage family portal option if add-on is active
|
||||
- Fixed filename date parsing issue
|
||||
- Fixed storage limit ui glitch
|
||||
- Fixed dedupe page layout issue
|
||||
- Fixed ElectronAPI refactoring issue
|
||||
- Fixed Search related issues
|
||||
- Added manage family portal option if add-on is active
|
||||
- Fixed filename date parsing issue
|
||||
- Fixed storage limit ui glitch
|
||||
- Fixed dedupe page layout issue
|
||||
- Fixed ElectronAPI refactoring issue
|
||||
- Fixed Search related issues
|
||||
|
||||
## v1.6.54
|
||||
|
||||
### New Features
|
||||
|
||||
- Added support for HEIC and raw image in photo editor
|
||||
- Added support for HEIC and raw image in photo editor
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Fixed 16bit HDR HEIC images support
|
||||
- Fixed blocked login due safe storage issue
|
||||
- Fixed Search related issues
|
||||
- Fixed issue of watch folder not cleared on logout
|
||||
- other under the hood ui/ux improvements
|
||||
- Fixed 16bit HDR HEIC images support
|
||||
- Fixed blocked login due safe storage issue
|
||||
- Fixed Search related issues
|
||||
- Fixed issue of watch folder not cleared on logout
|
||||
- other under the hood ui/ux improvements
|
||||
|
||||
## v1.6.53
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Fixed watch folder disabled issue
|
||||
- Fixed BF Add on related issues
|
||||
- Fixed clip sync issue and added better logging
|
||||
- Fixed mov file upload
|
||||
- Fixed clip extraction related issue
|
||||
- Fixed watch folder disabled issue
|
||||
- Fixed BF Add on related issues
|
||||
- Fixed clip sync issue and added better logging
|
||||
- Fixed mov file upload
|
||||
- Fixed clip extraction related issue
|
||||
|
||||
## v1.6.52
|
||||
|
||||
### New Features
|
||||
|
||||
- Added Clip Desktop on windows
|
||||
- Added Clip Desktop on windows
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- fixed google json matching issue
|
||||
- other under-the-hood changes to improve performance and bug fixes
|
||||
- fixed google json matching issue
|
||||
- other under-the-hood changes to improve performance and bug fixes
|
||||
|
||||
## v1.6.50
|
||||
|
||||
### New Features
|
||||
|
||||
- Added Clip desktop
|
||||
- Added Clip desktop
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Fixed desktop downloaded file had extra dot in the name
|
||||
- Cleanup error messages
|
||||
- fix the motion photo clustering issue
|
||||
- Add option to disable cf proxy locally
|
||||
- other under-the-hood changes to improve UX
|
||||
- Fixed desktop downloaded file had extra dot in the name
|
||||
- Cleanup error messages
|
||||
- fix the motion photo clustering issue
|
||||
- Add option to disable cf proxy locally
|
||||
- other under-the-hood changes to improve UX
|
||||
|
||||
## v1.6.49
|
||||
|
||||
@@ -205,63 +205,63 @@ to know about feature and functionalities.
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Fixed misaligned icons in photo-viewer
|
||||
- Fixed issue with Motion photo upload
|
||||
- Fixed issue with Live-photo upload
|
||||
- other minor ux improvement
|
||||
- Fixed misaligned icons in photo-viewer
|
||||
- Fixed issue with Motion photo upload
|
||||
- Fixed issue with Live-photo upload
|
||||
- other minor ux improvement
|
||||
|
||||
## v1.6.46
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Fixes OOM crashes during file upload
|
||||
[#1379](https://github.com/ente-io/photos-web/pull/1379)
|
||||
- Fixes OOM crashes during file upload
|
||||
[#1379](https://github.com/ente-io/photos-web/pull/1379)
|
||||
|
||||
## v1.6.45
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Fixed app keeps reloading issue
|
||||
[#235](https://github.com/ente-io/photos-desktop/pull/235)
|
||||
- Fixed dng and arw preview issue
|
||||
[#1378](https://github.com/ente-io/photos-web/pull/1378)
|
||||
- Added view crash report option (help menu) for user to share electron crash
|
||||
report locally
|
||||
- Fixed app keeps reloading issue
|
||||
[#235](https://github.com/ente-io/photos-desktop/pull/235)
|
||||
- Fixed dng and arw preview issue
|
||||
[#1378](https://github.com/ente-io/photos-web/pull/1378)
|
||||
- Added view crash report option (help menu) for user to share electron crash
|
||||
report locally
|
||||
|
||||
## v1.6.44
|
||||
|
||||
- Upgraded electron to get latest security patches and other improvements.
|
||||
- Upgraded electron to get latest security patches and other improvements.
|
||||
|
||||
## v1.6.43
|
||||
|
||||
### Added
|
||||
|
||||
- #### Check for update and changelog option
|
||||
- #### Check for update and changelog option
|
||||
|
||||
Added options to check for update manually and a view changelog via the app
|
||||
menubar
|
||||
|
||||
- #### Opt out of crash reporting
|
||||
- #### Opt out of crash reporting
|
||||
|
||||
Added option to out of a crash reporting, it can accessed from the settings
|
||||
-> preferences -> disable crash reporting
|
||||
|
||||
- #### Type search
|
||||
- #### Type search
|
||||
|
||||
Added new search option to search files based on file type i.e, image,
|
||||
video, live-photo.
|
||||
|
||||
- #### Manual Convert Button
|
||||
- #### Manual Convert Button
|
||||
|
||||
In case the video is not playable, Now there is a convert button which can
|
||||
be used to trigger conversion of the video to supported format.
|
||||
|
||||
- #### File Download Progress
|
||||
- #### File Download Progress
|
||||
|
||||
The file loader now also shows the exact percentage download progress,
|
||||
instead of just a simple loader.
|
||||
|
||||
- #### Bug fixes & other enhancements
|
||||
- #### Bug fixes & other enhancements
|
||||
|
||||
We have squashed a few pesky bugs that were reported by our community
|
||||
|
||||
@@ -269,23 +269,23 @@ to know about feature and functionalities.
|
||||
|
||||
### Added
|
||||
|
||||
- #### Hidden albums
|
||||
- #### Hidden albums
|
||||
|
||||
You can now hide albums, just like individual memories.
|
||||
|
||||
- #### Email verification
|
||||
- #### Email verification
|
||||
|
||||
We have now made email verification optional, so you can sign in with just
|
||||
your email address and password, without waiting for a verification code.
|
||||
|
||||
You can opt in / out of email verification from Settings > Security.
|
||||
|
||||
- #### Download Album
|
||||
- #### Download Album
|
||||
|
||||
You can now chose the download location for downloading albums. Along with
|
||||
that we have also added progress bar for album download.
|
||||
|
||||
- #### Bug fixes & other enhancements
|
||||
- #### Bug fixes & other enhancements
|
||||
|
||||
We have squashed a few pesky bugs that were reported by our community
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# Dependencies
|
||||
|
||||
- [Electron](#electron)
|
||||
- [Dev dependencies](#dev)
|
||||
- [Functionality](#functionality)
|
||||
- [Electron](#electron)
|
||||
- [Dev dependencies](#dev)
|
||||
- [Functionality](#functionality)
|
||||
|
||||
## Electron
|
||||
|
||||
@@ -13,24 +13,24 @@ Electron embeds Chromium and Node.js in the generated app's binary. The
|
||||
generated app thus consists of two separate processes - the _main_ process, and
|
||||
a _renderer_ process.
|
||||
|
||||
- The _main_ process runs the embedded node. This process can deal with the
|
||||
host OS - it is conceptually like a `node` repl running on your machine. In
|
||||
our case, the TypeScript code (in the `src/` directory) gets transpiled by
|
||||
`tsc` into JavaScript in the `build/app/` directory, which gets bundled in
|
||||
the generated app's binary and is loaded by the node (main) process when the
|
||||
app starts.
|
||||
- The _main_ process runs the embedded node. This process can deal with the host
|
||||
OS - it is conceptually like a `node` repl running on your machine. In our
|
||||
case, the TypeScript code (in the `src/` directory) gets transpiled by `tsc`
|
||||
into JavaScript in the `build/app/` directory, which gets bundled in the
|
||||
generated app's binary and is loaded by the node (main) process when the app
|
||||
starts.
|
||||
|
||||
- The _renderer_ process is a regular web app that gets loaded into the
|
||||
embedded Chromium. When the main process starts, it creates a new "window"
|
||||
that shows this embedded Chromium. In our case, we build and bundle a static
|
||||
export of the [Photos web app](../../web/README.md) in the generated desktop
|
||||
app. This gets loaded by the embedded Chromium at runtime, acting as the
|
||||
desktop app's UI.
|
||||
- The _renderer_ process is a regular web app that gets loaded into the embedded
|
||||
Chromium. When the main process starts, it creates a new "window" that shows
|
||||
this embedded Chromium. In our case, we build and bundle a static export of
|
||||
the [Photos web app](../../web/README.md) in the generated desktop app. This
|
||||
gets loaded by the embedded Chromium at runtime, acting as the desktop app's
|
||||
UI.
|
||||
|
||||
There is also a third environment that gets temporarily created:
|
||||
|
||||
- The [preload script](../src/preload.ts) acts as a gateway between the _main_
|
||||
and the _renderer_ process. It runs in its own isolated environment.
|
||||
- The [preload script](../src/preload.ts) acts as a gateway between the _main_
|
||||
and the _renderer_ process. It runs in its own isolated environment.
|
||||
|
||||
### Packaging
|
||||
|
||||
@@ -66,15 +66,15 @@ Electron process. This allows us to directly use the output produced by
|
||||
|
||||
### Others
|
||||
|
||||
- [any-shell-escape](https://github.com/boazy/any-shell-escape) is for
|
||||
escaping shell commands before we execute them (e.g. say when invoking the
|
||||
embedded ffmpeg CLI).
|
||||
- [any-shell-escape](https://github.com/boazy/any-shell-escape) is for escaping
|
||||
shell commands before we execute them (e.g. say when invoking the embedded
|
||||
ffmpeg CLI).
|
||||
|
||||
- [auto-launch](https://github.com/Teamwork/node-auto-launch) is for
|
||||
automatically starting our app on login, if the user so wishes.
|
||||
- [auto-launch](https://github.com/Teamwork/node-auto-launch) is for
|
||||
automatically starting our app on login, if the user so wishes.
|
||||
|
||||
- [electron-store](https://github.com/sindresorhus/electron-store) is used for
|
||||
persisting user preferences and other arbitrary data.
|
||||
- [electron-store](https://github.com/sindresorhus/electron-store) is used for
|
||||
persisting user preferences and other arbitrary data.
|
||||
|
||||
## Dev
|
||||
|
||||
@@ -84,20 +84,20 @@ are similar to that in the web code.
|
||||
|
||||
Some extra ones specific to the code here are:
|
||||
|
||||
- [@tsconfig/recommended](https://github.com/tsconfig/bases) gives us a base
|
||||
tsconfig for the Node.js version that our current Electron version uses.
|
||||
- [@tsconfig/recommended](https://github.com/tsconfig/bases) gives us a base
|
||||
tsconfig for the Node.js version that our current Electron version uses.
|
||||
|
||||
- [shx](https://github.com/shelljs/shx) provides us a portable way to use Unix
|
||||
commands in our `package.json` scripts. This allows us to use the same
|
||||
commands (like `ln`) across both POSIX platforms (Linux, macOS) and Windows.
|
||||
- [shx](https://github.com/shelljs/shx) provides us a portable way to use Unix
|
||||
commands in our `package.json` scripts. This allows us to use the same
|
||||
commands (like `ln`) across both POSIX platforms (Linux, macOS) and Windows.
|
||||
|
||||
- [cross-env](https://github.com/kentcdodds/cross-env) is similar to shx, but
|
||||
for allowing us to set environment variables in a way that also works on
|
||||
Windows.
|
||||
- [cross-env](https://github.com/kentcdodds/cross-env) is similar to shx, but
|
||||
for allowing us to set environment variables in a way that also works on
|
||||
Windows.
|
||||
|
||||
- We don't need `ajv`, but it is a transitive dependency which breaks the
|
||||
build if we let its version be resolved via the yarn resolution mechanism.
|
||||
Taking a direct dependency on it is the easiest workaround for now.
|
||||
- We don't need `ajv`, but it is a transitive dependency which breaks the build
|
||||
if we let its version be resolved via the yarn resolution mechanism. Taking a
|
||||
direct dependency on it is the easiest workaround for now.
|
||||
|
||||
## Functionality
|
||||
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
|
||||
Launch the app in development mode:
|
||||
|
||||
- Transpiles the files in `src/` and starts the main process.
|
||||
- Transpiles the files in `src/` and starts the main process.
|
||||
|
||||
- Runs a development server for the renderer, with hot module reload.
|
||||
- Runs a development server for the renderer, with hot module reload.
|
||||
|
||||
### yarn build
|
||||
|
||||
|
||||
@@ -2,21 +2,21 @@
|
||||
|
||||
Conceptually, the release is straightforward:
|
||||
|
||||
1. We trigger a GitHub workflow that creates a (pre-)release with the build.
|
||||
1. We trigger a GitHub workflow that creates a (pre-)release with the build.
|
||||
|
||||
2. When ready, we make that release the latest.
|
||||
2. When ready, we make that release the latest.
|
||||
|
||||
3. The download links on our website, and existing apps already check the
|
||||
latest GitHub release and update automatically.
|
||||
3. The download links on our website, and existing apps already check the latest
|
||||
GitHub release and update automatically.
|
||||
|
||||
The complication comes from the fact that electron-builder's auto updater (the
|
||||
mechanism that we use for auto updates) doesn't work with monorepos. So we need
|
||||
to keep a separate repository just for holding the releases.
|
||||
|
||||
- Source code lives here, in [ente-io/ente](https://github.com/ente-io/ente).
|
||||
- Source code lives here, in [ente-io/ente](https://github.com/ente-io/ente).
|
||||
|
||||
- Releases are done from
|
||||
[ente-io/photos-desktop](https://github.com/ente-io/photos-desktop).
|
||||
- Releases are done from
|
||||
[ente-io/photos-desktop](https://github.com/ente-io/photos-desktop).
|
||||
|
||||
## Nightly builds
|
||||
|
||||
@@ -32,17 +32,17 @@ gh workflow run desktop-release.yml --source=<branch>
|
||||
|
||||
## Release checklist
|
||||
|
||||
1. Update source repo to set version `1.x.x` in `package.json` and finalize the
|
||||
CHANGELOG.
|
||||
1. Update source repo to set version `1.x.x` in `package.json` and finalize the
|
||||
CHANGELOG.
|
||||
|
||||
2. Merge PR then tag the merge commit on `main` in the source repo:
|
||||
2. Merge PR then tag the merge commit on `main` in the source repo:
|
||||
|
||||
```sh
|
||||
git tag photosd-v1.x.x
|
||||
git push origin photosd-v1.x.x
|
||||
```
|
||||
|
||||
3. In the release repo:
|
||||
3. In the release repo:
|
||||
|
||||
```sh
|
||||
./.github/trigger-release.sh v1.x.x
|
||||
@@ -56,20 +56,20 @@ Once it is marked as latest, the release goes live.
|
||||
We are done at this point, and can now update the other pre-release that'll hold
|
||||
subsequent nightly builds.
|
||||
|
||||
1. Update `package.json` in the source repo to use version `1.x.x-beta`, and
|
||||
merge these changes into `main`.
|
||||
1. Update `package.json` in the source repo to use version `1.x.x-beta`, and
|
||||
merge these changes into `main`.
|
||||
|
||||
2. In the release repo, delete the existing _nightly_ pre-release, then:
|
||||
2. In the release repo, delete the existing _nightly_ pre-release, then:
|
||||
|
||||
```sh
|
||||
git tag v1.x.x-beta
|
||||
git push origin v1.x.x-beta
|
||||
```
|
||||
|
||||
3. Start a new run of the workflow (`gh workflow run desktop-release.yml`).
|
||||
3. Start a new run of the workflow (`gh workflow run desktop-release.yml`).
|
||||
|
||||
4. Once the workflow creates the new 1.x.x-beta pre-release, edit its
|
||||
description to "Nightly builds".
|
||||
4. Once the workflow creates the new 1.x.x-beta pre-release, edit its
|
||||
description to "Nightly builds".
|
||||
|
||||
Subsequent scheduled nightly workflows will keep updating this pre-release.
|
||||
|
||||
@@ -77,14 +77,14 @@ Subsequent scheduled nightly workflows will keep updating this pre-release.
|
||||
|
||||
To create extra one-off pre-releases in addition to the nightly `1.x.x-beta`s,
|
||||
|
||||
1. In your branch in the source repository, set the version in `package.json`
|
||||
to something different, say `1.x.x-foo`.
|
||||
1. In your branch in the source repository, set the version in `package.json` to
|
||||
something different, say `1.x.x-foo`.
|
||||
|
||||
2. Create a new pre-release in the release repo with title `1.x.x-foo`. In the
|
||||
tag input enter `v1.x.x-foo` and select the option to "Create a new tag on
|
||||
publish".
|
||||
2. Create a new pre-release in the release repo with title `1.x.x-foo`. In the
|
||||
tag input enter `v1.x.x-foo` and select the option to "Create a new tag on
|
||||
publish".
|
||||
|
||||
3. Trigger the workflow in the release repo:
|
||||
3. Trigger the workflow in the release repo:
|
||||
|
||||
```sh
|
||||
gh workflow run desktop-release.yml --source=my-branch
|
||||
@@ -95,9 +95,9 @@ To create extra one-off pre-releases in addition to the nightly `1.x.x-beta`s,
|
||||
The GitHub Action runs on Windows, Linux and macOS. It produces the artifacts
|
||||
defined in the `build` value in `package.json`.
|
||||
|
||||
- Windows - An NSIS installer.
|
||||
- Linux - An AppImage, and 3 other packages (`.rpm`, `.deb`, `.pacman`)
|
||||
- macOS - A universal DMG
|
||||
- Windows - An NSIS installer.
|
||||
- Linux - An AppImage, and 3 other packages (`.rpm`, `.deb`, `.pacman`)
|
||||
- macOS - A universal DMG
|
||||
|
||||
Additionally, the GitHub action notarizes and signs the macOS DMG (For this it
|
||||
uses credentials provided via GitHub secrets).
|
||||
@@ -105,16 +105,16 @@ uses credentials provided via GitHub secrets).
|
||||
To rollout the build, we need to publish the draft release. Thereafter,
|
||||
everything is automated:
|
||||
|
||||
- The website automatically redirects to the latest release on GitHub when
|
||||
people try to download.
|
||||
- The website automatically redirects to the latest release on GitHub when
|
||||
people try to download.
|
||||
|
||||
- The file formats with support auto update (Windows `exe`, the Linux AppImage
|
||||
and the macOS DMG) also check the latest GitHub release automatically to
|
||||
download and apply the update (the rest of the formats don't support auto
|
||||
updates yet).
|
||||
- The file formats with support auto update (Windows `exe`, the Linux AppImage
|
||||
and the macOS DMG) also check the latest GitHub release automatically to
|
||||
download and apply the update (the rest of the formats don't support auto
|
||||
updates yet).
|
||||
|
||||
- We're not putting the desktop app in other stores currently. It is available
|
||||
as a `brew cask`, but we only had to open a PR to add the initial formula,
|
||||
now their maintainers automatically bump the SHA, version number and the
|
||||
(derived from the version) URL in the formula when their tools notice a new
|
||||
release on our GitHub.
|
||||
- We're not putting the desktop app in other stores currently. It is available
|
||||
as a `brew cask`, but we only had to open a PR to add the initial formula, now
|
||||
their maintainers automatically bump the SHA, version number and the (derived
|
||||
from the version) URL in the formula when their tools notice a new release on
|
||||
our GitHub.
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
"clip-bpe-js": "^0.0.6",
|
||||
"comlink": "^4.4.2",
|
||||
"compare-versions": "^6.1.1",
|
||||
"electron-log": "^5.2.3",
|
||||
"electron-log": "^5.2.4",
|
||||
"electron-store": "^8.2.0",
|
||||
"electron-updater": "^6.3.9",
|
||||
"ffmpeg-static": "^5.2.0",
|
||||
@@ -40,23 +40,23 @@
|
||||
"onnxruntime-node": "^1.20.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint/js": "^9.15.0",
|
||||
"@eslint/js": "^9.17.0",
|
||||
"@tsconfig/node20": "^20.1.4",
|
||||
"@types/auto-launch": "^5.0.5",
|
||||
"@types/eslint__js": "^8.42.3",
|
||||
"@types/ffmpeg-static": "^3.0.3",
|
||||
"ajv": "^8.17.1",
|
||||
"concurrently": "^9.1.0",
|
||||
"concurrently": "^9.1.1",
|
||||
"cross-env": "^7.0.3",
|
||||
"electron": "^33.2.1",
|
||||
"electron-builder": "^25.1.8",
|
||||
"eslint": "^9",
|
||||
"prettier": "3.3.3",
|
||||
"prettier": "3.4.2",
|
||||
"prettier-plugin-organize-imports": "^4.1.0",
|
||||
"prettier-plugin-packagejson": "^2.5.6",
|
||||
"shx": "^0.3.4",
|
||||
"typescript": "^5.7.2",
|
||||
"typescript-eslint": "^8.16.0"
|
||||
"typescript-eslint": "^8.18.2"
|
||||
},
|
||||
"packageManager": "yarn@1.22.22",
|
||||
"productName": "ente"
|
||||
|
||||
@@ -255,10 +255,10 @@ const registerPrivilegedSchemes = () => {
|
||||
* See: [Note: Passkey verification in the desktop app].
|
||||
*
|
||||
* Implementation notes:
|
||||
* - https://www.electronjs.org/docs/latest/tutorial/launch-app-from-url-in-another-app
|
||||
* - This works only when the app is packaged.
|
||||
* - On Windows and Linux, we get the deeplink in the "second-instance" event.
|
||||
* - On macOS, we get the deeplink in the "open-url" event.
|
||||
* - https://www.electronjs.org/docs/latest/tutorial/launch-app-from-url-in-another-app
|
||||
* - This works only when the app is packaged.
|
||||
* - On Windows and Linux, we get the deeplink in the "second-instance" event.
|
||||
* - On macOS, we get the deeplink in the "open-url" event.
|
||||
*/
|
||||
const registerForEnteLinks = () => app.setAsDefaultProtocolClient("ente");
|
||||
|
||||
|
||||
@@ -57,9 +57,9 @@ let _child: UtilityProcess | undefined;
|
||||
*
|
||||
* So we
|
||||
*
|
||||
* 1. In the utility process create a message channel.
|
||||
* 2. Spawn a utility process, and send one port of the pair to it.
|
||||
* 3. Send the other port of the pair to the renderer.
|
||||
* 1. In the utility process create a message channel.
|
||||
* 2. Spawn a utility process, and send one port of the pair to it.
|
||||
* 3. Send the other port of the pair to the renderer.
|
||||
*
|
||||
* The renderer will forward that port to the web worker that is coordinating
|
||||
* the ML indexing on the web layer. Thereafter, the utility process and web
|
||||
|
||||
@@ -31,9 +31,9 @@
|
||||
* and when changing one of them, remember to see if the other two also need
|
||||
* changing:
|
||||
*
|
||||
* - [renderer] web/packages/base/types/ipc.ts contains docs
|
||||
* - [preload] desktop/src/preload.ts ↕︎
|
||||
* - [main] desktop/src/main/ipc.ts contains impl
|
||||
* - [renderer] web/packages/base/types/ipc.ts contains docs
|
||||
* - [preload] desktop/src/preload.ts ↕︎
|
||||
* - [main] desktop/src/main/ipc.ts contains impl
|
||||
*/
|
||||
|
||||
// This code runs in the (isolated) web layer. Contrary to the impression given
|
||||
|
||||
@@ -144,10 +144,10 @@
|
||||
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.9.1.tgz#4a97e85e982099d6c7ee8410aacb55adaa576f06"
|
||||
integrity sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==
|
||||
|
||||
"@eslint/js@^9.15.0":
|
||||
version "9.15.0"
|
||||
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.15.0.tgz#df0e24fe869143b59731942128c19938fdbadfb5"
|
||||
integrity sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==
|
||||
"@eslint/js@^9.17.0":
|
||||
version "9.17.0"
|
||||
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.17.0.tgz#1523e586791f80376a6f8398a3964455ecc651ec"
|
||||
integrity sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==
|
||||
|
||||
"@eslint/object-schema@^2.1.4":
|
||||
version "2.1.4"
|
||||
@@ -384,62 +384,62 @@
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@typescript-eslint/eslint-plugin@8.16.0":
|
||||
version "8.16.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.16.0.tgz#ac56825bcdf3b392fc76a94b1315d4a162f201a6"
|
||||
integrity sha512-5YTHKV8MYlyMI6BaEG7crQ9BhSc8RxzshOReKwZwRWN0+XvvTOm+L/UYLCYxFpfwYuAAqhxiq4yae0CMFwbL7Q==
|
||||
"@typescript-eslint/eslint-plugin@8.18.2":
|
||||
version "8.18.2"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.18.2.tgz#c78e363ab5fe3b21dd1c90d8be9581534417f78e"
|
||||
integrity sha512-adig4SzPLjeQ0Tm+jvsozSGiCliI2ajeURDGHjZ2llnA+A67HihCQ+a3amtPhUakd1GlwHxSRvzOZktbEvhPPg==
|
||||
dependencies:
|
||||
"@eslint-community/regexpp" "^4.10.0"
|
||||
"@typescript-eslint/scope-manager" "8.16.0"
|
||||
"@typescript-eslint/type-utils" "8.16.0"
|
||||
"@typescript-eslint/utils" "8.16.0"
|
||||
"@typescript-eslint/visitor-keys" "8.16.0"
|
||||
"@typescript-eslint/scope-manager" "8.18.2"
|
||||
"@typescript-eslint/type-utils" "8.18.2"
|
||||
"@typescript-eslint/utils" "8.18.2"
|
||||
"@typescript-eslint/visitor-keys" "8.18.2"
|
||||
graphemer "^1.4.0"
|
||||
ignore "^5.3.1"
|
||||
natural-compare "^1.4.0"
|
||||
ts-api-utils "^1.3.0"
|
||||
|
||||
"@typescript-eslint/parser@8.16.0":
|
||||
version "8.16.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.16.0.tgz#ee5b2d6241c1ab3e2e53f03fd5a32d8e266d8e06"
|
||||
integrity sha512-D7DbgGFtsqIPIFMPJwCad9Gfi/hC0PWErRRHFnaCWoEDYi5tQUDiJCTmGUbBiLzjqAck4KcXt9Ayj0CNlIrF+w==
|
||||
"@typescript-eslint/parser@8.18.2":
|
||||
version "8.18.2"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.18.2.tgz#0379a2e881d51d8fcf7ebdfa0dd18eee79182ce2"
|
||||
integrity sha512-y7tcq4StgxQD4mDr9+Jb26dZ+HTZ/SkfqpXSiqeUXZHxOUyjWDKsmwKhJ0/tApR08DgOhrFAoAhyB80/p3ViuA==
|
||||
dependencies:
|
||||
"@typescript-eslint/scope-manager" "8.16.0"
|
||||
"@typescript-eslint/types" "8.16.0"
|
||||
"@typescript-eslint/typescript-estree" "8.16.0"
|
||||
"@typescript-eslint/visitor-keys" "8.16.0"
|
||||
"@typescript-eslint/scope-manager" "8.18.2"
|
||||
"@typescript-eslint/types" "8.18.2"
|
||||
"@typescript-eslint/typescript-estree" "8.18.2"
|
||||
"@typescript-eslint/visitor-keys" "8.18.2"
|
||||
debug "^4.3.4"
|
||||
|
||||
"@typescript-eslint/scope-manager@8.16.0":
|
||||
version "8.16.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.16.0.tgz#ebc9a3b399a69a6052f3d88174456dd399ef5905"
|
||||
integrity sha512-mwsZWubQvBki2t5565uxF0EYvG+FwdFb8bMtDuGQLdCCnGPrDEDvm1gtfynuKlnpzeBRqdFCkMf9jg1fnAK8sg==
|
||||
"@typescript-eslint/scope-manager@8.18.2":
|
||||
version "8.18.2"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.18.2.tgz#d193c200d61eb0ddec5987c8e48c9d4e1c0510bd"
|
||||
integrity sha512-YJFSfbd0CJjy14r/EvWapYgV4R5CHzptssoag2M7y3Ra7XNta6GPAJPPP5KGB9j14viYXyrzRO5GkX7CRfo8/g==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "8.16.0"
|
||||
"@typescript-eslint/visitor-keys" "8.16.0"
|
||||
"@typescript-eslint/types" "8.18.2"
|
||||
"@typescript-eslint/visitor-keys" "8.18.2"
|
||||
|
||||
"@typescript-eslint/type-utils@8.16.0":
|
||||
version "8.16.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.16.0.tgz#585388735f7ac390f07c885845c3d185d1b64740"
|
||||
integrity sha512-IqZHGG+g1XCWX9NyqnI/0CX5LL8/18awQqmkZSl2ynn8F76j579dByc0jhfVSnSnhf7zv76mKBQv9HQFKvDCgg==
|
||||
"@typescript-eslint/type-utils@8.18.2":
|
||||
version "8.18.2"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.18.2.tgz#5ad07e09002eee237591881df674c1c0c91ca52f"
|
||||
integrity sha512-AB/Wr1Lz31bzHfGm/jgbFR0VB0SML/hd2P1yxzKDM48YmP7vbyJNHRExUE/wZsQj2wUCvbWH8poNHFuxLqCTnA==
|
||||
dependencies:
|
||||
"@typescript-eslint/typescript-estree" "8.16.0"
|
||||
"@typescript-eslint/utils" "8.16.0"
|
||||
"@typescript-eslint/typescript-estree" "8.18.2"
|
||||
"@typescript-eslint/utils" "8.18.2"
|
||||
debug "^4.3.4"
|
||||
ts-api-utils "^1.3.0"
|
||||
|
||||
"@typescript-eslint/types@8.16.0":
|
||||
version "8.16.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.16.0.tgz#49c92ae1b57942458ab83d9ec7ccab3005e64737"
|
||||
integrity sha512-NzrHj6thBAOSE4d9bsuRNMvk+BvaQvmY4dDglgkgGC0EW/tB3Kelnp3tAKH87GEwzoxgeQn9fNGRyFJM/xd+GQ==
|
||||
"@typescript-eslint/types@8.18.2":
|
||||
version "8.18.2"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.18.2.tgz#5ebad5b384c8aa1c0f86cee1c61bcdbe7511f547"
|
||||
integrity sha512-Z/zblEPp8cIvmEn6+tPDIHUbRu/0z5lqZ+NvolL5SvXWT5rQy7+Nch83M0++XzO0XrWRFWECgOAyE8bsJTl1GQ==
|
||||
|
||||
"@typescript-eslint/typescript-estree@8.16.0":
|
||||
version "8.16.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.16.0.tgz#9d741e56e5b13469b5190e763432ce5551a9300c"
|
||||
integrity sha512-E2+9IzzXMc1iaBy9zmo+UYvluE3TW7bCGWSF41hVWUE01o8nzr1rvOQYSxelxr6StUvRcTMe633eY8mXASMaNw==
|
||||
"@typescript-eslint/typescript-estree@8.18.2":
|
||||
version "8.18.2"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.2.tgz#fffb85527f8304e29bfbbdc712f4515da9f8b47c"
|
||||
integrity sha512-WXAVt595HjpmlfH4crSdM/1bcsqh+1weFRWIa9XMTx/XHZ9TCKMcr725tLYqWOgzKdeDrqVHxFotrvWcEsk2Tg==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "8.16.0"
|
||||
"@typescript-eslint/visitor-keys" "8.16.0"
|
||||
"@typescript-eslint/types" "8.18.2"
|
||||
"@typescript-eslint/visitor-keys" "8.18.2"
|
||||
debug "^4.3.4"
|
||||
fast-glob "^3.3.2"
|
||||
is-glob "^4.0.3"
|
||||
@@ -447,22 +447,22 @@
|
||||
semver "^7.6.0"
|
||||
ts-api-utils "^1.3.0"
|
||||
|
||||
"@typescript-eslint/utils@8.16.0":
|
||||
version "8.16.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.16.0.tgz#c71264c437157feaa97842809836254a6fc833c3"
|
||||
integrity sha512-C1zRy/mOL8Pj157GiX4kaw7iyRLKfJXBR3L82hk5kS/GyHcOFmy4YUq/zfZti72I9wnuQtA/+xzft4wCC8PJdA==
|
||||
"@typescript-eslint/utils@8.18.2":
|
||||
version "8.18.2"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.18.2.tgz#a2635f71904a84f9e47fe1b6f65a6d944ff1adf9"
|
||||
integrity sha512-Cr4A0H7DtVIPkauj4sTSXVl+VBWewE9/o40KcF3TV9aqDEOWoXF3/+oRXNby3DYzZeCATvbdksYsGZzplwnK/Q==
|
||||
dependencies:
|
||||
"@eslint-community/eslint-utils" "^4.4.0"
|
||||
"@typescript-eslint/scope-manager" "8.16.0"
|
||||
"@typescript-eslint/types" "8.16.0"
|
||||
"@typescript-eslint/typescript-estree" "8.16.0"
|
||||
"@typescript-eslint/scope-manager" "8.18.2"
|
||||
"@typescript-eslint/types" "8.18.2"
|
||||
"@typescript-eslint/typescript-estree" "8.18.2"
|
||||
|
||||
"@typescript-eslint/visitor-keys@8.16.0":
|
||||
version "8.16.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.16.0.tgz#d5086afc060b01ff7a4ecab8d49d13d5a7b07705"
|
||||
integrity sha512-pq19gbaMOmFE3CbL0ZB8J8BFCo2ckfHBfaIsaOZgBIF4EoISJIdLX5xRhd0FGB0LlHReNRuzoJoMGpTjq8F2CQ==
|
||||
"@typescript-eslint/visitor-keys@8.18.2":
|
||||
version "8.18.2"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.2.tgz#b3e434b701f086b10a7c82416ebc56899d27ef2f"
|
||||
integrity sha512-zORcwn4C3trOWiCqFQP1x6G3xTRyZ1LYydnj51cRnJ6hxBlr/cKPckk+PKPUw/fXmvfKTcw7bwY3w9izgx5jZw==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "8.16.0"
|
||||
"@typescript-eslint/types" "8.18.2"
|
||||
eslint-visitor-keys "^4.2.0"
|
||||
|
||||
"@xmldom/xmldom@^0.8.8":
|
||||
@@ -999,10 +999,10 @@ concat-stream@^2.0.0:
|
||||
readable-stream "^3.0.2"
|
||||
typedarray "^0.0.6"
|
||||
|
||||
concurrently@^9.1.0:
|
||||
version "9.1.0"
|
||||
resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-9.1.0.tgz#8da6d609f4321752912dab9be8710232ac496aa0"
|
||||
integrity sha512-VxkzwMAn4LP7WyMnJNbHN5mKV9L2IbyDjpzemKr99sXNR3GqRNMMHdm7prV1ws9wg7ETj6WUkNOigZVsptwbgg==
|
||||
concurrently@^9.1.1:
|
||||
version "9.1.1"
|
||||
resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-9.1.1.tgz#609dde2ce12f4f12d6a5ea6eace4c38bb7ab2ead"
|
||||
integrity sha512-6VX8lrBIycgZKTwBsWS+bLrmkGRkDmvtGsYylRN9b93CygN6CbK46HmnQ3rdSOR8HRjdahDrxb5MqD9cEFOg5Q==
|
||||
dependencies:
|
||||
chalk "^4.1.2"
|
||||
lodash "^4.17.21"
|
||||
@@ -1233,10 +1233,10 @@ electron-builder@^25.1.8:
|
||||
simple-update-notifier "2.0.0"
|
||||
yargs "^17.6.2"
|
||||
|
||||
electron-log@^5.2.3:
|
||||
version "5.2.3"
|
||||
resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-5.2.3.tgz#b58447b2158b9aa5faa07c4d15340113069d3f15"
|
||||
integrity sha512-BabCiEV+p362LzY0EFE8hyzeGknzKDWSbhS0VFfRYQGA4FHWXWSfaKJlvTR9LFepNoORXxc/BWvqBXIPgsVFgA==
|
||||
electron-log@^5.2.4:
|
||||
version "5.2.4"
|
||||
resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-5.2.4.tgz#6b488d9db80aa3c6f3dc39bcd635fc9d1f79c8af"
|
||||
integrity sha512-iX12WXc5XAaKeHg2QpiFjVwL+S1NVHPFd3V5RXtCmKhpAzXsVQnR3UEc0LovM6p6NkUQxDWnkdkaam9FNUVmCA==
|
||||
|
||||
electron-publish@25.1.7:
|
||||
version "25.1.7"
|
||||
@@ -2732,10 +2732,10 @@ prettier-plugin-packagejson@^2.5.6:
|
||||
sort-package-json "2.12.0"
|
||||
synckit "0.9.2"
|
||||
|
||||
prettier@3.3.3:
|
||||
version "3.3.3"
|
||||
resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.3.tgz#30c54fe0be0d8d12e6ae61dbb10109ea00d53105"
|
||||
integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==
|
||||
prettier@3.4.2:
|
||||
version "3.4.2"
|
||||
resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.4.2.tgz#a5ce1fb522a588bf2b78ca44c6e6fe5aa5a2b13f"
|
||||
integrity sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==
|
||||
|
||||
progress@^2.0.3:
|
||||
version "2.0.3"
|
||||
@@ -3264,14 +3264,14 @@ typedarray@^0.0.6:
|
||||
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
|
||||
integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==
|
||||
|
||||
typescript-eslint@^8.16.0:
|
||||
version "8.16.0"
|
||||
resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.16.0.tgz#d608c972d6b2461ca10ec30fd3fa62a080baba19"
|
||||
integrity sha512-wDkVmlY6O2do4V+lZd0GtRfbtXbeD0q9WygwXXSJnC1xorE8eqyC2L1tJimqpSeFrOzRlYtWnUp/uzgHQOgfBQ==
|
||||
typescript-eslint@^8.18.2:
|
||||
version "8.18.2"
|
||||
resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.18.2.tgz#71334dcf843adc3fbb771dce5ade7876aa0d62b7"
|
||||
integrity sha512-KuXezG6jHkvC3MvizeXgupZzaG5wjhU3yE8E7e6viOvAvD9xAWYp8/vy0WULTGe9DYDWcQu7aW03YIV3mSitrQ==
|
||||
dependencies:
|
||||
"@typescript-eslint/eslint-plugin" "8.16.0"
|
||||
"@typescript-eslint/parser" "8.16.0"
|
||||
"@typescript-eslint/utils" "8.16.0"
|
||||
"@typescript-eslint/eslint-plugin" "8.18.2"
|
||||
"@typescript-eslint/parser" "8.18.2"
|
||||
"@typescript-eslint/utils" "8.18.2"
|
||||
|
||||
typescript@^5.4.3:
|
||||
version "5.5.4"
|
||||
|
||||
@@ -231,11 +231,14 @@ export const sidebar = [
|
||||
collapsed: true,
|
||||
items: [
|
||||
{ text: "Getting started", link: "/self-hosting/" },
|
||||
{ text: "System requirements", link: "/self-hosting/guides/system-requirements", },
|
||||
{
|
||||
text: "System requirements",
|
||||
link: "/self-hosting/guides/system-requirements",
|
||||
},
|
||||
{
|
||||
text: "Guides",
|
||||
items: [
|
||||
{ text: "Introduction", link: "/self-hosting/guides/" },
|
||||
{ text: "Introduction", link: "/self-hosting/guides/" },
|
||||
{
|
||||
text: "Connect to custom server",
|
||||
link: "/self-hosting/guides/custom-server/",
|
||||
@@ -271,8 +274,8 @@ export const sidebar = [
|
||||
},
|
||||
{
|
||||
text: "Configure CLI for Self Hosted Instance",
|
||||
link: "/self-hosting/guides/selfhost-cli"
|
||||
}
|
||||
link: "/self-hosting/guides/selfhost-cli",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
|
||||
@@ -11,9 +11,9 @@ Ente is a end-to-end encrypted platform for privately, reliably, and securely
|
||||
storing your data on the cloud. On top of this platform, Ente offers two
|
||||
products:
|
||||
|
||||
- **Ente Photos** - An alternative to Google Photos and Apple Photos
|
||||
- **Ente Photos** - An alternative to Google Photos and Apple Photos
|
||||
|
||||
- **Ente Auth** - A free 2FA alternative to Authy
|
||||
- **Ente Auth** - A free 2FA alternative to Authy
|
||||
|
||||
Both these apps are available for all desktop (Linux, Mac, Windows) and mobile
|
||||
(Android, iOS and F-Droid) platforms. They also work directly in your web
|
||||
@@ -46,7 +46,8 @@ the name, and also led to the adoption of "Ducky", Ente's mascot:
|
||||
|
||||
</div>
|
||||
|
||||
For the full origin story of Ducky you can check out [this blog post](https://ente.io/blog/ducky/).
|
||||
For the full origin story of Ducky you can check out
|
||||
[this blog post](https://ente.io/blog/ducky/).
|
||||
|
||||
### How do I pronounce Ente?
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@ You can install Auth directly from
|
||||
Reproducible builds for Auth are available on
|
||||
[F-Droid](https://f-droid.org/packages/io.ente.auth/).
|
||||
|
||||
|
||||
> [!NOTE]
|
||||
>
|
||||
> Releases over F-Droid are generally slower since they run their own build
|
||||
@@ -34,20 +33,22 @@ you stay updated.
|
||||
### Obtainium
|
||||
|
||||
You can setup [Obtainium](https://github.com/ImranR98/Obtainium) to track our
|
||||
GitHub releases by [clicking this link](https://apps.obtainium.imranr.dev/redirect?r=obtainium://app/%7B%22id%22%3A%22io.ente.auth.independent%22%2C%22url%22%3A%22https%3A%2F%2Fgithub.com%2Fente-io%2Fente%22%2C%22author%22%3A%22ente-io%22%2C%22name%22%3A%22Ente%20Auth%22%2C%22preferredApkIndex%22%3A0%2C%22additionalSettings%22%3A%22%7B%5C%22includePrereleases%5C%22%3Afalse%2C%5C%22fallbackToOlderReleases%5C%22%3Atrue%2C%5C%22filterReleaseTitlesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22filterReleaseNotesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22verifyLatestTag%5C%22%3Afalse%2C%5C%22dontSortReleasesList%5C%22%3Atrue%2C%5C%22useLatestAssetDateAsReleaseDate%5C%22%3Afalse%2C%5C%22releaseTitleAsVersion%5C%22%3Afalse%2C%5C%22trackOnly%5C%22%3Afalse%2C%5C%22versionExtractionRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22matchGroupToUse%5C%22%3A%5C%22%5C%22%2C%5C%22versionDetection%5C%22%3Atrue%2C%5C%22releaseDateAsVersion%5C%22%3Afalse%2C%5C%22useVersionCodeAsOSVersion%5C%22%3Afalse%2C%5C%22apkFilterRegEx%5C%22%3A%5C%22ente-auth*%5C%22%2C%5C%22invertAPKFilter%5C%22%3Afalse%2C%5C%22autoApkFilterByArch%5C%22%3Atrue%2C%5C%22appName%5C%22%3A%5C%22%5C%22%2C%5C%22shizukuPretendToBeGooglePlay%5C%22%3Afalse%2C%5C%22allowInsecure%5C%22%3Afalse%2C%5C%22exemptFromBackgroundUpdates%5C%22%3Afalse%2C%5C%22skipUpdateNotifications%5C%22%3Afalse%2C%5C%22about%5C%22%3A%5C%22%5C%22%7D%22%2C%22overrideSource%22%3Anull%7D) to add it instantly.
|
||||
GitHub releases by
|
||||
[clicking this link](https://apps.obtainium.imranr.dev/redirect?r=obtainium://app/%7B%22id%22%3A%22io.ente.auth.independent%22%2C%22url%22%3A%22https%3A%2F%2Fgithub.com%2Fente-io%2Fente%22%2C%22author%22%3A%22ente-io%22%2C%22name%22%3A%22Ente%20Auth%22%2C%22preferredApkIndex%22%3A0%2C%22additionalSettings%22%3A%22%7B%5C%22includePrereleases%5C%22%3Afalse%2C%5C%22fallbackToOlderReleases%5C%22%3Atrue%2C%5C%22filterReleaseTitlesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22filterReleaseNotesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22verifyLatestTag%5C%22%3Afalse%2C%5C%22dontSortReleasesList%5C%22%3Atrue%2C%5C%22useLatestAssetDateAsReleaseDate%5C%22%3Afalse%2C%5C%22releaseTitleAsVersion%5C%22%3Afalse%2C%5C%22trackOnly%5C%22%3Afalse%2C%5C%22versionExtractionRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22matchGroupToUse%5C%22%3A%5C%22%5C%22%2C%5C%22versionDetection%5C%22%3Atrue%2C%5C%22releaseDateAsVersion%5C%22%3Afalse%2C%5C%22useVersionCodeAsOSVersion%5C%22%3Afalse%2C%5C%22apkFilterRegEx%5C%22%3A%5C%22ente-auth*%5C%22%2C%5C%22invertAPKFilter%5C%22%3Afalse%2C%5C%22autoApkFilterByArch%5C%22%3Atrue%2C%5C%22appName%5C%22%3A%5C%22%5C%22%2C%5C%22shizukuPretendToBeGooglePlay%5C%22%3Afalse%2C%5C%22allowInsecure%5C%22%3Afalse%2C%5C%22exemptFromBackgroundUpdates%5C%22%3Afalse%2C%5C%22skipUpdateNotifications%5C%22%3Afalse%2C%5C%22about%5C%22%3A%5C%22%5C%22%7D%22%2C%22overrideSource%22%3Anull%7D)
|
||||
to add it instantly.
|
||||
|
||||
Alternatively, you can follow these steps:
|
||||
|
||||
1. Click **Add App** to open a new app config screen
|
||||
2. Enter `https://github.com/ente-io/ente` in the **App Source URL** field
|
||||
3. Enable the **Retain release order** from API toggle
|
||||
4. Scroll down to the **Filter APKs by Regular Expression** field and enter `ente-auth*`
|
||||
4. Scroll down to the **Filter APKs by Regular Expression** field and enter
|
||||
`ente-auth*`
|
||||
5. Enable the **Attempt to filter APKs by CPU architecture** if possible toggle
|
||||
6. Select any applicable app category labels you may have setup
|
||||
7. Enable the **Try inferring app ID from source code** toggle
|
||||
8. Scroll back to the top and click **Add** to complete the setup
|
||||
|
||||
|
||||
<br/>
|
||||
|
||||
---
|
||||
@@ -78,7 +79,8 @@ You can grab the latest version of Ente Auth for Mac, Windows and Linux from
|
||||
|
||||
# Web
|
||||
|
||||
Latest versions of our web app are available at [auth.ente.io](https://auth.ente.io).
|
||||
Latest versions of our web app are available at
|
||||
[auth.ente.io](https://auth.ente.io).
|
||||
|
||||
<br/>
|
||||
|
||||
|
||||
@@ -150,55 +150,57 @@ Authenticator. To import your codes, please follow one of the steps below,
|
||||
depending on which method you used to export your codes.
|
||||
|
||||
## Method 3
|
||||
**Who should use this?** Power users who have spare time on their hands and
|
||||
who have a rooted android phone running android 6 or newer that passes Play
|
||||
|
||||
**Who should use this?** Power users who have spare time on their hands and who
|
||||
have a rooted android phone running android 6 or newer that passes Play
|
||||
Integrity.
|
||||
|
||||
This way of exporting your data will require a rooted phone.
|
||||
|
||||
### Exporting codes using Android OTP Extractor
|
||||
|
||||
This uses the tool [Android OTP Extractor](https://github.com/puddly/android-otp-extractor) from [puddly](https://github.com/puddly) on GitHub
|
||||
This uses the tool
|
||||
[Android OTP Extractor](https://github.com/puddly/android-otp-extractor) from
|
||||
[puddly](https://github.com/puddly) on GitHub
|
||||
|
||||
1. Install python 3 and adb to your computer you can download binaries for
|
||||
it from [Google](https://developer.android.com/tools/releases/platform-tools)
|
||||
2. Add adb to your path.
|
||||
2.1. On windows search for "Edit the system environment variables"
|
||||
2.2. Click "Environment Variables"
|
||||
2.3. At the top in "User variables" click the "path" variable and then click "Edit"
|
||||
2.4. Click "New" and type the path to where you extracted the Platform Tools
|
||||
3. Enable USB debugging on the Android Phone
|
||||
3.1. Open settings
|
||||
3.2. Open "About phone" (Might say tablet depending on what device you use)
|
||||
(skip steps 3.2 and 3.3 if you already have developer options enabled)
|
||||
3.3. Tap "Build Number" 7 or more times
|
||||
3.4. Go to the main settings page
|
||||
3.5. Open "System Settings"
|
||||
3.6. Open "Developer options"
|
||||
3.7. Enable "USB Debugging"
|
||||
3.8. On your computer verify the phone is connected by running `adb devices`
|
||||
(You may need to tap "Allow" on the device to allow the computer to access it)
|
||||
5. Install Android OTP Extractor using pip
|
||||
```
|
||||
pip install git+https://github.com/puddly/android-otp-extractor
|
||||
```
|
||||
6. Install Authy from the playstore and login to your account
|
||||
7. Run the command below to export the TOTP to QRCodes and URLS
|
||||
```
|
||||
python -m android_otp_extractor --prepend-issuer --include authy
|
||||
```
|
||||
1. Install python 3 and adb to your computer you can download binaries for it
|
||||
from [Google](https://developer.android.com/tools/releases/platform-tools)
|
||||
2. Add adb to your path. 2.1. On windows search for "Edit the system environment
|
||||
variables" 2.2. Click "Environment Variables" 2.3. At the top in "User
|
||||
variables" click the "path" variable and then click "Edit" 2.4. Click "New"
|
||||
and type the path to where you extracted the Platform Tools
|
||||
3. Enable USB debugging on the Android Phone 3.1. Open settings 3.2. Open "About
|
||||
phone" (Might say tablet depending on what device you use) (skip steps 3.2
|
||||
and 3.3 if you already have developer options enabled) 3.3. Tap "Build
|
||||
Number" 7 or more times 3.4. Go to the main settings page 3.5. Open "System
|
||||
Settings" 3.6. Open "Developer options" 3.7. Enable "USB Debugging" 3.8. On
|
||||
your computer verify the phone is connected by running `adb devices` (You may
|
||||
need to tap "Allow" on the device to allow the computer to access it)
|
||||
4. Install Android OTP Extractor using pip
|
||||
```
|
||||
pip install git+https://github.com/puddly/android-otp-extractor
|
||||
```
|
||||
5. Install Authy from the playstore and login to your account
|
||||
6. Run the command below to export the TOTP to QRCodes and URLS
|
||||
```
|
||||
python -m android_otp_extractor --prepend-issuer --include authy
|
||||
```
|
||||
|
||||
### Exporting codes using Aegis Authenticator
|
||||
|
||||
This uses the tool [Aegis Authenticator](https://getaegis.app/) from [beemdevelopment](
|
||||
https://github.com/beemdevelopment).
|
||||
This uses the tool [Aegis Authenticator](https://getaegis.app/) from
|
||||
[beemdevelopment](https://github.com/beemdevelopment).
|
||||
|
||||
1. Install Authy and login on your rooted phone.
|
||||
2. Install Aegis Authenticator from the [Google Play Store](https://play.google.com/store/apps/details?id=com.beemdevelopment.aegis).
|
||||
3. In the app, click the three dots in the top right corner and click "Import & Export".
|
||||
2. Install Aegis Authenticator from the
|
||||
[Google Play Store](https://play.google.com/store/apps/details?id=com.beemdevelopment.aegis).
|
||||
3. In the app, click the three dots in the top right corner and click "Import &
|
||||
Export".
|
||||
4. Click "Import from another app" and choose Authy.
|
||||
5. The app will ask for root permissions, then automatically import your codes from Authy.
|
||||
6. Then export the codes from Aegis Authenticator to `json` or `txt` using the "Export to file" option in the "Import & Export" menu.
|
||||
5. The app will ask for root permissions, then automatically import your codes
|
||||
from Authy.
|
||||
6. Then export the codes from Aegis Authenticator to `json` or `txt` using the
|
||||
"Export to file" option in the "Import & Export" menu.
|
||||
|
||||
## Importing to Ente Authenticator (Method 1, method 2.1)
|
||||
|
||||
|
||||
@@ -31,10 +31,10 @@ exported data, including versioning and key derivation parameters.
|
||||
The main object used to represent the export data. It contains the following
|
||||
key-value pairs:
|
||||
|
||||
- `version`: The version of the export format.
|
||||
- `kdfParams`: Key derivation function parameters.
|
||||
- `encryptedData"`: The encrypted authentication data.
|
||||
- `encryptionNonce`: The nonce used for encryption.
|
||||
- `version`: The version of the export format.
|
||||
- `kdfParams`: Key derivation function parameters.
|
||||
- `encryptedData"`: The encrypted authentication data.
|
||||
- `encryptionNonce`: The nonce used for encryption.
|
||||
|
||||
#### Version
|
||||
|
||||
@@ -42,17 +42,17 @@ Export version is used to identify the format of the export data.
|
||||
|
||||
##### Ver: 1
|
||||
|
||||
- KDF Algorithm: `ARGON2ID`
|
||||
- Decrypted data format: `otpauth://totp/...`, separated by a new line.
|
||||
- Encryption Algo: `XChaCha20-Poly1305`
|
||||
- KDF Algorithm: `ARGON2ID`
|
||||
- Decrypted data format: `otpauth://totp/...`, separated by a new line.
|
||||
- Encryption Algo: `XChaCha20-Poly1305`
|
||||
|
||||
##### Key Derivation Function Params (KDF)
|
||||
|
||||
This section contains the parameters that were using during KDF operation:
|
||||
|
||||
- `memLimit`: Memory limit for the algorithm.
|
||||
- `opsLimit`: Operations limit for the algorithm.
|
||||
- `salt`: The salt used in the derivation process.
|
||||
- `memLimit`: Memory limit for the algorithm.
|
||||
- `opsLimit`: Operations limit for the algorithm.
|
||||
- `salt`: The salt used in the derivation process.
|
||||
|
||||
##### Encrypted Data
|
||||
|
||||
@@ -77,14 +77,14 @@ ente account update --app auth --email <email> --dir <path>
|
||||
|
||||
## How to use the exported data
|
||||
|
||||
- **Ente Authenticator app**: You can directly import the codes in the Ente
|
||||
Authenticator app.
|
||||
- **Ente Authenticator app**: You can directly import the codes in the Ente
|
||||
Authenticator app.
|
||||
|
||||
> Settings -> Data -> Import Codes -> Ente Encrypted export.
|
||||
|
||||
- **Decrypt using Ente CLI** : Download the latest version of [Ente
|
||||
CLI](https://github.com/ente-io/ente/releases?q=tag%3Acli-v0), and run the
|
||||
following command
|
||||
- **Decrypt using Ente CLI** : Download the latest version of
|
||||
[Ente CLI](https://github.com/ente-io/ente/releases?q=tag%3Acli-v0), and run
|
||||
the following command
|
||||
|
||||
```
|
||||
./ente auth decrypt <export_file> <output_file>
|
||||
|
||||
@@ -12,12 +12,12 @@ description:
|
||||
Ente Auth natively supports imports from many 2FA providers. In addition to the
|
||||
providers specifically listed in the documentation, the supported providers are:
|
||||
|
||||
- 2FAS Authenticator
|
||||
- Aegis Authenticator
|
||||
- Bitwarden
|
||||
- Google Authenticator
|
||||
- Raivo OTP
|
||||
- LastPass
|
||||
- 2FAS Authenticator
|
||||
- Aegis Authenticator
|
||||
- Bitwarden
|
||||
- Google Authenticator
|
||||
- Raivo OTP
|
||||
- LastPass
|
||||
|
||||
Details as to how codes may be imported from these providers may be found within
|
||||
the app.
|
||||
|
||||
@@ -6,7 +6,7 @@ description:
|
||||
|
||||
# Migrating to/from Ente Auth
|
||||
|
||||
- [Migrating from Authy](authy/)
|
||||
- [Importing codes from Steam](steam/)
|
||||
- [Migrating from other apps](import)
|
||||
- [Exporting your data out of Ente Auth](export)
|
||||
- [Migrating from Authy](authy/)
|
||||
- [Importing codes from Steam](steam/)
|
||||
- [Migrating from other apps](import)
|
||||
- [Exporting your data out of Ente Auth](export)
|
||||
|
||||
@@ -12,17 +12,15 @@ to your local drive. This way, you can use Ente in your day to day use, but will
|
||||
have an additional guarantee that a copy of your original photos and videos are
|
||||
always available in normal directories and files.
|
||||
|
||||
- You can use
|
||||
[Ente's CLI](https://github.com/ente-io/ente/tree/main/cli#export) to export
|
||||
your data in a cron job to a location of your choice. The exports are
|
||||
incremental, and will also gracefully handle interruptions.
|
||||
- You can use [Ente's CLI](https://github.com/ente-io/ente/tree/main/cli#export)
|
||||
to export your data in a cron job to a location of your choice. The exports
|
||||
are incremental, and will also gracefully handle interruptions.
|
||||
|
||||
- Similarly, you can use Ente's
|
||||
[desktop app](https://ente.io/download/desktop) to export your data to a
|
||||
folder of your choice. The desktop app also supports "continuous" exports,
|
||||
where it will automatically export new items in the background without you
|
||||
needing to run any other cron jobs. See
|
||||
[migration/export](/photos/migration/export/) for more details.
|
||||
- Similarly, you can use Ente's [desktop app](https://ente.io/download/desktop)
|
||||
to export your data to a folder of your choice. The desktop app also supports
|
||||
"continuous" exports, where it will automatically export new items in the
|
||||
background without you needing to run any other cron jobs. See
|
||||
[migration/export](/photos/migration/export/) for more details.
|
||||
|
||||
## Does the exported data preserve folder structure?
|
||||
|
||||
@@ -32,8 +30,8 @@ album structure how you have set up within Ente.
|
||||
## Does the exported data preserve metadata?
|
||||
|
||||
Yes, the metadata is written out to a separate JSON file during export. Note
|
||||
that the original is not modified. For more details, see the [description of the
|
||||
exported metadata](https://help.ente.io/photos/faq/photo-dates#export).
|
||||
that the original is not modified. For more details, see the
|
||||
[description of the exported metadata](https://help.ente.io/photos/faq/photo-dates#export).
|
||||
|
||||
## Can I do a 2-way sync?
|
||||
|
||||
|
||||
@@ -17,7 +17,6 @@ You can install Ente directly from
|
||||
Reproducible builds for Ente are available on
|
||||
[F-Droid](https://f-droid.org/packages/io.ente.photos.fdroid/).
|
||||
|
||||
|
||||
> [!NOTE]
|
||||
>
|
||||
> Releases over F-Droid are generally slower since they run their own build
|
||||
@@ -34,20 +33,22 @@ you stay updated.
|
||||
### Obtainium
|
||||
|
||||
You can setup [Obtainium](https://github.com/ImranR98/Obtainium) to track our
|
||||
GitHub releases by [clicking this link](https://apps.obtainium.imranr.dev/redirect?r=obtainium://app/%7B%22id%22%3A%22io.ente.photos.independent%22%2C%22url%22%3A%22https%3A%2F%2Fgithub.com%2Fente-io%2Fente%22%2C%22author%22%3A%22ente-io%22%2C%22name%22%3A%22Ente%20Photos%22%2C%22preferredApkIndex%22%3A0%2C%22additionalSettings%22%3A%22%7B%5C%22includePrereleases%5C%22%3Afalse%2C%5C%22fallbackToOlderReleases%5C%22%3Atrue%2C%5C%22filterReleaseTitlesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22filterReleaseNotesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22verifyLatestTag%5C%22%3Afalse%2C%5C%22dontSortReleasesList%5C%22%3Atrue%2C%5C%22useLatestAssetDateAsReleaseDate%5C%22%3Afalse%2C%5C%22releaseTitleAsVersion%5C%22%3Afalse%2C%5C%22trackOnly%5C%22%3Afalse%2C%5C%22versionExtractionRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22matchGroupToUse%5C%22%3A%5C%22%5C%22%2C%5C%22versionDetection%5C%22%3Atrue%2C%5C%22releaseDateAsVersion%5C%22%3Afalse%2C%5C%22useVersionCodeAsOSVersion%5C%22%3Afalse%2C%5C%22apkFilterRegEx%5C%22%3A%5C%22ente-photos*%5C%22%2C%5C%22invertAPKFilter%5C%22%3Afalse%2C%5C%22autoApkFilterByArch%5C%22%3Atrue%2C%5C%22appName%5C%22%3A%5C%22%5C%22%2C%5C%22shizukuPretendToBeGooglePlay%5C%22%3Afalse%2C%5C%22allowInsecure%5C%22%3Afalse%2C%5C%22exemptFromBackgroundUpdates%5C%22%3Afalse%2C%5C%22skipUpdateNotifications%5C%22%3Afalse%2C%5C%22about%5C%22%3A%5C%22%5C%22%7D%22%2C%22overrideSource%22%3Anull%7D) to add it instantly.
|
||||
GitHub releases by
|
||||
[clicking this link](https://apps.obtainium.imranr.dev/redirect?r=obtainium://app/%7B%22id%22%3A%22io.ente.photos.independent%22%2C%22url%22%3A%22https%3A%2F%2Fgithub.com%2Fente-io%2Fente%22%2C%22author%22%3A%22ente-io%22%2C%22name%22%3A%22Ente%20Photos%22%2C%22preferredApkIndex%22%3A0%2C%22additionalSettings%22%3A%22%7B%5C%22includePrereleases%5C%22%3Afalse%2C%5C%22fallbackToOlderReleases%5C%22%3Atrue%2C%5C%22filterReleaseTitlesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22filterReleaseNotesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22verifyLatestTag%5C%22%3Afalse%2C%5C%22dontSortReleasesList%5C%22%3Atrue%2C%5C%22useLatestAssetDateAsReleaseDate%5C%22%3Afalse%2C%5C%22releaseTitleAsVersion%5C%22%3Afalse%2C%5C%22trackOnly%5C%22%3Afalse%2C%5C%22versionExtractionRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22matchGroupToUse%5C%22%3A%5C%22%5C%22%2C%5C%22versionDetection%5C%22%3Atrue%2C%5C%22releaseDateAsVersion%5C%22%3Afalse%2C%5C%22useVersionCodeAsOSVersion%5C%22%3Afalse%2C%5C%22apkFilterRegEx%5C%22%3A%5C%22ente-photos*%5C%22%2C%5C%22invertAPKFilter%5C%22%3Afalse%2C%5C%22autoApkFilterByArch%5C%22%3Atrue%2C%5C%22appName%5C%22%3A%5C%22%5C%22%2C%5C%22shizukuPretendToBeGooglePlay%5C%22%3Afalse%2C%5C%22allowInsecure%5C%22%3Afalse%2C%5C%22exemptFromBackgroundUpdates%5C%22%3Afalse%2C%5C%22skipUpdateNotifications%5C%22%3Afalse%2C%5C%22about%5C%22%3A%5C%22%5C%22%7D%22%2C%22overrideSource%22%3Anull%7D)
|
||||
to add it instantly.
|
||||
|
||||
Alternatively, you can follow these steps:
|
||||
|
||||
1. Click **Add App** to open a new app config screen
|
||||
2. Enter `https://github.com/ente-io/ente` in the **App Source URL** field
|
||||
3. Enable the **Retain release order** from API toggle
|
||||
4. Scroll down to the **Filter APKs by Regular Expression** field and enter `ente-photos*`
|
||||
4. Scroll down to the **Filter APKs by Regular Expression** field and enter
|
||||
`ente-photos*`
|
||||
5. Enable the **Attempt to filter APKs by CPU architecture** if possible toggle
|
||||
6. Select any applicable app category labels you may have setup
|
||||
7. Enable the **Try inferring app ID from source code** toggle
|
||||
8. Scroll back to the top and click **Add** to complete the setup
|
||||
|
||||
|
||||
<br/>
|
||||
|
||||
---
|
||||
@@ -78,7 +79,8 @@ You can grab the latest version of Ente for Mac, Windows and Linux from
|
||||
|
||||
# Web
|
||||
|
||||
Latest versions of our web app are available at [web.ente.io](https://web.ente.io).
|
||||
Latest versions of our web app are available at
|
||||
[web.ente.io](https://web.ente.io).
|
||||
|
||||
<br/>
|
||||
|
||||
|
||||
@@ -25,9 +25,9 @@ your files. For technical details, please see our
|
||||
|
||||
We use the following encryption algorithms:
|
||||
|
||||
- Encryption: `XChaCha20` and `XSalsa20`
|
||||
- Authentication: Poly1305 message authentication code (MAC)
|
||||
- Key derivation: Argon2id with high memory and computation parameters
|
||||
- Encryption: `XChaCha20` and `XSalsa20`
|
||||
- Authentication: Poly1305 message authentication code (MAC)
|
||||
- Key derivation: Argon2id with high memory and computation parameters
|
||||
|
||||
These algorithms are implemented using
|
||||
[libsodium](https://libsodium.gitbook.io/doc/), a externally audited
|
||||
@@ -38,9 +38,9 @@ provides full technical specifications.
|
||||
|
||||
Your encrypted data is stored redundantly across multiple providers in the EU:
|
||||
|
||||
- Amsterdam, Netherlands
|
||||
- Paris, France
|
||||
- Frankfurt, Germany
|
||||
- Amsterdam, Netherlands
|
||||
- Paris, France
|
||||
- Frankfurt, Germany
|
||||
|
||||
We use a combination of object storage and distributed databases to ensure high
|
||||
availability and durability. Our
|
||||
@@ -79,8 +79,8 @@ please choose a strong one.
|
||||
|
||||
Yes, we recommend enabling 2FA for an additional layer of security. We support:
|
||||
|
||||
- Time-based One-Time Passwords (TOTP)
|
||||
- WebAuthn/FIDO2 for hardware security keys
|
||||
- Time-based One-Time Passwords (TOTP)
|
||||
- WebAuthn/FIDO2 for hardware security keys
|
||||
|
||||
You can set up 2FA in the settings of our mobile or desktop apps.
|
||||
|
||||
|
||||
@@ -15,17 +15,16 @@ Yes we do! Please check out our announcement post
|
||||
|
||||
In brief,
|
||||
|
||||
- Your family members can use storage space from your plan without paying
|
||||
extra.
|
||||
- Your family members can use storage space from your plan without paying extra.
|
||||
|
||||
- Ask them to sign up for Ente, and then just add them to your existing plan
|
||||
using the "Manage family" option within your Subscription settings.
|
||||
- Ask them to sign up for Ente, and then just add them to your existing plan
|
||||
using the "Manage family" option within your Subscription settings.
|
||||
|
||||
- Each member gets their own private space, and cannot see each other's files
|
||||
unless they're shared.
|
||||
- Each member gets their own private space, and cannot see each other's files
|
||||
unless they're shared.
|
||||
|
||||
- You can invite 5 family members. So including yourself, it will be 6 people
|
||||
who can share a single subscription, paying only once.
|
||||
- You can invite 5 family members. So including yourself, it will be 6 people
|
||||
who can share a single subscription, paying only once.
|
||||
|
||||
Note that family plans are meant as a way to share storage. For sharing photos,
|
||||
you can create [shared albums and links](/photos/features/share).
|
||||
@@ -72,9 +71,9 @@ Once the payment is completed, your account will be upgraded to the chosen plan.
|
||||
|
||||
We accept the following crypto currencies:
|
||||
|
||||
- Bitcoin
|
||||
- Ethereum
|
||||
- Dogecoin
|
||||
- Bitcoin
|
||||
- Ethereum
|
||||
- Dogecoin
|
||||
|
||||
To purchase a subscription with any of the above mentioned currencies, please
|
||||
write to crypto@ente.io from your registered email address, citing the
|
||||
@@ -129,11 +128,10 @@ invoicing you for the new plan.
|
||||
For example, if you are half way through the year on the 50 GB yearly plan, and
|
||||
upgrade to the 200 GB yearly plan, then
|
||||
|
||||
- The new 200 GB yearly plan will go into effect immediately.
|
||||
- The new 200 GB yearly plan will go into effect immediately.
|
||||
|
||||
- But we will reduce the charges for the first year by subtracting the
|
||||
remaining half year balance of the 50 GB yearly plan that you'd already
|
||||
paid.
|
||||
- But we will reduce the charges for the first year by subtracting the remaining
|
||||
half year balance of the 50 GB yearly plan that you'd already paid.
|
||||
|
||||
The same applies to monthly plans.
|
||||
|
||||
@@ -146,14 +144,13 @@ future invoices.
|
||||
For example, if you are half way through the year on the 200 GB yearly plan, and
|
||||
downgrade to the 50 GB yearly plan, then
|
||||
|
||||
- The new 50 GB yearly plan will go into effect immediately.
|
||||
- The new 50 GB yearly plan will go into effect immediately.
|
||||
|
||||
- We will calculate a credit by subtracting half the price of the 50 GB plan
|
||||
from half the price of the 200 GB plan. This will be credited to your
|
||||
account.
|
||||
- We will calculate a credit by subtracting half the price of the 50 GB plan
|
||||
from half the price of the 200 GB plan. This will be credited to your account.
|
||||
|
||||
- This credited amount will be discounted from your next invoice, which will
|
||||
be due in half a year.
|
||||
- This credited amount will be discounted from your next invoice, which will be
|
||||
due in half a year.
|
||||
|
||||
The same applies to monthly plans.
|
||||
|
||||
|
||||
@@ -29,28 +29,28 @@ If the folder you're trying to upload has nesting and you select the option to
|
||||
create a new album, you will see two options - **A single album** and **Separate
|
||||
albums**.
|
||||
|
||||
- **Single album** will create a new Ente album with the same name as the
|
||||
folder's name, and will then sync all the changes in the folder (and any
|
||||
nested folders) to this single album.
|
||||
- **Single album** will create a new Ente album with the same name as the
|
||||
folder's name, and will then sync all the changes in the folder (and any
|
||||
nested folders) to this single album.
|
||||
|
||||
- **Separate albums** will create separate albums for each nested folder of
|
||||
the selected folder, and will then sync the changes in each nested folder
|
||||
separately.
|
||||
- **Separate albums** will create separate albums for each nested folder of the
|
||||
selected folder, and will then sync the changes in each nested folder
|
||||
separately.
|
||||
|
||||
- For example, suppose you have a folder name `Photos` on your computer, and
|
||||
inside that folder you have two nested folders named `New Year` and
|
||||
`Summer`. In the single album mode, the app will create an Ente album named
|
||||
"Photos" and put all the files from both `New Year` and `Summer` there. In
|
||||
the separate album mode, the app will create two Ente albums, "New Year" and
|
||||
"Summer", each only containing the respective files.
|
||||
- For example, suppose you have a folder name `Photos` on your computer, and
|
||||
inside that folder you have two nested folders named `New Year` and `Summer`.
|
||||
In the single album mode, the app will create an Ente album named "Photos" and
|
||||
put all the files from both `New Year` and `Summer` there. In the separate
|
||||
album mode, the app will create two Ente albums, "New Year" and "Summer", each
|
||||
only containing the respective files.
|
||||
|
||||
- In separate album mode, only nested folders that have at least one file will
|
||||
result in the creation of a new album – empty folders (or folders that only
|
||||
contain other folders) will be ignored.
|
||||
- In separate album mode, only nested folders that have at least one file will
|
||||
result in the creation of a new album – empty folders (or folders that only
|
||||
contain other folders) will be ignored.
|
||||
|
||||
- In separate album mode, only the leafmost folder name is considered. For
|
||||
example, both `A/B/C/D/x.png` and `1/2/3/D/y.png` will get uploaded into the
|
||||
same Ente album named "D".
|
||||
- In separate album mode, only the leafmost folder name is considered. For
|
||||
example, both `A/B/C/D/x.png` and `1/2/3/D/y.png` will get uploaded into the
|
||||
same Ente album named "D".
|
||||
|
||||
> [!NOTE]
|
||||
>
|
||||
@@ -64,18 +64,18 @@ Personalize your albums by giving them a meaningful name.
|
||||
|
||||
### How to rename an album on your mobile?
|
||||
|
||||
- Open the album
|
||||
- Tap the three dots button in the top right corner of the screen
|
||||
- Tap _Rename album_, then type in a new name
|
||||
- Tap on _Rename_ button
|
||||
- Open the album
|
||||
- Tap the three dots button in the top right corner of the screen
|
||||
- Tap _Rename album_, then type in a new name
|
||||
- Tap on _Rename_ button
|
||||
|
||||
### How to rename an album on your web / desktop?
|
||||
|
||||
- Open the album
|
||||
- Click on the overflow menu in the top right corner
|
||||
- Click the _Rename album_ button
|
||||
- Type in a new name
|
||||
- Click on _Rename_ or press enter
|
||||
- Open the album
|
||||
- Click on the overflow menu in the top right corner
|
||||
- Click the _Rename album_ button
|
||||
- Type in a new name
|
||||
- Click on _Rename_ or press enter
|
||||
|
||||
## Set album cover
|
||||
|
||||
@@ -83,13 +83,13 @@ Select any photo you want to use as the cover for your album.
|
||||
|
||||
### How to set an album cover on mobile?
|
||||
|
||||
- Open the album you want to change
|
||||
- Tap the three dots button in the top right corner
|
||||
- From the menu options, select _Set cover_
|
||||
- A new screen will appear, propmpting you to select the cover photo
|
||||
- Browse through your photos and tap on the image you want to set as the album
|
||||
cover
|
||||
- Then tap on _Use selected photo_
|
||||
- Open the album you want to change
|
||||
- Tap the three dots button in the top right corner
|
||||
- From the menu options, select _Set cover_
|
||||
- A new screen will appear, propmpting you to select the cover photo
|
||||
- Browse through your photos and tap on the image you want to set as the album
|
||||
cover
|
||||
- Then tap on _Use selected photo_
|
||||
|
||||
## View your photos on a map
|
||||
|
||||
@@ -97,10 +97,10 @@ Explore your memories based on their location.
|
||||
|
||||
### How to explore the album's photos in map view?
|
||||
|
||||
- Open the album
|
||||
- Tap on the three dots button in the top right corner
|
||||
- Select _Map_
|
||||
- This will show all photos of the album in a map view
|
||||
- Open the album
|
||||
- Tap on the three dots button in the top right corner
|
||||
- Select _Map_
|
||||
- This will show all photos of the album in a map view
|
||||
|
||||
## Sort albums
|
||||
|
||||
@@ -108,17 +108,17 @@ Maintain order in your albums by arranging them from the newest to the oldest.
|
||||
|
||||
### How to change the sort order on mobile?
|
||||
|
||||
- Open the album
|
||||
- Tap on the three dots button in the top right corner
|
||||
- Select _Sort by_
|
||||
- Tap on the _Newest first_ for the latest, Or _Oldest first_ for the oldest
|
||||
- Open the album
|
||||
- Tap on the three dots button in the top right corner
|
||||
- Select _Sort by_
|
||||
- Tap on the _Newest first_ for the latest, Or _Oldest first_ for the oldest
|
||||
|
||||
### How to change the sort order on web / desktop?
|
||||
|
||||
- Open the album
|
||||
- Click on the three dots button in the top right corner
|
||||
- Click _Sort by_
|
||||
- Tap on the _Newest first_ for the latest, Or _Oldest first_ for the oldest
|
||||
- Open the album
|
||||
- Click on the three dots button in the top right corner
|
||||
- Click _Sort by_
|
||||
- Tap on the _Newest first_ for the latest, Or _Oldest first_ for the oldest
|
||||
|
||||
## Pin albums
|
||||
|
||||
@@ -126,6 +126,6 @@ Keep your favorite album at the top by pinning them for quick access.
|
||||
|
||||
### How to pin/unpin an album on mobile?
|
||||
|
||||
- Open the album
|
||||
- Tap on the three dots button in the top right corner
|
||||
- Tap on _Pin album_ / _Unpin album_
|
||||
- Open the album
|
||||
- Tap on the three dots button in the top right corner
|
||||
- Tap on _Pin album_ / _Unpin album_
|
||||
|
||||
@@ -11,43 +11,43 @@ You can remove a photo (owned by you) or an album from your **home timeline** by
|
||||
archiving it. Archived photos won't be included in the memories section on the
|
||||
mobile app.
|
||||
|
||||
- All photos within a archived album will be removed from home timeline, even
|
||||
when some of the photos are also present in a non-archived album.
|
||||
- You can archive albums that are owned by you or shared with you.
|
||||
- Search results will include archived photos. If you want to hide photos from
|
||||
search result, use [Hide](./hide) feature.
|
||||
- All photos within a archived album will be removed from home timeline, even
|
||||
when some of the photos are also present in a non-archived album.
|
||||
- You can archive albums that are owned by you or shared with you.
|
||||
- Search results will include archived photos. If you want to hide photos from
|
||||
search result, use [Hide](./hide) feature.
|
||||
|
||||
## How to
|
||||
|
||||
### Archive Album
|
||||
|
||||
- Open the album
|
||||
- Click on the overflow menu
|
||||
- Click on Archive album
|
||||
- Open the album
|
||||
- Click on the overflow menu
|
||||
- Click on Archive album
|
||||
|
||||
### Archive Photo
|
||||
|
||||
- Long press to select the photo
|
||||
- Select Archive option from the bottom menu.
|
||||
- Long press to select the photo
|
||||
- Select Archive option from the bottom menu.
|
||||
|
||||
### View Archived Photos and Albums
|
||||
|
||||
#### Mobile
|
||||
|
||||
- Go to Albums tab
|
||||
- Scroll down to bottom
|
||||
- Click on Archive button.
|
||||
- Go to Albums tab
|
||||
- Scroll down to bottom
|
||||
- Click on Archive button.
|
||||
|
||||
#### Web / Desktop
|
||||
|
||||
- Click on the topleft hamburger menu
|
||||
- Click on Archive
|
||||
- Click on the topleft hamburger menu
|
||||
- Click on Archive
|
||||
|
||||
### Metadata Privacy
|
||||
|
||||
Both Ente and the person with whom you are sharing an album or photo have no
|
||||
information about whether you have:
|
||||
|
||||
- Archived a photo
|
||||
- Archived an album
|
||||
- Archived a shared album
|
||||
- Archived a photo
|
||||
- Archived an album
|
||||
- Archived a shared album
|
||||
|
||||
@@ -52,6 +52,6 @@ app, though the [way that works](watch-folders) is a bit different.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
- On iOS, make sure that you're not killing the Ente app.
|
||||
- On Android, make sure that "Optimize battery usage" is not turned on in
|
||||
system settings for the Ente app.
|
||||
- On iOS, make sure that you're not killing the Ente app.
|
||||
- On Android, make sure that "Optimize battery usage" is not turned on in system
|
||||
settings for the Ente app.
|
||||
|
||||
@@ -7,9 +7,9 @@ description: Collaborate with other people using shared albums and public links
|
||||
|
||||
Ente allows you to collaborate with people in 2 ways:
|
||||
|
||||
- Collaborative albums
|
||||
- Collaborative albums
|
||||
|
||||
- Collaborative links
|
||||
- Collaborative links
|
||||
|
||||
## Collaborative albums
|
||||
|
||||
@@ -17,25 +17,25 @@ Collaborative albums allow multiple Ente users to add photos to the same shared
|
||||
album. Storage is only counted once, irrespective of the number of collaborators
|
||||
and viewers.
|
||||
|
||||
- The owner of the album is the person who created it.
|
||||
- The owner of the album is the person who created it.
|
||||
|
||||
- The owner can add collaborators and viewers by their email. The owner can
|
||||
also change permissions of participants at any time, and remove them.
|
||||
- The owner can add collaborators and viewers by their email. The owner can also
|
||||
change permissions of participants at any time, and remove them.
|
||||
|
||||
- Collaborators can add photos (and videos) to the shared album.
|
||||
- Collaborators can add photos (and videos) to the shared album.
|
||||
|
||||
- The storage of the photo is counted towards the owner of the photo - the
|
||||
person who uploaded it. Since the uploader usually has the photo in their
|
||||
account anyway, effectively this means that the photo can be added to a
|
||||
collaborative album without paying anything extra.
|
||||
- The storage of the photo is counted towards the owner of the photo - the
|
||||
person who uploaded it. Since the uploader usually has the photo in their
|
||||
account anyway, effectively this means that the photo can be added to a
|
||||
collaborative album without paying anything extra.
|
||||
|
||||
- The owner of the photo can remove it from the album (or delete it).
|
||||
- The owner of the photo can remove it from the album (or delete it).
|
||||
|
||||
- The owner of the album can remove all photos from the album (they can only
|
||||
delete the photos they own).
|
||||
- The owner of the album can remove all photos from the album (they can only
|
||||
delete the photos they own).
|
||||
|
||||
- When a collaborator is removed from a shared album (or when they leave the
|
||||
album), any photos they'd uploaded will also be removed.
|
||||
- When a collaborator is removed from a shared album (or when they leave the
|
||||
album), any photos they'd uploaded will also be removed.
|
||||
|
||||
Currently collaborative albums can only be used from the mobile app. A
|
||||
collaborator will see them in view only mode in the web and desktop apps; we're
|
||||
@@ -46,13 +46,12 @@ actively working on adding support for them on web and desktop too.
|
||||
Collaborative links allow you to collaborate with people who might not have an
|
||||
Ente account or the Ente apps.
|
||||
|
||||
- You can create a public link, and anyone with access to the link will be
|
||||
able to view the shared photos using just their web browser (no login
|
||||
required).
|
||||
- You can create a public link, and anyone with access to the link will be able
|
||||
to view the shared photos using just their web browser (no login required).
|
||||
|
||||
- You can enable the "Allow adding photos" option on a public link to allow
|
||||
people to also add photos the same way (from their web browser, no login
|
||||
required).
|
||||
- You can enable the "Allow adding photos" option on a public link to allow
|
||||
people to also add photos the same way (from their web browser, no login
|
||||
required).
|
||||
|
||||
Such collaborative links are also sometimes called "collect links", since they
|
||||
allow you to collect photos from people without them needing Ente accounts. A
|
||||
|
||||
@@ -7,27 +7,26 @@ description: Collecting photos from others using Ente Photos
|
||||
|
||||
Collecting memories from events is now a breeze!
|
||||
|
||||
- Whether it's a birthday party, vacation trip or wedding, easily share your
|
||||
album using a unique, secure, end-to-end encrypted link.
|
||||
- Introduce the 'collect photos' feature to your friends and family who can
|
||||
contribute without an Ente account.
|
||||
- This allows them to effortlessly add, view, and download photos from the
|
||||
link without an Ente account.
|
||||
- Also preserves metadata and photo quality.
|
||||
- Whether it's a birthday party, vacation trip or wedding, easily share your
|
||||
album using a unique, secure, end-to-end encrypted link.
|
||||
- Introduce the 'collect photos' feature to your friends and family who can
|
||||
contribute without an Ente account.
|
||||
- This allows them to effortlessly add, view, and download photos from the link
|
||||
without an Ente account.
|
||||
- Also preserves metadata and photo quality.
|
||||
|
||||
## How to collect photos on mobile?
|
||||
|
||||
- Open the album you want to share with
|
||||
- Tap on the Share album icon in the top right corner of the screen
|
||||
- Select _Collect photos_
|
||||
- Tap _Copy link_
|
||||
- The link will get copied to your clipboard. Now, feel free to share it
|
||||
- Open the album you want to share with
|
||||
- Tap on the Share album icon in the top right corner of the screen
|
||||
- Select _Collect photos_
|
||||
- Tap _Copy link_
|
||||
- The link will get copied to your clipboard. Now, feel free to share it
|
||||
|
||||
## How to Collect photos on web / desktop?
|
||||
|
||||
- Open the album
|
||||
- Click on the share album icon
|
||||
- Select _Collect photos_
|
||||
- Click on _Copy link_
|
||||
- The link will get copied to your clipboard. Share it effortlessly with
|
||||
others!
|
||||
- Open the album
|
||||
- Click on the share album icon
|
||||
- Select _Collect photos_
|
||||
- Click on _Copy link_
|
||||
- The link will get copied to your clipboard. Share it effortlessly with others!
|
||||
|
||||
@@ -21,16 +21,16 @@ the platform's nuances.
|
||||
|
||||
#### Mobile
|
||||
|
||||
- On iOS, a hash will be used to detect exact duplicates. If the duplicate is
|
||||
being uploaded to an album where a photo with the same hash already exists,
|
||||
then the duplicate will be skipped. If it is being uploaded to a different
|
||||
album, then a symlink will be created (so no actual data will need to be
|
||||
uploaded, just a symlink will be created to the existing file).
|
||||
- On iOS, a hash will be used to detect exact duplicates. If the duplicate is
|
||||
being uploaded to an album where a photo with the same hash already exists,
|
||||
then the duplicate will be skipped. If it is being uploaded to a different
|
||||
album, then a symlink will be created (so no actual data will need to be
|
||||
uploaded, just a symlink will be created to the existing file).
|
||||
|
||||
- On Android also, a hash check is used. But unlike iOS, the native Android
|
||||
filesystem behaviour is to keep physical copies if the same photo is in
|
||||
different albums. So Ente does the same: duplicates to same album will be
|
||||
skipped, duplicates when going to separate albums will create copies.
|
||||
- On Android also, a hash check is used. But unlike iOS, the native Android
|
||||
filesystem behaviour is to keep physical copies if the same photo is in
|
||||
different albums. So Ente does the same: duplicates to same album will be
|
||||
skipped, duplicates when going to separate albums will create copies.
|
||||
|
||||
#### Web and desktop
|
||||
|
||||
|
||||
@@ -11,22 +11,21 @@ additional cost** as you have already paid for the storage.
|
||||
|
||||
In brief,
|
||||
|
||||
- Your family members can use storage space from your plan without paying
|
||||
extra.
|
||||
- Your family members can use storage space from your plan without paying extra.
|
||||
|
||||
- Ask them to sign up for Ente, and then just add them to your existing plan
|
||||
using the "Manage family" option within your Subscription settings.
|
||||
- Ask them to sign up for Ente, and then just add them to your existing plan
|
||||
using the "Manage family" option within your Subscription settings.
|
||||
|
||||
- Each member gets their own private space, and cannot see each other's files
|
||||
unless they're shared.
|
||||
- Each member gets their own private space, and cannot see each other's files
|
||||
unless they're shared.
|
||||
|
||||
- You can invite 5 family members. So including yourself, it will be 6 people
|
||||
who can share a single subscription, paying only once.
|
||||
- You can invite 5 family members. So including yourself, it will be 6 people
|
||||
who can share a single subscription, paying only once.
|
||||
|
||||
## FAQ
|
||||
|
||||
- **Can you assign a storage quota for each individual member in the family
|
||||
plan?**
|
||||
- **Can you assign a storage quota for each individual member in the family
|
||||
plan?**
|
||||
|
||||
Unfortunately, at this moment, assigning a storage quota for each individual
|
||||
member in the family plan is not supported. For updates on this feature
|
||||
|
||||
@@ -12,54 +12,54 @@ that the hidden photos won't be surfaced anywhere in the app without explicit
|
||||
authentication, whereas archiving only removes them from the home timeline and
|
||||
memories sections.
|
||||
|
||||
- Hidden photos and albums will be removed from home timelines, memories,
|
||||
albums tab, search results, and any other visable place in the app.
|
||||
- Hidden photos and albums will be removed from home timelines, memories, albums
|
||||
tab, search results, and any other visable place in the app.
|
||||
|
||||
- Hidden photos will be removed from all regular albums. If you want to unhide
|
||||
again you will have to specify the album to move it to.
|
||||
- Hidden photos will be removed from all regular albums. If you want to unhide
|
||||
again you will have to specify the album to move it to.
|
||||
|
||||
- You cannot hide photos or albums shared with you. You can archive shared
|
||||
albums instead.
|
||||
- You cannot hide photos or albums shared with you. You can archive shared
|
||||
albums instead.
|
||||
|
||||
## How to
|
||||
|
||||
### Hide album
|
||||
|
||||
- Open the album
|
||||
- Click on the overflow menu
|
||||
- Click on _Hide album_
|
||||
- Open the album
|
||||
- Click on the overflow menu
|
||||
- Click on _Hide album_
|
||||
|
||||
### Hide photo
|
||||
|
||||
- Select the photo
|
||||
- Click on _Hide_ option from the select menu
|
||||
- Select the photo
|
||||
- Click on _Hide_ option from the select menu
|
||||
|
||||
### View hidden photos and albums
|
||||
|
||||
#### Mobile
|
||||
|
||||
- Go to Albums tab
|
||||
- Scroll down to bottom
|
||||
- Click on _Hidden_ button
|
||||
- Authenticate in app
|
||||
- Go to Albums tab
|
||||
- Scroll down to bottom
|
||||
- Click on _Hidden_ button
|
||||
- Authenticate in app
|
||||
|
||||
#### Web / Desktop
|
||||
|
||||
- Click on the topleft hamburger menu
|
||||
- Click on _Hidden_
|
||||
- Authenticate in app
|
||||
- Click on the topleft hamburger menu
|
||||
- Click on _Hidden_
|
||||
- Authenticate in app
|
||||
|
||||
### Unhide album
|
||||
|
||||
- Open the hidden album
|
||||
- Click on the overflow menu
|
||||
- Click on _Unhide album_
|
||||
- Open the hidden album
|
||||
- Click on the overflow menu
|
||||
- Click on _Unhide album_
|
||||
|
||||
### Unhide photo
|
||||
|
||||
- Select the hidden photo
|
||||
- Click on _Unhide_ option from the select menu
|
||||
- Click on the album the photo should be restored to
|
||||
- Select the hidden photo
|
||||
- Click on _Unhide_ option from the select menu
|
||||
- Click on the album the photo should be restored to
|
||||
|
||||
## Metadata Privacy
|
||||
|
||||
|
||||
@@ -5,15 +5,21 @@ description: Using Legacy to pass on your memories to loved ones
|
||||
|
||||
# Legacy
|
||||
|
||||
Legacy allows trusted contacts to recover your account in your absence. The main usecase here is to pass on your memories after your death. It can also be useful for other cases - for e.g., when you forget your password and recovery key.
|
||||
Legacy allows trusted contacts to recover your account in your absence. The main
|
||||
usecase here is to pass on your memories after your death. It can also be useful
|
||||
for other cases - for e.g., when you forget your password and recovery key.
|
||||
|
||||
Trusted Contacts can initiate a recovery, and if not blocked in 30 days, would be able to change the password to your account and thereby access your memories.
|
||||
Trusted Contacts can initiate a recovery, and if not blocked in 30 days, would
|
||||
be able to change the password to your account and thereby access your memories.
|
||||
|
||||
## Adding a trusted contact
|
||||
|
||||
You can add a trusted contact for your account using the mobile app for Ente Photos. Go to Settings -> Account -> Legacy, and click on "Add Trusted Contact".
|
||||
You can add a trusted contact for your account using the mobile app for Ente
|
||||
Photos. Go to Settings -> Account -> Legacy, and click on "Add Trusted Contact".
|
||||
|
||||
You would be asked to enter the email address of the trusted contact you want to add or choose from a list of contacts on Ente. Please note that the trusted contact must be an Ente user.
|
||||
You would be asked to enter the email address of the trusted contact you want to
|
||||
add or choose from a list of contacts on Ente. Please note that the trusted
|
||||
contact must be an Ente user.
|
||||
|
||||
<div align="center">
|
||||
|
||||
@@ -21,7 +27,10 @@ You would be asked to enter the email address of the trusted contact you want to
|
||||
|
||||
</div>
|
||||
|
||||
The trusted contact must accept your request. They can do so by going to Settings -> Account -> Legacy in the Ente Photos mobile app, and clicking on your email address within the Legacy accounts sections. Ente would also send an email notification to the trusted contact to nudge them to accept the invite.
|
||||
The trusted contact must accept your request. They can do so by going to
|
||||
Settings -> Account -> Legacy in the Ente Photos mobile app, and clicking on
|
||||
your email address within the Legacy accounts sections. Ente would also send an
|
||||
email notification to the trusted contact to nudge them to accept the invite.
|
||||
|
||||
<div align="center">
|
||||
|
||||
@@ -31,7 +40,9 @@ The trusted contact must accept your request. They can do so by going to Setting
|
||||
|
||||
## Recovering an account as a trusted contact
|
||||
|
||||
As a trusted contact, you can recover an account by going to Settings -> Account -> Legacy in the Ente photos app, tapping on the email address of the account within the Legacy account sections.
|
||||
As a trusted contact, you can recover an account by going to Settings -> Account
|
||||
-> Legacy in the Ente photos app, tapping on the email address of the account
|
||||
within the Legacy account sections.
|
||||
|
||||
<div align="center">
|
||||
|
||||
@@ -39,12 +50,20 @@ As a trusted contact, you can recover an account by going to Settings -> Account
|
||||
|
||||
</div>
|
||||
|
||||
Once the recovery is initiated, the account owner would get 30 days to block the recovery. After 30 days, you can go the same page in the app, where you will be prompted to change the password of the account. Once you change the password, you would be able to access the recovered account with the new password.
|
||||
Once the recovery is initiated, the account owner would get 30 days to block the
|
||||
recovery. After 30 days, you can go the same page in the app, where you will be
|
||||
prompted to change the password of the account. Once you change the password,
|
||||
you would be able to access the recovered account with the new password.
|
||||
|
||||
## Blocking account recovery by a trusted contact
|
||||
|
||||
After a trusted contact initiates a recover, you, as the account owner, would get 30 days to block the recovery. To do this, you must go to Settings -> Account -> Legacy, where you will see a message that recovery of the account has been initiated. Tapping on that will allow you to block the recovery.
|
||||
After a trusted contact initiates a recover, you, as the account owner, would
|
||||
get 30 days to block the recovery. To do this, you must go to Settings ->
|
||||
Account -> Legacy, where you will see a message that recovery of the account has
|
||||
been initiated. Tapping on that will allow you to block the recovery.
|
||||
|
||||
## Removing a trusted contact
|
||||
|
||||
You can remove a trusted contact by going to Settings -> Account -> Legacy, tapping on the trusted contact you want to remove, and choosing "Remove" in the popup.
|
||||
You can remove a trusted contact by going to Settings -> Account -> Legacy,
|
||||
tapping on the trusted contact you want to remove, and choosing "Remove" in the
|
||||
popup.
|
||||
|
||||
@@ -30,14 +30,14 @@ device.
|
||||
|
||||
## Tips
|
||||
|
||||
- The app will automatically cluster photos falling within a radius under a
|
||||
specified location.
|
||||
- The app will automatically cluster photos falling within a radius under a
|
||||
specified location.
|
||||
|
||||
- Location Tags provide a seamless way to filter photos without compromising
|
||||
your privacy.
|
||||
- Location Tags provide a seamless way to filter photos without compromising
|
||||
your privacy.
|
||||
|
||||
- Location tags are stored end-to-end encrypted, ensuring the security of your
|
||||
data.
|
||||
- Location tags are stored end-to-end encrypted, ensuring the security of your
|
||||
data.
|
||||
|
||||
- Enjoy a more organized photo library by tagging important places like home,
|
||||
office, and vacation spots.
|
||||
- Enjoy a more organized photo library by tagging important places like home,
|
||||
office, and vacation spots.
|
||||
|
||||
@@ -10,15 +10,15 @@ description:
|
||||
Ente supports on-device machine learning. This allows you to use the latest
|
||||
advances in AI in a privacy preserving manner.
|
||||
|
||||
- You can search for your photos by the **Faces** of the people in them. Ente
|
||||
will show you all the faces in a photo, and will also try to group similar
|
||||
faces together to create clusters of people so that you can give them names,
|
||||
and quickly find all photos with a given person in them.
|
||||
- You can search for your photos by the **Faces** of the people in them. Ente
|
||||
will show you all the faces in a photo, and will also try to group similar
|
||||
faces together to create clusters of people so that you can give them names,
|
||||
and quickly find all photos with a given person in them.
|
||||
|
||||
- You can search for your photos by typing natural language descriptions of
|
||||
them. For example, you can search for "night", "by the seaside", or "the red
|
||||
motorcycle next to a fountain". Within the app, this ability is referred to
|
||||
as **Magic search**.
|
||||
- You can search for your photos by typing natural language descriptions of
|
||||
them. For example, you can search for "night", "by the seaside", or "the red
|
||||
motorcycle next to a fountain". Within the app, this ability is referred to as
|
||||
**Magic search**.
|
||||
|
||||
You can enable face recognition and magic search in the app's preferences on
|
||||
either the mobile app or the desktop app.
|
||||
|
||||
@@ -9,31 +9,30 @@ _View and explore your photos on the map_
|
||||
|
||||
## How can I view photos on the map on mobile?
|
||||
|
||||
- Find the search icon located at the bottom right corner of your screen.
|
||||
- Tap on the globe icon (Your map) withing the location
|
||||
- Enter the map view and start exploring your photos from around the world.
|
||||
- Find the search icon located at the bottom right corner of your screen.
|
||||
- Tap on the globe icon (Your map) withing the location
|
||||
- Enter the map view and start exploring your photos from around the world.
|
||||
|
||||
## How to enable map on your mobile app?
|
||||
|
||||
- Tap the three horizontal lines located at the top left corner of your home
|
||||
screen or swipe left on the home screen.
|
||||
- Select _General_ settings.
|
||||
- Enter the _Advanced_ settings.
|
||||
- Use the toggle switch to turn the map feature on or off.
|
||||
- Tap the three horizontal lines located at the top left corner of your home
|
||||
screen or swipe left on the home screen.
|
||||
- Select _General_ settings.
|
||||
- Enter the _Advanced_ settings.
|
||||
- Use the toggle switch to turn the map feature on or off.
|
||||
|
||||
## How to view Album photos on the map?
|
||||
|
||||
- Open the album containing the photos you want to view
|
||||
- Tap on the three horizontal lines located in the top right corner of the
|
||||
screen.
|
||||
- Select _Map_ from the options.
|
||||
- View and explore your photos on the map.
|
||||
- Open the album containing the photos you want to view
|
||||
- Tap on the three horizontal lines located in the top right corner of the
|
||||
screen.
|
||||
- Select _Map_ from the options.
|
||||
- View and explore your photos on the map.
|
||||
|
||||
## How to enable map on desktop?
|
||||
|
||||
- Click on the three horizontal lines located in the top left corner of the
|
||||
app.
|
||||
- Navigate to _Preferences_ from the menu.
|
||||
- Select _Advanced_ in the preferences menu.
|
||||
- Click on _Map_ to access map settings.
|
||||
- Toggle the map settings on and off based on your preferences.
|
||||
- Click on the three horizontal lines located in the top left corner of the app.
|
||||
- Navigate to _Preferences_ from the menu.
|
||||
- Select _Advanced_ in the preferences menu.
|
||||
- Click on _Map_ to access map settings.
|
||||
- Toggle the map settings on and off based on your preferences.
|
||||
|
||||
@@ -14,11 +14,11 @@ a second factor to secure your Ente account.**
|
||||
> Passkeys are the colloquial term for a WebAuthn (Web Authentication)
|
||||
> credentials.
|
||||
>
|
||||
> - More details about why and how are in the Passkeys announcement
|
||||
> [blog post](https://ente.io/blog/introducing-passkeys-on-ente/).
|
||||
> - And to know more technical details about how our passkey verification
|
||||
> works, you can see this
|
||||
> [technical note in our source code](https://github.com/ente-io/ente/blob/main/web/docs/webauthn-passkeys.md).
|
||||
> - More details about why and how are in the Passkeys announcement
|
||||
> [blog post](https://ente.io/blog/introducing-passkeys-on-ente/).
|
||||
> - And to know more technical details about how our passkey verification works,
|
||||
> you can see this
|
||||
> [technical note in our source code](https://github.com/ente-io/ente/blob/main/web/docs/webauthn-passkeys.md).
|
||||
|
||||
## Passkeys and TOTP
|
||||
|
||||
|
||||
@@ -20,8 +20,8 @@ or event. Everything they add also remains end-to-end encrypted.
|
||||
|
||||
In addition to this, links support the following features:
|
||||
|
||||
- Link expiry (so the links go poof after a duration you define)
|
||||
- Device limits (in case you don't want someone to forwarding your link)
|
||||
- Password lock (to add an additional level of protection to your photos)
|
||||
- Prevent downloads (while we can't prevent screenshots, we can disable the
|
||||
option to download your original photos)
|
||||
- Link expiry (so the links go poof after a duration you define)
|
||||
- Device limits (in case you don't want someone to forwarding your link)
|
||||
- Password lock (to add an additional level of protection to your photos)
|
||||
- Prevent downloads (while we can't prevent screenshots, we can disable the
|
||||
option to download your original photos)
|
||||
|
||||
@@ -11,12 +11,12 @@ that you can then share. You don't need to create an album first.
|
||||
> Behind the scene, Ente creates a special album and put all the selected files
|
||||
> in that special album.
|
||||
|
||||
- You can view all quick links created by you in the sharing tab, under Quick
|
||||
links section.
|
||||
- You can view all quick links created by you in the sharing tab, under Quick
|
||||
links section.
|
||||
|
||||
- Quick links can be converted to regular album.
|
||||
- Quick links can be converted to regular album.
|
||||
|
||||
- Removing a link will not delete the photos that are present in that link.
|
||||
- Removing a link will not delete the photos that are present in that link.
|
||||
|
||||
- Similar to a [public-link](./public-link), you can set link expiry,
|
||||
passwords or device limits.
|
||||
- Similar to a [public-link](./public-link), you can set link expiry, passwords
|
||||
or device limits.
|
||||
|
||||
@@ -11,14 +11,14 @@ This allows you to share your photos and videos with only the people you want,
|
||||
without them being visible to anybody else. The files remain encrypted at all
|
||||
times, and only the people you have shared with get the decryption keys.
|
||||
|
||||
- If the person you want to share with is already on Ente, you can share an
|
||||
album with them by entering their email address.
|
||||
- If the person you want to share with is already on Ente, you can share an
|
||||
album with them by entering their email address.
|
||||
|
||||
- If they are not already on Ente, you can send them an invite and then share
|
||||
with them after they've signed up.
|
||||
- If they are not already on Ente, you can send them an invite and then share
|
||||
with them after they've signed up.
|
||||
|
||||
- Alternatively, you can create public links to share albums with people who
|
||||
are not on Ente.
|
||||
- Alternatively, you can create public links to share albums with people who are
|
||||
not on Ente.
|
||||
|
||||
With public links, the files are still end-to-end encrypted, so the sharing is
|
||||
still secure. Note that the decryption keys are part of the public link so keep
|
||||
@@ -82,14 +82,14 @@ sounds useful to you, please participate in
|
||||
More details, including technical aspect about how the sharing features were
|
||||
implemented, are in various blog posts announcing these features.
|
||||
|
||||
- [Collaborative albums](https://ente.io/blog/collaborative-albums)
|
||||
- [Collaborative albums](https://ente.io/blog/collaborative-albums)
|
||||
|
||||
- [Collect photos from people not on ente](https://ente.io/blog/collect-photos)
|
||||
- [Collect photos from people not on ente](https://ente.io/blog/collect-photos)
|
||||
|
||||
- [Shareable links for albums](https://ente.io/blog/shareable-links),
|
||||
[and their underlying technical implementation](https://ente.io/blog/building-shareable-links).
|
||||
Since then, we have also added the ability to password protect public links,
|
||||
and configure a duration after which the link will automatically expire.
|
||||
- [Shareable links for albums](https://ente.io/blog/shareable-links),
|
||||
[and their underlying technical implementation](https://ente.io/blog/building-shareable-links).
|
||||
Since then, we have also added the ability to password protect public links,
|
||||
and configure a duration after which the link will automatically expire.
|
||||
|
||||
We are now working on the other requested features around sharing, including
|
||||
comments and reactions.
|
||||
|
||||
@@ -8,12 +8,12 @@ description: Uncategorized items in Ente Photos
|
||||
_Uncategorized_ is a special album type where photos are automatically added
|
||||
under the following circumstances:
|
||||
|
||||
- When you remove a photo from the last album, it is relocated to
|
||||
_Uncategorized_ section.
|
||||
- When you remove a photo from the last album, it is relocated to
|
||||
_Uncategorized_ section.
|
||||
|
||||
- During album deletion, if you choose to keep photos but delete the album,
|
||||
all photos exclusive to the current album are moved to the _Uncategorized_
|
||||
section.
|
||||
- During album deletion, if you choose to keep photos but delete the album, all
|
||||
photos exclusive to the current album are moved to the _Uncategorized_
|
||||
section.
|
||||
|
||||
Note: This does not include photos uploaded by others.
|
||||
|
||||
|
||||
@@ -64,7 +64,7 @@ data reflects the latest album states with new files, moves, and deletions.
|
||||
If you run into any issues during your data export, please reach out to
|
||||
[support@ente.io](mailto:support@ente.io) and we will be happy to help you!
|
||||
|
||||
Note that we also provide a [CLI
|
||||
tool](https://github.com/ente-io/ente/tree/main/cli#export) to export your data.
|
||||
You can find more information about the export in the [export
|
||||
FAQ](/photos/faq/export).
|
||||
Note that we also provide a
|
||||
[CLI tool](https://github.com/ente-io/ente/tree/main/cli#export) to export your
|
||||
data. You can find more information about the export in the
|
||||
[export FAQ](/photos/faq/export).
|
||||
|
||||
@@ -72,6 +72,7 @@ If you run into any issues during this migration, please reach out to
|
||||
> [!TIP]
|
||||
>
|
||||
> In case you wish to use face recognition and other advanced search features
|
||||
> provided by Ente, we recommend that you enable [machine
|
||||
> learning](/photos/features/machine-learning) before importing your photos so
|
||||
> that the Ente app can directly index files as they are getting uploaded.
|
||||
> provided by Ente, we recommend that you enable
|
||||
> [machine learning](/photos/features/machine-learning) before importing your
|
||||
> photos so that the Ente app can directly index files as they are getting
|
||||
> uploaded.
|
||||
|
||||
@@ -7,8 +7,8 @@ description:
|
||||
|
||||
# Migrating to/from Ente Photos
|
||||
|
||||
- [Import from Google Photos](from-google-photos/)
|
||||
- [Import from Apple Photos](from-apple-photos/)
|
||||
- [Import from Amazon Photos](from-amazon-photos)
|
||||
- [Import from local hard disk](from-local-hard-disk)
|
||||
- [Export out of Ente Photos](export/)
|
||||
- [Import from Google Photos](from-google-photos/)
|
||||
- [Import from Apple Photos](from-apple-photos/)
|
||||
- [Import from Amazon Photos](from-amazon-photos)
|
||||
- [Import from local hard disk](from-local-hard-disk)
|
||||
- [Export out of Ente Photos](export/)
|
||||
|
||||
@@ -9,8 +9,8 @@ The latest version of the Ente Photos desktop app can be downloaded from
|
||||
[ente.io/download](https://ente.io/download). If you're having trouble, please
|
||||
see if any of the following cases apply.
|
||||
|
||||
- [Windows](#windows)
|
||||
- [Linux](#linux)
|
||||
- [Windows](#windows)
|
||||
- [Linux](#linux)
|
||||
|
||||
## Windows
|
||||
|
||||
@@ -36,9 +36,9 @@ https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=ms
|
||||
AppImages are not fully standalone, and they require additional steps to enable
|
||||
full "desktop integration":
|
||||
|
||||
- Showing the app icon,
|
||||
- Surfacing the app in the list of installed apps,
|
||||
- Handling redirection after passkey verification.
|
||||
- Showing the app icon,
|
||||
- Surfacing the app in the list of installed apps,
|
||||
- Handling redirection after passkey verification.
|
||||
|
||||
All the ways of enabling AppImage desktop integration are mentioned in
|
||||
[AppImage documentation](https://docs.appimage.org/user-guide/run-appimages.html#integrating-appimages-into-the-desktop).
|
||||
@@ -62,11 +62,11 @@ It is possible that the exact path might be different on your machine. Briefly,
|
||||
what we need to do is create `libz.so` as an alias for `libz.so.1`. For more
|
||||
details, see the following upstream issues:
|
||||
|
||||
- libz.so cannot open shared object file on ARM64 -
|
||||
[AppImage/AppImageKit/issues/1092](https://github.com/AppImage/AppImageKit/issues/1092)
|
||||
- libz.so cannot open shared object file on ARM64 -
|
||||
[AppImage/AppImageKit/issues/1092](https://github.com/AppImage/AppImageKit/issues/1092)
|
||||
|
||||
- libz.so: cannot open shared object file with Ubuntu arm64 -
|
||||
[electron-userland/electron-builder/issues/7835](https://github.com/electron-userland/electron-builder/issues/7835)
|
||||
- libz.so: cannot open shared object file with Ubuntu arm64 -
|
||||
[electron-userland/electron-builder/issues/7835](https://github.com/electron-userland/electron-builder/issues/7835)
|
||||
|
||||
### AppImage says it requires FUSE
|
||||
|
||||
|
||||
@@ -15,28 +15,28 @@ the logs just make the process a bit faster and easier.
|
||||
|
||||
## Mobile
|
||||
|
||||
- Open settings (tap on the three horizontal lines button).
|
||||
- Tap on _Support_ from the settings.
|
||||
- Select for the option to _Report a Bug_.
|
||||
- Tap on _Report a bug_.
|
||||
- Open settings (tap on the three horizontal lines button).
|
||||
- Tap on _Support_ from the settings.
|
||||
- Select for the option to _Report a Bug_.
|
||||
- Tap on _Report a bug_.
|
||||
|
||||
## Desktop
|
||||
|
||||
- Click on _Help_ menu at the top of your screen, and select the _View logs_
|
||||
option.
|
||||
- Open settings (click on the three horizontal lines button located at the top
|
||||
left corner of the screen).
|
||||
- Click on _Support_. This will open your email client where you can attach
|
||||
the logs in the email and describe the issue.
|
||||
- Click on _Help_ menu at the top of your screen, and select the _View logs_
|
||||
option.
|
||||
- Open settings (click on the three horizontal lines button located at the top
|
||||
left corner of the screen).
|
||||
- Click on _Support_. This will open your email client where you can attach the
|
||||
logs in the email and describe the issue.
|
||||
|
||||
## Web
|
||||
|
||||
- Open settings (click on the three horizontal lines button located at the top
|
||||
left corner of the screen).
|
||||
- Click on _Debug Logs_ towards the bottom of settings.
|
||||
- Click on _Download logs_
|
||||
- Click on _Support_. This will open your email client where you can attach
|
||||
the logs in the email and describe the issue.
|
||||
- Open settings (click on the three horizontal lines button located at the top
|
||||
left corner of the screen).
|
||||
- Click on _Debug Logs_ towards the bottom of settings.
|
||||
- Click on _Download logs_
|
||||
- Click on _Support_. This will open your email client where you can attach the
|
||||
logs in the email and describe the issue.
|
||||
|
||||
## Send email manually
|
||||
|
||||
|
||||
@@ -8,9 +8,9 @@ description: Getting the OTP for a self hosted Ente
|
||||
The self-hosted Ente by default does not send out emails, so you can pick the
|
||||
verification code by:
|
||||
|
||||
- Getting it from the server logs, or
|
||||
- Getting it from the server logs, or
|
||||
|
||||
- Reading it from the DB (otts table)
|
||||
- Reading it from the DB (otts table)
|
||||
|
||||
You can also set pre-defined hardcoded OTTs for certain users when running
|
||||
locally by creating a `museum.yaml` and adding the `internal.hardcoded-ott`
|
||||
|
||||
@@ -50,16 +50,15 @@ explicit whitelist of admins.
|
||||
To whitelist the user IDs that can perform admin actions on the server, use the
|
||||
following steps:
|
||||
|
||||
- Create a `museum.yaml` in the directory where you're starting museum from.
|
||||
For example, if you're running using `docker compose up`, then this file
|
||||
should be in the same directory as `compose.yaml` (generally,
|
||||
`server/museum.yaml`).
|
||||
- Create a `museum.yaml` in the directory where you're starting museum from. For
|
||||
example, if you're running using `docker compose up`, then this file should be
|
||||
in the same directory as `compose.yaml` (generally, `server/museum.yaml`).
|
||||
|
||||
> Docker might've created an empty `museum.yaml` _directory_ on your machine
|
||||
> previously. If so, delete that empty directory and create a new file named
|
||||
> `museum.yaml`.
|
||||
|
||||
- In this `museum.yaml` we can add overrides over the default configuration.
|
||||
- In this `museum.yaml` we can add overrides over the default configuration.
|
||||
|
||||
For whitelisting the admin userIDs we need to define an `internal.admins`. See
|
||||
the "internal" section in
|
||||
|
||||
@@ -167,10 +167,10 @@ RUN chmod +x /docker-entrypoint.d/replace_ente_endpoints.sh
|
||||
This runs nginx inside to handle both the web & album URLs so we don't have to
|
||||
make two web images with different port.
|
||||
|
||||
- `DOCKER_RUNTIME_REPLACE_ENDPOINT` this is your public museum API URL.
|
||||
- `DOCKER_RUNTIME_REPLACE_ALBUMS_ENDPOINT` this is the shared albums URL (for
|
||||
more details about configuring shared albums, see
|
||||
[faq/sharing](/self-hosting/faq/sharing)).
|
||||
- `DOCKER_RUNTIME_REPLACE_ENDPOINT` this is your public museum API URL.
|
||||
- `DOCKER_RUNTIME_REPLACE_ALBUMS_ENDPOINT` this is the shared albums URL (for
|
||||
more details about configuring shared albums, see
|
||||
[faq/sharing](/self-hosting/faq/sharing)).
|
||||
|
||||
Note how above we had updated the `compose.yaml` file for the server with
|
||||
|
||||
@@ -218,11 +218,11 @@ s3:
|
||||
use_path_style_urls: true
|
||||
# The key must be named like so
|
||||
b2-eu-cen:
|
||||
key: $YOUR_S3_KEY
|
||||
secret: $YOUR_S3_SECRET
|
||||
key: $YOUR_S3_KEY
|
||||
secret: $YOUR_S3_SECRET
|
||||
endpoint: $YOUR_S3_ENDPOINT
|
||||
region: $YOUR_S3_REGION
|
||||
bucket: $YOUR_S3_BUCKET_NAME
|
||||
region: $YOUR_S3_REGION
|
||||
bucket: $YOUR_S3_BUCKET_NAME
|
||||
# The same value as the one specified in ALBUMS_ENDPOINT
|
||||
apps:
|
||||
public-albums: http://localhost:8082
|
||||
@@ -235,10 +235,12 @@ background).
|
||||
|
||||
## 4. Create an account and increase storage quota
|
||||
|
||||
Open `http://localhost:8080` or whatever Endpoint you mentioned for the web app and create an account.
|
||||
If your SMTP related configurations are all set and right, you will receive an email with
|
||||
your OTT in it. There are two work arounds to retrieve the OTP,
|
||||
checkout [this document](https://help.ente.io/self-hosting/faq/otp) for getting your OTT's..
|
||||
Open `http://localhost:8080` or whatever Endpoint you mentioned for the web app
|
||||
and create an account. If your SMTP related configurations are all set and
|
||||
right, you will receive an email with your OTT in it. There are two work arounds
|
||||
to retrieve the OTP, checkout
|
||||
[this document](https://help.ente.io/self-hosting/faq/otp) for getting your
|
||||
OTT's..
|
||||
|
||||
If you successfully log in, select any plan and increase the storage quota with
|
||||
the following command:
|
||||
@@ -251,8 +253,7 @@ After few reloads, you should see 1 To of quota.
|
||||
|
||||
## 5. Fix potential CORS issue with your bucket
|
||||
|
||||
|
||||
### For AWS S3
|
||||
### For AWS S3
|
||||
|
||||
If you cannot upload a photo due to a CORS issue, you need to fix the CORS
|
||||
configuration of your bucket.
|
||||
@@ -275,7 +276,8 @@ Create a `cors.json` file with the following content:
|
||||
|
||||
You may want to change the `AllowedOrigins` to a more restrictive value.
|
||||
|
||||
If you are using AWS for S3, you can execute the below command to get rid of CORS. Make sure to enter the right path for the `cors.json` file.
|
||||
If you are using AWS for S3, you can execute the below command to get rid of
|
||||
CORS. Make sure to enter the right path for the `cors.json` file.
|
||||
|
||||
```bash
|
||||
aws s3api put-bucket-cors --bucket YOUR_S3_BUCKET --cors-configuration /path/to/cors.json
|
||||
@@ -283,18 +285,27 @@ aws s3api put-bucket-cors --bucket YOUR_S3_BUCKET --cors-configuration /path/to/
|
||||
|
||||
### For Self-hosted Minio Instance
|
||||
|
||||
> Important: MinIO does not take JSON CORS file as the input, instead you will have to build a CORS.xml file or just convert the above `cors.json` to XML.
|
||||
> Important: MinIO does not take JSON CORS file as the input, instead you will
|
||||
> have to build a CORS.xml file or just convert the above `cors.json` to XML.
|
||||
|
||||
A minor requirement here is the tool `mc` for managing buckets via command line
|
||||
interface. Checkout the `mc set alias` document to configure alias for your
|
||||
instance and bucket. After this you will be prompted for your AccessKey and
|
||||
Secret, which is your username and password, go ahead and enter that.
|
||||
|
||||
A minor requirement here is the tool `mc` for managing buckets via command line interface. Checkout the `mc set alias` document to configure alias for your instance and bucket.
|
||||
After this you will be prompted for your AccessKey and Secret, which is your username and password, go ahead and enter that.
|
||||
```sh
|
||||
mc cors set <your-minio>/<your-bucket-name /path/to/cors.xml
|
||||
```
|
||||
or, if you just want to just set the `AllowedOrigins` Header, you can use the following command to do so.
|
||||
```sh
|
||||
|
||||
or, if you just want to just set the `AllowedOrigins` Header, you can use the
|
||||
following command to do so.
|
||||
|
||||
```sh
|
||||
mc admin config set <your-minio>/<your-bucket-name> set "cors_allowed_origin=*"
|
||||
```
|
||||
You can create also `.csv` file and dump the list of origins you would like to allow and replace the `*` with `path` to the CSV file.
|
||||
|
||||
You can create also `.csv` file and dump the list of origins you would like to
|
||||
allow and replace the `*` with `path` to the CSV file.
|
||||
|
||||
Now, uploads should be working fine.
|
||||
|
||||
@@ -302,6 +313,6 @@ Now, uploads should be working fine.
|
||||
|
||||
Some other users have also shared their setups.
|
||||
|
||||
- [Using Traefik](https://github.com/ente-io/ente/pull/3663)
|
||||
- [Using Traefik](https://github.com/ente-io/ente/pull/3663)
|
||||
|
||||
- [Building custom images from source (Linux)](https://github.com/ente-io/ente/discussions/3778)
|
||||
- [Building custom images from source (Linux)](https://github.com/ente-io/ente/discussions/3778)
|
||||
|
||||
@@ -10,14 +10,14 @@ walkthroughs, tutorials and other FAQ pages in this directory.
|
||||
|
||||
See the sidebar for existing guides. In particular:
|
||||
|
||||
- If you're just looking to get started, see
|
||||
[configure custom server](custom-server/).
|
||||
- If you're just looking to get started, see
|
||||
[configure custom server](custom-server/).
|
||||
|
||||
- For various admin related tasks, e.g. increasing the storage quota on your
|
||||
self hosted instance, see [administering your custom server](admin).
|
||||
- For various admin related tasks, e.g. increasing the storage quota on your
|
||||
self hosted instance, see [administering your custom server](admin).
|
||||
|
||||
- For configuring your S3 buckets to get the object storage to work from your
|
||||
mobile device or for fixing an upload errors, see
|
||||
[configuring S3](configuring-s3). There is also a longer
|
||||
[community contributed guide](external-s3) for a more self hosted setup of
|
||||
both the server and web app using external S3 buckets for object storage.
|
||||
- For configuring your S3 buckets to get the object storage to work from your
|
||||
mobile device or for fixing an upload errors, see
|
||||
[configuring S3](configuring-s3). There is also a longer
|
||||
[community contributed guide](external-s3) for a more self hosted setup of
|
||||
both the server and web app using external S3 buckets for object storage.
|
||||
|
||||
@@ -5,33 +5,35 @@ description: Guide to configuring Ente CLI for Self Hosted Instance
|
||||
|
||||
## Self Hosting
|
||||
|
||||
If you are self-hosting the server, you can still configure CLI to export
|
||||
data & perform basic admin actions.
|
||||
If you are self-hosting the server, you can still configure CLI to export data &
|
||||
perform basic admin actions.
|
||||
|
||||
To do this, first configure the CLI to point to your server. Define a config.yaml
|
||||
and put it either in the same directory as CLI binary
|
||||
or path defined in env variable `ENTE_CLI_CONFIG_DIR`
|
||||
To do this, first configure the CLI to point to your server. Define a
|
||||
config.yaml and put it either in the same directory as CLI binary or path
|
||||
defined in env variable `ENTE_CLI_CONFIG_DIR`
|
||||
|
||||
```yaml
|
||||
endpoint:
|
||||
api: "http://localhost:8080"
|
||||
api: "http://localhost:8080"
|
||||
```
|
||||
|
||||
You should be able to [add an account](https://github.com/ente-io/ente/blob/main/cli/docs/generated/ente_account_add.md),
|
||||
and subsequently increase the
|
||||
[storage and account validity](https://github.com/ente-io/ente/blob/main/cli/docs/generated/ente_admin_update-subscription.md) using the CLI.
|
||||
You should be able to
|
||||
[add an account](https://github.com/ente-io/ente/blob/main/cli/docs/generated/ente_account_add.md),
|
||||
and subsequently increase the
|
||||
[storage and account validity](https://github.com/ente-io/ente/blob/main/cli/docs/generated/ente_admin_update-subscription.md)
|
||||
using the CLI.
|
||||
|
||||
|
||||
For the admin actions, you first need to whitelist admin users. You can create
|
||||
`server/museum.yaml`, and whitelist add the admin userID `internal.admins`.
|
||||
See [local.yaml](https://github.com/ente-io/ente/blob/main/server/configurations/local.yaml#L211C1-L232C1)
|
||||
For the admin actions, you first need to whitelist admin users. You can create
|
||||
`server/museum.yaml`, and whitelist add the admin userID `internal.admins`. See
|
||||
[local.yaml](https://github.com/ente-io/ente/blob/main/server/configurations/local.yaml#L211C1-L232C1)
|
||||
in the server source code for details about how to define this.
|
||||
|
||||
You can use [account list](https://github.com/ente-io/ente/blob/main/cli/docs/generated/ente_account_list.md)
|
||||
You can use
|
||||
[account list](https://github.com/ente-io/ente/blob/main/cli/docs/generated/ente_account_list.md)
|
||||
command to find the user id of any account.
|
||||
|
||||
```yaml
|
||||
internal:
|
||||
admins:
|
||||
# - 1580559962386440
|
||||
admins:
|
||||
# - 1580559962386440
|
||||
```
|
||||
|
||||
@@ -7,72 +7,78 @@ description: Installing and setting up Ente standalone without docker.
|
||||
|
||||
## Running Museum (Ente's server) without Docker
|
||||
|
||||
First, start by installing all the dependencies to get your machine ready for development.
|
||||
First, start by installing all the dependencies to get your machine ready for
|
||||
development.
|
||||
|
||||
```sh
|
||||
```sh
|
||||
# For MacOS
|
||||
brew tap homebrew/core
|
||||
brew update
|
||||
brew install go
|
||||
brew tap homebrew/core
|
||||
brew update
|
||||
brew install go
|
||||
|
||||
# For Ubuntu based distros
|
||||
sudo apt update && sudo apt upgrade
|
||||
sudo apt update && sudo apt upgrade
|
||||
sudo apt install golang-go
|
||||
```
|
||||
|
||||
Alternatively, you can also download the latest binaries from ['All Release'](https://go.dev/dl/) page from the official website.
|
||||
Alternatively, you can also download the latest binaries from
|
||||
['All Release'](https://go.dev/dl/) page from the official website.
|
||||
|
||||
```sh
|
||||
brew install postgres@15
|
||||
# Link the postgres keg
|
||||
brew link postgresql@15
|
||||
```sh
|
||||
brew install postgres@15
|
||||
# Link the postgres keg
|
||||
brew link postgresql@15
|
||||
|
||||
brew install libsodium
|
||||
brew install libsodium
|
||||
|
||||
# For Ubuntu based distros
|
||||
# For Ubuntu based distros
|
||||
sudo apt install postgresql
|
||||
sudo apt install libsodium23 libsodium-dev
|
||||
sudo apt install libsodium23 libsodium-dev
|
||||
```
|
||||
|
||||
The package `libsodium23` might be installed already in some cases.
|
||||
|
||||
Installing pkg-config
|
||||
|
||||
```sh
|
||||
brew install pkg-config
|
||||
```sh
|
||||
brew install pkg-config
|
||||
|
||||
# For Ubuntu based distros
|
||||
# For Ubuntu based distros
|
||||
sudo apt install pkg-config
|
||||
```
|
||||
|
||||
## Starting Postgres
|
||||
## Starting Postgres
|
||||
|
||||
### With pg_ctl
|
||||
### With pg_ctl
|
||||
|
||||
```sh
|
||||
pg_ctl -D /usr/local/var/postgres -l logfile start
|
||||
```sh
|
||||
pg_ctl -D /usr/local/var/postgres -l logfile start
|
||||
```
|
||||
|
||||
Dependeing on the Operating System type the path for postgres binary or configuration file might be different, please check if the command keeps failing for you.
|
||||
Dependeing on the Operating System type the path for postgres binary or
|
||||
configuration file might be different, please check if the command keeps failing
|
||||
for you.
|
||||
|
||||
Ideally, if you are on a Linux system with systemd as the init. You can also start postgres as a systemd service. After Installation execute the following commands:
|
||||
Ideally, if you are on a Linux system with systemd as the init. You can also
|
||||
start postgres as a systemd service. After Installation execute the following
|
||||
commands:
|
||||
|
||||
```sh
|
||||
sudo systemctl enable postgresql
|
||||
```sh
|
||||
sudo systemctl enable postgresql
|
||||
sudo systemctl daemon-reload && sudo systemctl start postgresql
|
||||
```
|
||||
|
||||
### Create user
|
||||
### Create user
|
||||
|
||||
```sh
|
||||
```sh
|
||||
createuser -s postgres
|
||||
```
|
||||
|
||||
## Start Museum
|
||||
## Start Museum
|
||||
|
||||
Start by cloning ente to your system.
|
||||
Start by cloning ente to your system.
|
||||
|
||||
```sh
|
||||
```sh
|
||||
git clone https://github.com/ente-io/ente
|
||||
```
|
||||
|
||||
@@ -82,23 +88,29 @@ cd ente/server
|
||||
go run cmd/museum/main.go
|
||||
```
|
||||
|
||||
You can also add the export line to your shell's RC file, to avoid exporting the environment variable every time.
|
||||
You can also add the export line to your shell's RC file, to avoid exporting the
|
||||
environment variable every time.
|
||||
|
||||
For live reloads, install [air](https://github.com/air-verse/air#installation). Then you can just call air after declaring the required environment variables. For example,
|
||||
For live reloads, install [air](https://github.com/air-verse/air#installation).
|
||||
Then you can just call air after declaring the required environment variables.
|
||||
For example,
|
||||
|
||||
```sh
|
||||
ENTE_DB_USER=postgres
|
||||
air
|
||||
```
|
||||
|
||||
## Museum as a background service
|
||||
## Museum as a background service
|
||||
|
||||
Please check the below links if you want to run Museum as a service, both of them are battle tested.
|
||||
Please check the below links if you want to run Museum as a service, both of
|
||||
them are battle tested.
|
||||
|
||||
1. [How to run museum as a systemd service](https://gist.github.com/mngshm/a0edb097c91d1dc45aeed755af310323)
|
||||
2. [Museum.service](https://github.com/ente-io/ente/blob/23e678889189157ecc389c258267685934b83631/server/scripts/deploy/museum.service#L4)
|
||||
|
||||
Once you are done with setting and running Museum, all you are left to do is run the web app and reverse_proxy it with a webserver. You can check the following resources for Deploying your web app.
|
||||
Once you are done with setting and running Museum, all you are left to do is run
|
||||
the web app and reverse_proxy it with a webserver. You can check the following
|
||||
resources for Deploying your web app.
|
||||
|
||||
1. [Hosting the Web App](https://help.ente.io/self-hosting/guides/web-app).
|
||||
2. [Running Ente Web app as a systemd Service](https://gist.github.com/mngshm/72e32bd483c2129621ed0d74412492fd)
|
||||
|
||||
@@ -17,20 +17,21 @@ yarn install
|
||||
NEXT_PUBLIC_ENTE_ENDPOINT=http://localhost:8080 yarn dev:photos
|
||||
```
|
||||
|
||||
This is fine for trying the web app and verifying that your self-hosted server is
|
||||
working as expected etc. But if you would like to use the web app for a longer term,
|
||||
then it is recommended to follow the Docker approach.
|
||||
This is fine for trying the web app and verifying that your self-hosted server
|
||||
is working as expected etc. But if you would like to use the web app for a
|
||||
longer term, then it is recommended to follow the Docker approach.
|
||||
|
||||
## With Docker/Docker Compose (Recommended)
|
||||
|
||||
> [!IMPORTANT]
|
||||
>
|
||||
> This docker image is still in testing stage and it might show up with some
|
||||
> unknown variables in different scenarios. But this image has been tested on a production
|
||||
> ente site.
|
||||
>
|
||||
> unknown variables in different scenarios. But this image has been tested on a
|
||||
> production Ente site.
|
||||
>
|
||||
> Recurring changes might be made by the team or from community if more
|
||||
> improvements can be made so that we are able to build a full-fledged docker image.
|
||||
> improvements can be made so that we are able to build a full-fledged docker
|
||||
> image.
|
||||
|
||||
```dockerfile
|
||||
FROM node:20-bookworm-slim as builder
|
||||
@@ -43,9 +44,9 @@ COPY apps/ .
|
||||
# Will help default to yarn versoin 1.22.22
|
||||
RUN corepack enable
|
||||
|
||||
# Configure Albums and Accounts Endpoints
|
||||
ENV NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=https://your-domain.com
|
||||
ENV NEXT_PUBLIC_ENTE_ACCOUNTS_URL=https://your-domain.com
|
||||
# Endpoint for Ente Server
|
||||
NEXT_PUBLIC_ENTE_ENDPOINT=https://your-ente-endpoint.com
|
||||
NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=https://your-albums-endpoint.com
|
||||
|
||||
RUN yarn cache clean
|
||||
RUN yarn install --network-timeout 1000000000
|
||||
@@ -74,8 +75,8 @@ EXPOSE ${AUTH}
|
||||
ENV CAST=3003
|
||||
EXPOSE ${CAST}
|
||||
|
||||
# The albums app does not have navigable pages on it, but the
|
||||
# port will be exposed in-order to self up the albums endpoint
|
||||
# The albums app does not have navigable pages on it, but the
|
||||
# port will be exposed in-order to self up the albums endpoint
|
||||
# `apps.public-albums` in museum.yaml configuration file.
|
||||
ENV ALBUMS=3004
|
||||
EXPOSE ${ALBUMS}
|
||||
@@ -83,82 +84,80 @@ EXPOSE ${ALBUMS}
|
||||
CMD ["sh", "-c", "serve /app/photos -l tcp://0.0.0.0:${PHOTOS} & serve /app/accounts -l tcp://0.0.0.0:${ACCOUNTS} & serve /app/auth -l tcp://0.0.0.0:${AUTH} & serve /app/cast -l tcp://0.0.0.0:${CAST}"]
|
||||
```
|
||||
|
||||
The above is a multi-stage Dockerfile which creates a production ready static output
|
||||
of the 4 apps (Photos, Accounts, Auth and Cast) and serves the static content with
|
||||
Caddy.
|
||||
The above is a multi-stage Dockerfile which creates a production ready static
|
||||
output of the 4 apps (Photos, Accounts, Auth and Cast) and serves the static
|
||||
content with Caddy.
|
||||
|
||||
Looking at 2 different node base-images doing different tasks in the same Dockerfile
|
||||
would not make sense, but the Dockerfile is divided into two just to improve the build
|
||||
efficiency as building this Dockerfile will arguably take more time.
|
||||
|
||||
Lets build a Docker image from the above Dockerfile. Copy and paste the above Dockerfile
|
||||
contents in the root of your web directory which is inside `ente/web`. Execute the
|
||||
below command to create an image from this Dockerfile.
|
||||
Looking at 2 different node base-images doing different tasks in the same
|
||||
Dockerfile would not make sense, but the Dockerfile is divided into two just to
|
||||
improve the build efficiency as building this Dockerfile will arguably take more
|
||||
time.
|
||||
|
||||
Lets build a Docker image from the above Dockerfile. Copy and paste the above
|
||||
Dockerfile contents in the root of your web directory which is inside
|
||||
`ente/web`. Execute the below command to create an image from this Dockerfile.
|
||||
|
||||
```sh
|
||||
# Build the image
|
||||
docker build -t <image-name>:<tag> --no-cache --progress plain .
|
||||
docker build -t <image-name>:<tag> --no-cache --progress plain .
|
||||
```
|
||||
|
||||
You can always edit the Dockerfile and remove the steps for apps which you do not
|
||||
intend to install on your system (like auth or cast) and opt out of those.
|
||||
You can always edit the Dockerfile and remove the steps for apps which you do
|
||||
not intend to install on your system (like auth or cast) and opt out of those.
|
||||
|
||||
Regarding Albums App, please take a note that they are not web pages with
|
||||
navigable pages, if accessed on the web-browser they will simply redirect to
|
||||
ente.web.io.
|
||||
Regarding Albums App, please take a note that they are not web pages with
|
||||
navigable pages, if accessed on the web-browser they will simply redirect to
|
||||
ente.web.io.
|
||||
|
||||
## compose.yaml
|
||||
|
||||
Moving ahead, we need to paste the below contents into the compose.yaml inside
|
||||
`ente/server/compose.yaml` under the services section.
|
||||
`ente/server/compose.yaml` under the services section.
|
||||
|
||||
```yaml
|
||||
ente-web:
|
||||
ente-web:
|
||||
image: <image-name> # name of the image you used while building
|
||||
ports:
|
||||
- 3000:3000
|
||||
- 3001:3001
|
||||
- 3002:3002
|
||||
- 3003:3003
|
||||
- 3004:3004
|
||||
- 3000:3000
|
||||
- 3001:3001
|
||||
- 3002:3002
|
||||
- 3003:3003
|
||||
- 3004:3004
|
||||
environment:
|
||||
- NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=https://your-domain.com
|
||||
- NEXT_PUBLIC_ENTE_ACCOUNTS_URL=https://your-domain.com
|
||||
- NODE_ENV=development
|
||||
- NODE_ENV=development
|
||||
restart: always
|
||||
```
|
||||
|
||||
Now, we're good to go. All we are left to do now is start the containers.
|
||||
Now, we're good to go. All we are left to do now is start the containers.
|
||||
|
||||
```sh
|
||||
docker compose up -d # --build
|
||||
```sh
|
||||
docker compose up -d # --build
|
||||
|
||||
# Accessing the logs
|
||||
docker compose logs <container-name>
|
||||
```
|
||||
|
||||
Next part is to configure a [web server](#web-server-configuration).
|
||||
|
||||
## Without Docker / Docker compose
|
||||
|
||||
One way to run all the apps together without Docker is by using [PM2](https://pm2.keymetrics.io/)
|
||||
in this setup. The configuration and usage is very simple and just needs one
|
||||
configuration file for it. You can run the apps both in dev server mode as
|
||||
well as static files.
|
||||
One way to run all the apps together without Docker is by using
|
||||
[PM2](https://pm2.keymetrics.io/) in this setup. The configuration and usage is
|
||||
very simple and just needs one configuration file for it. You can run the apps
|
||||
both in dev server mode as well as static files.
|
||||
|
||||
The below configuration will run the apps in dev server mode.
|
||||
|
||||
|
||||
|
||||
### Install PM2
|
||||
|
||||
```sh
|
||||
npm install pm2@latest
|
||||
```sh
|
||||
npm install pm2@latest
|
||||
```
|
||||
|
||||
Copy the below contents to a file called `ecosystem.config.js` inside the `ente/web`
|
||||
directory.
|
||||
Copy the below contents to a file called `ecosystem.config.js` inside the
|
||||
`ente/web` directory.
|
||||
|
||||
```js
|
||||
```js
|
||||
module.exports = {
|
||||
apps: [
|
||||
{
|
||||
@@ -197,22 +196,36 @@ directory.
|
||||
|
||||
```
|
||||
|
||||
Finally, start pm2.
|
||||
Finally, start pm2.
|
||||
|
||||
```sh
|
||||
pm2 start
|
||||
```sh
|
||||
pm2 start
|
||||
|
||||
# for logs
|
||||
pm2 logs all
|
||||
```
|
||||
|
||||
# Web server configuration
|
||||
## Configure App Endpoints
|
||||
|
||||
The last step ahead is configuring reverse_proxy for the ports on which the
|
||||
apps are being served (you will have to make changes, if you have cusotmized the ports).
|
||||
The web server of choice in this guide is [Caddy](https://caddyserver.com) because
|
||||
with caddy you don't have to manually configure/setup SSL ceritifcates as caddy
|
||||
will take care of that.
|
||||
> [!NOTE]
|
||||
> Previously, this was dependent on the env variables `NEXT_ENTE_PUBLIC_ACCOUNTS_ENDPOINT`
|
||||
> and etc. Please check the below documentation to update your setup configurations
|
||||
|
||||
You can configure the web endpoints for the other apps including Accounts, Albums
|
||||
Family and Cast in your `museum.yaml`` configuration file. Checkout
|
||||
[`local.yaml`](https://github.com/ente-io/ente/blob/543411254b2bb55bd00a0e515dcafa12d12d3b35/server/configurations/local.yaml#L76-L89)
|
||||
to configure the endpoints. Make sure to setup up your DNS Records accordingly to the
|
||||
similar URL's you set up in `museum.yaml``
|
||||
|
||||
Next part is to configure the web server.
|
||||
|
||||
# Web server configuration
|
||||
|
||||
The last step ahead is configuring reverse_proxy for the ports on which the apps
|
||||
are being served (you will have to make changes, if you have cusotmized the
|
||||
ports). The web server of choice in this guide is
|
||||
[Caddy](https://caddyserver.com) because with caddy you don't have to manually
|
||||
configure/setup SSL ceritifcates as caddy will take care of that.
|
||||
|
||||
```sh
|
||||
photos.yourdomain.com {
|
||||
@@ -229,17 +242,17 @@ auth.yourdomain.com {
|
||||
# and so on ...
|
||||
```
|
||||
|
||||
Next, start the caddy server :).
|
||||
Next, start the caddy server :).
|
||||
|
||||
```sh
|
||||
```sh
|
||||
# If caddy service is not enabled
|
||||
sudo systemctl enable caddy
|
||||
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl start caddy
|
||||
```
|
||||
|
||||
## Contributing
|
||||
## Contributing
|
||||
|
||||
Please start a discussion on the Github Repo if you have any suggestions for the Dockerfile,
|
||||
You can also share your setups on Github Discussions.
|
||||
Please start a discussion on the Github Repo if you have any suggestions for the
|
||||
Dockerfile, You can also share your setups on Github Discussions.
|
||||
|
||||
@@ -16,9 +16,11 @@ the same code we use for our own cloud service.
|
||||
|
||||
## Getting started
|
||||
|
||||
#### Installing Docker
|
||||
#### Installing Docker
|
||||
|
||||
Refer to [How to install Docker from the APT repository](https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository) for detailed instructions.
|
||||
Refer to
|
||||
[How to install Docker from the APT repository](https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository)
|
||||
for detailed instructions.
|
||||
|
||||
#### Start the server
|
||||
|
||||
@@ -33,12 +35,12 @@ docker compose up --build
|
||||
> You can also use a pre-built Docker image from `ghcr.io/ente-io/server`
|
||||
> ([More info](https://github.com/ente-io/ente/blob/main/server/docs/docker.md))
|
||||
|
||||
Install the necessary dependencies for running the web client
|
||||
Install the necessary dependencies for running the web client
|
||||
|
||||
```sh
|
||||
# installing npm and yarn
|
||||
```sh
|
||||
# installing npm and yarn
|
||||
|
||||
sudo apt update
|
||||
sudo apt update
|
||||
sudo apt install nodejs npm
|
||||
sudo npm install -g yarn // to install yarn globally
|
||||
```
|
||||
@@ -66,16 +68,16 @@ apps and configure them to use your
|
||||
|
||||
## Next steps
|
||||
|
||||
- More details about the server are in its
|
||||
[README](https://github.com/ente-io/ente/tree/main/server#readme)
|
||||
- More details about the server are in its
|
||||
[README](https://github.com/ente-io/ente/tree/main/server#readme)
|
||||
|
||||
- More details about running the server (with or without Docker) are in
|
||||
[RUNNING](https://github.com/ente-io/ente/blob/main/server/RUNNING.md)
|
||||
- More details about running the server (with or without Docker) are in
|
||||
[RUNNING](https://github.com/ente-io/ente/blob/main/server/RUNNING.md)
|
||||
|
||||
- If you have questions around self-hosting that are not answered in any of
|
||||
the existing documentation, you can ask in our
|
||||
[GitHub Discussions](https://github.com/ente-io/ente/discussions). **Please
|
||||
remember to search first if the query has been already asked and answered.**
|
||||
- If you have questions around self-hosting that are not answered in any of the
|
||||
existing documentation, you can ask in our
|
||||
[GitHub Discussions](https://github.com/ente-io/ente/discussions). **Please
|
||||
remember to search first if the query has been already asked and answered.**
|
||||
|
||||
## Contributing!
|
||||
|
||||
|
||||
@@ -1,35 +1,39 @@
|
||||
---
|
||||
title: Ente CLI Secrets
|
||||
description: A quick hotfix for keyring errors while running Ente CLI.
|
||||
title: Ente CLI Secrets
|
||||
description: A quick hotfix for keyring errors while running Ente CLI.
|
||||
---
|
||||
|
||||
# Ente CLI Secrets
|
||||
# Ente CLI Secrets
|
||||
|
||||
Ente CLI makes use of keyring for storing sensitive information
|
||||
like your passwords. And running the cli straight out of the
|
||||
box might give you some errors related to keyrings in some case.
|
||||
Ente CLI makes use of keyring for storing sensitive information like your
|
||||
passwords. And running the cli straight out of the box might give you some
|
||||
errors related to keyrings in some case.
|
||||
|
||||
Follow the below steps to run Ente CLI and also avoid keyrings errors.
|
||||
Follow the below steps to run Ente CLI and also avoid keyrings errors.
|
||||
|
||||
Run:
|
||||
|
||||
```sh
|
||||
```sh
|
||||
# export the secrets path
|
||||
|
||||
export ENTE_CLI_SECRETS_PATH=./<path-to-secrets.txt>
|
||||
|
||||
./ente-cli
|
||||
```
|
||||
You can also add the above line to your shell's rc file, to prevent the need to export manually every time.
|
||||
|
||||
You can also add the above line to your shell's rc file, to prevent the need to
|
||||
export manually every time.
|
||||
|
||||
Then one of the following:
|
||||
|
||||
1. If the file doesn't exist, Ente CLI will create it and fill it with a random 32 character encryption key.
|
||||
2. If you do create the file, please fill it with a cryptographically generated 32 byte string.
|
||||
1. If the file doesn't exist, Ente CLI will create it and fill it with a random
|
||||
32 character encryption key.
|
||||
2. If you do create the file, please fill it with a cryptographically generated
|
||||
32 byte string.
|
||||
|
||||
And you are good to go.
|
||||
|
||||
## Ref
|
||||
## Ref
|
||||
|
||||
- [Ente CLI Secrets Path](https://www.reddit.com/r/selfhosted/comments/1gc09il/comment/lu2hox2/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button)
|
||||
- [Keyrings](https://man7.org/linux/man-pages/man7/keyrings.7.html)
|
||||
|
||||
@@ -7,7 +7,7 @@ description: Fixing yarn install errors when trying to self host Ente
|
||||
|
||||
If your `yarn install` is failing, make sure you are using Yarn Classic
|
||||
|
||||
- https://classic.yarnpkg.com/lang/en/docs/install
|
||||
- https://classic.yarnpkg.com/lang/en/docs/install
|
||||
|
||||
For more details, see the
|
||||
[getting started instructions](https://github.com/ente-io/ente/blob/main/web/docs/new.md).
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
"pretty": "prettier --write ."
|
||||
},
|
||||
"devDependencies": {
|
||||
"prettier": "^3",
|
||||
"vitepress": "^1.0.0-rc.45"
|
||||
"prettier": "^3.3.4",
|
||||
"vitepress": "^1.5.0"
|
||||
},
|
||||
"packageManager": "yarn@1.22.22"
|
||||
}
|
||||
|
||||
1511
docs/yarn.lock
1511
docs/yarn.lock
File diff suppressed because it is too large
Load Diff
@@ -15,10 +15,10 @@ Install dependencies with `yarn`.
|
||||
|
||||
Then, to deploy an individual worker
|
||||
|
||||
- Login into wrangler (if needed) using
|
||||
`yarn workspace health-check wrangler login`
|
||||
- Login into wrangler (if needed) using
|
||||
`yarn workspace health-check wrangler login`
|
||||
|
||||
- Deploy! `yarn workspace health-check wrangler deploy`
|
||||
- Deploy! `yarn workspace health-check wrangler deploy`
|
||||
|
||||
Wrangler is the CLI provided by Cloudflare to manage workers. Apart from
|
||||
deploying, it also allows us to stream logs from running workers by using
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"@cloudflare/workers-types": "^4.20240614.0",
|
||||
"typescript": "^5",
|
||||
"wrangler": "^3",
|
||||
"prettier": "^3"
|
||||
"prettier": "^3.3.4"
|
||||
},
|
||||
"workspaces": [
|
||||
"*"
|
||||
|
||||
3
mobile/.gitignore
vendored
3
mobile/.gitignore
vendored
@@ -40,3 +40,6 @@ android/.settings/
|
||||
.env
|
||||
|
||||
fastlane/report.xml
|
||||
|
||||
# Android related
|
||||
android/app/build/
|
||||
|
||||
108
mobile/lib/generated/intl/messages_de.dart
generated
108
mobile/lib/generated/intl/messages_de.dart
generated
@@ -185,83 +185,86 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
static String m62(count) =>
|
||||
"${Intl.plural(count, one: '${count} Ergebnis gefunden', other: '${count} Ergebnisse gefunden')}";
|
||||
|
||||
static String m63(snapshotLength, searchLength) =>
|
||||
"Abschnittslänge stimmt nicht überein: ${snapshotLength} != ${searchLength}";
|
||||
|
||||
static String m4(count) => "${count} ausgewählt";
|
||||
|
||||
static String m63(count, yourCount) =>
|
||||
static String m64(count, yourCount) =>
|
||||
"${count} ausgewählt (${yourCount} von Ihnen)";
|
||||
|
||||
static String m64(verificationID) =>
|
||||
static String m65(verificationID) =>
|
||||
"Hier ist meine Verifizierungs-ID: ${verificationID} für ente.io.";
|
||||
|
||||
static String m5(verificationID) =>
|
||||
"Hey, kannst du bestätigen, dass dies deine ente.io Verifizierungs-ID ist: ${verificationID}";
|
||||
|
||||
static String m65(referralCode, referralStorageInGB) =>
|
||||
static String m66(referralCode, referralStorageInGB) =>
|
||||
"Ente Weiterempfehlungs-Code: ${referralCode} \n\nEinlösen unter Einstellungen → Allgemein → Weiterempfehlungen, um ${referralStorageInGB} GB kostenlos zu erhalten, sobald Sie einen kostenpflichtigen Tarif abgeschlossen haben\n\nhttps://ente.io";
|
||||
|
||||
static String m66(numberOfPeople) =>
|
||||
static String m67(numberOfPeople) =>
|
||||
"${Intl.plural(numberOfPeople, zero: 'Teile mit bestimmten Personen', one: 'Teilen mit 1 Person', other: 'Teilen mit ${numberOfPeople} Personen')}";
|
||||
|
||||
static String m67(emailIDs) => "Geteilt mit ${emailIDs}";
|
||||
|
||||
static String m68(fileType) =>
|
||||
"Dieses ${fileType} wird von deinem Gerät gelöscht.";
|
||||
static String m68(emailIDs) => "Geteilt mit ${emailIDs}";
|
||||
|
||||
static String m69(fileType) =>
|
||||
"Dieses ${fileType} wird von deinem Gerät gelöscht.";
|
||||
|
||||
static String m70(fileType) =>
|
||||
"Diese Datei ist sowohl in Ente als auch auf deinem Gerät.";
|
||||
|
||||
static String m70(fileType) => "Diese Datei wird von Ente gelöscht.";
|
||||
static String m71(fileType) => "Diese Datei wird von Ente gelöscht.";
|
||||
|
||||
static String m1(storageAmountInGB) => "${storageAmountInGB} GB";
|
||||
|
||||
static String m71(
|
||||
static String m72(
|
||||
usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) =>
|
||||
"${usedAmount} ${usedStorageUnit} von ${totalAmount} ${totalStorageUnit} verwendet";
|
||||
|
||||
static String m72(id) =>
|
||||
static String m73(id) =>
|
||||
"Dein ${id} ist bereits mit einem anderen Ente-Konto verknüpft.\nWenn du deine ${id} mit diesem Konto verwenden möchtest, kontaktiere bitte unseren Support";
|
||||
|
||||
static String m73(endDate) => "Dein Abo endet am ${endDate}";
|
||||
static String m74(endDate) => "Dein Abo endet am ${endDate}";
|
||||
|
||||
static String m74(completed, total) =>
|
||||
static String m75(completed, total) =>
|
||||
"${completed}/${total} Erinnerungsstücke gesichert";
|
||||
|
||||
static String m75(ignoreReason) =>
|
||||
static String m76(ignoreReason) =>
|
||||
"Zum Hochladen tippen, Hochladen wird derzeit ignoriert, da ${ignoreReason}";
|
||||
|
||||
static String m76(storageAmountInGB) =>
|
||||
static String m77(storageAmountInGB) =>
|
||||
"Diese erhalten auch ${storageAmountInGB} GB";
|
||||
|
||||
static String m77(email) => "Dies ist ${email}s Verifizierungs-ID";
|
||||
static String m78(email) => "Dies ist ${email}s Verifizierungs-ID";
|
||||
|
||||
static String m78(count) =>
|
||||
static String m79(count) =>
|
||||
"${Intl.plural(count, zero: 'Demnächst', one: '1 Tag', other: '${count} Tage')}";
|
||||
|
||||
static String m79(email) =>
|
||||
static String m80(email) =>
|
||||
"Du wurdest von ${email} eingeladen, ein Kontakt für das digitale Erbe zu werden.";
|
||||
|
||||
static String m80(galleryType) =>
|
||||
static String m81(galleryType) =>
|
||||
"Der Galerie-Typ ${galleryType} unterstützt kein Umbenennen";
|
||||
|
||||
static String m81(ignoreReason) =>
|
||||
static String m82(ignoreReason) =>
|
||||
"Upload wird aufgrund von ${ignoreReason} ignoriert";
|
||||
|
||||
static String m82(count) => "Sichere ${count} Erinnerungsstücke...";
|
||||
static String m83(count) => "Sichere ${count} Erinnerungsstücke...";
|
||||
|
||||
static String m83(endDate) => "Gültig bis ${endDate}";
|
||||
static String m84(endDate) => "Gültig bis ${endDate}";
|
||||
|
||||
static String m84(email) => "Verifiziere ${email}";
|
||||
static String m85(email) => "Verifiziere ${email}";
|
||||
|
||||
static String m85(count) =>
|
||||
static String m86(count) =>
|
||||
"${Intl.plural(count, zero: '0 Betrachter hinzugefügt', one: '1 Betrachter hinzugefügt', other: '${count} Betrachter hinzugefügt')}";
|
||||
|
||||
static String m2(email) =>
|
||||
"Wir haben eine E-Mail an <green>${email}</green> gesendet";
|
||||
|
||||
static String m86(count) =>
|
||||
static String m87(count) =>
|
||||
"${Intl.plural(count, one: 'vor einem Jahr', other: 'vor ${count} Jahren')}";
|
||||
|
||||
static String m87(storageSaved) =>
|
||||
static String m88(storageSaved) =>
|
||||
"Du hast ${storageSaved} erfolgreich freigegeben!";
|
||||
|
||||
final messages = _notInlinedMessages(_notInlinedMessages);
|
||||
@@ -1178,6 +1181,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"magicSearchHint": MessageLookupByLibrary.simpleMessage(
|
||||
"Die magische Suche erlaubt das Durchsuchen von Fotos nach ihrem Inhalt, z.B. \'Blumen\', \'rotes Auto\', \'Ausweisdokumente\'"),
|
||||
"manage": MessageLookupByLibrary.simpleMessage("Verwalten"),
|
||||
"manageDeviceStorage":
|
||||
MessageLookupByLibrary.simpleMessage("Geräte-Cache verwalten"),
|
||||
"manageDeviceStorageDesc": MessageLookupByLibrary.simpleMessage(
|
||||
"Lokalen Cache-Speicher überprüfen und löschen."),
|
||||
"manageFamily":
|
||||
@@ -1606,6 +1611,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"searchPersonsEmptySection": MessageLookupByLibrary.simpleMessage(
|
||||
"Personen werden hier angezeigt, sobald Verarbeitung und Synchronisierung abgeschlossen sind"),
|
||||
"searchResultCount": m62,
|
||||
"searchSectionsLengthMismatch": m63,
|
||||
"security": MessageLookupByLibrary.simpleMessage("Sicherheit"),
|
||||
"seePublicAlbumLinksInApp": MessageLookupByLibrary.simpleMessage(
|
||||
"Öffentliche Album-Links in der App ansehen"),
|
||||
@@ -1640,7 +1646,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Ausgewählte Elemente werden aus allen Alben gelöscht und in den Papierkorb verschoben."),
|
||||
"selectedPhotos": m4,
|
||||
"selectedPhotosWithYours": m63,
|
||||
"selectedPhotosWithYours": m64,
|
||||
"send": MessageLookupByLibrary.simpleMessage("Absenden"),
|
||||
"sendEmail": MessageLookupByLibrary.simpleMessage("E-Mail senden"),
|
||||
"sendInvite": MessageLookupByLibrary.simpleMessage("Einladung senden"),
|
||||
@@ -1670,16 +1676,16 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"shareAnAlbumNow":
|
||||
MessageLookupByLibrary.simpleMessage("Teile jetzt ein Album"),
|
||||
"shareLink": MessageLookupByLibrary.simpleMessage("Link teilen"),
|
||||
"shareMyVerificationID": m64,
|
||||
"shareMyVerificationID": m65,
|
||||
"shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage(
|
||||
"Teile mit ausgewählten Personen"),
|
||||
"shareTextConfirmOthersVerificationID": m5,
|
||||
"shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage(
|
||||
"Hol dir Ente, damit wir ganz einfach Fotos und Videos in Originalqualität teilen können\n\nhttps://ente.io"),
|
||||
"shareTextReferralCode": m65,
|
||||
"shareTextReferralCode": m66,
|
||||
"shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage(
|
||||
"Mit Nicht-Ente-Benutzern teilen"),
|
||||
"shareWithPeopleSectionTitle": m66,
|
||||
"shareWithPeopleSectionTitle": m67,
|
||||
"shareYourFirstAlbum":
|
||||
MessageLookupByLibrary.simpleMessage("Teile dein erstes Album"),
|
||||
"sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1690,7 +1696,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Neue geteilte Fotos"),
|
||||
"sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage(
|
||||
"Erhalte Benachrichtigungen, wenn jemand ein Foto zu einem gemeinsam genutzten Album hinzufügt, dem du angehörst"),
|
||||
"sharedWith": m67,
|
||||
"sharedWith": m68,
|
||||
"sharedWithMe": MessageLookupByLibrary.simpleMessage("Mit mir geteilt"),
|
||||
"sharedWithYou":
|
||||
MessageLookupByLibrary.simpleMessage("Mit dir geteilt"),
|
||||
@@ -1706,11 +1712,11 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Andere Geräte abmelden"),
|
||||
"signUpTerms": MessageLookupByLibrary.simpleMessage(
|
||||
"Ich stimme den <u-terms>Nutzungsbedingungen</u-terms> und der <u-policy>Datenschutzerklärung</u-policy> zu"),
|
||||
"singleFileDeleteFromDevice": m68,
|
||||
"singleFileDeleteFromDevice": m69,
|
||||
"singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage(
|
||||
"Es wird aus allen Alben gelöscht."),
|
||||
"singleFileInBothLocalAndRemote": m69,
|
||||
"singleFileInRemoteOnly": m70,
|
||||
"singleFileInBothLocalAndRemote": m70,
|
||||
"singleFileInRemoteOnly": m71,
|
||||
"skip": MessageLookupByLibrary.simpleMessage("Überspringen"),
|
||||
"social": MessageLookupByLibrary.simpleMessage("Social Media"),
|
||||
"someItemsAreInBothEnteAndYourDevice":
|
||||
@@ -1762,10 +1768,10 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"storageInGB": m1,
|
||||
"storageLimitExceeded": MessageLookupByLibrary.simpleMessage(
|
||||
"Speichergrenze überschritten"),
|
||||
"storageUsageInfo": m71,
|
||||
"storageUsageInfo": m72,
|
||||
"strongStrength": MessageLookupByLibrary.simpleMessage("Stark"),
|
||||
"subAlreadyLinkedErrMessage": m72,
|
||||
"subWillBeCancelledOn": m73,
|
||||
"subAlreadyLinkedErrMessage": m73,
|
||||
"subWillBeCancelledOn": m74,
|
||||
"subscribe": MessageLookupByLibrary.simpleMessage("Abonnieren"),
|
||||
"subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage(
|
||||
"Du benötigst ein aktives, bezahltes Abonnement, um das Teilen zu aktivieren."),
|
||||
@@ -1782,7 +1788,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"suggestFeatures":
|
||||
MessageLookupByLibrary.simpleMessage("Verbesserung vorschlagen"),
|
||||
"support": MessageLookupByLibrary.simpleMessage("Support"),
|
||||
"syncProgress": m74,
|
||||
"syncProgress": m75,
|
||||
"syncStopped":
|
||||
MessageLookupByLibrary.simpleMessage("Synchronisierung angehalten"),
|
||||
"syncing": MessageLookupByLibrary.simpleMessage("Synchronisiere …"),
|
||||
@@ -1795,7 +1801,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Zum Entsperren antippen"),
|
||||
"tapToUpload":
|
||||
MessageLookupByLibrary.simpleMessage("Zum Hochladen antippen"),
|
||||
"tapToUploadIsIgnoredDue": m75,
|
||||
"tapToUploadIsIgnoredDue": m76,
|
||||
"tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage(
|
||||
"Etwas ist schiefgelaufen. Bitte versuche es später noch einmal. Sollte der Fehler weiter bestehen, kontaktiere unser Supportteam."),
|
||||
"terminate": MessageLookupByLibrary.simpleMessage("Beenden"),
|
||||
@@ -1819,7 +1825,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"theseItemsWillBeDeletedFromYourDevice":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Diese Elemente werden von deinem Gerät gelöscht."),
|
||||
"theyAlsoGetXGb": m76,
|
||||
"theyAlsoGetXGb": m77,
|
||||
"theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage(
|
||||
"Sie werden aus allen Alben gelöscht."),
|
||||
"thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1835,7 +1841,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Diese E-Mail-Adresse wird bereits verwendet"),
|
||||
"thisImageHasNoExifData": MessageLookupByLibrary.simpleMessage(
|
||||
"Dieses Bild hat keine Exif-Daten"),
|
||||
"thisIsPersonVerificationId": m77,
|
||||
"thisIsPersonVerificationId": m78,
|
||||
"thisIsYourVerificationId": MessageLookupByLibrary.simpleMessage(
|
||||
"Dies ist deine Verifizierungs-ID"),
|
||||
"thisWillLogYouOutOfTheFollowingDevice":
|
||||
@@ -1860,11 +1866,11 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"total": MessageLookupByLibrary.simpleMessage("Gesamt"),
|
||||
"totalSize": MessageLookupByLibrary.simpleMessage("Gesamtgröße"),
|
||||
"trash": MessageLookupByLibrary.simpleMessage("Papierkorb"),
|
||||
"trashDaysLeft": m78,
|
||||
"trashDaysLeft": m79,
|
||||
"trim": MessageLookupByLibrary.simpleMessage("Schneiden"),
|
||||
"trustedContacts":
|
||||
MessageLookupByLibrary.simpleMessage("Vertrauenswürdige Kontakte"),
|
||||
"trustedInviteBody": m79,
|
||||
"trustedInviteBody": m80,
|
||||
"tryAgain": MessageLookupByLibrary.simpleMessage("Erneut versuchen"),
|
||||
"turnOnBackupForAutoUpload": MessageLookupByLibrary.simpleMessage(
|
||||
"Aktiviere die Sicherung, um neue Dateien in diesem Ordner automatisch zu Ente hochzuladen."),
|
||||
@@ -1883,7 +1889,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Zwei-Faktor-Authentifizierung (2FA) erfolgreich zurückgesetzt"),
|
||||
"twofactorSetup": MessageLookupByLibrary.simpleMessage(
|
||||
"Zweiten Faktor (2FA) einrichten"),
|
||||
"typeOfGallerGallerytypeIsNotSupportedForRename": m80,
|
||||
"typeOfGallerGallerytypeIsNotSupportedForRename": m81,
|
||||
"unarchive": MessageLookupByLibrary.simpleMessage("Dearchivieren"),
|
||||
"unarchiveAlbum":
|
||||
MessageLookupByLibrary.simpleMessage("Album dearchivieren"),
|
||||
@@ -1907,10 +1913,10 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"updatingFolderSelection": MessageLookupByLibrary.simpleMessage(
|
||||
"Ordnerauswahl wird aktualisiert..."),
|
||||
"upgrade": MessageLookupByLibrary.simpleMessage("Upgrade"),
|
||||
"uploadIsIgnoredDueToIgnorereason": m81,
|
||||
"uploadIsIgnoredDueToIgnorereason": m82,
|
||||
"uploadingFilesToAlbum": MessageLookupByLibrary.simpleMessage(
|
||||
"Dateien werden ins Album hochgeladen..."),
|
||||
"uploadingMultipleMemories": m82,
|
||||
"uploadingMultipleMemories": m83,
|
||||
"uploadingSingleMemory": MessageLookupByLibrary.simpleMessage(
|
||||
"Sichere ein Erinnerungsstück..."),
|
||||
"upto50OffUntil4thDec": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1929,7 +1935,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Ausgewähltes Foto verwenden"),
|
||||
"usedSpace":
|
||||
MessageLookupByLibrary.simpleMessage("Belegter Speicherplatz"),
|
||||
"validTill": m83,
|
||||
"validTill": m84,
|
||||
"verificationFailedPleaseTryAgain":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Verifizierung fehlgeschlagen, bitte versuchen Sie es erneut"),
|
||||
@@ -1938,7 +1944,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"verify": MessageLookupByLibrary.simpleMessage("Überprüfen"),
|
||||
"verifyEmail":
|
||||
MessageLookupByLibrary.simpleMessage("E-Mail-Adresse verifizieren"),
|
||||
"verifyEmailID": m84,
|
||||
"verifyEmailID": m85,
|
||||
"verifyIDLabel": MessageLookupByLibrary.simpleMessage("Überprüfen"),
|
||||
"verifyPasskey":
|
||||
MessageLookupByLibrary.simpleMessage("Passkey verifizieren"),
|
||||
@@ -1965,7 +1971,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"viewRecoveryKey": MessageLookupByLibrary.simpleMessage(
|
||||
"Wiederherstellungsschlüssel anzeigen"),
|
||||
"viewer": MessageLookupByLibrary.simpleMessage("Zuschauer"),
|
||||
"viewersSuccessfullyAdded": m85,
|
||||
"viewersSuccessfullyAdded": m86,
|
||||
"visitWebToManage": MessageLookupByLibrary.simpleMessage(
|
||||
"Bitte rufe \"web.ente.io\" auf, um dein Abo zu verwalten"),
|
||||
"waitingForVerification":
|
||||
@@ -1987,7 +1993,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Ein vertrauenswürdiger Kontakt kann helfen, deine Daten wiederherzustellen."),
|
||||
"yearShort": MessageLookupByLibrary.simpleMessage("Jahr"),
|
||||
"yearly": MessageLookupByLibrary.simpleMessage("Jährlich"),
|
||||
"yearsAgo": m86,
|
||||
"yearsAgo": m87,
|
||||
"yes": MessageLookupByLibrary.simpleMessage("Ja"),
|
||||
"yesCancel": MessageLookupByLibrary.simpleMessage("Ja, kündigen"),
|
||||
"yesConvertToViewer": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -2019,7 +2025,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Du kannst nicht mit dir selbst teilen"),
|
||||
"youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage(
|
||||
"Du hast keine archivierten Elemente."),
|
||||
"youHaveSuccessfullyFreedUp": m87,
|
||||
"youHaveSuccessfullyFreedUp": m88,
|
||||
"yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage(
|
||||
"Dein Benutzerkonto wurde gelöscht"),
|
||||
"yourMap": MessageLookupByLibrary.simpleMessage("Deine Karte"),
|
||||
|
||||
108
mobile/lib/generated/intl/messages_en.dart
generated
108
mobile/lib/generated/intl/messages_en.dart
generated
@@ -182,85 +182,85 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
static String m62(count) =>
|
||||
"${Intl.plural(count, one: '${count} result found', other: '${count} results found')}";
|
||||
|
||||
static String m88(snapshotLength, searchLength) =>
|
||||
static String m63(snapshotLength, searchLength) =>
|
||||
"Sections length mismatch: ${snapshotLength} != ${searchLength}";
|
||||
|
||||
static String m4(count) => "${count} selected";
|
||||
|
||||
static String m63(count, yourCount) =>
|
||||
static String m64(count, yourCount) =>
|
||||
"${count} selected (${yourCount} yours)";
|
||||
|
||||
static String m64(verificationID) =>
|
||||
static String m65(verificationID) =>
|
||||
"Here\'s my verification ID: ${verificationID} for ente.io.";
|
||||
|
||||
static String m5(verificationID) =>
|
||||
"Hey, can you confirm that this is your ente.io verification ID: ${verificationID}";
|
||||
|
||||
static String m65(referralCode, referralStorageInGB) =>
|
||||
static String m66(referralCode, referralStorageInGB) =>
|
||||
"Ente referral code: ${referralCode} \n\nApply it in Settings → General → Referrals to get ${referralStorageInGB} GB free after you signup for a paid plan\n\nhttps://ente.io";
|
||||
|
||||
static String m66(numberOfPeople) =>
|
||||
static String m67(numberOfPeople) =>
|
||||
"${Intl.plural(numberOfPeople, zero: 'Share with specific people', one: 'Shared with 1 person', other: 'Shared with ${numberOfPeople} people')}";
|
||||
|
||||
static String m67(emailIDs) => "Shared with ${emailIDs}";
|
||||
|
||||
static String m68(fileType) =>
|
||||
"This ${fileType} will be deleted from your device.";
|
||||
static String m68(emailIDs) => "Shared with ${emailIDs}";
|
||||
|
||||
static String m69(fileType) =>
|
||||
"This ${fileType} will be deleted from your device.";
|
||||
|
||||
static String m70(fileType) =>
|
||||
"This ${fileType} is in both Ente and your device.";
|
||||
|
||||
static String m70(fileType) => "This ${fileType} will be deleted from Ente.";
|
||||
static String m71(fileType) => "This ${fileType} will be deleted from Ente.";
|
||||
|
||||
static String m1(storageAmountInGB) => "${storageAmountInGB} GB";
|
||||
|
||||
static String m71(
|
||||
static String m72(
|
||||
usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) =>
|
||||
"${usedAmount} ${usedStorageUnit} of ${totalAmount} ${totalStorageUnit} used";
|
||||
|
||||
static String m72(id) =>
|
||||
static String m73(id) =>
|
||||
"Your ${id} is already linked to another Ente account.\nIf you would like to use your ${id} with this account, please contact our support\'\'";
|
||||
|
||||
static String m73(endDate) =>
|
||||
static String m74(endDate) =>
|
||||
"Your subscription will be cancelled on ${endDate}";
|
||||
|
||||
static String m74(completed, total) =>
|
||||
static String m75(completed, total) =>
|
||||
"${completed}/${total} memories preserved";
|
||||
|
||||
static String m75(ignoreReason) =>
|
||||
static String m76(ignoreReason) =>
|
||||
"Tap to upload, upload is currently ignored due to ${ignoreReason}";
|
||||
|
||||
static String m76(storageAmountInGB) =>
|
||||
static String m77(storageAmountInGB) =>
|
||||
"They also get ${storageAmountInGB} GB";
|
||||
|
||||
static String m77(email) => "This is ${email}\'s Verification ID";
|
||||
static String m78(email) => "This is ${email}\'s Verification ID";
|
||||
|
||||
static String m78(count) =>
|
||||
static String m79(count) =>
|
||||
"${Intl.plural(count, zero: 'Soon', one: '1 day', other: '${count} days')}";
|
||||
|
||||
static String m79(email) =>
|
||||
static String m80(email) =>
|
||||
"You have been invited to be a legacy contact by ${email}.";
|
||||
|
||||
static String m80(galleryType) =>
|
||||
static String m81(galleryType) =>
|
||||
"Type of gallery ${galleryType} is not supported for rename";
|
||||
|
||||
static String m81(ignoreReason) => "Upload is ignored due to ${ignoreReason}";
|
||||
static String m82(ignoreReason) => "Upload is ignored due to ${ignoreReason}";
|
||||
|
||||
static String m82(count) => "Preserving ${count} memories...";
|
||||
static String m83(count) => "Preserving ${count} memories...";
|
||||
|
||||
static String m83(endDate) => "Valid till ${endDate}";
|
||||
static String m84(endDate) => "Valid till ${endDate}";
|
||||
|
||||
static String m84(email) => "Verify ${email}";
|
||||
static String m85(email) => "Verify ${email}";
|
||||
|
||||
static String m85(count) =>
|
||||
static String m86(count) =>
|
||||
"${Intl.plural(count, zero: 'Added 0 viewer', one: 'Added 1 viewer', other: 'Added ${count} viewers')}";
|
||||
|
||||
static String m2(email) => "We have sent a mail to <green>${email}</green>";
|
||||
|
||||
static String m86(count) =>
|
||||
static String m87(count) =>
|
||||
"${Intl.plural(count, one: '${count} year ago', other: '${count} years ago')}";
|
||||
|
||||
static String m87(storageSaved) =>
|
||||
static String m88(storageSaved) =>
|
||||
"You have successfully freed up ${storageSaved}!";
|
||||
|
||||
final messages = _notInlinedMessages(_notInlinedMessages);
|
||||
@@ -424,6 +424,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Please authenticate to manage your trusted contacts"),
|
||||
"authToViewPasskey": MessageLookupByLibrary.simpleMessage(
|
||||
"Please authenticate to view your passkey"),
|
||||
"authToViewTrashedFiles": MessageLookupByLibrary.simpleMessage(
|
||||
"Please authenticate to view your trashed files"),
|
||||
"authToViewYourActiveSessions": MessageLookupByLibrary.simpleMessage(
|
||||
"Please authenticate to view your active sessions"),
|
||||
"authToViewYourHiddenFiles": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1540,7 +1542,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"searchPersonsEmptySection": MessageLookupByLibrary.simpleMessage(
|
||||
"People will be shown here once processing and syncing is complete"),
|
||||
"searchResultCount": m62,
|
||||
"searchSectionsLengthMismatch": m88,
|
||||
"searchSectionsLengthMismatch": m63,
|
||||
"security": MessageLookupByLibrary.simpleMessage("Security"),
|
||||
"seePublicAlbumLinksInApp": MessageLookupByLibrary.simpleMessage(
|
||||
"See public album links in app"),
|
||||
@@ -1575,7 +1577,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Selected items will be deleted from all albums and moved to trash."),
|
||||
"selectedPhotos": m4,
|
||||
"selectedPhotosWithYours": m63,
|
||||
"selectedPhotosWithYours": m64,
|
||||
"send": MessageLookupByLibrary.simpleMessage("Send"),
|
||||
"sendEmail": MessageLookupByLibrary.simpleMessage("Send email"),
|
||||
"sendInvite": MessageLookupByLibrary.simpleMessage("Send invite"),
|
||||
@@ -1604,16 +1606,16 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"shareAnAlbumNow":
|
||||
MessageLookupByLibrary.simpleMessage("Share an album now"),
|
||||
"shareLink": MessageLookupByLibrary.simpleMessage("Share link"),
|
||||
"shareMyVerificationID": m64,
|
||||
"shareMyVerificationID": m65,
|
||||
"shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage(
|
||||
"Share only with the people you want"),
|
||||
"shareTextConfirmOthersVerificationID": m5,
|
||||
"shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage(
|
||||
"Download Ente so we can easily share original quality photos and videos\n\nhttps://ente.io"),
|
||||
"shareTextReferralCode": m65,
|
||||
"shareTextReferralCode": m66,
|
||||
"shareWithNonenteUsers":
|
||||
MessageLookupByLibrary.simpleMessage("Share with non-Ente users"),
|
||||
"shareWithPeopleSectionTitle": m66,
|
||||
"shareWithPeopleSectionTitle": m67,
|
||||
"shareYourFirstAlbum":
|
||||
MessageLookupByLibrary.simpleMessage("Share your first album"),
|
||||
"sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1624,7 +1626,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("New shared photos"),
|
||||
"sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage(
|
||||
"Receive notifications when someone adds a photo to a shared album that you\'re a part of"),
|
||||
"sharedWith": m67,
|
||||
"sharedWith": m68,
|
||||
"sharedWithMe": MessageLookupByLibrary.simpleMessage("Shared with me"),
|
||||
"sharedWithYou":
|
||||
MessageLookupByLibrary.simpleMessage("Shared with you"),
|
||||
@@ -1639,11 +1641,11 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Sign out other devices"),
|
||||
"signUpTerms": MessageLookupByLibrary.simpleMessage(
|
||||
"I agree to the <u-terms>terms of service</u-terms> and <u-policy>privacy policy</u-policy>"),
|
||||
"singleFileDeleteFromDevice": m68,
|
||||
"singleFileDeleteFromDevice": m69,
|
||||
"singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage(
|
||||
"It will be deleted from all albums."),
|
||||
"singleFileInBothLocalAndRemote": m69,
|
||||
"singleFileInRemoteOnly": m70,
|
||||
"singleFileInBothLocalAndRemote": m70,
|
||||
"singleFileInRemoteOnly": m71,
|
||||
"skip": MessageLookupByLibrary.simpleMessage("Skip"),
|
||||
"social": MessageLookupByLibrary.simpleMessage("Social"),
|
||||
"someItemsAreInBothEnteAndYourDevice":
|
||||
@@ -1691,10 +1693,10 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"storageInGB": m1,
|
||||
"storageLimitExceeded":
|
||||
MessageLookupByLibrary.simpleMessage("Storage limit exceeded"),
|
||||
"storageUsageInfo": m71,
|
||||
"storageUsageInfo": m72,
|
||||
"strongStrength": MessageLookupByLibrary.simpleMessage("Strong"),
|
||||
"subAlreadyLinkedErrMessage": m72,
|
||||
"subWillBeCancelledOn": m73,
|
||||
"subAlreadyLinkedErrMessage": m73,
|
||||
"subWillBeCancelledOn": m74,
|
||||
"subscribe": MessageLookupByLibrary.simpleMessage("Subscribe"),
|
||||
"subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage(
|
||||
"You need an active paid subscription to enable sharing."),
|
||||
@@ -1711,7 +1713,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"suggestFeatures":
|
||||
MessageLookupByLibrary.simpleMessage("Suggest features"),
|
||||
"support": MessageLookupByLibrary.simpleMessage("Support"),
|
||||
"syncProgress": m74,
|
||||
"syncProgress": m75,
|
||||
"syncStopped": MessageLookupByLibrary.simpleMessage("Sync stopped"),
|
||||
"syncing": MessageLookupByLibrary.simpleMessage("Syncing..."),
|
||||
"systemTheme": MessageLookupByLibrary.simpleMessage("System"),
|
||||
@@ -1720,7 +1722,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Tap to enter code"),
|
||||
"tapToUnlock": MessageLookupByLibrary.simpleMessage("Tap to unlock"),
|
||||
"tapToUpload": MessageLookupByLibrary.simpleMessage("Tap to upload"),
|
||||
"tapToUploadIsIgnoredDue": m75,
|
||||
"tapToUploadIsIgnoredDue": m76,
|
||||
"tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage(
|
||||
"It looks like something went wrong. Please retry after some time. If the error persists, please contact our support team."),
|
||||
"terminate": MessageLookupByLibrary.simpleMessage("Terminate"),
|
||||
@@ -1743,7 +1745,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"theseItemsWillBeDeletedFromYourDevice":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"These items will be deleted from your device."),
|
||||
"theyAlsoGetXGb": m76,
|
||||
"theyAlsoGetXGb": m77,
|
||||
"theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage(
|
||||
"They will be deleted from all albums."),
|
||||
"thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1759,7 +1761,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"This email is already in use"),
|
||||
"thisImageHasNoExifData":
|
||||
MessageLookupByLibrary.simpleMessage("This image has no exif data"),
|
||||
"thisIsPersonVerificationId": m77,
|
||||
"thisIsPersonVerificationId": m78,
|
||||
"thisIsYourVerificationId": MessageLookupByLibrary.simpleMessage(
|
||||
"This is your Verification ID"),
|
||||
"thisWillLogYouOutOfTheFollowingDevice":
|
||||
@@ -1783,11 +1785,11 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"total": MessageLookupByLibrary.simpleMessage("total"),
|
||||
"totalSize": MessageLookupByLibrary.simpleMessage("Total size"),
|
||||
"trash": MessageLookupByLibrary.simpleMessage("Trash"),
|
||||
"trashDaysLeft": m78,
|
||||
"trashDaysLeft": m79,
|
||||
"trim": MessageLookupByLibrary.simpleMessage("Trim"),
|
||||
"trustedContacts":
|
||||
MessageLookupByLibrary.simpleMessage("Trusted contacts"),
|
||||
"trustedInviteBody": m79,
|
||||
"trustedInviteBody": m80,
|
||||
"tryAgain": MessageLookupByLibrary.simpleMessage("Try again"),
|
||||
"turnOnBackupForAutoUpload": MessageLookupByLibrary.simpleMessage(
|
||||
"Turn on backup to automatically upload files added to this device folder to Ente."),
|
||||
@@ -1805,7 +1807,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Two-factor authentication successfully reset"),
|
||||
"twofactorSetup":
|
||||
MessageLookupByLibrary.simpleMessage("Two-factor setup"),
|
||||
"typeOfGallerGallerytypeIsNotSupportedForRename": m80,
|
||||
"typeOfGallerGallerytypeIsNotSupportedForRename": m81,
|
||||
"unarchive": MessageLookupByLibrary.simpleMessage("Unarchive"),
|
||||
"unarchiveAlbum":
|
||||
MessageLookupByLibrary.simpleMessage("Unarchive album"),
|
||||
@@ -1828,10 +1830,10 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"updatingFolderSelection": MessageLookupByLibrary.simpleMessage(
|
||||
"Updating folder selection..."),
|
||||
"upgrade": MessageLookupByLibrary.simpleMessage("Upgrade"),
|
||||
"uploadIsIgnoredDueToIgnorereason": m81,
|
||||
"uploadIsIgnoredDueToIgnorereason": m82,
|
||||
"uploadingFilesToAlbum":
|
||||
MessageLookupByLibrary.simpleMessage("Uploading files to album..."),
|
||||
"uploadingMultipleMemories": m82,
|
||||
"uploadingMultipleMemories": m83,
|
||||
"uploadingSingleMemory":
|
||||
MessageLookupByLibrary.simpleMessage("Preserving 1 memory..."),
|
||||
"upto50OffUntil4thDec": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1849,7 +1851,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"useSelectedPhoto":
|
||||
MessageLookupByLibrary.simpleMessage("Use selected photo"),
|
||||
"usedSpace": MessageLookupByLibrary.simpleMessage("Used space"),
|
||||
"validTill": m83,
|
||||
"validTill": m84,
|
||||
"verificationFailedPleaseTryAgain":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Verification failed, please try again"),
|
||||
@@ -1857,7 +1859,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Verification ID"),
|
||||
"verify": MessageLookupByLibrary.simpleMessage("Verify"),
|
||||
"verifyEmail": MessageLookupByLibrary.simpleMessage("Verify email"),
|
||||
"verifyEmailID": m84,
|
||||
"verifyEmailID": m85,
|
||||
"verifyIDLabel": MessageLookupByLibrary.simpleMessage("Verify"),
|
||||
"verifyPasskey": MessageLookupByLibrary.simpleMessage("Verify passkey"),
|
||||
"verifyPassword":
|
||||
@@ -1881,7 +1883,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"viewRecoveryKey":
|
||||
MessageLookupByLibrary.simpleMessage("View recovery key"),
|
||||
"viewer": MessageLookupByLibrary.simpleMessage("Viewer"),
|
||||
"viewersSuccessfullyAdded": m85,
|
||||
"viewersSuccessfullyAdded": m86,
|
||||
"visitWebToManage": MessageLookupByLibrary.simpleMessage(
|
||||
"Please visit web.ente.io to manage your subscription"),
|
||||
"waitingForVerification":
|
||||
@@ -1902,7 +1904,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Trusted contact can help in recovering your data."),
|
||||
"yearShort": MessageLookupByLibrary.simpleMessage("yr"),
|
||||
"yearly": MessageLookupByLibrary.simpleMessage("Yearly"),
|
||||
"yearsAgo": m86,
|
||||
"yearsAgo": m87,
|
||||
"yes": MessageLookupByLibrary.simpleMessage("Yes"),
|
||||
"yesCancel": MessageLookupByLibrary.simpleMessage("Yes, cancel"),
|
||||
"yesConvertToViewer":
|
||||
@@ -1934,7 +1936,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"You cannot share with yourself"),
|
||||
"youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage(
|
||||
"You don\'t have any archived items."),
|
||||
"youHaveSuccessfullyFreedUp": m87,
|
||||
"youHaveSuccessfullyFreedUp": m88,
|
||||
"yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage(
|
||||
"Your account has been deleted"),
|
||||
"yourMap": MessageLookupByLibrary.simpleMessage("Your map"),
|
||||
|
||||
106
mobile/lib/generated/intl/messages_es.dart
generated
106
mobile/lib/generated/intl/messages_es.dart
generated
@@ -186,86 +186,86 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
static String m62(count) =>
|
||||
"${Intl.plural(count, one: '${count} resultado encontrado', other: '${count} resultados encontrados')}";
|
||||
|
||||
static String m88(snapshotLength, searchLength) =>
|
||||
static String m63(snapshotLength, searchLength) =>
|
||||
"La longitud de las secciones no coincide: ${snapshotLength} != ${searchLength}";
|
||||
|
||||
static String m4(count) => "${count} seleccionados";
|
||||
|
||||
static String m63(count, yourCount) =>
|
||||
static String m64(count, yourCount) =>
|
||||
"${count} seleccionados (${yourCount} tuyos)";
|
||||
|
||||
static String m64(verificationID) =>
|
||||
static String m65(verificationID) =>
|
||||
"Aquí está mi ID de verificación: ${verificationID} para ente.io.";
|
||||
|
||||
static String m5(verificationID) =>
|
||||
"Hola, ¿puedes confirmar que esta es tu ID de verificación ente.io: ${verificationID}?";
|
||||
|
||||
static String m65(referralCode, referralStorageInGB) =>
|
||||
static String m66(referralCode, referralStorageInGB) =>
|
||||
"Código de referido de Ente: ${referralCode} \n\nAñádelo en Ajustes → General → Referidos para obtener ${referralStorageInGB} GB gratis tras comprar un plan de pago.\n\nhttps://ente.io";
|
||||
|
||||
static String m66(numberOfPeople) =>
|
||||
static String m67(numberOfPeople) =>
|
||||
"${Intl.plural(numberOfPeople, zero: 'Compartir con personas específicas', one: 'Compartido con 1 persona', other: 'Compartido con ${numberOfPeople} personas')}";
|
||||
|
||||
static String m67(emailIDs) => "Compartido con ${emailIDs}";
|
||||
|
||||
static String m68(fileType) =>
|
||||
"Este ${fileType} se eliminará de tu dispositivo.";
|
||||
static String m68(emailIDs) => "Compartido con ${emailIDs}";
|
||||
|
||||
static String m69(fileType) =>
|
||||
"Este ${fileType} se eliminará de tu dispositivo.";
|
||||
|
||||
static String m70(fileType) =>
|
||||
"Este ${fileType} está tanto en Ente como en tu dispositivo.";
|
||||
|
||||
static String m70(fileType) => "Este ${fileType} será eliminado de Ente.";
|
||||
static String m71(fileType) => "Este ${fileType} será eliminado de Ente.";
|
||||
|
||||
static String m1(storageAmountInGB) => "${storageAmountInGB} GB";
|
||||
|
||||
static String m71(
|
||||
static String m72(
|
||||
usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) =>
|
||||
"${usedAmount} ${usedStorageUnit} de ${totalAmount} ${totalStorageUnit} usados";
|
||||
|
||||
static String m72(id) =>
|
||||
static String m73(id) =>
|
||||
"Tu ${id} ya está vinculada a otra cuenta de Ente.\nSi deseas utilizar tu ${id} con esta cuenta, ponte en contacto con nuestro servicio de asistencia\'\'";
|
||||
|
||||
static String m73(endDate) => "Tu suscripción se cancelará el ${endDate}";
|
||||
static String m74(endDate) => "Tu suscripción se cancelará el ${endDate}";
|
||||
|
||||
static String m74(completed, total) =>
|
||||
static String m75(completed, total) =>
|
||||
"${completed}/${total} recuerdos conservados";
|
||||
|
||||
static String m75(ignoreReason) =>
|
||||
static String m76(ignoreReason) =>
|
||||
"Toca para subir, la subida se está ignorando debido a ${ignoreReason}";
|
||||
|
||||
static String m76(storageAmountInGB) =>
|
||||
static String m77(storageAmountInGB) =>
|
||||
"También obtienen ${storageAmountInGB} GB";
|
||||
|
||||
static String m77(email) => "Este es el ID de verificación de ${email}";
|
||||
static String m78(email) => "Este es el ID de verificación de ${email}";
|
||||
|
||||
static String m78(count) =>
|
||||
static String m79(count) =>
|
||||
"${Intl.plural(count, zero: 'Pronto', one: '1 día', other: '${count} días')}";
|
||||
|
||||
static String m79(email) =>
|
||||
static String m80(email) =>
|
||||
"Has sido invitado a ser un contacto legado por ${email}.";
|
||||
|
||||
static String m80(galleryType) =>
|
||||
static String m81(galleryType) =>
|
||||
"El tipo de galería ${galleryType} no es compatible con el renombrado";
|
||||
|
||||
static String m81(ignoreReason) =>
|
||||
static String m82(ignoreReason) =>
|
||||
"La subida se ignoró debido a ${ignoreReason}";
|
||||
|
||||
static String m82(count) => "Preservando ${count} memorias...";
|
||||
static String m83(count) => "Preservando ${count} memorias...";
|
||||
|
||||
static String m83(endDate) => "Válido hasta ${endDate}";
|
||||
static String m84(endDate) => "Válido hasta ${endDate}";
|
||||
|
||||
static String m84(email) => "Verificar ${email}";
|
||||
static String m85(email) => "Verificar ${email}";
|
||||
|
||||
static String m85(count) =>
|
||||
static String m86(count) =>
|
||||
"${Intl.plural(count, zero: '0 espectadores añadidos', one: '1 espectador añadido', other: '${count} espectadores añadidos')}";
|
||||
|
||||
static String m2(email) =>
|
||||
"Hemos enviado un correo a <green>${email}</green>";
|
||||
|
||||
static String m86(count) =>
|
||||
static String m87(count) =>
|
||||
"${Intl.plural(count, one: 'Hace ${count} año', other: 'Hace ${count} años')}";
|
||||
|
||||
static String m87(storageSaved) => "¡Has liberado ${storageSaved} con éxito!";
|
||||
static String m88(storageSaved) => "¡Has liberado ${storageSaved} con éxito!";
|
||||
|
||||
final messages = _notInlinedMessages(_notInlinedMessages);
|
||||
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
|
||||
@@ -1619,7 +1619,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"searchPersonsEmptySection": MessageLookupByLibrary.simpleMessage(
|
||||
"Las personas se mostrarán aquí cuando se complete el procesado y la sincronización"),
|
||||
"searchResultCount": m62,
|
||||
"searchSectionsLengthMismatch": m88,
|
||||
"searchSectionsLengthMismatch": m63,
|
||||
"security": MessageLookupByLibrary.simpleMessage("Seguridad"),
|
||||
"seePublicAlbumLinksInApp": MessageLookupByLibrary.simpleMessage(
|
||||
"Ver enlaces del álbum público en la aplicación"),
|
||||
@@ -1656,7 +1656,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Los archivos seleccionados serán eliminados de todos los álbumes y movidos a la papelera."),
|
||||
"selectedPhotos": m4,
|
||||
"selectedPhotosWithYours": m63,
|
||||
"selectedPhotosWithYours": m64,
|
||||
"send": MessageLookupByLibrary.simpleMessage("Enviar"),
|
||||
"sendEmail":
|
||||
MessageLookupByLibrary.simpleMessage("Enviar correo electrónico"),
|
||||
@@ -1690,16 +1690,16 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"shareAnAlbumNow":
|
||||
MessageLookupByLibrary.simpleMessage("Compartir un álbum ahora"),
|
||||
"shareLink": MessageLookupByLibrary.simpleMessage("Compartir enlace"),
|
||||
"shareMyVerificationID": m64,
|
||||
"shareMyVerificationID": m65,
|
||||
"shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage(
|
||||
"Comparte sólo con la gente que quieres"),
|
||||
"shareTextConfirmOthersVerificationID": m5,
|
||||
"shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage(
|
||||
"Descarga Ente para que podamos compartir fácilmente fotos y videos en calidad original.\n\nhttps://ente.io"),
|
||||
"shareTextReferralCode": m65,
|
||||
"shareTextReferralCode": m66,
|
||||
"shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage(
|
||||
"Compartir con usuarios fuera de Ente"),
|
||||
"shareWithPeopleSectionTitle": m66,
|
||||
"shareWithPeopleSectionTitle": m67,
|
||||
"shareYourFirstAlbum":
|
||||
MessageLookupByLibrary.simpleMessage("Comparte tu primer álbum"),
|
||||
"sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1711,7 +1711,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Nuevas fotos compartidas"),
|
||||
"sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage(
|
||||
"Recibir notificaciones cuando alguien agrega una foto a un álbum compartido contigo"),
|
||||
"sharedWith": m67,
|
||||
"sharedWith": m68,
|
||||
"sharedWithMe":
|
||||
MessageLookupByLibrary.simpleMessage("Compartido conmigo"),
|
||||
"sharedWithYou":
|
||||
@@ -1728,11 +1728,11 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Cerrar la sesión de otros dispositivos"),
|
||||
"signUpTerms": MessageLookupByLibrary.simpleMessage(
|
||||
"Estoy de acuerdo con los <u-terms>términos del servicio</u-terms> y <u-policy> la política de privacidad</u-policy>"),
|
||||
"singleFileDeleteFromDevice": m68,
|
||||
"singleFileDeleteFromDevice": m69,
|
||||
"singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage(
|
||||
"Se borrará de todos los álbumes."),
|
||||
"singleFileInBothLocalAndRemote": m69,
|
||||
"singleFileInRemoteOnly": m70,
|
||||
"singleFileInBothLocalAndRemote": m70,
|
||||
"singleFileInRemoteOnly": m71,
|
||||
"skip": MessageLookupByLibrary.simpleMessage("Omitir"),
|
||||
"social": MessageLookupByLibrary.simpleMessage("Social"),
|
||||
"someItemsAreInBothEnteAndYourDevice":
|
||||
@@ -1783,10 +1783,10 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"storageInGB": m1,
|
||||
"storageLimitExceeded":
|
||||
MessageLookupByLibrary.simpleMessage("Límite de datos excedido"),
|
||||
"storageUsageInfo": m71,
|
||||
"storageUsageInfo": m72,
|
||||
"strongStrength": MessageLookupByLibrary.simpleMessage("Segura"),
|
||||
"subAlreadyLinkedErrMessage": m72,
|
||||
"subWillBeCancelledOn": m73,
|
||||
"subAlreadyLinkedErrMessage": m73,
|
||||
"subWillBeCancelledOn": m74,
|
||||
"subscribe": MessageLookupByLibrary.simpleMessage("Suscribirse"),
|
||||
"subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage(
|
||||
"Necesitas una suscripción activa de pago para habilitar el compartir."),
|
||||
@@ -1803,7 +1803,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"suggestFeatures":
|
||||
MessageLookupByLibrary.simpleMessage("Sugerir una característica"),
|
||||
"support": MessageLookupByLibrary.simpleMessage("Soporte"),
|
||||
"syncProgress": m74,
|
||||
"syncProgress": m75,
|
||||
"syncStopped":
|
||||
MessageLookupByLibrary.simpleMessage("Sincronización detenida"),
|
||||
"syncing": MessageLookupByLibrary.simpleMessage("Sincronizando..."),
|
||||
@@ -1814,7 +1814,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"tapToUnlock":
|
||||
MessageLookupByLibrary.simpleMessage("Toca para desbloquear"),
|
||||
"tapToUpload": MessageLookupByLibrary.simpleMessage("Toca para subir"),
|
||||
"tapToUploadIsIgnoredDue": m75,
|
||||
"tapToUploadIsIgnoredDue": m76,
|
||||
"tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage(
|
||||
"Parece que algo salió mal. Por favor, vuelve a intentarlo después de algún tiempo. Si el error persiste, ponte en contacto con nuestro equipo de soporte."),
|
||||
"terminate": MessageLookupByLibrary.simpleMessage("Terminar"),
|
||||
@@ -1838,7 +1838,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"theseItemsWillBeDeletedFromYourDevice":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Estos elementos se eliminarán de tu dispositivo."),
|
||||
"theyAlsoGetXGb": m76,
|
||||
"theyAlsoGetXGb": m77,
|
||||
"theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage(
|
||||
"Se borrarán de todos los álbumes."),
|
||||
"thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1854,7 +1854,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Este correo electrónico ya está en uso"),
|
||||
"thisImageHasNoExifData": MessageLookupByLibrary.simpleMessage(
|
||||
"Esta imagen no tiene datos exif"),
|
||||
"thisIsPersonVerificationId": m77,
|
||||
"thisIsPersonVerificationId": m78,
|
||||
"thisIsYourVerificationId": MessageLookupByLibrary.simpleMessage(
|
||||
"Esta es tu ID de verificación"),
|
||||
"thisWillLogYouOutOfTheFollowingDevice":
|
||||
@@ -1878,11 +1878,11 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"total": MessageLookupByLibrary.simpleMessage("total"),
|
||||
"totalSize": MessageLookupByLibrary.simpleMessage("Tamaño total"),
|
||||
"trash": MessageLookupByLibrary.simpleMessage("Papelera"),
|
||||
"trashDaysLeft": m78,
|
||||
"trashDaysLeft": m79,
|
||||
"trim": MessageLookupByLibrary.simpleMessage("Ajustar duración"),
|
||||
"trustedContacts":
|
||||
MessageLookupByLibrary.simpleMessage("Contactos de confianza"),
|
||||
"trustedInviteBody": m79,
|
||||
"trustedInviteBody": m80,
|
||||
"tryAgain": MessageLookupByLibrary.simpleMessage("Inténtalo de nuevo"),
|
||||
"turnOnBackupForAutoUpload": MessageLookupByLibrary.simpleMessage(
|
||||
"Activar la copia de seguridad para subir automáticamente archivos añadidos a la carpeta de este dispositivo a Ente."),
|
||||
@@ -1900,7 +1900,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Autenticación de doble factor restablecida con éxito"),
|
||||
"twofactorSetup":
|
||||
MessageLookupByLibrary.simpleMessage("Configuración de dos pasos"),
|
||||
"typeOfGallerGallerytypeIsNotSupportedForRename": m80,
|
||||
"typeOfGallerGallerytypeIsNotSupportedForRename": m81,
|
||||
"unarchive": MessageLookupByLibrary.simpleMessage("Desarchivar"),
|
||||
"unarchiveAlbum":
|
||||
MessageLookupByLibrary.simpleMessage("Desarchivar álbum"),
|
||||
@@ -1925,10 +1925,10 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"updatingFolderSelection": MessageLookupByLibrary.simpleMessage(
|
||||
"Actualizando la selección de carpeta..."),
|
||||
"upgrade": MessageLookupByLibrary.simpleMessage("Mejorar"),
|
||||
"uploadIsIgnoredDueToIgnorereason": m81,
|
||||
"uploadIsIgnoredDueToIgnorereason": m82,
|
||||
"uploadingFilesToAlbum": MessageLookupByLibrary.simpleMessage(
|
||||
"Subiendo archivos al álbum..."),
|
||||
"uploadingMultipleMemories": m82,
|
||||
"uploadingMultipleMemories": m83,
|
||||
"uploadingSingleMemory":
|
||||
MessageLookupByLibrary.simpleMessage("Preservando 1 memoria..."),
|
||||
"upto50OffUntil4thDec": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1947,7 +1947,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"useSelectedPhoto":
|
||||
MessageLookupByLibrary.simpleMessage("Usar foto seleccionada"),
|
||||
"usedSpace": MessageLookupByLibrary.simpleMessage("Espacio usado"),
|
||||
"validTill": m83,
|
||||
"validTill": m84,
|
||||
"verificationFailedPleaseTryAgain":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Verificación fallida, por favor inténtalo de nuevo"),
|
||||
@@ -1956,7 +1956,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"verify": MessageLookupByLibrary.simpleMessage("Verificar"),
|
||||
"verifyEmail": MessageLookupByLibrary.simpleMessage(
|
||||
"Verificar correo electrónico"),
|
||||
"verifyEmailID": m84,
|
||||
"verifyEmailID": m85,
|
||||
"verifyIDLabel": MessageLookupByLibrary.simpleMessage("Verificar"),
|
||||
"verifyPasskey":
|
||||
MessageLookupByLibrary.simpleMessage("Verificar clave de acceso"),
|
||||
@@ -1984,7 +1984,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"viewRecoveryKey":
|
||||
MessageLookupByLibrary.simpleMessage("Ver código de recuperación"),
|
||||
"viewer": MessageLookupByLibrary.simpleMessage("Espectador"),
|
||||
"viewersSuccessfullyAdded": m85,
|
||||
"viewersSuccessfullyAdded": m86,
|
||||
"visitWebToManage": MessageLookupByLibrary.simpleMessage(
|
||||
"Por favor, visita web.ente.io para administrar tu suscripción"),
|
||||
"waitingForVerification":
|
||||
@@ -2006,7 +2006,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Un contacto de confianza puede ayudar a recuperar sus datos."),
|
||||
"yearShort": MessageLookupByLibrary.simpleMessage("año"),
|
||||
"yearly": MessageLookupByLibrary.simpleMessage("Anualmente"),
|
||||
"yearsAgo": m86,
|
||||
"yearsAgo": m87,
|
||||
"yes": MessageLookupByLibrary.simpleMessage("Sí"),
|
||||
"yesCancel": MessageLookupByLibrary.simpleMessage("Sí, cancelar"),
|
||||
"yesConvertToViewer":
|
||||
@@ -2038,7 +2038,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"No puedes compartir contigo mismo"),
|
||||
"youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage(
|
||||
"No tienes ningún elemento archivado."),
|
||||
"youHaveSuccessfullyFreedUp": m87,
|
||||
"youHaveSuccessfullyFreedUp": m88,
|
||||
"yourAccountHasBeenDeleted":
|
||||
MessageLookupByLibrary.simpleMessage("Tu cuenta ha sido eliminada"),
|
||||
"yourMap": MessageLookupByLibrary.simpleMessage("Tu mapa"),
|
||||
|
||||
8
mobile/lib/generated/intl/messages_fa.dart
generated
8
mobile/lib/generated/intl/messages_fa.dart
generated
@@ -33,11 +33,11 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
|
||||
static String m55(storeName) => "به ما در ${storeName} امتیاز دهید";
|
||||
|
||||
static String m71(
|
||||
static String m72(
|
||||
usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) =>
|
||||
"${usedAmount} ${usedStorageUnit} از ${totalAmount} ${totalStorageUnit} استفاده شده";
|
||||
|
||||
static String m84(email) => "تایید ${email}";
|
||||
static String m85(email) => "تایید ${email}";
|
||||
|
||||
static String m2(email) =>
|
||||
"ما یک ایمیل به <green>${email}</green> ارسال کردهایم";
|
||||
@@ -368,7 +368,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"storageBreakupFamily":
|
||||
MessageLookupByLibrary.simpleMessage("خانوادگی"),
|
||||
"storageBreakupYou": MessageLookupByLibrary.simpleMessage("شما"),
|
||||
"storageUsageInfo": m71,
|
||||
"storageUsageInfo": m72,
|
||||
"strongStrength": MessageLookupByLibrary.simpleMessage("قوی"),
|
||||
"support": MessageLookupByLibrary.simpleMessage("پشتیبانی"),
|
||||
"systemTheme": MessageLookupByLibrary.simpleMessage("سیستم"),
|
||||
@@ -409,7 +409,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"از کلید بازیابی استفاده کنید"),
|
||||
"verify": MessageLookupByLibrary.simpleMessage("تایید"),
|
||||
"verifyEmail": MessageLookupByLibrary.simpleMessage("تایید ایمیل"),
|
||||
"verifyEmailID": m84,
|
||||
"verifyEmailID": m85,
|
||||
"verifyIDLabel": MessageLookupByLibrary.simpleMessage("تایید"),
|
||||
"verifyPassword":
|
||||
MessageLookupByLibrary.simpleMessage("تایید رمز عبور"),
|
||||
|
||||
106
mobile/lib/generated/intl/messages_fr.dart
generated
106
mobile/lib/generated/intl/messages_fr.dart
generated
@@ -185,86 +185,86 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
static String m62(count) =>
|
||||
"${Intl.plural(count, one: '${count} résultat trouvé', other: '${count} résultats trouvés')}";
|
||||
|
||||
static String m88(snapshotLength, searchLength) =>
|
||||
static String m63(snapshotLength, searchLength) =>
|
||||
"Incompatibilité de longueur des sections : ${snapshotLength} != ${searchLength}";
|
||||
|
||||
static String m4(count) => "${count} sélectionné(s)";
|
||||
|
||||
static String m63(count, yourCount) =>
|
||||
static String m64(count, yourCount) =>
|
||||
"${count} sélectionné(s) (${yourCount} à vous)";
|
||||
|
||||
static String m64(verificationID) =>
|
||||
static String m65(verificationID) =>
|
||||
"Voici mon ID de vérification : ${verificationID} pour ente.io.";
|
||||
|
||||
static String m5(verificationID) =>
|
||||
"Hé, pouvez-vous confirmer qu\'il s\'agit de votre ID de vérification ente.io : ${verificationID}";
|
||||
|
||||
static String m65(referralCode, referralStorageInGB) =>
|
||||
static String m66(referralCode, referralStorageInGB) =>
|
||||
"Code de parrainage Ente : ${referralCode} \n\nValidez le dans Paramètres → Général → Références pour obtenir ${referralStorageInGB} Go gratuitement après votre inscription à un plan payant\n\nhttps://ente.io";
|
||||
|
||||
static String m66(numberOfPeople) =>
|
||||
static String m67(numberOfPeople) =>
|
||||
"${Intl.plural(numberOfPeople, zero: 'Partagez avec des personnes spécifiques', one: 'Partagé avec 1 personne', other: 'Partagé avec ${numberOfPeople} personnes')}";
|
||||
|
||||
static String m67(emailIDs) => "Partagé avec ${emailIDs}";
|
||||
|
||||
static String m68(fileType) =>
|
||||
"Elle ${fileType} sera supprimée de votre appareil.";
|
||||
static String m68(emailIDs) => "Partagé avec ${emailIDs}";
|
||||
|
||||
static String m69(fileType) =>
|
||||
"Elle ${fileType} sera supprimée de votre appareil.";
|
||||
|
||||
static String m70(fileType) =>
|
||||
"Cette ${fileType} est à la fois sur ente et sur votre appareil.";
|
||||
|
||||
static String m70(fileType) => "Cette ${fileType} sera supprimée de l\'Ente.";
|
||||
static String m71(fileType) => "Cette ${fileType} sera supprimée de l\'Ente.";
|
||||
|
||||
static String m1(storageAmountInGB) => "${storageAmountInGB} Go";
|
||||
|
||||
static String m71(
|
||||
static String m72(
|
||||
usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) =>
|
||||
"${usedAmount} ${usedStorageUnit} sur ${totalAmount} ${totalStorageUnit} utilisés";
|
||||
|
||||
static String m72(id) =>
|
||||
static String m73(id) =>
|
||||
"Votre ${id} est déjà lié à un autre compte Ente.\nSi vous souhaitez utiliser votre ${id} avec ce compte, veuillez contacter notre support";
|
||||
|
||||
static String m73(endDate) => "Votre abonnement sera annulé le ${endDate}";
|
||||
static String m74(endDate) => "Votre abonnement sera annulé le ${endDate}";
|
||||
|
||||
static String m74(completed, total) =>
|
||||
static String m75(completed, total) =>
|
||||
"${completed}/${total} souvenirs conservés";
|
||||
|
||||
static String m75(ignoreReason) =>
|
||||
static String m76(ignoreReason) =>
|
||||
"Appuyer pour envoyer, l\'envoi est actuellement ignoré en raison de ${ignoreReason}";
|
||||
|
||||
static String m76(storageAmountInGB) =>
|
||||
static String m77(storageAmountInGB) =>
|
||||
"Ils obtiennent aussi ${storageAmountInGB} Go";
|
||||
|
||||
static String m77(email) => "Ceci est l\'ID de vérification de ${email}";
|
||||
static String m78(email) => "Ceci est l\'ID de vérification de ${email}";
|
||||
|
||||
static String m78(count) =>
|
||||
static String m79(count) =>
|
||||
"${Intl.plural(count, zero: 'Bientôt', one: '1 jour', other: '${count} jours')}";
|
||||
|
||||
static String m79(email) =>
|
||||
static String m80(email) =>
|
||||
"Vous avez été invité(e) à être un(e) héritier(e) par ${email}.";
|
||||
|
||||
static String m80(galleryType) =>
|
||||
static String m81(galleryType) =>
|
||||
"Les galeries de type \'${galleryType}\' ne peuvent être renommées";
|
||||
|
||||
static String m81(ignoreReason) =>
|
||||
static String m82(ignoreReason) =>
|
||||
"L\'envoi est ignoré en raison de ${ignoreReason}";
|
||||
|
||||
static String m82(count) => "Sauvegarde ${count} souvenirs...";
|
||||
static String m83(count) => "Sauvegarde ${count} souvenirs...";
|
||||
|
||||
static String m83(endDate) => "Valable jusqu\'au ${endDate}";
|
||||
static String m84(endDate) => "Valable jusqu\'au ${endDate}";
|
||||
|
||||
static String m84(email) => "Vérifier ${email}";
|
||||
static String m85(email) => "Vérifier ${email}";
|
||||
|
||||
static String m85(count) =>
|
||||
static String m86(count) =>
|
||||
"${Intl.plural(count, zero: '0 observateur ajouté', one: '1 observateur ajouté', other: '${count} observateurs ajoutés')}";
|
||||
|
||||
static String m2(email) =>
|
||||
"Nous avons envoyé un e-mail à <green>${email}</green>";
|
||||
|
||||
static String m86(count) =>
|
||||
static String m87(count) =>
|
||||
"${Intl.plural(count, one: 'il y a ${count} an', other: 'il y a ${count} ans')}";
|
||||
|
||||
static String m87(storageSaved) =>
|
||||
static String m88(storageSaved) =>
|
||||
"Vous avez libéré ${storageSaved} avec succès !";
|
||||
|
||||
final messages = _notInlinedMessages(_notInlinedMessages);
|
||||
@@ -1642,7 +1642,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"searchPersonsEmptySection": MessageLookupByLibrary.simpleMessage(
|
||||
"Les personnes seront affichées ici une fois le traitement terminé"),
|
||||
"searchResultCount": m62,
|
||||
"searchSectionsLengthMismatch": m88,
|
||||
"searchSectionsLengthMismatch": m63,
|
||||
"security": MessageLookupByLibrary.simpleMessage("Sécurité"),
|
||||
"seePublicAlbumLinksInApp": MessageLookupByLibrary.simpleMessage(
|
||||
"Ouvrir les liens des albums publics dans l\'application"),
|
||||
@@ -1679,7 +1679,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Les éléments sélectionnés seront supprimés de tous les albums et déplacés dans la corbeille."),
|
||||
"selectedPhotos": m4,
|
||||
"selectedPhotosWithYours": m63,
|
||||
"selectedPhotosWithYours": m64,
|
||||
"send": MessageLookupByLibrary.simpleMessage("Envoyer"),
|
||||
"sendEmail": MessageLookupByLibrary.simpleMessage("Envoyer un e-mail"),
|
||||
"sendInvite":
|
||||
@@ -1713,16 +1713,16 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"shareAnAlbumNow": MessageLookupByLibrary.simpleMessage(
|
||||
"Partagez un album maintenant"),
|
||||
"shareLink": MessageLookupByLibrary.simpleMessage("Partager le lien"),
|
||||
"shareMyVerificationID": m64,
|
||||
"shareMyVerificationID": m65,
|
||||
"shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage(
|
||||
"Partagez uniquement avec les personnes que vous souhaitez"),
|
||||
"shareTextConfirmOthersVerificationID": m5,
|
||||
"shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage(
|
||||
"Téléchargez Ente pour pouvoir facilement partager des photos et vidéos en qualité originale\n\nhttps://ente.io"),
|
||||
"shareTextReferralCode": m65,
|
||||
"shareTextReferralCode": m66,
|
||||
"shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage(
|
||||
"Partager avec des utilisateurs non-Ente"),
|
||||
"shareWithPeopleSectionTitle": m66,
|
||||
"shareWithPeopleSectionTitle": m67,
|
||||
"shareYourFirstAlbum": MessageLookupByLibrary.simpleMessage(
|
||||
"Partagez votre premier album"),
|
||||
"sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1733,7 +1733,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Nouvelles photos partagées"),
|
||||
"sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage(
|
||||
"Recevoir des notifications quand quelqu\'un ajoute une photo à un album partagé dont vous faites partie"),
|
||||
"sharedWith": m67,
|
||||
"sharedWith": m68,
|
||||
"sharedWithMe":
|
||||
MessageLookupByLibrary.simpleMessage("Partagés avec moi"),
|
||||
"sharedWithYou":
|
||||
@@ -1751,11 +1751,11 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Déconnecter les autres appareils"),
|
||||
"signUpTerms": MessageLookupByLibrary.simpleMessage(
|
||||
"J\'accepte les <u-terms>conditions d\'utilisation</u-terms> et la <u-policy>politique de confidentialité</u-policy>"),
|
||||
"singleFileDeleteFromDevice": m68,
|
||||
"singleFileDeleteFromDevice": m69,
|
||||
"singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage(
|
||||
"Elle sera supprimée de tous les albums."),
|
||||
"singleFileInBothLocalAndRemote": m69,
|
||||
"singleFileInRemoteOnly": m70,
|
||||
"singleFileInBothLocalAndRemote": m70,
|
||||
"singleFileInRemoteOnly": m71,
|
||||
"skip": MessageLookupByLibrary.simpleMessage("Ignorer"),
|
||||
"social": MessageLookupByLibrary.simpleMessage("Réseaux sociaux"),
|
||||
"someItemsAreInBothEnteAndYourDevice":
|
||||
@@ -1806,10 +1806,10 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"storageInGB": m1,
|
||||
"storageLimitExceeded":
|
||||
MessageLookupByLibrary.simpleMessage("Limite de stockage atteinte"),
|
||||
"storageUsageInfo": m71,
|
||||
"storageUsageInfo": m72,
|
||||
"strongStrength": MessageLookupByLibrary.simpleMessage("Forte"),
|
||||
"subAlreadyLinkedErrMessage": m72,
|
||||
"subWillBeCancelledOn": m73,
|
||||
"subAlreadyLinkedErrMessage": m73,
|
||||
"subWillBeCancelledOn": m74,
|
||||
"subscribe": MessageLookupByLibrary.simpleMessage("S\'abonner"),
|
||||
"subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage(
|
||||
"Vous avez besoin d\'un abonnement payant actif pour activer le partage."),
|
||||
@@ -1826,7 +1826,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"suggestFeatures": MessageLookupByLibrary.simpleMessage(
|
||||
"Suggérer des fonctionnalités"),
|
||||
"support": MessageLookupByLibrary.simpleMessage("Support"),
|
||||
"syncProgress": m74,
|
||||
"syncProgress": m75,
|
||||
"syncStopped":
|
||||
MessageLookupByLibrary.simpleMessage("Synchronisation arrêtée ?"),
|
||||
"syncing": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1839,7 +1839,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Appuyer pour déverrouiller"),
|
||||
"tapToUpload":
|
||||
MessageLookupByLibrary.simpleMessage("Appuyer pour envoyer"),
|
||||
"tapToUploadIsIgnoredDue": m75,
|
||||
"tapToUploadIsIgnoredDue": m76,
|
||||
"tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage(
|
||||
"Il semble qu\'une erreur s\'est produite. Veuillez réessayer après un certain temps. Si l\'erreur persiste, veuillez contacter notre équipe d\'assistance."),
|
||||
"terminate": MessageLookupByLibrary.simpleMessage("Se déconnecter"),
|
||||
@@ -1863,7 +1863,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"theseItemsWillBeDeletedFromYourDevice":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Ces éléments seront supprimés de votre appareil."),
|
||||
"theyAlsoGetXGb": m76,
|
||||
"theyAlsoGetXGb": m77,
|
||||
"theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage(
|
||||
"Ils seront supprimés de tous les albums."),
|
||||
"thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1879,7 +1879,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Cette adresse mail est déjà utilisé"),
|
||||
"thisImageHasNoExifData": MessageLookupByLibrary.simpleMessage(
|
||||
"Cette image n\'a pas de données exif"),
|
||||
"thisIsPersonVerificationId": m77,
|
||||
"thisIsPersonVerificationId": m78,
|
||||
"thisIsYourVerificationId": MessageLookupByLibrary.simpleMessage(
|
||||
"Ceci est votre ID de vérification"),
|
||||
"thisWillLogYouOutOfTheFollowingDevice":
|
||||
@@ -1903,11 +1903,11 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"total": MessageLookupByLibrary.simpleMessage("total"),
|
||||
"totalSize": MessageLookupByLibrary.simpleMessage("Taille totale"),
|
||||
"trash": MessageLookupByLibrary.simpleMessage("Corbeille"),
|
||||
"trashDaysLeft": m78,
|
||||
"trashDaysLeft": m79,
|
||||
"trim": MessageLookupByLibrary.simpleMessage("Recadrer"),
|
||||
"trustedContacts":
|
||||
MessageLookupByLibrary.simpleMessage("Contacts de confiance"),
|
||||
"trustedInviteBody": m79,
|
||||
"trustedInviteBody": m80,
|
||||
"tryAgain": MessageLookupByLibrary.simpleMessage("Réessayer"),
|
||||
"turnOnBackupForAutoUpload": MessageLookupByLibrary.simpleMessage(
|
||||
"Activez la sauvegarde pour charger automatiquement sur Ente les fichiers ajoutés à ce dossier de l\'appareil."),
|
||||
@@ -1927,7 +1927,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"L\'authentification à deux facteurs a été réinitialisée avec succès "),
|
||||
"twofactorSetup": MessageLookupByLibrary.simpleMessage(
|
||||
"Configuration de l\'authentification à deux facteurs"),
|
||||
"typeOfGallerGallerytypeIsNotSupportedForRename": m80,
|
||||
"typeOfGallerGallerytypeIsNotSupportedForRename": m81,
|
||||
"unarchive": MessageLookupByLibrary.simpleMessage("Désarchiver"),
|
||||
"unarchiveAlbum":
|
||||
MessageLookupByLibrary.simpleMessage("Désarchiver l\'album"),
|
||||
@@ -1955,10 +1955,10 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"updatingFolderSelection": MessageLookupByLibrary.simpleMessage(
|
||||
"Mise à jour de la sélection du dossier..."),
|
||||
"upgrade": MessageLookupByLibrary.simpleMessage("Améliorer"),
|
||||
"uploadIsIgnoredDueToIgnorereason": m81,
|
||||
"uploadIsIgnoredDueToIgnorereason": m82,
|
||||
"uploadingFilesToAlbum": MessageLookupByLibrary.simpleMessage(
|
||||
"Envoi des fichiers vers l\'album..."),
|
||||
"uploadingMultipleMemories": m82,
|
||||
"uploadingMultipleMemories": m83,
|
||||
"uploadingSingleMemory":
|
||||
MessageLookupByLibrary.simpleMessage("Sauvegarde 1 souvenir..."),
|
||||
"upto50OffUntil4thDec": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1976,7 +1976,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"useSelectedPhoto": MessageLookupByLibrary.simpleMessage(
|
||||
"Utiliser la photo sélectionnée"),
|
||||
"usedSpace": MessageLookupByLibrary.simpleMessage("Stockage utilisé"),
|
||||
"validTill": m83,
|
||||
"validTill": m84,
|
||||
"verificationFailedPleaseTryAgain":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"La vérification a échouée, veuillez réessayer"),
|
||||
@@ -1985,7 +1985,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"verify": MessageLookupByLibrary.simpleMessage("Vérifier"),
|
||||
"verifyEmail":
|
||||
MessageLookupByLibrary.simpleMessage("Vérifier l\'e-mail"),
|
||||
"verifyEmailID": m84,
|
||||
"verifyEmailID": m85,
|
||||
"verifyIDLabel": MessageLookupByLibrary.simpleMessage("Vérifier"),
|
||||
"verifyPasskey":
|
||||
MessageLookupByLibrary.simpleMessage("Vérifier le code d\'accès"),
|
||||
@@ -2014,7 +2014,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"viewRecoveryKey":
|
||||
MessageLookupByLibrary.simpleMessage("Voir la clé de récupération"),
|
||||
"viewer": MessageLookupByLibrary.simpleMessage("Observateur"),
|
||||
"viewersSuccessfullyAdded": m85,
|
||||
"viewersSuccessfullyAdded": m86,
|
||||
"visitWebToManage": MessageLookupByLibrary.simpleMessage(
|
||||
"Veuillez visiter web.ente.io pour gérer votre abonnement"),
|
||||
"waitingForVerification": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -2035,7 +2035,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Un contact de confiance peut vous aider à récupérer vos données."),
|
||||
"yearShort": MessageLookupByLibrary.simpleMessage("an"),
|
||||
"yearly": MessageLookupByLibrary.simpleMessage("Annuel"),
|
||||
"yearsAgo": m86,
|
||||
"yearsAgo": m87,
|
||||
"yes": MessageLookupByLibrary.simpleMessage("Oui"),
|
||||
"yesCancel": MessageLookupByLibrary.simpleMessage("Oui, annuler"),
|
||||
"yesConvertToViewer": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -2068,7 +2068,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Vous ne pouvez pas partager avec vous-même"),
|
||||
"youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage(
|
||||
"Vous n\'avez aucun élément archivé."),
|
||||
"youHaveSuccessfullyFreedUp": m87,
|
||||
"youHaveSuccessfullyFreedUp": m88,
|
||||
"yourAccountHasBeenDeleted":
|
||||
MessageLookupByLibrary.simpleMessage("Votre compte a été supprimé"),
|
||||
"yourMap": MessageLookupByLibrary.simpleMessage("Votre carte"),
|
||||
|
||||
48
mobile/lib/generated/intl/messages_he.dart
generated
48
mobile/lib/generated/intl/messages_he.dart
generated
@@ -94,39 +94,39 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
|
||||
static String m4(count) => "${count} נבחרו";
|
||||
|
||||
static String m63(count, yourCount) => "${count} נבחרו (${yourCount} שלך)";
|
||||
static String m64(count, yourCount) => "${count} נבחרו (${yourCount} שלך)";
|
||||
|
||||
static String m64(verificationID) =>
|
||||
static String m65(verificationID) =>
|
||||
"הנה מזהה האימות שלי: ${verificationID} עבור ente.io.";
|
||||
|
||||
static String m5(verificationID) =>
|
||||
"היי, תוכל לוודא שזה מזהה האימות שלך של ente.io: ${verificationID}";
|
||||
|
||||
static String m66(numberOfPeople) =>
|
||||
static String m67(numberOfPeople) =>
|
||||
"${Intl.plural(numberOfPeople, zero: 'שתף עם אנשים ספציפיים', one: 'שותף עם איש 1', two: 'שותף עם 2 אנשים', other: 'שותף עם ${numberOfPeople} אנשים')}";
|
||||
|
||||
static String m67(emailIDs) => "הושתף ע\"י ${emailIDs}";
|
||||
static String m68(emailIDs) => "הושתף ע\"י ${emailIDs}";
|
||||
|
||||
static String m68(fileType) => "${fileType} יימחק מהמכשיר שלך.";
|
||||
static String m69(fileType) => "${fileType} יימחק מהמכשיר שלך.";
|
||||
|
||||
static String m1(storageAmountInGB) => "${storageAmountInGB} GB";
|
||||
|
||||
static String m73(endDate) => "המנוי שלך יבוטל ב-${endDate}";
|
||||
static String m74(endDate) => "המנוי שלך יבוטל ב-${endDate}";
|
||||
|
||||
static String m74(completed, total) => "${completed}/${total} זכרונות נשמרו";
|
||||
static String m75(completed, total) => "${completed}/${total} זכרונות נשמרו";
|
||||
|
||||
static String m76(storageAmountInGB) => "הם גם יקבלו ${storageAmountInGB} GB";
|
||||
static String m77(storageAmountInGB) => "הם גם יקבלו ${storageAmountInGB} GB";
|
||||
|
||||
static String m77(email) => "זה מזהה האימות של ${email}";
|
||||
static String m78(email) => "זה מזהה האימות של ${email}";
|
||||
|
||||
static String m84(email) => "אמת ${email}";
|
||||
static String m85(email) => "אמת ${email}";
|
||||
|
||||
static String m2(email) => "שלחנו דוא\"ל ל<green>${email}</green>";
|
||||
|
||||
static String m86(count) =>
|
||||
static String m87(count) =>
|
||||
"${Intl.plural(count, one: 'לפני ${count} שנה', two: 'לפני ${count} שנים', many: 'לפני ${count} שנים', other: 'לפני ${count} שנים')}";
|
||||
|
||||
static String m87(storageSaved) => "הצלחת לפנות ${storageSaved}!";
|
||||
static String m88(storageSaved) => "הצלחת לפנות ${storageSaved}!";
|
||||
|
||||
final messages = _notInlinedMessages(_notInlinedMessages);
|
||||
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
|
||||
@@ -751,7 +751,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"התיקיות שנבחרו יוצפנו ויגובו"),
|
||||
"selectedPhotos": m4,
|
||||
"selectedPhotosWithYours": m63,
|
||||
"selectedPhotosWithYours": m64,
|
||||
"send": MessageLookupByLibrary.simpleMessage("שלח"),
|
||||
"sendEmail": MessageLookupByLibrary.simpleMessage("שלח דוא\"ל"),
|
||||
"sendInvite": MessageLookupByLibrary.simpleMessage("שלח הזמנה"),
|
||||
@@ -770,7 +770,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"shareAnAlbumNow":
|
||||
MessageLookupByLibrary.simpleMessage("שתף אלבום עכשיו"),
|
||||
"shareLink": MessageLookupByLibrary.simpleMessage("שתף קישור"),
|
||||
"shareMyVerificationID": m64,
|
||||
"shareMyVerificationID": m65,
|
||||
"shareOnlyWithThePeopleYouWant":
|
||||
MessageLookupByLibrary.simpleMessage("שתף רק אם אנשים שאתה בוחר"),
|
||||
"shareTextConfirmOthersVerificationID": m5,
|
||||
@@ -778,7 +778,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"הורד את ente על מנת שנוכל לשתף תמונות וסרטונים באיכות המקור באופן קל\n\nhttps://ente.io"),
|
||||
"shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage(
|
||||
"שתף עם משתמשים שהם לא של ente"),
|
||||
"shareWithPeopleSectionTitle": m66,
|
||||
"shareWithPeopleSectionTitle": m67,
|
||||
"shareYourFirstAlbum":
|
||||
MessageLookupByLibrary.simpleMessage("שתף את האלבום הראשון שלך"),
|
||||
"sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -789,13 +789,13 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"sharedPhotoNotificationsExplanation":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"קבל התראות כשמישהו מוסיף תמונה לאלבום משותף שאתה חלק ממנו"),
|
||||
"sharedWith": m67,
|
||||
"sharedWith": m68,
|
||||
"sharedWithMe": MessageLookupByLibrary.simpleMessage("שותף איתי"),
|
||||
"sharing": MessageLookupByLibrary.simpleMessage("משתף..."),
|
||||
"showMemories": MessageLookupByLibrary.simpleMessage("הצג זכרונות"),
|
||||
"signUpTerms": MessageLookupByLibrary.simpleMessage(
|
||||
"אני מסכים ל<u-terms>תנאי שירות</u-terms> ול<u-policy>מדיניות הפרטיות</u-policy>"),
|
||||
"singleFileDeleteFromDevice": m68,
|
||||
"singleFileDeleteFromDevice": m69,
|
||||
"singleFileDeleteHighlight":
|
||||
MessageLookupByLibrary.simpleMessage("זה יימחק מכל האלבומים."),
|
||||
"skip": MessageLookupByLibrary.simpleMessage("דלג"),
|
||||
@@ -828,14 +828,14 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"storageLimitExceeded":
|
||||
MessageLookupByLibrary.simpleMessage("גבול מקום האחסון נחרג"),
|
||||
"strongStrength": MessageLookupByLibrary.simpleMessage("חזקה"),
|
||||
"subWillBeCancelledOn": m73,
|
||||
"subWillBeCancelledOn": m74,
|
||||
"subscribe": MessageLookupByLibrary.simpleMessage("הרשם"),
|
||||
"subscription": MessageLookupByLibrary.simpleMessage("מנוי"),
|
||||
"success": MessageLookupByLibrary.simpleMessage("הצלחה"),
|
||||
"suggestFeatures":
|
||||
MessageLookupByLibrary.simpleMessage("הציעו מאפיינים"),
|
||||
"support": MessageLookupByLibrary.simpleMessage("תמיכה"),
|
||||
"syncProgress": m74,
|
||||
"syncProgress": m75,
|
||||
"syncing": MessageLookupByLibrary.simpleMessage("מסנכרן..."),
|
||||
"systemTheme": MessageLookupByLibrary.simpleMessage("מערכת"),
|
||||
"tapToCopy": MessageLookupByLibrary.simpleMessage("הקש כדי להעתיק"),
|
||||
@@ -851,12 +851,12 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"theDownloadCouldNotBeCompleted":
|
||||
MessageLookupByLibrary.simpleMessage("לא ניתן להשלים את ההורדה"),
|
||||
"theme": MessageLookupByLibrary.simpleMessage("ערכת נושא"),
|
||||
"theyAlsoGetXGb": m76,
|
||||
"theyAlsoGetXGb": m77,
|
||||
"thisCanBeUsedToRecoverYourAccountIfYou":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"זה יכול לשמש לשחזור החשבון שלך במקרה ותאבד את הגורם השני"),
|
||||
"thisDevice": MessageLookupByLibrary.simpleMessage("מכשיר זה"),
|
||||
"thisIsPersonVerificationId": m77,
|
||||
"thisIsPersonVerificationId": m78,
|
||||
"thisIsYourVerificationId":
|
||||
MessageLookupByLibrary.simpleMessage("זה מזהה האימות שלך"),
|
||||
"thisWillLogYouOutOfTheFollowingDevice":
|
||||
@@ -900,7 +900,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"verificationId": MessageLookupByLibrary.simpleMessage("מזהה אימות"),
|
||||
"verify": MessageLookupByLibrary.simpleMessage("אמת"),
|
||||
"verifyEmail": MessageLookupByLibrary.simpleMessage("אימות דוא\"ל"),
|
||||
"verifyEmailID": m84,
|
||||
"verifyEmailID": m85,
|
||||
"verifyIDLabel": MessageLookupByLibrary.simpleMessage("אמת"),
|
||||
"verifyPassword": MessageLookupByLibrary.simpleMessage("אמת סיסמא"),
|
||||
"verifyingRecoveryKey":
|
||||
@@ -921,7 +921,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"weakStrength": MessageLookupByLibrary.simpleMessage("חלשה"),
|
||||
"welcomeBack": MessageLookupByLibrary.simpleMessage("ברוך שובך!"),
|
||||
"yearly": MessageLookupByLibrary.simpleMessage("שנתי"),
|
||||
"yearsAgo": m86,
|
||||
"yearsAgo": m87,
|
||||
"yes": MessageLookupByLibrary.simpleMessage("כן"),
|
||||
"yesCancel": MessageLookupByLibrary.simpleMessage("כן, בטל"),
|
||||
"yesConvertToViewer":
|
||||
@@ -944,7 +944,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"אתה לא יכול לשנמך לתוכנית הזו"),
|
||||
"youCannotShareWithYourself":
|
||||
MessageLookupByLibrary.simpleMessage("אתה לא יכול לשתף עם עצמך"),
|
||||
"youHaveSuccessfullyFreedUp": m87,
|
||||
"youHaveSuccessfullyFreedUp": m88,
|
||||
"yourAccountHasBeenDeleted":
|
||||
MessageLookupByLibrary.simpleMessage("החשבון שלך נמחק"),
|
||||
"yourPlanWasSuccessfullyDowngraded":
|
||||
|
||||
70
mobile/lib/generated/intl/messages_id.dart
generated
70
mobile/lib/generated/intl/messages_id.dart
generated
@@ -148,59 +148,59 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
|
||||
static String m4(count) => "${count} terpilih";
|
||||
|
||||
static String m63(count, yourCount) =>
|
||||
static String m64(count, yourCount) =>
|
||||
"${count} dipilih (${yourCount} milikmu)";
|
||||
|
||||
static String m64(verificationID) =>
|
||||
static String m65(verificationID) =>
|
||||
"Ini ID Verifikasi saya di ente.io: ${verificationID}.";
|
||||
|
||||
static String m5(verificationID) =>
|
||||
"Halo, bisakah kamu pastikan bahwa ini adalah ID Verifikasi ente.io milikmu: ${verificationID}";
|
||||
|
||||
static String m65(referralCode, referralStorageInGB) =>
|
||||
static String m66(referralCode, referralStorageInGB) =>
|
||||
"Kode rujukan Ente: ${referralCode} \n\nTerapkan pada Pengaturan → Umum → Rujukan untuk mendapatkan ${referralStorageInGB} GB gratis setelah kamu mendaftar paket berbayar\n\nhttps://ente.io";
|
||||
|
||||
static String m66(numberOfPeople) =>
|
||||
static String m67(numberOfPeople) =>
|
||||
"${Intl.plural(numberOfPeople, zero: 'Bagikan dengan orang tertentu', one: 'Berbagi dengan 1 orang', other: 'Berbagi dengan ${numberOfPeople} orang')}";
|
||||
|
||||
static String m67(emailIDs) => "Dibagikan dengan ${emailIDs}";
|
||||
|
||||
static String m68(fileType) =>
|
||||
"${fileType} ini akan dihapus dari perangkat ini.";
|
||||
static String m68(emailIDs) => "Dibagikan dengan ${emailIDs}";
|
||||
|
||||
static String m69(fileType) =>
|
||||
"${fileType} ini akan dihapus dari perangkat ini.";
|
||||
|
||||
static String m70(fileType) =>
|
||||
"${fileType} ini tersimpan di Ente dan juga di perangkat ini.";
|
||||
|
||||
static String m70(fileType) => "${fileType} ini akan dihapus dari Ente.";
|
||||
static String m71(fileType) => "${fileType} ini akan dihapus dari Ente.";
|
||||
|
||||
static String m1(storageAmountInGB) => "${storageAmountInGB} GB";
|
||||
|
||||
static String m71(
|
||||
static String m72(
|
||||
usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) =>
|
||||
"${usedAmount} ${usedStorageUnit} dari ${totalAmount} ${totalStorageUnit} terpakai";
|
||||
|
||||
static String m72(id) =>
|
||||
static String m73(id) =>
|
||||
"${id} kamu telah terhubung dengan akun Ente lain.\nJika kamu ingin menggunakan ${id} kamu untuk akun ini, silahkan hubungi tim bantuan kami";
|
||||
|
||||
static String m73(endDate) =>
|
||||
static String m74(endDate) =>
|
||||
"Langganan kamu akan dibatalkan pada ${endDate}";
|
||||
|
||||
static String m76(storageAmountInGB) =>
|
||||
static String m77(storageAmountInGB) =>
|
||||
"Ia juga mendapat ${storageAmountInGB} GB";
|
||||
|
||||
static String m77(email) => "Ini adalah ID Verifikasi milik ${email}";
|
||||
static String m78(email) => "Ini adalah ID Verifikasi milik ${email}";
|
||||
|
||||
static String m83(endDate) => "Berlaku hingga ${endDate}";
|
||||
static String m84(endDate) => "Berlaku hingga ${endDate}";
|
||||
|
||||
static String m84(email) => "Verifikasi ${email}";
|
||||
static String m85(email) => "Verifikasi ${email}";
|
||||
|
||||
static String m2(email) =>
|
||||
"Kami telah mengirimkan email ke <green>${email}</green>";
|
||||
|
||||
static String m86(count) =>
|
||||
static String m87(count) =>
|
||||
"${Intl.plural(count, other: '${count} tahun lalu')}";
|
||||
|
||||
static String m87(storageSaved) =>
|
||||
static String m88(storageSaved) =>
|
||||
"Kamu telah berhasil membersihkan ${storageSaved}!";
|
||||
|
||||
final messages = _notInlinedMessages(_notInlinedMessages);
|
||||
@@ -1205,7 +1205,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Item terpilih akan dihapus dari semua album dan dipindahkan ke sampah."),
|
||||
"selectedPhotos": m4,
|
||||
"selectedPhotosWithYours": m63,
|
||||
"selectedPhotosWithYours": m64,
|
||||
"send": MessageLookupByLibrary.simpleMessage("Kirim"),
|
||||
"sendEmail": MessageLookupByLibrary.simpleMessage("Kirim email"),
|
||||
"sendInvite": MessageLookupByLibrary.simpleMessage("Kirim undangan"),
|
||||
@@ -1226,16 +1226,16 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"shareAnAlbumNow":
|
||||
MessageLookupByLibrary.simpleMessage("Bagikan album sekarang"),
|
||||
"shareLink": MessageLookupByLibrary.simpleMessage("Bagikan link"),
|
||||
"shareMyVerificationID": m64,
|
||||
"shareMyVerificationID": m65,
|
||||
"shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage(
|
||||
"Bagikan hanya dengan orang yang kamu inginkan"),
|
||||
"shareTextConfirmOthersVerificationID": m5,
|
||||
"shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage(
|
||||
"Unduh Ente agar kita bisa berbagi foto dan video kualitas asli dengan mudah\n\nhttps://ente.io"),
|
||||
"shareTextReferralCode": m65,
|
||||
"shareTextReferralCode": m66,
|
||||
"shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage(
|
||||
"Bagikan ke pengguna non-Ente"),
|
||||
"shareWithPeopleSectionTitle": m66,
|
||||
"shareWithPeopleSectionTitle": m67,
|
||||
"shareYourFirstAlbum":
|
||||
MessageLookupByLibrary.simpleMessage("Bagikan album pertamamu"),
|
||||
"sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1248,7 +1248,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Foto terbagi baru"),
|
||||
"sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage(
|
||||
"Terima notifikasi apabila seseorang menambahkan foto ke album bersama yang kamu ikuti"),
|
||||
"sharedWith": m67,
|
||||
"sharedWith": m68,
|
||||
"sharedWithMe":
|
||||
MessageLookupByLibrary.simpleMessage("Dibagikan dengan saya"),
|
||||
"sharedWithYou":
|
||||
@@ -1263,11 +1263,11 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Keluar di perangkat lain"),
|
||||
"signUpTerms": MessageLookupByLibrary.simpleMessage(
|
||||
"Saya menyetujui <u-terms>ketentuan layanan</u-terms> dan <u-policy>kebijakan privasi</u-policy> Ente"),
|
||||
"singleFileDeleteFromDevice": m68,
|
||||
"singleFileDeleteFromDevice": m69,
|
||||
"singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage(
|
||||
"Ia akan dihapus dari semua album."),
|
||||
"singleFileInBothLocalAndRemote": m69,
|
||||
"singleFileInRemoteOnly": m70,
|
||||
"singleFileInBothLocalAndRemote": m70,
|
||||
"singleFileInRemoteOnly": m71,
|
||||
"skip": MessageLookupByLibrary.simpleMessage("Lewati"),
|
||||
"social": MessageLookupByLibrary.simpleMessage("Sosial"),
|
||||
"someItemsAreInBothEnteAndYourDevice":
|
||||
@@ -1312,10 +1312,10 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"storageInGB": m1,
|
||||
"storageLimitExceeded": MessageLookupByLibrary.simpleMessage(
|
||||
"Batas penyimpanan terlampaui"),
|
||||
"storageUsageInfo": m71,
|
||||
"storageUsageInfo": m72,
|
||||
"strongStrength": MessageLookupByLibrary.simpleMessage("Kuat"),
|
||||
"subAlreadyLinkedErrMessage": m72,
|
||||
"subWillBeCancelledOn": m73,
|
||||
"subAlreadyLinkedErrMessage": m73,
|
||||
"subWillBeCancelledOn": m74,
|
||||
"subscribe": MessageLookupByLibrary.simpleMessage("Berlangganan"),
|
||||
"subscription": MessageLookupByLibrary.simpleMessage("Langganan"),
|
||||
"success": MessageLookupByLibrary.simpleMessage("Berhasil"),
|
||||
@@ -1355,7 +1355,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"theseItemsWillBeDeletedFromYourDevice":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Item ini akan dihapus dari perangkat ini."),
|
||||
"theyAlsoGetXGb": m76,
|
||||
"theyAlsoGetXGb": m77,
|
||||
"thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage(
|
||||
"Tindakan ini tidak dapat dibatalkan"),
|
||||
"thisAlbumAlreadyHDACollaborativeLink":
|
||||
@@ -1369,7 +1369,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Email ini telah digunakan"),
|
||||
"thisImageHasNoExifData": MessageLookupByLibrary.simpleMessage(
|
||||
"Gambar ini tidak memiliki data exif"),
|
||||
"thisIsPersonVerificationId": m77,
|
||||
"thisIsPersonVerificationId": m78,
|
||||
"thisIsYourVerificationId": MessageLookupByLibrary.simpleMessage(
|
||||
"Ini adalah ID Verifikasi kamu"),
|
||||
"thisWillLogYouOutOfTheFollowingDevice":
|
||||
@@ -1435,14 +1435,14 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Gunakan kunci pemulihan"),
|
||||
"useSelectedPhoto":
|
||||
MessageLookupByLibrary.simpleMessage("Gunakan foto terpilih"),
|
||||
"validTill": m83,
|
||||
"validTill": m84,
|
||||
"verificationFailedPleaseTryAgain":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Verifikasi gagal, silakan coba lagi"),
|
||||
"verificationId": MessageLookupByLibrary.simpleMessage("ID Verifikasi"),
|
||||
"verify": MessageLookupByLibrary.simpleMessage("Verifikasi"),
|
||||
"verifyEmail": MessageLookupByLibrary.simpleMessage("Verifikasi email"),
|
||||
"verifyEmailID": m84,
|
||||
"verifyEmailID": m85,
|
||||
"verifyPasskey":
|
||||
MessageLookupByLibrary.simpleMessage("Verifikasi passkey"),
|
||||
"verifyPassword":
|
||||
@@ -1478,7 +1478,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Selamat datang kembali!"),
|
||||
"whatsNew": MessageLookupByLibrary.simpleMessage("Hal yang baru"),
|
||||
"yearly": MessageLookupByLibrary.simpleMessage("Tahunan"),
|
||||
"yearsAgo": m86,
|
||||
"yearsAgo": m87,
|
||||
"yes": MessageLookupByLibrary.simpleMessage("Ya"),
|
||||
"yesCancel": MessageLookupByLibrary.simpleMessage("Ya, batalkan"),
|
||||
"yesConvertToViewer":
|
||||
@@ -1505,7 +1505,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Kamu tidak bisa berbagi dengan dirimu sendiri"),
|
||||
"youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage(
|
||||
"Kamu tidak memiliki item di arsip."),
|
||||
"youHaveSuccessfullyFreedUp": m87,
|
||||
"youHaveSuccessfullyFreedUp": m88,
|
||||
"yourAccountHasBeenDeleted":
|
||||
MessageLookupByLibrary.simpleMessage("Akunmu telah dihapus"),
|
||||
"yourMap": MessageLookupByLibrary.simpleMessage("Peta kamu"),
|
||||
|
||||
78
mobile/lib/generated/intl/messages_it.dart
generated
78
mobile/lib/generated/intl/messages_it.dart
generated
@@ -165,63 +165,63 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
|
||||
static String m4(count) => "${count} selezionati";
|
||||
|
||||
static String m63(count, yourCount) =>
|
||||
static String m64(count, yourCount) =>
|
||||
"${count} selezionato (${yourCount} tuoi)";
|
||||
|
||||
static String m64(verificationID) =>
|
||||
static String m65(verificationID) =>
|
||||
"Ecco il mio ID di verifica: ${verificationID} per ente.io.";
|
||||
|
||||
static String m5(verificationID) =>
|
||||
"Hey, puoi confermare che questo è il tuo ID di verifica: ${verificationID} su ente.io";
|
||||
|
||||
static String m65(referralCode, referralStorageInGB) =>
|
||||
static String m66(referralCode, referralStorageInGB) =>
|
||||
"Codice invito Ente: ${referralCode} \n\nInseriscilo in Impostazioni → Generali → Inviti per ottenere ${referralStorageInGB} GB gratis dopo la sottoscrizione a un piano a pagamento\n\nhttps://ente.io";
|
||||
|
||||
static String m66(numberOfPeople) =>
|
||||
static String m67(numberOfPeople) =>
|
||||
"${Intl.plural(numberOfPeople, zero: 'Condividi con persone specifiche', one: 'Condividi con una persona', other: 'Condividi con ${numberOfPeople} persone')}";
|
||||
|
||||
static String m67(emailIDs) => "Condiviso con ${emailIDs}";
|
||||
|
||||
static String m68(fileType) =>
|
||||
"Questo ${fileType} verrà eliminato dal tuo dispositivo.";
|
||||
static String m68(emailIDs) => "Condiviso con ${emailIDs}";
|
||||
|
||||
static String m69(fileType) =>
|
||||
"Questo ${fileType} verrà eliminato dal tuo dispositivo.";
|
||||
|
||||
static String m70(fileType) =>
|
||||
"Questo ${fileType} è sia su Ente che sul tuo dispositivo.";
|
||||
|
||||
static String m70(fileType) => "Questo ${fileType} verrà eliminato da Ente.";
|
||||
static String m71(fileType) => "Questo ${fileType} verrà eliminato da Ente.";
|
||||
|
||||
static String m1(storageAmountInGB) => "${storageAmountInGB} GB";
|
||||
|
||||
static String m71(
|
||||
static String m72(
|
||||
usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) =>
|
||||
"${usedAmount} ${usedStorageUnit} di ${totalAmount} ${totalStorageUnit} utilizzati";
|
||||
|
||||
static String m72(id) =>
|
||||
static String m73(id) =>
|
||||
"Il tuo ${id} è già collegato a un altro account Ente.\nSe desideri utilizzare il tuo ${id} con questo account, per favore contatta il nostro supporto\'\'";
|
||||
|
||||
static String m73(endDate) => "L\'abbonamento verrà cancellato il ${endDate}";
|
||||
static String m74(endDate) => "L\'abbonamento verrà cancellato il ${endDate}";
|
||||
|
||||
static String m74(completed, total) =>
|
||||
static String m75(completed, total) =>
|
||||
"${completed}/${total} ricordi conservati";
|
||||
|
||||
static String m76(storageAmountInGB) =>
|
||||
static String m77(storageAmountInGB) =>
|
||||
"Anche loro riceveranno ${storageAmountInGB} GB";
|
||||
|
||||
static String m77(email) => "Questo è l\'ID di verifica di ${email}";
|
||||
static String m78(email) => "Questo è l\'ID di verifica di ${email}";
|
||||
|
||||
static String m82(count) => "Conservando ${count} ricordi...";
|
||||
static String m83(count) => "Conservando ${count} ricordi...";
|
||||
|
||||
static String m83(endDate) => "Valido fino al ${endDate}";
|
||||
static String m84(endDate) => "Valido fino al ${endDate}";
|
||||
|
||||
static String m84(email) => "Verifica ${email}";
|
||||
static String m85(email) => "Verifica ${email}";
|
||||
|
||||
static String m2(email) =>
|
||||
"Abbiamo inviato una mail a <green>${email}</green>";
|
||||
|
||||
static String m86(count) =>
|
||||
static String m87(count) =>
|
||||
"${Intl.plural(count, one: '${count} anno fa', other: '${count} anni fa')}";
|
||||
|
||||
static String m87(storageSaved) =>
|
||||
static String m88(storageSaved) =>
|
||||
"Hai liberato con successo ${storageSaved}!";
|
||||
|
||||
final messages = _notInlinedMessages(_notInlinedMessages);
|
||||
@@ -1504,7 +1504,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Gli elementi selezionati verranno eliminati da tutti gli album e spostati nel cestino."),
|
||||
"selectedPhotos": m4,
|
||||
"selectedPhotosWithYours": m63,
|
||||
"selectedPhotosWithYours": m64,
|
||||
"send": MessageLookupByLibrary.simpleMessage("Invia"),
|
||||
"sendEmail": MessageLookupByLibrary.simpleMessage("Invia email"),
|
||||
"sendInvite": MessageLookupByLibrary.simpleMessage("Invita"),
|
||||
@@ -1536,16 +1536,16 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"shareAnAlbumNow":
|
||||
MessageLookupByLibrary.simpleMessage("Condividi un album"),
|
||||
"shareLink": MessageLookupByLibrary.simpleMessage("Condividi link"),
|
||||
"shareMyVerificationID": m64,
|
||||
"shareMyVerificationID": m65,
|
||||
"shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage(
|
||||
"Condividi solo con le persone che vuoi"),
|
||||
"shareTextConfirmOthersVerificationID": m5,
|
||||
"shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage(
|
||||
"Scarica Ente in modo da poter facilmente condividere foto e video in qualità originale\n\nhttps://ente.io"),
|
||||
"shareTextReferralCode": m65,
|
||||
"shareTextReferralCode": m66,
|
||||
"shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage(
|
||||
"Condividi con utenti che non hanno un account Ente"),
|
||||
"shareWithPeopleSectionTitle": m66,
|
||||
"shareWithPeopleSectionTitle": m67,
|
||||
"shareYourFirstAlbum": MessageLookupByLibrary.simpleMessage(
|
||||
"Condividi il tuo primo album"),
|
||||
"sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1556,7 +1556,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Nuove foto condivise"),
|
||||
"sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage(
|
||||
"Ricevi notifiche quando qualcuno aggiunge una foto a un album condiviso, di cui fai parte"),
|
||||
"sharedWith": m67,
|
||||
"sharedWith": m68,
|
||||
"sharedWithMe":
|
||||
MessageLookupByLibrary.simpleMessage("Condivisi con me"),
|
||||
"sharedWithYou":
|
||||
@@ -1573,11 +1573,11 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Esci dagli altri dispositivi"),
|
||||
"signUpTerms": MessageLookupByLibrary.simpleMessage(
|
||||
"Accetto i <u-terms>termini di servizio</u-terms> e la <u-policy>politica sulla privacy</u-policy>"),
|
||||
"singleFileDeleteFromDevice": m68,
|
||||
"singleFileDeleteFromDevice": m69,
|
||||
"singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage(
|
||||
"Verrà eliminato da tutti gli album."),
|
||||
"singleFileInBothLocalAndRemote": m69,
|
||||
"singleFileInRemoteOnly": m70,
|
||||
"singleFileInBothLocalAndRemote": m70,
|
||||
"singleFileInRemoteOnly": m71,
|
||||
"skip": MessageLookupByLibrary.simpleMessage("Salta"),
|
||||
"social": MessageLookupByLibrary.simpleMessage("Social"),
|
||||
"someItemsAreInBothEnteAndYourDevice":
|
||||
@@ -1627,10 +1627,10 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"storageInGB": m1,
|
||||
"storageLimitExceeded": MessageLookupByLibrary.simpleMessage(
|
||||
"Limite d\'archiviazione superato"),
|
||||
"storageUsageInfo": m71,
|
||||
"storageUsageInfo": m72,
|
||||
"strongStrength": MessageLookupByLibrary.simpleMessage("Forte"),
|
||||
"subAlreadyLinkedErrMessage": m72,
|
||||
"subWillBeCancelledOn": m73,
|
||||
"subAlreadyLinkedErrMessage": m73,
|
||||
"subWillBeCancelledOn": m74,
|
||||
"subscribe": MessageLookupByLibrary.simpleMessage("Iscriviti"),
|
||||
"subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage(
|
||||
"È necessario un abbonamento a pagamento attivo per abilitare la condivisione."),
|
||||
@@ -1647,7 +1647,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"suggestFeatures":
|
||||
MessageLookupByLibrary.simpleMessage("Suggerisci una funzionalità"),
|
||||
"support": MessageLookupByLibrary.simpleMessage("Assistenza"),
|
||||
"syncProgress": m74,
|
||||
"syncProgress": m75,
|
||||
"syncStopped":
|
||||
MessageLookupByLibrary.simpleMessage("Sincronizzazione interrotta"),
|
||||
"syncing": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1680,7 +1680,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"theseItemsWillBeDeletedFromYourDevice":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Questi file verranno eliminati dal tuo dispositivo."),
|
||||
"theyAlsoGetXGb": m76,
|
||||
"theyAlsoGetXGb": m77,
|
||||
"theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage(
|
||||
"Verranno eliminati da tutti gli album."),
|
||||
"thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1697,7 +1697,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Questo indirizzo email è già registrato"),
|
||||
"thisImageHasNoExifData": MessageLookupByLibrary.simpleMessage(
|
||||
"Questa immagine non ha dati EXIF"),
|
||||
"thisIsPersonVerificationId": m77,
|
||||
"thisIsPersonVerificationId": m78,
|
||||
"thisIsYourVerificationId": MessageLookupByLibrary.simpleMessage(
|
||||
"Questo è il tuo ID di verifica"),
|
||||
"thisWillLogYouOutOfTheFollowingDevice":
|
||||
@@ -1769,7 +1769,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Acquista altro spazio"),
|
||||
"uploadingFilesToAlbum": MessageLookupByLibrary.simpleMessage(
|
||||
"Caricamento dei file nell\'album..."),
|
||||
"uploadingMultipleMemories": m82,
|
||||
"uploadingMultipleMemories": m83,
|
||||
"uploadingSingleMemory":
|
||||
MessageLookupByLibrary.simpleMessage("Conservando 1 ricordo..."),
|
||||
"upto50OffUntil4thDec": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1786,7 +1786,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"useSelectedPhoto":
|
||||
MessageLookupByLibrary.simpleMessage("Usa la foto selezionata"),
|
||||
"usedSpace": MessageLookupByLibrary.simpleMessage("Spazio utilizzato"),
|
||||
"validTill": m83,
|
||||
"validTill": m84,
|
||||
"verificationFailedPleaseTryAgain":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Verifica fallita, per favore prova di nuovo"),
|
||||
@@ -1794,7 +1794,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("ID di verifica"),
|
||||
"verify": MessageLookupByLibrary.simpleMessage("Verifica"),
|
||||
"verifyEmail": MessageLookupByLibrary.simpleMessage("Verifica email"),
|
||||
"verifyEmailID": m84,
|
||||
"verifyEmailID": m85,
|
||||
"verifyIDLabel": MessageLookupByLibrary.simpleMessage("Verifica"),
|
||||
"verifyPasskey":
|
||||
MessageLookupByLibrary.simpleMessage("Verifica passkey"),
|
||||
@@ -1839,7 +1839,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"whatsNew": MessageLookupByLibrary.simpleMessage("Novità"),
|
||||
"yearShort": MessageLookupByLibrary.simpleMessage("anno"),
|
||||
"yearly": MessageLookupByLibrary.simpleMessage("Annuale"),
|
||||
"yearsAgo": m86,
|
||||
"yearsAgo": m87,
|
||||
"yes": MessageLookupByLibrary.simpleMessage("Si"),
|
||||
"yesCancel": MessageLookupByLibrary.simpleMessage("Sì, cancella"),
|
||||
"yesConvertToViewer": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1871,7 +1871,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Non puoi condividere con te stesso"),
|
||||
"youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage(
|
||||
"Non hai nulla di archiviato."),
|
||||
"youHaveSuccessfullyFreedUp": m87,
|
||||
"youHaveSuccessfullyFreedUp": m88,
|
||||
"yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage(
|
||||
"Il tuo account è stato eliminato"),
|
||||
"yourMap": MessageLookupByLibrary.simpleMessage("La tua mappa"),
|
||||
|
||||
76
mobile/lib/generated/intl/messages_ja.dart
generated
76
mobile/lib/generated/intl/messages_ja.dart
generated
@@ -158,56 +158,56 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
|
||||
static String m4(count) => "${count} 個を選択";
|
||||
|
||||
static String m63(count, yourCount) => "${count} 個選択中(${yourCount} あなた)";
|
||||
static String m64(count, yourCount) => "${count} 個選択中(${yourCount} あなた)";
|
||||
|
||||
static String m64(verificationID) => "私の確認ID: ente.ioの ${verificationID}";
|
||||
static String m65(verificationID) => "私の確認ID: ente.ioの ${verificationID}";
|
||||
|
||||
static String m5(verificationID) =>
|
||||
"これがあなたのente.io確認用IDであることを確認できますか? ${verificationID}";
|
||||
|
||||
static String m65(referralCode, referralStorageInGB) =>
|
||||
static String m66(referralCode, referralStorageInGB) =>
|
||||
"リフェラルコード: ${referralCode}\n\n設定→一般→リフェラルで使うことで${referralStorageInGB}が無料になります(あなたが有料プランに加入したあと)。\n\nhttps://ente.io";
|
||||
|
||||
static String m66(numberOfPeople) =>
|
||||
static String m67(numberOfPeople) =>
|
||||
"${Intl.plural(numberOfPeople, zero: '誰かと共有しましょう', one: '1人と共有されています', other: '${numberOfPeople} 人と共有されています')}";
|
||||
|
||||
static String m67(emailIDs) => "${emailIDs} と共有中";
|
||||
static String m68(emailIDs) => "${emailIDs} と共有中";
|
||||
|
||||
static String m68(fileType) => "${fileType} はEnteから削除されます。";
|
||||
static String m69(fileType) => "${fileType} はEnteから削除されます。";
|
||||
|
||||
static String m69(fileType) => "この ${fileType} はEnteとお使いのデバイスの両方にあります。";
|
||||
static String m70(fileType) => "この ${fileType} はEnteとお使いのデバイスの両方にあります。";
|
||||
|
||||
static String m70(fileType) => "${fileType} はEnteから削除されます。";
|
||||
static String m71(fileType) => "${fileType} はEnteから削除されます。";
|
||||
|
||||
static String m1(storageAmountInGB) => "${storageAmountInGB} GB";
|
||||
|
||||
static String m71(
|
||||
static String m72(
|
||||
usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) =>
|
||||
"${usedAmount} ${usedStorageUnit} / ${totalAmount} ${totalStorageUnit} 使用";
|
||||
|
||||
static String m72(id) =>
|
||||
static String m73(id) =>
|
||||
"あなたの ${id} はすでに別のEnteアカウントにリンクされています。\nこのアカウントであなたの ${id} を使用したい場合は、サポートにお問い合わせください。";
|
||||
|
||||
static String m73(endDate) => "サブスクリプションは ${endDate} でキャンセルされます";
|
||||
static String m74(endDate) => "サブスクリプションは ${endDate} でキャンセルされます";
|
||||
|
||||
static String m74(completed, total) => "${completed}/${total} のメモリが保存されました";
|
||||
static String m75(completed, total) => "${completed}/${total} のメモリが保存されました";
|
||||
|
||||
static String m76(storageAmountInGB) => "紹介者も ${storageAmountInGB} GB を得ます";
|
||||
static String m77(storageAmountInGB) => "紹介者も ${storageAmountInGB} GB を得ます";
|
||||
|
||||
static String m77(email) => "これは ${email} の確認用ID";
|
||||
static String m78(email) => "これは ${email} の確認用ID";
|
||||
|
||||
static String m82(count) => "${count} メモリを保存しています...";
|
||||
static String m83(count) => "${count} メモリを保存しています...";
|
||||
|
||||
static String m83(endDate) => "${endDate} まで";
|
||||
static String m84(endDate) => "${endDate} まで";
|
||||
|
||||
static String m84(email) => "${email} を確認";
|
||||
static String m85(email) => "${email} を確認";
|
||||
|
||||
static String m2(email) => "<green>${email}</green>にメールを送りました";
|
||||
|
||||
static String m86(count) =>
|
||||
static String m87(count) =>
|
||||
"${Intl.plural(count, one: '${count} 年前', other: '${count} 年前')}";
|
||||
|
||||
static String m87(storageSaved) => "${storageSaved} を解放しました";
|
||||
static String m88(storageSaved) => "${storageSaved} を解放しました";
|
||||
|
||||
final messages = _notInlinedMessages(_notInlinedMessages);
|
||||
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
|
||||
@@ -1256,7 +1256,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"選択したアイテムはすべてのアルバムから削除され、ゴミ箱に移動されます。"),
|
||||
"selectedPhotos": m4,
|
||||
"selectedPhotosWithYours": m63,
|
||||
"selectedPhotosWithYours": m64,
|
||||
"send": MessageLookupByLibrary.simpleMessage("送信"),
|
||||
"sendEmail": MessageLookupByLibrary.simpleMessage("メールを送信する"),
|
||||
"sendInvite": MessageLookupByLibrary.simpleMessage("招待を送る"),
|
||||
@@ -1278,16 +1278,16 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("アルバムを開いて右上のシェアボタンをタップ"),
|
||||
"shareAnAlbumNow": MessageLookupByLibrary.simpleMessage("アルバムを共有"),
|
||||
"shareLink": MessageLookupByLibrary.simpleMessage("リンクの共有"),
|
||||
"shareMyVerificationID": m64,
|
||||
"shareMyVerificationID": m65,
|
||||
"shareOnlyWithThePeopleYouWant":
|
||||
MessageLookupByLibrary.simpleMessage("選んだ人と共有します"),
|
||||
"shareTextConfirmOthersVerificationID": m5,
|
||||
"shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage(
|
||||
"Enteをダウンロードして、写真や動画の共有を簡単に!\n\nhttps://ente.io"),
|
||||
"shareTextReferralCode": m65,
|
||||
"shareTextReferralCode": m66,
|
||||
"shareWithNonenteUsers":
|
||||
MessageLookupByLibrary.simpleMessage("Enteを使っていない人に共有"),
|
||||
"shareWithPeopleSectionTitle": m66,
|
||||
"shareWithPeopleSectionTitle": m67,
|
||||
"shareYourFirstAlbum":
|
||||
MessageLookupByLibrary.simpleMessage("アルバムの共有をしてみましょう"),
|
||||
"sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1298,7 +1298,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("新しい共有写真"),
|
||||
"sharedPhotoNotificationsExplanation":
|
||||
MessageLookupByLibrary.simpleMessage("誰かが写真を共有アルバムに追加した時に通知を受け取る"),
|
||||
"sharedWith": m67,
|
||||
"sharedWith": m68,
|
||||
"sharedWithMe": MessageLookupByLibrary.simpleMessage("あなたと共有されたアルバム"),
|
||||
"sharedWithYou": MessageLookupByLibrary.simpleMessage("あなたと共有されています"),
|
||||
"sharing": MessageLookupByLibrary.simpleMessage("共有中..."),
|
||||
@@ -1312,11 +1312,11 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("他のデバイスからサインアウトする"),
|
||||
"signUpTerms": MessageLookupByLibrary.simpleMessage(
|
||||
"<u-terms>利用規約</u-terms>と<u-policy>プライバシーポリシー</u-policy>に同意します"),
|
||||
"singleFileDeleteFromDevice": m68,
|
||||
"singleFileDeleteFromDevice": m69,
|
||||
"singleFileDeleteHighlight":
|
||||
MessageLookupByLibrary.simpleMessage("全てのアルバムから削除されます。"),
|
||||
"singleFileInBothLocalAndRemote": m69,
|
||||
"singleFileInRemoteOnly": m70,
|
||||
"singleFileInBothLocalAndRemote": m70,
|
||||
"singleFileInRemoteOnly": m71,
|
||||
"skip": MessageLookupByLibrary.simpleMessage("スキップ"),
|
||||
"social": MessageLookupByLibrary.simpleMessage("SNS"),
|
||||
"someItemsAreInBothEnteAndYourDevice":
|
||||
@@ -1357,10 +1357,10 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"storageInGB": m1,
|
||||
"storageLimitExceeded":
|
||||
MessageLookupByLibrary.simpleMessage("ストレージの上限を超えました"),
|
||||
"storageUsageInfo": m71,
|
||||
"storageUsageInfo": m72,
|
||||
"strongStrength": MessageLookupByLibrary.simpleMessage("強いパスワード"),
|
||||
"subAlreadyLinkedErrMessage": m72,
|
||||
"subWillBeCancelledOn": m73,
|
||||
"subAlreadyLinkedErrMessage": m73,
|
||||
"subWillBeCancelledOn": m74,
|
||||
"subscribe": MessageLookupByLibrary.simpleMessage("サブスクライブ"),
|
||||
"subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage(
|
||||
"共有を有効にするには、有料サブスクリプションが必要です。"),
|
||||
@@ -1374,7 +1374,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"successfullyUnhid": MessageLookupByLibrary.simpleMessage("非表示を解除しました"),
|
||||
"suggestFeatures": MessageLookupByLibrary.simpleMessage("機能を提案"),
|
||||
"support": MessageLookupByLibrary.simpleMessage("サポート"),
|
||||
"syncProgress": m74,
|
||||
"syncProgress": m75,
|
||||
"syncStopped": MessageLookupByLibrary.simpleMessage("同期が停止しました"),
|
||||
"syncing": MessageLookupByLibrary.simpleMessage("同期中..."),
|
||||
"systemTheme": MessageLookupByLibrary.simpleMessage("システム"),
|
||||
@@ -1397,7 +1397,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"theme": MessageLookupByLibrary.simpleMessage("テーマ"),
|
||||
"theseItemsWillBeDeletedFromYourDevice":
|
||||
MessageLookupByLibrary.simpleMessage("これらの項目はデバイスから削除されます。"),
|
||||
"theyAlsoGetXGb": m76,
|
||||
"theyAlsoGetXGb": m77,
|
||||
"theyWillBeDeletedFromAllAlbums":
|
||||
MessageLookupByLibrary.simpleMessage("全てのアルバムから削除されます。"),
|
||||
"thisActionCannotBeUndone":
|
||||
@@ -1413,7 +1413,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("このメールアドレスはすでに使用されています。"),
|
||||
"thisImageHasNoExifData":
|
||||
MessageLookupByLibrary.simpleMessage("この画像にEXIFデータはありません"),
|
||||
"thisIsPersonVerificationId": m77,
|
||||
"thisIsPersonVerificationId": m78,
|
||||
"thisIsYourVerificationId":
|
||||
MessageLookupByLibrary.simpleMessage("これはあなたの認証IDです"),
|
||||
"thisWillLogYouOutOfTheFollowingDevice":
|
||||
@@ -1472,7 +1472,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"upgrade": MessageLookupByLibrary.simpleMessage("アップグレード"),
|
||||
"uploadingFilesToAlbum":
|
||||
MessageLookupByLibrary.simpleMessage("アルバムにファイルをアップロード中"),
|
||||
"uploadingMultipleMemories": m82,
|
||||
"uploadingMultipleMemories": m83,
|
||||
"uploadingSingleMemory":
|
||||
MessageLookupByLibrary.simpleMessage("1メモリを保存しています..."),
|
||||
"upto50OffUntil4thDec":
|
||||
@@ -1486,13 +1486,13 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"useRecoveryKey": MessageLookupByLibrary.simpleMessage("リカバリーキーを使用"),
|
||||
"useSelectedPhoto": MessageLookupByLibrary.simpleMessage("選択した写真を使用"),
|
||||
"usedSpace": MessageLookupByLibrary.simpleMessage("使用済み領域"),
|
||||
"validTill": m83,
|
||||
"validTill": m84,
|
||||
"verificationFailedPleaseTryAgain":
|
||||
MessageLookupByLibrary.simpleMessage("確認に失敗しました、再試行してください"),
|
||||
"verificationId": MessageLookupByLibrary.simpleMessage("確認用ID"),
|
||||
"verify": MessageLookupByLibrary.simpleMessage("確認"),
|
||||
"verifyEmail": MessageLookupByLibrary.simpleMessage("Eメールの確認"),
|
||||
"verifyEmailID": m84,
|
||||
"verifyEmailID": m85,
|
||||
"verifyIDLabel": MessageLookupByLibrary.simpleMessage("確認"),
|
||||
"verifyPasskey": MessageLookupByLibrary.simpleMessage("パスキーを確認"),
|
||||
"verifyPassword": MessageLookupByLibrary.simpleMessage("パスワードの確認"),
|
||||
@@ -1529,7 +1529,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"welcomeBack": MessageLookupByLibrary.simpleMessage("おかえりなさい!"),
|
||||
"whatsNew": MessageLookupByLibrary.simpleMessage("最新情報"),
|
||||
"yearly": MessageLookupByLibrary.simpleMessage("年額"),
|
||||
"yearsAgo": m86,
|
||||
"yearsAgo": m87,
|
||||
"yes": MessageLookupByLibrary.simpleMessage("はい"),
|
||||
"yesCancel": MessageLookupByLibrary.simpleMessage("キャンセル"),
|
||||
"yesConvertToViewer":
|
||||
@@ -1557,7 +1557,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("自分自身と共有することはできません"),
|
||||
"youDontHaveAnyArchivedItems":
|
||||
MessageLookupByLibrary.simpleMessage("アーカイブした項目はありません"),
|
||||
"youHaveSuccessfullyFreedUp": m87,
|
||||
"youHaveSuccessfullyFreedUp": m88,
|
||||
"yourAccountHasBeenDeleted":
|
||||
MessageLookupByLibrary.simpleMessage("アカウントは削除されました"),
|
||||
"yourMap": MessageLookupByLibrary.simpleMessage("あなたの地図"),
|
||||
|
||||
76
mobile/lib/generated/intl/messages_lt.dart
generated
76
mobile/lib/generated/intl/messages_lt.dart
generated
@@ -122,66 +122,66 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
static String m62(count) =>
|
||||
"${Intl.plural(count, one: 'Rastas ${count} rezultatas', few: 'Rasti ${count} rezultatai', many: 'Rasta ${count} rezultato', other: 'Rasta ${count} rezultatų')}";
|
||||
|
||||
static String m88(snapshotLength, searchLength) =>
|
||||
static String m63(snapshotLength, searchLength) =>
|
||||
"Sekcijų ilgio neatitikimas: ${snapshotLength} != ${searchLength}";
|
||||
|
||||
static String m4(count) => "${count} pasirinkta";
|
||||
|
||||
static String m63(count, yourCount) =>
|
||||
static String m64(count, yourCount) =>
|
||||
"${count} pasirinkta (${yourCount} jūsų)";
|
||||
|
||||
static String m64(verificationID) =>
|
||||
static String m65(verificationID) =>
|
||||
"Štai mano patvirtinimo ID: ${verificationID}, skirta ente.io.";
|
||||
|
||||
static String m5(verificationID) =>
|
||||
"Ei, ar galite patvirtinti, kad tai yra jūsų ente.io patvirtinimo ID: ${verificationID}";
|
||||
|
||||
static String m65(referralCode, referralStorageInGB) =>
|
||||
static String m66(referralCode, referralStorageInGB) =>
|
||||
"„Ente“ rekomendacijos kodas: ${referralCode} \n\nTaikykite jį per Nustatymai → Bendrieji → Rekomendacijos, kad gautumėte ${referralStorageInGB} GB nemokamai po to, kai užsiregistruosite mokamam planui.\n\nhttps://ente.io";
|
||||
|
||||
static String m66(numberOfPeople) =>
|
||||
static String m67(numberOfPeople) =>
|
||||
"${Intl.plural(numberOfPeople, zero: 'Bendrinti su konkrečiais asmenimis', one: 'Bendrinta su 1 asmeniu', other: 'Bendrinta su ${numberOfPeople} asmenimis')}";
|
||||
|
||||
static String m69(fileType) =>
|
||||
static String m70(fileType) =>
|
||||
"Šis ${fileType} yra ir saugykloje „Ente“ bei įrenginyje.";
|
||||
|
||||
static String m70(fileType) => "Šis ${fileType} bus ištrintas iš „Ente“.";
|
||||
static String m71(fileType) => "Šis ${fileType} bus ištrintas iš „Ente“.";
|
||||
|
||||
static String m1(storageAmountInGB) => "${storageAmountInGB} GB";
|
||||
|
||||
static String m72(id) =>
|
||||
static String m73(id) =>
|
||||
"Jūsų ${id} jau susietas su kita „Ente“ paskyra.\nJei norite naudoti savo ${id} su šia paskyra, susisiekite su mūsų palaikymo komanda.";
|
||||
|
||||
static String m74(completed, total) =>
|
||||
static String m75(completed, total) =>
|
||||
"${completed} / ${total} išsaugomi prisiminimai";
|
||||
|
||||
static String m75(ignoreReason) =>
|
||||
static String m76(ignoreReason) =>
|
||||
"Palieskite, kad įkeltumėte. Įkėlimas šiuo metu ignoruojamas dėl ${ignoreReason}.";
|
||||
|
||||
static String m77(email) => "Tai – ${email} patvirtinimo ID";
|
||||
static String m78(email) => "Tai – ${email} patvirtinimo ID";
|
||||
|
||||
static String m78(count) =>
|
||||
static String m79(count) =>
|
||||
"${Intl.plural(count, zero: 'Netrukus', one: '1 diena', other: '${count} dienų')}";
|
||||
|
||||
static String m79(email) =>
|
||||
static String m80(email) =>
|
||||
"Buvote pakviesti tapti ${email} palikimo kontaktu.";
|
||||
|
||||
static String m80(galleryType) =>
|
||||
static String m81(galleryType) =>
|
||||
"Galerijos tipas ${galleryType} nepalaikomas pervadinimui.";
|
||||
|
||||
static String m81(ignoreReason) =>
|
||||
static String m82(ignoreReason) =>
|
||||
"Įkėlimas ignoruojamas dėl ${ignoreReason}.";
|
||||
|
||||
static String m83(endDate) => "Galioja iki ${endDate}";
|
||||
static String m84(endDate) => "Galioja iki ${endDate}";
|
||||
|
||||
static String m84(email) => "Patvirtinti ${email}";
|
||||
static String m85(email) => "Patvirtinti ${email}";
|
||||
|
||||
static String m85(count) =>
|
||||
static String m86(count) =>
|
||||
"${Intl.plural(count, zero: 'Pridėta 0 žiūrėtojų', one: 'Pridėtas 1 žiūrėtojas', other: 'Pridėta ${count} žiūrėtojų')}";
|
||||
|
||||
static String m2(email) => "Išsiuntėme laišką adresu <green>${email}</green>";
|
||||
|
||||
static String m86(count) =>
|
||||
static String m87(count) =>
|
||||
"${Intl.plural(count, one: 'prieš ${count} metus', few: 'prieš ${count} metus', many: 'prieš ${count} metų', other: 'prieš ${count} metų')}";
|
||||
|
||||
final messages = _notInlinedMessages(_notInlinedMessages);
|
||||
@@ -1236,7 +1236,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"searchPersonsEmptySection": MessageLookupByLibrary.simpleMessage(
|
||||
"Asmenys bus rodomi čia, kai bus užbaigtas apdorojimas ir sinchronizavimas."),
|
||||
"searchResultCount": m62,
|
||||
"searchSectionsLengthMismatch": m88,
|
||||
"searchSectionsLengthMismatch": m63,
|
||||
"security": MessageLookupByLibrary.simpleMessage("Saugumas"),
|
||||
"seePublicAlbumLinksInApp": MessageLookupByLibrary.simpleMessage(
|
||||
"Žiūrėti viešų albumų nuorodas programoje"),
|
||||
@@ -1264,7 +1264,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Pasirinkti aplankai bus užšifruoti ir sukurtos atsarginės kopijos."),
|
||||
"selectedPhotos": m4,
|
||||
"selectedPhotosWithYours": m63,
|
||||
"selectedPhotosWithYours": m64,
|
||||
"send": MessageLookupByLibrary.simpleMessage("Siųsti"),
|
||||
"sendEmail": MessageLookupByLibrary.simpleMessage("Siųsti el. laišką"),
|
||||
"sendInvite": MessageLookupByLibrary.simpleMessage("Siųsti kvietimą"),
|
||||
@@ -1295,16 +1295,16 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"shareAnAlbumNow":
|
||||
MessageLookupByLibrary.simpleMessage("Bendrinti albumą dabar"),
|
||||
"shareLink": MessageLookupByLibrary.simpleMessage("Bendrinti nuorodą"),
|
||||
"shareMyVerificationID": m64,
|
||||
"shareMyVerificationID": m65,
|
||||
"shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage(
|
||||
"Bendrinkite tik su tais asmenimis, su kuriais norite"),
|
||||
"shareTextConfirmOthersVerificationID": m5,
|
||||
"shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage(
|
||||
"Atsisiųskite „Ente“, kad galėtume lengvai bendrinti originalios kokybės nuotraukas ir vaizdo įrašus.\n\nhttps://ente.io"),
|
||||
"shareTextReferralCode": m65,
|
||||
"shareTextReferralCode": m66,
|
||||
"shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage(
|
||||
"Bendrinkite su ne „Ente“ naudotojais."),
|
||||
"shareWithPeopleSectionTitle": m66,
|
||||
"shareWithPeopleSectionTitle": m67,
|
||||
"sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage(
|
||||
"Sukurkite bendrinamus ir bendradarbiaujamus albumus su kitais „Ente“ naudotojais, įskaitant naudotojus nemokamuose planuose."),
|
||||
"sharedByYou":
|
||||
@@ -1325,8 +1325,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Jei manote, kad kas nors gali žinoti jūsų slaptažodį, galite priverstinai atsijungti iš visų kitų įrenginių, naudojančių jūsų paskyrą."),
|
||||
"signUpTerms": MessageLookupByLibrary.simpleMessage(
|
||||
"Sutinku su <u-terms>paslaugų sąlygomis</u-terms> ir <u-policy> privatumo politika</u-policy>"),
|
||||
"singleFileInBothLocalAndRemote": m69,
|
||||
"singleFileInRemoteOnly": m70,
|
||||
"singleFileInBothLocalAndRemote": m70,
|
||||
"singleFileInRemoteOnly": m71,
|
||||
"skip": MessageLookupByLibrary.simpleMessage("Praleisti"),
|
||||
"social": MessageLookupByLibrary.simpleMessage("Socialinės"),
|
||||
"someoneSharingAlbumsWithYouShouldSeeTheSameId":
|
||||
@@ -1365,7 +1365,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"storageLimitExceeded":
|
||||
MessageLookupByLibrary.simpleMessage("Viršyta saugyklos riba."),
|
||||
"strongStrength": MessageLookupByLibrary.simpleMessage("Stipri"),
|
||||
"subAlreadyLinkedErrMessage": m72,
|
||||
"subAlreadyLinkedErrMessage": m73,
|
||||
"subscribe": MessageLookupByLibrary.simpleMessage("Prenumeruoti"),
|
||||
"subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage(
|
||||
"Kad įjungtumėte bendrinimą, reikia aktyvios mokamos prenumeratos."),
|
||||
@@ -1378,7 +1378,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"suggestFeatures":
|
||||
MessageLookupByLibrary.simpleMessage("Siūlyti funkcijas"),
|
||||
"support": MessageLookupByLibrary.simpleMessage("Palaikymas"),
|
||||
"syncProgress": m74,
|
||||
"syncProgress": m75,
|
||||
"syncStopped": MessageLookupByLibrary.simpleMessage(
|
||||
"Sinchronizavimas sustabdytas"),
|
||||
"syncing": MessageLookupByLibrary.simpleMessage("Sinchronizuojama..."),
|
||||
@@ -1391,7 +1391,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Palieskite, kad atrakintumėte"),
|
||||
"tapToUpload":
|
||||
MessageLookupByLibrary.simpleMessage("Palieskite, kad įkeltumėte"),
|
||||
"tapToUploadIsIgnoredDue": m75,
|
||||
"tapToUploadIsIgnoredDue": m76,
|
||||
"tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage(
|
||||
"Atrodo, kad kažkas nutiko ne taip. Bandykite dar kartą po kurio laiko. Jei klaida tęsiasi, susisiekite su mūsų palaikymo komanda."),
|
||||
"terminate": MessageLookupByLibrary.simpleMessage("Baigti"),
|
||||
@@ -1415,7 +1415,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Šis el. paštas jau naudojamas."),
|
||||
"thisImageHasNoExifData": MessageLookupByLibrary.simpleMessage(
|
||||
"Šis vaizdas neturi Exif duomenų"),
|
||||
"thisIsPersonVerificationId": m77,
|
||||
"thisIsPersonVerificationId": m78,
|
||||
"thisIsYourVerificationId":
|
||||
MessageLookupByLibrary.simpleMessage("Tai – jūsų patvirtinimo ID"),
|
||||
"thisWillLogYouOutOfTheFollowingDevice":
|
||||
@@ -1437,11 +1437,11 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Per daug neteisingų bandymų."),
|
||||
"total": MessageLookupByLibrary.simpleMessage("iš viso"),
|
||||
"trash": MessageLookupByLibrary.simpleMessage("Šiukšlinė"),
|
||||
"trashDaysLeft": m78,
|
||||
"trashDaysLeft": m79,
|
||||
"trim": MessageLookupByLibrary.simpleMessage("Trumpinti"),
|
||||
"trustedContacts":
|
||||
MessageLookupByLibrary.simpleMessage("Patikimi kontaktai"),
|
||||
"trustedInviteBody": m79,
|
||||
"trustedInviteBody": m80,
|
||||
"tryAgain": MessageLookupByLibrary.simpleMessage("Bandyti dar kartą"),
|
||||
"twitter": MessageLookupByLibrary.simpleMessage("„Twitter“"),
|
||||
"twoMonthsFreeOnYearlyPlans": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1453,7 +1453,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Dvigubas tapatybės nustatymas"),
|
||||
"twofactorSetup": MessageLookupByLibrary.simpleMessage(
|
||||
"Dvigubo tapatybės nustatymo sąranka"),
|
||||
"typeOfGallerGallerytypeIsNotSupportedForRename": m80,
|
||||
"typeOfGallerGallerytypeIsNotSupportedForRename": m81,
|
||||
"unarchive": MessageLookupByLibrary.simpleMessage("Išarchyvuoti"),
|
||||
"unarchiveAlbum":
|
||||
MessageLookupByLibrary.simpleMessage("Išarchyvuoti albumą"),
|
||||
@@ -1469,7 +1469,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"updatingFolderSelection": MessageLookupByLibrary.simpleMessage(
|
||||
"Atnaujinamas aplankų pasirinkimas..."),
|
||||
"upgrade": MessageLookupByLibrary.simpleMessage("Keisti planą"),
|
||||
"uploadIsIgnoredDueToIgnorereason": m81,
|
||||
"uploadIsIgnoredDueToIgnorereason": m82,
|
||||
"upto50OffUntil4thDec": MessageLookupByLibrary.simpleMessage(
|
||||
"Iki 50% nuolaida, gruodžio 4 d."),
|
||||
"usableReferralStorageInfo": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1483,7 +1483,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"useRecoveryKey":
|
||||
MessageLookupByLibrary.simpleMessage("Naudoti atkūrimo raktą"),
|
||||
"usedSpace": MessageLookupByLibrary.simpleMessage("Naudojama vieta"),
|
||||
"validTill": m83,
|
||||
"validTill": m84,
|
||||
"verificationFailedPleaseTryAgain":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Patvirtinimas nepavyko. Bandykite dar kartą."),
|
||||
@@ -1492,7 +1492,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"verify": MessageLookupByLibrary.simpleMessage("Patvirtinti"),
|
||||
"verifyEmail":
|
||||
MessageLookupByLibrary.simpleMessage("Patvirtinti el. paštą"),
|
||||
"verifyEmailID": m84,
|
||||
"verifyEmailID": m85,
|
||||
"verifyIDLabel": MessageLookupByLibrary.simpleMessage("Patvirtinti"),
|
||||
"verifyPasskey":
|
||||
MessageLookupByLibrary.simpleMessage("Patvirtinti slaptaraktį"),
|
||||
@@ -1512,7 +1512,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"viewRecoveryKey":
|
||||
MessageLookupByLibrary.simpleMessage("Peržiūrėti atkūrimo raktą"),
|
||||
"viewer": MessageLookupByLibrary.simpleMessage("Žiūrėtojas"),
|
||||
"viewersSuccessfullyAdded": m85,
|
||||
"viewersSuccessfullyAdded": m86,
|
||||
"visitWebToManage": MessageLookupByLibrary.simpleMessage(
|
||||
"Aplankykite web.ente.io, kad tvarkytumėte savo prenumeratą"),
|
||||
"waitingForVerification":
|
||||
@@ -1531,7 +1531,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Patikimas kontaktas gali padėti atkurti jūsų duomenis."),
|
||||
"yearShort": MessageLookupByLibrary.simpleMessage("m."),
|
||||
"yearly": MessageLookupByLibrary.simpleMessage("Metinis"),
|
||||
"yearsAgo": m86,
|
||||
"yearsAgo": m87,
|
||||
"yes": MessageLookupByLibrary.simpleMessage("Taip"),
|
||||
"yesCancel": MessageLookupByLibrary.simpleMessage("Taip, atsisakyti"),
|
||||
"yesConvertToViewer":
|
||||
|
||||
102
mobile/lib/generated/intl/messages_nl.dart
generated
102
mobile/lib/generated/intl/messages_nl.dart
generated
@@ -187,82 +187,82 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
|
||||
static String m4(count) => "${count} geselecteerd";
|
||||
|
||||
static String m63(count, yourCount) =>
|
||||
static String m64(count, yourCount) =>
|
||||
"${count} geselecteerd (${yourCount} van jou)";
|
||||
|
||||
static String m64(verificationID) =>
|
||||
static String m65(verificationID) =>
|
||||
"Hier is mijn verificatie-ID: ${verificationID} voor ente.io.";
|
||||
|
||||
static String m5(verificationID) =>
|
||||
"Hey, kunt u bevestigen dat dit uw ente.io verificatie-ID is: ${verificationID}";
|
||||
|
||||
static String m65(referralCode, referralStorageInGB) =>
|
||||
static String m66(referralCode, referralStorageInGB) =>
|
||||
"Ente verwijzingscode: ${referralCode} \n\nPas het toe bij Instellingen → Algemeen → Verwijzingen om ${referralStorageInGB} GB gratis te krijgen nadat je je hebt aangemeld voor een betaald abonnement\n\nhttps://ente.io";
|
||||
|
||||
static String m66(numberOfPeople) =>
|
||||
static String m67(numberOfPeople) =>
|
||||
"${Intl.plural(numberOfPeople, zero: 'Deel met specifieke mensen', one: 'Gedeeld met 1 persoon', other: 'Gedeeld met ${numberOfPeople} mensen')}";
|
||||
|
||||
static String m67(emailIDs) => "Gedeeld met ${emailIDs}";
|
||||
|
||||
static String m68(fileType) =>
|
||||
"Deze ${fileType} zal worden verwijderd van jouw apparaat.";
|
||||
static String m68(emailIDs) => "Gedeeld met ${emailIDs}";
|
||||
|
||||
static String m69(fileType) =>
|
||||
"Deze ${fileType} staat zowel in Ente als op jouw apparaat.";
|
||||
"Deze ${fileType} zal worden verwijderd van jouw apparaat.";
|
||||
|
||||
static String m70(fileType) =>
|
||||
"Deze ${fileType} staat zowel in Ente als op jouw apparaat.";
|
||||
|
||||
static String m71(fileType) =>
|
||||
"Deze ${fileType} zal worden verwijderd uit Ente.";
|
||||
|
||||
static String m1(storageAmountInGB) => "${storageAmountInGB} GB";
|
||||
|
||||
static String m71(
|
||||
static String m72(
|
||||
usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) =>
|
||||
"${usedAmount} ${usedStorageUnit} van ${totalAmount} ${totalStorageUnit} gebruikt";
|
||||
|
||||
static String m72(id) =>
|
||||
static String m73(id) =>
|
||||
"Jouw ${id} is al aan een ander Ente account gekoppeld.\nAls je jouw ${id} wilt gebruiken met dit account, neem dan contact op met onze klantenservice";
|
||||
|
||||
static String m73(endDate) => "Uw abonnement loopt af op ${endDate}";
|
||||
static String m74(endDate) => "Uw abonnement loopt af op ${endDate}";
|
||||
|
||||
static String m74(completed, total) =>
|
||||
static String m75(completed, total) =>
|
||||
"${completed}/${total} herinneringen bewaard";
|
||||
|
||||
static String m75(ignoreReason) =>
|
||||
static String m76(ignoreReason) =>
|
||||
"Tik om te uploaden, upload wordt momenteel genegeerd vanwege ${ignoreReason}";
|
||||
|
||||
static String m76(storageAmountInGB) =>
|
||||
static String m77(storageAmountInGB) =>
|
||||
"Zij krijgen ook ${storageAmountInGB} GB";
|
||||
|
||||
static String m77(email) => "Dit is de verificatie-ID van ${email}";
|
||||
static String m78(email) => "Dit is de verificatie-ID van ${email}";
|
||||
|
||||
static String m78(count) =>
|
||||
static String m79(count) =>
|
||||
"${Intl.plural(count, zero: 'Binnenkort', one: '1 dag', other: '${count} dagen')}";
|
||||
|
||||
static String m79(email) =>
|
||||
static String m80(email) =>
|
||||
"Je bent uitgenodigd om een legacy contact van ${email} te zijn.";
|
||||
|
||||
static String m80(galleryType) =>
|
||||
static String m81(galleryType) =>
|
||||
"Galerijtype ${galleryType} wordt niet ondersteund voor hernoemen";
|
||||
|
||||
static String m81(ignoreReason) =>
|
||||
static String m82(ignoreReason) =>
|
||||
"Upload wordt genegeerd omdat ${ignoreReason}";
|
||||
|
||||
static String m82(count) => "${count} herinneringen veiligstellen...";
|
||||
static String m83(count) => "${count} herinneringen veiligstellen...";
|
||||
|
||||
static String m83(endDate) => "Geldig tot ${endDate}";
|
||||
static String m84(endDate) => "Geldig tot ${endDate}";
|
||||
|
||||
static String m84(email) => "Verifieer ${email}";
|
||||
static String m85(email) => "Verifieer ${email}";
|
||||
|
||||
static String m85(count) =>
|
||||
static String m86(count) =>
|
||||
"${Intl.plural(count, zero: '0 kijkers toegevoegd', one: '1 kijker toegevoegd', other: '${count} kijkers toegevoegd')}";
|
||||
|
||||
static String m2(email) =>
|
||||
"We hebben een e-mail gestuurd naar <green>${email}</green>";
|
||||
|
||||
static String m86(count) =>
|
||||
static String m87(count) =>
|
||||
"${Intl.plural(count, one: '${count} jaar geleden', other: '${count} jaar geleden')}";
|
||||
|
||||
static String m87(storageSaved) =>
|
||||
static String m88(storageSaved) =>
|
||||
"Je hebt ${storageSaved} succesvol vrijgemaakt!";
|
||||
|
||||
final messages = _notInlinedMessages(_notInlinedMessages);
|
||||
@@ -1628,7 +1628,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Geselecteerde bestanden worden verwijderd uit alle albums en verplaatst naar de prullenbak."),
|
||||
"selectedPhotos": m4,
|
||||
"selectedPhotosWithYours": m63,
|
||||
"selectedPhotosWithYours": m64,
|
||||
"send": MessageLookupByLibrary.simpleMessage("Verzenden"),
|
||||
"sendEmail": MessageLookupByLibrary.simpleMessage("E-mail versturen"),
|
||||
"sendInvite":
|
||||
@@ -1660,16 +1660,16 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"shareAnAlbumNow":
|
||||
MessageLookupByLibrary.simpleMessage("Deel nu een album"),
|
||||
"shareLink": MessageLookupByLibrary.simpleMessage("Link delen"),
|
||||
"shareMyVerificationID": m64,
|
||||
"shareMyVerificationID": m65,
|
||||
"shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage(
|
||||
"Deel alleen met de mensen die u wilt"),
|
||||
"shareTextConfirmOthersVerificationID": m5,
|
||||
"shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage(
|
||||
"Download Ente zodat we gemakkelijk foto\'s en video\'s in originele kwaliteit kunnen delen\n\nhttps://ente.io"),
|
||||
"shareTextReferralCode": m65,
|
||||
"shareTextReferralCode": m66,
|
||||
"shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage(
|
||||
"Delen met niet-Ente gebruikers"),
|
||||
"shareWithPeopleSectionTitle": m66,
|
||||
"shareWithPeopleSectionTitle": m67,
|
||||
"shareYourFirstAlbum":
|
||||
MessageLookupByLibrary.simpleMessage("Deel jouw eerste album"),
|
||||
"sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1680,7 +1680,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Nieuwe gedeelde foto\'s"),
|
||||
"sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage(
|
||||
"Ontvang meldingen wanneer iemand een foto toevoegt aan een gedeeld album waar je deel van uitmaakt"),
|
||||
"sharedWith": m67,
|
||||
"sharedWith": m68,
|
||||
"sharedWithMe": MessageLookupByLibrary.simpleMessage("Gedeeld met mij"),
|
||||
"sharedWithYou":
|
||||
MessageLookupByLibrary.simpleMessage("Gedeeld met jou"),
|
||||
@@ -1696,11 +1696,11 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Log uit op andere apparaten"),
|
||||
"signUpTerms": MessageLookupByLibrary.simpleMessage(
|
||||
"Ik ga akkoord met de <u-terms>gebruiksvoorwaarden</u-terms> en <u-policy>privacybeleid</u-policy>"),
|
||||
"singleFileDeleteFromDevice": m68,
|
||||
"singleFileDeleteFromDevice": m69,
|
||||
"singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage(
|
||||
"Het wordt uit alle albums verwijderd."),
|
||||
"singleFileInBothLocalAndRemote": m69,
|
||||
"singleFileInRemoteOnly": m70,
|
||||
"singleFileInBothLocalAndRemote": m70,
|
||||
"singleFileInRemoteOnly": m71,
|
||||
"skip": MessageLookupByLibrary.simpleMessage("Overslaan"),
|
||||
"social": MessageLookupByLibrary.simpleMessage("Sociale media"),
|
||||
"someItemsAreInBothEnteAndYourDevice": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1748,10 +1748,10 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"storageInGB": m1,
|
||||
"storageLimitExceeded":
|
||||
MessageLookupByLibrary.simpleMessage("Opslaglimiet overschreden"),
|
||||
"storageUsageInfo": m71,
|
||||
"storageUsageInfo": m72,
|
||||
"strongStrength": MessageLookupByLibrary.simpleMessage("Sterk"),
|
||||
"subAlreadyLinkedErrMessage": m72,
|
||||
"subWillBeCancelledOn": m73,
|
||||
"subAlreadyLinkedErrMessage": m73,
|
||||
"subWillBeCancelledOn": m74,
|
||||
"subscribe": MessageLookupByLibrary.simpleMessage("Abonneer"),
|
||||
"subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage(
|
||||
"Je hebt een actief betaald abonnement nodig om delen mogelijk te maken."),
|
||||
@@ -1768,7 +1768,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"suggestFeatures":
|
||||
MessageLookupByLibrary.simpleMessage("Features voorstellen"),
|
||||
"support": MessageLookupByLibrary.simpleMessage("Ondersteuning"),
|
||||
"syncProgress": m74,
|
||||
"syncProgress": m75,
|
||||
"syncStopped":
|
||||
MessageLookupByLibrary.simpleMessage("Synchronisatie gestopt"),
|
||||
"syncing": MessageLookupByLibrary.simpleMessage("Synchroniseren..."),
|
||||
@@ -1780,7 +1780,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Tik om te ontgrendelen"),
|
||||
"tapToUpload":
|
||||
MessageLookupByLibrary.simpleMessage("Tik om te uploaden"),
|
||||
"tapToUploadIsIgnoredDue": m75,
|
||||
"tapToUploadIsIgnoredDue": m76,
|
||||
"tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage(
|
||||
"Het lijkt erop dat er iets fout is gegaan. Probeer het later opnieuw. Als de fout zich blijft voordoen, neem dan contact op met ons supportteam."),
|
||||
"terminate": MessageLookupByLibrary.simpleMessage("Beëindigen"),
|
||||
@@ -1804,7 +1804,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"theseItemsWillBeDeletedFromYourDevice":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Deze bestanden zullen worden verwijderd van uw apparaat."),
|
||||
"theyAlsoGetXGb": m76,
|
||||
"theyAlsoGetXGb": m77,
|
||||
"theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage(
|
||||
"Ze zullen uit alle albums worden verwijderd."),
|
||||
"thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1820,7 +1820,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Dit e-mailadres is al in gebruik"),
|
||||
"thisImageHasNoExifData": MessageLookupByLibrary.simpleMessage(
|
||||
"Deze foto heeft geen exif gegevens"),
|
||||
"thisIsPersonVerificationId": m77,
|
||||
"thisIsPersonVerificationId": m78,
|
||||
"thisIsYourVerificationId":
|
||||
MessageLookupByLibrary.simpleMessage("Dit is uw verificatie-ID"),
|
||||
"thisWillLogYouOutOfTheFollowingDevice":
|
||||
@@ -1845,11 +1845,11 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"total": MessageLookupByLibrary.simpleMessage("totaal"),
|
||||
"totalSize": MessageLookupByLibrary.simpleMessage("Totale grootte"),
|
||||
"trash": MessageLookupByLibrary.simpleMessage("Prullenbak"),
|
||||
"trashDaysLeft": m78,
|
||||
"trashDaysLeft": m79,
|
||||
"trim": MessageLookupByLibrary.simpleMessage("Knippen"),
|
||||
"trustedContacts":
|
||||
MessageLookupByLibrary.simpleMessage("Vertrouwde contacten"),
|
||||
"trustedInviteBody": m79,
|
||||
"trustedInviteBody": m80,
|
||||
"tryAgain": MessageLookupByLibrary.simpleMessage("Probeer opnieuw"),
|
||||
"turnOnBackupForAutoUpload": MessageLookupByLibrary.simpleMessage(
|
||||
"Schakel back-up in om bestanden die toegevoegd zijn aan deze map op dit apparaat automatisch te uploaden."),
|
||||
@@ -1868,7 +1868,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Tweestapsverificatie succesvol gereset"),
|
||||
"twofactorSetup":
|
||||
MessageLookupByLibrary.simpleMessage("Tweestapsverificatie"),
|
||||
"typeOfGallerGallerytypeIsNotSupportedForRename": m80,
|
||||
"typeOfGallerGallerytypeIsNotSupportedForRename": m81,
|
||||
"unarchive": MessageLookupByLibrary.simpleMessage("Uit archief halen"),
|
||||
"unarchiveAlbum":
|
||||
MessageLookupByLibrary.simpleMessage("Album uit archief halen"),
|
||||
@@ -1894,10 +1894,10 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"updatingFolderSelection":
|
||||
MessageLookupByLibrary.simpleMessage("Map selectie bijwerken..."),
|
||||
"upgrade": MessageLookupByLibrary.simpleMessage("Upgraden"),
|
||||
"uploadIsIgnoredDueToIgnorereason": m81,
|
||||
"uploadIsIgnoredDueToIgnorereason": m82,
|
||||
"uploadingFilesToAlbum": MessageLookupByLibrary.simpleMessage(
|
||||
"Bestanden worden geüpload naar album..."),
|
||||
"uploadingMultipleMemories": m82,
|
||||
"uploadingMultipleMemories": m83,
|
||||
"uploadingSingleMemory": MessageLookupByLibrary.simpleMessage(
|
||||
"1 herinnering veiligstellen..."),
|
||||
"upto50OffUntil4thDec": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1915,7 +1915,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"useSelectedPhoto":
|
||||
MessageLookupByLibrary.simpleMessage("Gebruik geselecteerde foto"),
|
||||
"usedSpace": MessageLookupByLibrary.simpleMessage("Gebruikte ruimte"),
|
||||
"validTill": m83,
|
||||
"validTill": m84,
|
||||
"verificationFailedPleaseTryAgain":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Verificatie mislukt, probeer het opnieuw"),
|
||||
@@ -1923,7 +1923,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Verificatie ID"),
|
||||
"verify": MessageLookupByLibrary.simpleMessage("Verifiëren"),
|
||||
"verifyEmail": MessageLookupByLibrary.simpleMessage("Bevestig e-mail"),
|
||||
"verifyEmailID": m84,
|
||||
"verifyEmailID": m85,
|
||||
"verifyIDLabel": MessageLookupByLibrary.simpleMessage("Verifiëren"),
|
||||
"verifyPasskey":
|
||||
MessageLookupByLibrary.simpleMessage("Bevestig passkey"),
|
||||
@@ -1950,7 +1950,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"viewRecoveryKey":
|
||||
MessageLookupByLibrary.simpleMessage("Toon herstelsleutel"),
|
||||
"viewer": MessageLookupByLibrary.simpleMessage("Kijker"),
|
||||
"viewersSuccessfullyAdded": m85,
|
||||
"viewersSuccessfullyAdded": m86,
|
||||
"visitWebToManage": MessageLookupByLibrary.simpleMessage(
|
||||
"Bezoek alstublieft web.ente.io om uw abonnement te beheren"),
|
||||
"waitingForVerification":
|
||||
@@ -1971,7 +1971,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Vertrouwde contacten kunnen helpen bij het herstellen van je data."),
|
||||
"yearShort": MessageLookupByLibrary.simpleMessage("jr"),
|
||||
"yearly": MessageLookupByLibrary.simpleMessage("Jaarlijks"),
|
||||
"yearsAgo": m86,
|
||||
"yearsAgo": m87,
|
||||
"yes": MessageLookupByLibrary.simpleMessage("Ja"),
|
||||
"yesCancel": MessageLookupByLibrary.simpleMessage("Ja, opzeggen"),
|
||||
"yesConvertToViewer":
|
||||
@@ -2003,7 +2003,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Je kunt niet met jezelf delen"),
|
||||
"youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage(
|
||||
"U heeft geen gearchiveerde bestanden."),
|
||||
"youHaveSuccessfullyFreedUp": m87,
|
||||
"youHaveSuccessfullyFreedUp": m88,
|
||||
"yourAccountHasBeenDeleted":
|
||||
MessageLookupByLibrary.simpleMessage("Je account is verwijderd"),
|
||||
"yourMap": MessageLookupByLibrary.simpleMessage("Jouw kaart"),
|
||||
|
||||
20
mobile/lib/generated/intl/messages_no.dart
generated
20
mobile/lib/generated/intl/messages_no.dart
generated
@@ -51,20 +51,20 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
|
||||
static String m4(count) => "${count} valgt";
|
||||
|
||||
static String m63(count, yourCount) => "${count} valgt (${yourCount} dine)";
|
||||
static String m64(count, yourCount) => "${count} valgt (${yourCount} dine)";
|
||||
|
||||
static String m64(verificationID) =>
|
||||
static String m65(verificationID) =>
|
||||
"Her er min verifiserings-ID: ${verificationID} for ente.io.";
|
||||
|
||||
static String m5(verificationID) =>
|
||||
"Hei, kan du bekrefte at dette er din ente.io verifiserings-ID: ${verificationID}";
|
||||
|
||||
static String m66(numberOfPeople) =>
|
||||
static String m67(numberOfPeople) =>
|
||||
"${Intl.plural(numberOfPeople, zero: 'Del med bestemte personer', one: 'Delt med 1 person', other: 'Delt med ${numberOfPeople} personer')}";
|
||||
|
||||
static String m77(email) => "Dette er ${email} sin verifiserings-ID";
|
||||
static String m78(email) => "Dette er ${email} sin verifiserings-ID";
|
||||
|
||||
static String m84(email) => "Verifiser ${email}";
|
||||
static String m85(email) => "Verifiser ${email}";
|
||||
|
||||
static String m2(email) =>
|
||||
"Vi har sendt en e-post til <green>${email}</green>";
|
||||
@@ -355,7 +355,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Valgte mapper vil bli kryptert og sikkerhetskopiert"),
|
||||
"selectedPhotos": m4,
|
||||
"selectedPhotosWithYours": m63,
|
||||
"selectedPhotosWithYours": m64,
|
||||
"sendEmail": MessageLookupByLibrary.simpleMessage("Send e-post"),
|
||||
"sendInvite": MessageLookupByLibrary.simpleMessage("Send invitasjon"),
|
||||
"sendLink": MessageLookupByLibrary.simpleMessage("Send lenke"),
|
||||
@@ -365,9 +365,9 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"setupComplete":
|
||||
MessageLookupByLibrary.simpleMessage("Oppsett fullført"),
|
||||
"shareALink": MessageLookupByLibrary.simpleMessage("Del en lenke"),
|
||||
"shareMyVerificationID": m64,
|
||||
"shareMyVerificationID": m65,
|
||||
"shareTextConfirmOthersVerificationID": m5,
|
||||
"shareWithPeopleSectionTitle": m66,
|
||||
"shareWithPeopleSectionTitle": m67,
|
||||
"sharedPhotoNotifications":
|
||||
MessageLookupByLibrary.simpleMessage("Nye delte bilder"),
|
||||
"sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -405,7 +405,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Dette kan brukes til å gjenopprette kontoen din hvis du mister din andre faktor"),
|
||||
"thisDevice": MessageLookupByLibrary.simpleMessage("Denne enheten"),
|
||||
"thisIsPersonVerificationId": m77,
|
||||
"thisIsPersonVerificationId": m78,
|
||||
"thisIsYourVerificationId": MessageLookupByLibrary.simpleMessage(
|
||||
"Dette er din bekreftelses-ID"),
|
||||
"thisWillLogYouOutOfTheFollowingDevice":
|
||||
@@ -432,7 +432,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"verify": MessageLookupByLibrary.simpleMessage("Bekreft"),
|
||||
"verifyEmail":
|
||||
MessageLookupByLibrary.simpleMessage("Bekreft e-postadresse"),
|
||||
"verifyEmailID": m84,
|
||||
"verifyEmailID": m85,
|
||||
"verifyPassword":
|
||||
MessageLookupByLibrary.simpleMessage("Bekreft passord"),
|
||||
"verifyingRecoveryKey": MessageLookupByLibrary.simpleMessage(
|
||||
|
||||
112
mobile/lib/generated/intl/messages_pl.dart
generated
112
mobile/lib/generated/intl/messages_pl.dart
generated
@@ -184,85 +184,88 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
static String m62(count) =>
|
||||
"${Intl.plural(count, one: 'Znaleziono ${count} wynik', few: 'Znaleziono ${count} wyniki', other: 'Znaleziono ${count} wyników')}";
|
||||
|
||||
static String m63(snapshotLength, searchLength) =>
|
||||
"Niezgodność długości sekcji: ${snapshotLength} != ${searchLength}";
|
||||
|
||||
static String m4(count) => "Wybrano ${count}";
|
||||
|
||||
static String m63(count, yourCount) =>
|
||||
static String m64(count, yourCount) =>
|
||||
"Wybrano ${count} (twoich ${yourCount})";
|
||||
|
||||
static String m64(verificationID) =>
|
||||
static String m65(verificationID) =>
|
||||
"Oto mój identyfikator weryfikacyjny: ${verificationID} dla ente.io.";
|
||||
|
||||
static String m5(verificationID) =>
|
||||
"Hej, czy możesz potwierdzić, że to jest Twój identyfikator weryfikacyjny ente.io: ${verificationID}";
|
||||
|
||||
static String m65(referralCode, referralStorageInGB) =>
|
||||
static String m66(referralCode, referralStorageInGB) =>
|
||||
"Kod polecający: ${referralCode} \n\nZastosuj go w: Ustawienia → Ogólne → Polecanie, aby otrzymać ${referralStorageInGB} GB za darmo po zarejestrowaniu się w płatnym planie\n\nhttps://ente.io";
|
||||
|
||||
static String m66(numberOfPeople) =>
|
||||
static String m67(numberOfPeople) =>
|
||||
"${Intl.plural(numberOfPeople, zero: 'Udostępnione określonym osobom', one: 'Udostępnione 1 osobie', other: 'Udostępnione ${numberOfPeople} osobom')}";
|
||||
|
||||
static String m67(emailIDs) => "Udostępnione z ${emailIDs}";
|
||||
|
||||
static String m68(fileType) =>
|
||||
"Ten ${fileType} zostanie usunięty z Twojego urządzenia.";
|
||||
static String m68(emailIDs) => "Udostępnione z ${emailIDs}";
|
||||
|
||||
static String m69(fileType) =>
|
||||
"Ten ${fileType} zostanie usunięty z Twojego urządzenia.";
|
||||
|
||||
static String m70(fileType) =>
|
||||
"Ten ${fileType} jest zarówno w Ente, jak i na twoim urządzeniu.";
|
||||
|
||||
static String m70(fileType) => "Ten ${fileType} zostanie usunięty z Ente.";
|
||||
static String m71(fileType) => "Ten ${fileType} zostanie usunięty z Ente.";
|
||||
|
||||
static String m1(storageAmountInGB) => "${storageAmountInGB} GB";
|
||||
|
||||
static String m71(
|
||||
static String m72(
|
||||
usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) =>
|
||||
"Użyto ${usedAmount} ${usedStorageUnit} z ${totalAmount} ${totalStorageUnit}";
|
||||
|
||||
static String m72(id) =>
|
||||
static String m73(id) =>
|
||||
"Twoje ${id} jest już połączony z innym kontem Ente.\nJeśli chcesz użyć swojego ${id} za pomocą tego konta, skontaktuj się z naszym wsparciem technicznym";
|
||||
|
||||
static String m73(endDate) =>
|
||||
static String m74(endDate) =>
|
||||
"Twoja subskrypcja zostanie anulowana dnia ${endDate}";
|
||||
|
||||
static String m74(completed, total) =>
|
||||
static String m75(completed, total) =>
|
||||
"Zachowano ${completed}/${total} wspomnień";
|
||||
|
||||
static String m75(ignoreReason) =>
|
||||
static String m76(ignoreReason) =>
|
||||
"Naciśnij, aby przesłać, przesyłanie jest obecnie ignorowane z powodu ${ignoreReason}";
|
||||
|
||||
static String m76(storageAmountInGB) =>
|
||||
static String m77(storageAmountInGB) =>
|
||||
"Oni również otrzymują ${storageAmountInGB} GB";
|
||||
|
||||
static String m77(email) => "To jest identyfikator weryfikacyjny ${email}";
|
||||
static String m78(email) => "To jest identyfikator weryfikacyjny ${email}";
|
||||
|
||||
static String m78(count) =>
|
||||
static String m79(count) =>
|
||||
"${Intl.plural(count, zero: 'Wkrótce', one: '1 dzień', few: '${count} dni', other: '${count} dni')}";
|
||||
|
||||
static String m79(email) =>
|
||||
static String m80(email) =>
|
||||
"Zostałeś zaproszony do bycia dziedzicznym kontaktem przez ${email}.";
|
||||
|
||||
static String m80(galleryType) =>
|
||||
static String m81(galleryType) =>
|
||||
"Typ galerii ${galleryType} nie jest obsługiwany dla zmiany nazwy";
|
||||
|
||||
static String m81(ignoreReason) =>
|
||||
static String m82(ignoreReason) =>
|
||||
"Przesyłanie jest ignorowane z powodu ${ignoreReason}";
|
||||
|
||||
static String m82(count) =>
|
||||
static String m83(count) =>
|
||||
"${Intl.plural(count, one: 'Zachowywanie ${count} wspomnienia...', few: 'Zachowywanie ${count} wspomnienia...', many: 'Zachowywanie ${count} wspomnień...', other: 'Zachowywanie ${count} wspomnień...')}";
|
||||
|
||||
static String m83(endDate) => "Ważne do ${endDate}";
|
||||
static String m84(endDate) => "Ważne do ${endDate}";
|
||||
|
||||
static String m84(email) => "Zweryfikuj ${email}";
|
||||
static String m85(email) => "Zweryfikuj ${email}";
|
||||
|
||||
static String m85(count) =>
|
||||
static String m86(count) =>
|
||||
"${Intl.plural(count, zero: 'Dodano 0 widzów', one: 'Dodano 1 widza', other: 'Dodano ${count} widzów')}";
|
||||
|
||||
static String m2(email) =>
|
||||
"Wysłaliśmy wiadomość na adres <green>${email}</green>";
|
||||
|
||||
static String m86(count) =>
|
||||
static String m87(count) =>
|
||||
"${Intl.plural(count, one: '${count} rok temu', few: '${count} lata temu', many: '${count} lat temu', other: '${count} lata temu')}";
|
||||
|
||||
static String m87(storageSaved) => "Pomyślnie zwolniłeś/aś ${storageSaved}!";
|
||||
static String m88(storageSaved) => "Pomyślnie zwolniłeś/aś ${storageSaved}!";
|
||||
|
||||
final messages = _notInlinedMessages(_notInlinedMessages);
|
||||
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
|
||||
@@ -846,8 +849,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"enterCode": MessageLookupByLibrary.simpleMessage("Wprowadź kod"),
|
||||
"enterCodeDescription": MessageLookupByLibrary.simpleMessage(
|
||||
"Wprowadź kod dostarczony przez znajomego, aby uzyskać bezpłatne miejsce dla was obojga"),
|
||||
"enterDateOfBirth": MessageLookupByLibrary.simpleMessage(
|
||||
"Data urodzenia (nieobowiązkowo)"),
|
||||
"enterDateOfBirth":
|
||||
MessageLookupByLibrary.simpleMessage("Urodziny (nieobowiązkowo)"),
|
||||
"enterEmail":
|
||||
MessageLookupByLibrary.simpleMessage("Wprowadź adres e-mail"),
|
||||
"enterFileName":
|
||||
@@ -1173,6 +1176,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"magicSearchHint": MessageLookupByLibrary.simpleMessage(
|
||||
"Magiczne wyszukiwanie pozwala na wyszukiwanie zdjęć według ich zawartości, np. \"kwiat\", \"czerwony samochód\", \"dokumenty tożsamości\""),
|
||||
"manage": MessageLookupByLibrary.simpleMessage("Zarządzaj"),
|
||||
"manageDeviceStorage": MessageLookupByLibrary.simpleMessage(
|
||||
"Zarządzaj pamięcią podręczną urządzenia"),
|
||||
"manageDeviceStorageDesc": MessageLookupByLibrary.simpleMessage(
|
||||
"Przejrzyj i wyczyść lokalną pamięć podręczną."),
|
||||
"manageFamily":
|
||||
@@ -1597,6 +1602,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"searchPersonsEmptySection": MessageLookupByLibrary.simpleMessage(
|
||||
"Osoby będą wyświetlane tutaj po zakończeniu przetwarzania i synchronizacji"),
|
||||
"searchResultCount": m62,
|
||||
"searchSectionsLengthMismatch": m63,
|
||||
"security": MessageLookupByLibrary.simpleMessage("Bezpieczeństwo"),
|
||||
"seePublicAlbumLinksInApp": MessageLookupByLibrary.simpleMessage(
|
||||
"Zobacz publiczne linki do albumów w aplikacji"),
|
||||
@@ -1630,7 +1636,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Wybrane elementy zostaną usunięte ze wszystkich albumów i przeniesione do kosza."),
|
||||
"selectedPhotos": m4,
|
||||
"selectedPhotosWithYours": m63,
|
||||
"selectedPhotosWithYours": m64,
|
||||
"send": MessageLookupByLibrary.simpleMessage("Wyślij"),
|
||||
"sendEmail": MessageLookupByLibrary.simpleMessage("Wyślij e-mail"),
|
||||
"sendInvite":
|
||||
@@ -1659,16 +1665,16 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"shareAnAlbumNow":
|
||||
MessageLookupByLibrary.simpleMessage("Udostępnij teraz album"),
|
||||
"shareLink": MessageLookupByLibrary.simpleMessage("Udostępnij link"),
|
||||
"shareMyVerificationID": m64,
|
||||
"shareMyVerificationID": m65,
|
||||
"shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage(
|
||||
"Udostępnij tylko ludziom, którym chcesz"),
|
||||
"shareTextConfirmOthersVerificationID": m5,
|
||||
"shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage(
|
||||
"Pobierz Ente, abyśmy mogli łatwo udostępniać zdjęcia i wideo w oryginalnej jakości\n\nhttps://ente.io"),
|
||||
"shareTextReferralCode": m65,
|
||||
"shareTextReferralCode": m66,
|
||||
"shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage(
|
||||
"Udostępnij użytkownikom bez konta Ente"),
|
||||
"shareWithPeopleSectionTitle": m66,
|
||||
"shareWithPeopleSectionTitle": m67,
|
||||
"shareYourFirstAlbum": MessageLookupByLibrary.simpleMessage(
|
||||
"Udostępnij swój pierwszy album"),
|
||||
"sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1681,7 +1687,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Nowe udostępnione zdjęcia"),
|
||||
"sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage(
|
||||
"Otrzymuj powiadomienia, gdy ktoś doda zdjęcie do udostępnionego albumu, którego jesteś częścią"),
|
||||
"sharedWith": m67,
|
||||
"sharedWith": m68,
|
||||
"sharedWithMe":
|
||||
MessageLookupByLibrary.simpleMessage("Udostępnione ze mną"),
|
||||
"sharedWithYou":
|
||||
@@ -1698,11 +1704,11 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Wyloguj z pozostałych urządzeń"),
|
||||
"signUpTerms": MessageLookupByLibrary.simpleMessage(
|
||||
"Akceptuję <u-terms>warunki korzystania z usługi</u-terms> i <u-policy>politykę prywatności</u-policy>"),
|
||||
"singleFileDeleteFromDevice": m68,
|
||||
"singleFileDeleteFromDevice": m69,
|
||||
"singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage(
|
||||
"To zostanie usunięte ze wszystkich albumów."),
|
||||
"singleFileInBothLocalAndRemote": m69,
|
||||
"singleFileInRemoteOnly": m70,
|
||||
"singleFileInBothLocalAndRemote": m70,
|
||||
"singleFileInRemoteOnly": m71,
|
||||
"skip": MessageLookupByLibrary.simpleMessage("Pomiń"),
|
||||
"social": MessageLookupByLibrary.simpleMessage("Społeczność"),
|
||||
"someItemsAreInBothEnteAndYourDevice":
|
||||
@@ -1753,10 +1759,10 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"storageInGB": m1,
|
||||
"storageLimitExceeded":
|
||||
MessageLookupByLibrary.simpleMessage("Przekroczono limit pamięci"),
|
||||
"storageUsageInfo": m71,
|
||||
"storageUsageInfo": m72,
|
||||
"strongStrength": MessageLookupByLibrary.simpleMessage("Silne"),
|
||||
"subAlreadyLinkedErrMessage": m72,
|
||||
"subWillBeCancelledOn": m73,
|
||||
"subAlreadyLinkedErrMessage": m73,
|
||||
"subWillBeCancelledOn": m74,
|
||||
"subscribe": MessageLookupByLibrary.simpleMessage("Subskrybuj"),
|
||||
"subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage(
|
||||
"Potrzebujesz aktywnej płatnej subskrypcji, aby włączyć udostępnianie."),
|
||||
@@ -1773,7 +1779,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"suggestFeatures":
|
||||
MessageLookupByLibrary.simpleMessage("Zaproponuj funkcje"),
|
||||
"support": MessageLookupByLibrary.simpleMessage("Wsparcie techniczne"),
|
||||
"syncProgress": m74,
|
||||
"syncProgress": m75,
|
||||
"syncStopped":
|
||||
MessageLookupByLibrary.simpleMessage("Synchronizacja zatrzymana"),
|
||||
"syncing": MessageLookupByLibrary.simpleMessage("Synchronizowanie..."),
|
||||
@@ -1786,7 +1792,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Naciśnij, aby odblokować"),
|
||||
"tapToUpload":
|
||||
MessageLookupByLibrary.simpleMessage("Naciśnij, aby przesłać"),
|
||||
"tapToUploadIsIgnoredDue": m75,
|
||||
"tapToUploadIsIgnoredDue": m76,
|
||||
"tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage(
|
||||
"Wygląda na to, że coś poszło nie tak. Spróbuj ponownie po pewnym czasie. Jeśli błąd będzie się powtarzał, skontaktuj się z naszym zespołem pomocy technicznej."),
|
||||
"terminate": MessageLookupByLibrary.simpleMessage("Zakończ"),
|
||||
@@ -1810,7 +1816,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"theseItemsWillBeDeletedFromYourDevice":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Te elementy zostaną usunięte z Twojego urządzenia."),
|
||||
"theyAlsoGetXGb": m76,
|
||||
"theyAlsoGetXGb": m77,
|
||||
"theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage(
|
||||
"Zostaną one usunięte ze wszystkich albumów."),
|
||||
"thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1826,7 +1832,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Ten e-mail jest już używany"),
|
||||
"thisImageHasNoExifData": MessageLookupByLibrary.simpleMessage(
|
||||
"Ten obraz nie posiada danych exif"),
|
||||
"thisIsPersonVerificationId": m77,
|
||||
"thisIsPersonVerificationId": m78,
|
||||
"thisIsYourVerificationId": MessageLookupByLibrary.simpleMessage(
|
||||
"To jest Twój Identyfikator Weryfikacji"),
|
||||
"thisWillLogYouOutOfTheFollowingDevice":
|
||||
@@ -1850,11 +1856,11 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"total": MessageLookupByLibrary.simpleMessage("ogółem"),
|
||||
"totalSize": MessageLookupByLibrary.simpleMessage("Całkowity rozmiar"),
|
||||
"trash": MessageLookupByLibrary.simpleMessage("Kosz"),
|
||||
"trashDaysLeft": m78,
|
||||
"trashDaysLeft": m79,
|
||||
"trim": MessageLookupByLibrary.simpleMessage("Przytnij"),
|
||||
"trustedContacts":
|
||||
MessageLookupByLibrary.simpleMessage("Zaufane kontakty"),
|
||||
"trustedInviteBody": m79,
|
||||
"trustedInviteBody": m80,
|
||||
"tryAgain": MessageLookupByLibrary.simpleMessage("Spróbuj ponownie"),
|
||||
"turnOnBackupForAutoUpload": MessageLookupByLibrary.simpleMessage(
|
||||
"Włącz kopię zapasową, aby automatycznie przesyłać pliki dodane do folderu urządzenia do Ente."),
|
||||
@@ -1874,7 +1880,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Pomyślnie zresetowano uwierzytelnianie dwustopniowe"),
|
||||
"twofactorSetup": MessageLookupByLibrary.simpleMessage(
|
||||
"Uwierzytelnianie dwustopniowe"),
|
||||
"typeOfGallerGallerytypeIsNotSupportedForRename": m80,
|
||||
"typeOfGallerGallerytypeIsNotSupportedForRename": m81,
|
||||
"unarchive":
|
||||
MessageLookupByLibrary.simpleMessage("Przywróć z archiwum"),
|
||||
"unarchiveAlbum":
|
||||
@@ -1899,10 +1905,10 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"updatingFolderSelection": MessageLookupByLibrary.simpleMessage(
|
||||
"Aktualizowanie wyboru folderu..."),
|
||||
"upgrade": MessageLookupByLibrary.simpleMessage("Ulepsz"),
|
||||
"uploadIsIgnoredDueToIgnorereason": m81,
|
||||
"uploadIsIgnoredDueToIgnorereason": m82,
|
||||
"uploadingFilesToAlbum": MessageLookupByLibrary.simpleMessage(
|
||||
"Przesyłanie plików do albumu..."),
|
||||
"uploadingMultipleMemories": m82,
|
||||
"uploadingMultipleMemories": m83,
|
||||
"uploadingSingleMemory": MessageLookupByLibrary.simpleMessage(
|
||||
"Zachowywanie 1 wspomnienia..."),
|
||||
"upto50OffUntil4thDec": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1920,7 +1926,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"useSelectedPhoto":
|
||||
MessageLookupByLibrary.simpleMessage("Użyj zaznaczone zdjęcie"),
|
||||
"usedSpace": MessageLookupByLibrary.simpleMessage("Zajęta przestrzeń"),
|
||||
"validTill": m83,
|
||||
"validTill": m84,
|
||||
"verificationFailedPleaseTryAgain":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Weryfikacja nie powiodła się, spróbuj ponownie"),
|
||||
@@ -1929,7 +1935,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"verify": MessageLookupByLibrary.simpleMessage("Zweryfikuj"),
|
||||
"verifyEmail":
|
||||
MessageLookupByLibrary.simpleMessage("Zweryfikuj adres e-mail"),
|
||||
"verifyEmailID": m84,
|
||||
"verifyEmailID": m85,
|
||||
"verifyIDLabel": MessageLookupByLibrary.simpleMessage("Zweryfikuj"),
|
||||
"verifyPasskey":
|
||||
MessageLookupByLibrary.simpleMessage("Zweryfikuj klucz dostępu"),
|
||||
@@ -1955,7 +1961,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"viewRecoveryKey":
|
||||
MessageLookupByLibrary.simpleMessage("Zobacz klucz odzyskiwania"),
|
||||
"viewer": MessageLookupByLibrary.simpleMessage("Widz"),
|
||||
"viewersSuccessfullyAdded": m85,
|
||||
"viewersSuccessfullyAdded": m86,
|
||||
"visitWebToManage": MessageLookupByLibrary.simpleMessage(
|
||||
"Odwiedź stronę web.ente.io, aby zarządzać subskrypcją"),
|
||||
"waitingForVerification": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1976,7 +1982,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Zaufany kontakt może pomóc w odzyskaniu Twoich danych."),
|
||||
"yearShort": MessageLookupByLibrary.simpleMessage("r"),
|
||||
"yearly": MessageLookupByLibrary.simpleMessage("Rocznie"),
|
||||
"yearsAgo": m86,
|
||||
"yearsAgo": m87,
|
||||
"yes": MessageLookupByLibrary.simpleMessage("Tak"),
|
||||
"yesCancel": MessageLookupByLibrary.simpleMessage("Tak, anuluj"),
|
||||
"yesConvertToViewer":
|
||||
@@ -2008,7 +2014,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Nie możesz udostępnić samemu sobie"),
|
||||
"youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage(
|
||||
"Nie masz żadnych zarchiwizowanych elementów."),
|
||||
"youHaveSuccessfullyFreedUp": m87,
|
||||
"youHaveSuccessfullyFreedUp": m88,
|
||||
"yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage(
|
||||
"Twoje konto zostało usunięte"),
|
||||
"yourMap": MessageLookupByLibrary.simpleMessage("Twoja mapa"),
|
||||
|
||||
108
mobile/lib/generated/intl/messages_pt.dart
generated
108
mobile/lib/generated/intl/messages_pt.dart
generated
@@ -182,82 +182,85 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
static String m62(count) =>
|
||||
"${Intl.plural(count, one: '${count} resultado encontrado', other: '${count} resultados encontrados')}";
|
||||
|
||||
static String m63(snapshotLength, searchLength) =>
|
||||
"Incompatibilidade de comprimento de seções: ${snapshotLength} != ${searchLength}";
|
||||
|
||||
static String m4(count) => "${count} selecionado(s)";
|
||||
|
||||
static String m63(count, yourCount) =>
|
||||
static String m64(count, yourCount) =>
|
||||
"${count} selecionado(s) (${yourCount} seus)";
|
||||
|
||||
static String m64(verificationID) =>
|
||||
static String m65(verificationID) =>
|
||||
"Aqui está meu ID de verificação para o ente.io: ${verificationID}";
|
||||
|
||||
static String m5(verificationID) =>
|
||||
"Ei, você pode confirmar se este ID de verificação do ente.io é seu?: ${verificationID}";
|
||||
|
||||
static String m65(referralCode, referralStorageInGB) =>
|
||||
static String m66(referralCode, referralStorageInGB) =>
|
||||
"Código de referência do Ente: ${referralCode} \n\nAplique-o em Configurações → Geral → Referências para obter ${referralStorageInGB} GB grátis após a sua inscrição num plano pago\n\nhttps://ente.io";
|
||||
|
||||
static String m66(numberOfPeople) =>
|
||||
static String m67(numberOfPeople) =>
|
||||
"${Intl.plural(numberOfPeople, zero: 'Compartilhe com pessoas específicas', one: 'Compartilhado com 1 pessoa', other: 'Compartilhado com ${numberOfPeople} pessoas')}";
|
||||
|
||||
static String m67(emailIDs) => "Compartilhado com ${emailIDs}";
|
||||
|
||||
static String m68(fileType) =>
|
||||
"Este ${fileType} será excluído do dispositivo.";
|
||||
static String m68(emailIDs) => "Compartilhado com ${emailIDs}";
|
||||
|
||||
static String m69(fileType) =>
|
||||
"Este ${fileType} será excluído do dispositivo.";
|
||||
|
||||
static String m70(fileType) =>
|
||||
"Este ${fileType} está no Ente e em seu dispositivo.";
|
||||
|
||||
static String m70(fileType) => "Este ${fileType} será excluído do Ente.";
|
||||
static String m71(fileType) => "Este ${fileType} será excluído do Ente.";
|
||||
|
||||
static String m1(storageAmountInGB) => "${storageAmountInGB} GB";
|
||||
|
||||
static String m71(
|
||||
static String m72(
|
||||
usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) =>
|
||||
"${usedAmount} ${usedStorageUnit} de ${totalAmount} ${totalStorageUnit} usado";
|
||||
|
||||
static String m72(id) =>
|
||||
static String m73(id) =>
|
||||
"Seu ${id} já está vinculado a outra conta Ente. Se você gostaria de usar seu ${id} com esta conta, entre em contato conosco\"";
|
||||
|
||||
static String m73(endDate) => "Sua assinatura será cancelada em ${endDate}";
|
||||
static String m74(endDate) => "Sua assinatura será cancelada em ${endDate}";
|
||||
|
||||
static String m74(completed, total) =>
|
||||
static String m75(completed, total) =>
|
||||
"${completed}/${total} memórias preservadas";
|
||||
|
||||
static String m75(ignoreReason) =>
|
||||
static String m76(ignoreReason) =>
|
||||
"Toque para enviar, atualmente o envio é ignorado devido a ${ignoreReason}";
|
||||
|
||||
static String m76(storageAmountInGB) =>
|
||||
static String m77(storageAmountInGB) =>
|
||||
"Eles também recebem ${storageAmountInGB} GB";
|
||||
|
||||
static String m77(email) => "Este é o ID de verificação de ${email}";
|
||||
static String m78(email) => "Este é o ID de verificação de ${email}";
|
||||
|
||||
static String m78(count) =>
|
||||
static String m79(count) =>
|
||||
"${Intl.plural(count, zero: 'Em breve', one: '1 dia', other: '${count} dias')}";
|
||||
|
||||
static String m79(email) =>
|
||||
static String m80(email) =>
|
||||
"Você foi convidado para ser um contato legado por ${email}.";
|
||||
|
||||
static String m80(galleryType) =>
|
||||
static String m81(galleryType) =>
|
||||
"O tipo de galeria ${galleryType} não é suportado para renomear";
|
||||
|
||||
static String m81(ignoreReason) =>
|
||||
static String m82(ignoreReason) =>
|
||||
"O envio é ignorado devido a ${ignoreReason}";
|
||||
|
||||
static String m82(count) => "Preservando ${count} memórias...";
|
||||
static String m83(count) => "Preservando ${count} memórias...";
|
||||
|
||||
static String m83(endDate) => "Válido até ${endDate}";
|
||||
static String m84(endDate) => "Válido até ${endDate}";
|
||||
|
||||
static String m84(email) => "Verificar ${email}";
|
||||
static String m85(email) => "Verificar ${email}";
|
||||
|
||||
static String m85(count) =>
|
||||
static String m86(count) =>
|
||||
"${Intl.plural(count, zero: 'Adicionado 0 visualizadores', one: 'Adicionado 1 visualizador', other: 'Adicionado ${count} visualizadores')}";
|
||||
|
||||
static String m2(email) => "Nós enviamos um e-mail à <green>${email}</green>";
|
||||
|
||||
static String m86(count) =>
|
||||
static String m87(count) =>
|
||||
"${Intl.plural(count, one: '${count} ano atrás', other: '${count} anos atrás')}";
|
||||
|
||||
static String m87(storageSaved) =>
|
||||
static String m88(storageSaved) =>
|
||||
"Você liberou ${storageSaved} com sucesso!";
|
||||
|
||||
final messages = _notInlinedMessages(_notInlinedMessages);
|
||||
@@ -1167,6 +1170,8 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"magicSearchHint": MessageLookupByLibrary.simpleMessage(
|
||||
"A busca mágica permite buscar fotos pelo conteúdo, p. e.x. \'flor\', \'carro vermelho\', \'identidade\'"),
|
||||
"manage": MessageLookupByLibrary.simpleMessage("Gerenciar"),
|
||||
"manageDeviceStorage": MessageLookupByLibrary.simpleMessage(
|
||||
"Gerenciar cache do dispositivo"),
|
||||
"manageDeviceStorageDesc": MessageLookupByLibrary.simpleMessage(
|
||||
"Reveja e limpe o armazenamento de cache local."),
|
||||
"manageFamily":
|
||||
@@ -1587,6 +1592,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"searchPersonsEmptySection": MessageLookupByLibrary.simpleMessage(
|
||||
"As pessoas serão exibidas aqui quando o processamento e sincronização for concluído"),
|
||||
"searchResultCount": m62,
|
||||
"searchSectionsLengthMismatch": m63,
|
||||
"security": MessageLookupByLibrary.simpleMessage("Segurança"),
|
||||
"seePublicAlbumLinksInApp": MessageLookupByLibrary.simpleMessage(
|
||||
"Ver links de álbum compartilhado no aplicativo"),
|
||||
@@ -1621,7 +1627,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Os itens selecionados serão excluídos de todos os álbuns e movidos para a lixeira."),
|
||||
"selectedPhotos": m4,
|
||||
"selectedPhotosWithYours": m63,
|
||||
"selectedPhotosWithYours": m64,
|
||||
"send": MessageLookupByLibrary.simpleMessage("Enviar"),
|
||||
"sendEmail": MessageLookupByLibrary.simpleMessage("Enviar e-mail"),
|
||||
"sendInvite": MessageLookupByLibrary.simpleMessage("Enviar convite"),
|
||||
@@ -1651,16 +1657,16 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"shareAnAlbumNow":
|
||||
MessageLookupByLibrary.simpleMessage("Compartilhar um álbum agora"),
|
||||
"shareLink": MessageLookupByLibrary.simpleMessage("Compartilhar link"),
|
||||
"shareMyVerificationID": m64,
|
||||
"shareMyVerificationID": m65,
|
||||
"shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage(
|
||||
"Compartilhar apenas com as pessoas que você quiser"),
|
||||
"shareTextConfirmOthersVerificationID": m5,
|
||||
"shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage(
|
||||
"Baixe o Ente para que nós possamos compartilhar com facilidade fotos e vídeos de qualidade original\n\nhttps://ente.io"),
|
||||
"shareTextReferralCode": m65,
|
||||
"shareTextReferralCode": m66,
|
||||
"shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage(
|
||||
"Compartilhar com usuários não ente"),
|
||||
"shareWithPeopleSectionTitle": m66,
|
||||
"shareWithPeopleSectionTitle": m67,
|
||||
"shareYourFirstAlbum": MessageLookupByLibrary.simpleMessage(
|
||||
"Compartilhar seu primeiro álbum"),
|
||||
"sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1673,7 +1679,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Novas fotos compartilhadas"),
|
||||
"sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage(
|
||||
"Receber notificações quando alguém adicionar uma foto a um álbum compartilhado que você faz parte"),
|
||||
"sharedWith": m67,
|
||||
"sharedWith": m68,
|
||||
"sharedWithMe":
|
||||
MessageLookupByLibrary.simpleMessage("Compartilhado comigo"),
|
||||
"sharedWithYou":
|
||||
@@ -1690,11 +1696,11 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Sair em outros dispositivos"),
|
||||
"signUpTerms": MessageLookupByLibrary.simpleMessage(
|
||||
"Eu concordo com os <u-terms>termos de serviço</u-terms> e a <u-policy>política de privacidade</u-policy>"),
|
||||
"singleFileDeleteFromDevice": m68,
|
||||
"singleFileDeleteFromDevice": m69,
|
||||
"singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage(
|
||||
"Ele será excluído de todos os álbuns."),
|
||||
"singleFileInBothLocalAndRemote": m69,
|
||||
"singleFileInRemoteOnly": m70,
|
||||
"singleFileInBothLocalAndRemote": m70,
|
||||
"singleFileInRemoteOnly": m71,
|
||||
"skip": MessageLookupByLibrary.simpleMessage("Pular"),
|
||||
"social": MessageLookupByLibrary.simpleMessage("Redes sociais"),
|
||||
"someItemsAreInBothEnteAndYourDevice":
|
||||
@@ -1745,10 +1751,10 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"storageInGB": m1,
|
||||
"storageLimitExceeded": MessageLookupByLibrary.simpleMessage(
|
||||
"Limite de armazenamento excedido"),
|
||||
"storageUsageInfo": m71,
|
||||
"storageUsageInfo": m72,
|
||||
"strongStrength": MessageLookupByLibrary.simpleMessage("Forte"),
|
||||
"subAlreadyLinkedErrMessage": m72,
|
||||
"subWillBeCancelledOn": m73,
|
||||
"subAlreadyLinkedErrMessage": m73,
|
||||
"subWillBeCancelledOn": m74,
|
||||
"subscribe": MessageLookupByLibrary.simpleMessage("Inscrever-se"),
|
||||
"subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage(
|
||||
"Você precisa de uma inscrição paga ativa para ativar o compartilhamento."),
|
||||
@@ -1765,7 +1771,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"suggestFeatures":
|
||||
MessageLookupByLibrary.simpleMessage("Sugerir recurso"),
|
||||
"support": MessageLookupByLibrary.simpleMessage("Suporte"),
|
||||
"syncProgress": m74,
|
||||
"syncProgress": m75,
|
||||
"syncStopped":
|
||||
MessageLookupByLibrary.simpleMessage("Sincronização interrompida"),
|
||||
"syncing": MessageLookupByLibrary.simpleMessage("Sincronizando..."),
|
||||
@@ -1777,7 +1783,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Toque para desbloquear"),
|
||||
"tapToUpload":
|
||||
MessageLookupByLibrary.simpleMessage("Toque para enviar"),
|
||||
"tapToUploadIsIgnoredDue": m75,
|
||||
"tapToUploadIsIgnoredDue": m76,
|
||||
"tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage(
|
||||
"Parece que algo deu errado. Tente novamente mais tarde. Caso o erro persistir, por favor, entre em contato com nossa equipe."),
|
||||
"terminate": MessageLookupByLibrary.simpleMessage("Encerrar"),
|
||||
@@ -1799,7 +1805,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"theseItemsWillBeDeletedFromYourDevice":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Estes itens serão excluídos do seu dispositivo."),
|
||||
"theyAlsoGetXGb": m76,
|
||||
"theyAlsoGetXGb": m77,
|
||||
"theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage(
|
||||
"Eles serão excluídos de todos os álbuns."),
|
||||
"thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1815,7 +1821,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Este e-mail já está sendo usado"),
|
||||
"thisImageHasNoExifData": MessageLookupByLibrary.simpleMessage(
|
||||
"Esta imagem não possui dados EXIF"),
|
||||
"thisIsPersonVerificationId": m77,
|
||||
"thisIsPersonVerificationId": m78,
|
||||
"thisIsYourVerificationId": MessageLookupByLibrary.simpleMessage(
|
||||
"Este é o seu ID de verificação"),
|
||||
"thisWillLogYouOutOfTheFollowingDevice":
|
||||
@@ -1839,11 +1845,11 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"total": MessageLookupByLibrary.simpleMessage("total"),
|
||||
"totalSize": MessageLookupByLibrary.simpleMessage("Tamanho total"),
|
||||
"trash": MessageLookupByLibrary.simpleMessage("Lixeira"),
|
||||
"trashDaysLeft": m78,
|
||||
"trashDaysLeft": m79,
|
||||
"trim": MessageLookupByLibrary.simpleMessage("Recortar"),
|
||||
"trustedContacts":
|
||||
MessageLookupByLibrary.simpleMessage("Contatos confiáveis"),
|
||||
"trustedInviteBody": m79,
|
||||
"trustedInviteBody": m80,
|
||||
"tryAgain": MessageLookupByLibrary.simpleMessage("Tente novamente"),
|
||||
"turnOnBackupForAutoUpload": MessageLookupByLibrary.simpleMessage(
|
||||
"Ative a cópia de segurança para automaticamente enviar arquivos adicionados à pasta do dispositivo para o Ente."),
|
||||
@@ -1862,7 +1868,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Autenticação de dois fatores redefinida com sucesso"),
|
||||
"twofactorSetup": MessageLookupByLibrary.simpleMessage(
|
||||
"Configuração de dois fatores"),
|
||||
"typeOfGallerGallerytypeIsNotSupportedForRename": m80,
|
||||
"typeOfGallerGallerytypeIsNotSupportedForRename": m81,
|
||||
"unarchive": MessageLookupByLibrary.simpleMessage("Desarquivar"),
|
||||
"unarchiveAlbum":
|
||||
MessageLookupByLibrary.simpleMessage("Desarquivar álbum"),
|
||||
@@ -1885,10 +1891,10 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"updatingFolderSelection": MessageLookupByLibrary.simpleMessage(
|
||||
"Atualizando seleção de pasta..."),
|
||||
"upgrade": MessageLookupByLibrary.simpleMessage("Atualizar"),
|
||||
"uploadIsIgnoredDueToIgnorereason": m81,
|
||||
"uploadIsIgnoredDueToIgnorereason": m82,
|
||||
"uploadingFilesToAlbum": MessageLookupByLibrary.simpleMessage(
|
||||
"Enviando arquivos para o álbum..."),
|
||||
"uploadingMultipleMemories": m82,
|
||||
"uploadingMultipleMemories": m83,
|
||||
"uploadingSingleMemory":
|
||||
MessageLookupByLibrary.simpleMessage("Preservando 1 memória..."),
|
||||
"upto50OffUntil4thDec": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1906,7 +1912,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"useSelectedPhoto":
|
||||
MessageLookupByLibrary.simpleMessage("Usar foto selecionada"),
|
||||
"usedSpace": MessageLookupByLibrary.simpleMessage("Espaço usado"),
|
||||
"validTill": m83,
|
||||
"validTill": m84,
|
||||
"verificationFailedPleaseTryAgain":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Falha na verificação. Tente novamente"),
|
||||
@@ -1914,7 +1920,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("ID de verificação"),
|
||||
"verify": MessageLookupByLibrary.simpleMessage("Verificar"),
|
||||
"verifyEmail": MessageLookupByLibrary.simpleMessage("Verificar e-mail"),
|
||||
"verifyEmailID": m84,
|
||||
"verifyEmailID": m85,
|
||||
"verifyIDLabel": MessageLookupByLibrary.simpleMessage("Verificar"),
|
||||
"verifyPasskey":
|
||||
MessageLookupByLibrary.simpleMessage("Verificar chave de acesso"),
|
||||
@@ -1942,7 +1948,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"viewRecoveryKey":
|
||||
MessageLookupByLibrary.simpleMessage("Ver chave de recuperação"),
|
||||
"viewer": MessageLookupByLibrary.simpleMessage("Visualizador"),
|
||||
"viewersSuccessfullyAdded": m85,
|
||||
"viewersSuccessfullyAdded": m86,
|
||||
"visitWebToManage": MessageLookupByLibrary.simpleMessage(
|
||||
"Visite o web.ente.io para gerenciar sua assinatura"),
|
||||
"waitingForVerification":
|
||||
@@ -1964,7 +1970,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Um contato confiável pode ajudá-lo em recuperar seus dados."),
|
||||
"yearShort": MessageLookupByLibrary.simpleMessage("ano"),
|
||||
"yearly": MessageLookupByLibrary.simpleMessage("Anual"),
|
||||
"yearsAgo": m86,
|
||||
"yearsAgo": m87,
|
||||
"yes": MessageLookupByLibrary.simpleMessage("Sim"),
|
||||
"yesCancel": MessageLookupByLibrary.simpleMessage("Sim"),
|
||||
"yesConvertToViewer": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1997,7 +2003,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Você não pode compartilhar consigo mesmo"),
|
||||
"youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage(
|
||||
"Você não tem nenhum item arquivado."),
|
||||
"youHaveSuccessfullyFreedUp": m87,
|
||||
"youHaveSuccessfullyFreedUp": m88,
|
||||
"yourAccountHasBeenDeleted":
|
||||
MessageLookupByLibrary.simpleMessage("Sua conta foi excluída"),
|
||||
"yourMap": MessageLookupByLibrary.simpleMessage("Seu mapa"),
|
||||
|
||||
82
mobile/lib/generated/intl/messages_ro.dart
generated
82
mobile/lib/generated/intl/messages_ro.dart
generated
@@ -162,66 +162,66 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
|
||||
static String m4(count) => "${count} selectate";
|
||||
|
||||
static String m63(count, yourCount) =>
|
||||
static String m64(count, yourCount) =>
|
||||
"${count} selectate (${yourCount} ale dvs.)";
|
||||
|
||||
static String m64(verificationID) =>
|
||||
static String m65(verificationID) =>
|
||||
"Acesta este ID-ul meu de verificare: ${verificationID} pentru ente.io.";
|
||||
|
||||
static String m5(verificationID) =>
|
||||
"Poți confirma că acesta este ID-ul tău de verificare ente.io: ${verificationID}";
|
||||
|
||||
static String m65(referralCode, referralStorageInGB) =>
|
||||
static String m66(referralCode, referralStorageInGB) =>
|
||||
"Codul de recomandare Ente: ${referralCode}\n\nAplică-l în Setări → General → Recomandări pentru a obține ${referralStorageInGB} GB gratuit după ce te înscrii pentru un plan plătit\n\nhttps://ente.io";
|
||||
|
||||
static String m66(numberOfPeople) =>
|
||||
static String m67(numberOfPeople) =>
|
||||
"${Intl.plural(numberOfPeople, zero: 'Distribuiți cu anumite persoane', one: 'Distribuit cu o persoană', other: 'Distribuit cu ${numberOfPeople} de persoane')}";
|
||||
|
||||
static String m67(emailIDs) => "Distribuit cu ${emailIDs}";
|
||||
|
||||
static String m68(fileType) =>
|
||||
"Fișierul de tip ${fileType} va fi șters din dispozitivul dvs.";
|
||||
static String m68(emailIDs) => "Distribuit cu ${emailIDs}";
|
||||
|
||||
static String m69(fileType) =>
|
||||
"Fișierul de tip ${fileType} este atât în Ente, cât și în dispozitivul dvs.";
|
||||
"Fișierul de tip ${fileType} va fi șters din dispozitivul dvs.";
|
||||
|
||||
static String m70(fileType) =>
|
||||
"Fișierul de tip ${fileType} este atât în Ente, cât și în dispozitivul dvs.";
|
||||
|
||||
static String m71(fileType) =>
|
||||
"Fișierul de tip ${fileType} va fi șters din Ente.";
|
||||
|
||||
static String m1(storageAmountInGB) => "${storageAmountInGB} GB";
|
||||
|
||||
static String m71(
|
||||
static String m72(
|
||||
usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) =>
|
||||
"${usedAmount} ${usedStorageUnit} din ${totalAmount} ${totalStorageUnit} utilizat";
|
||||
|
||||
static String m72(id) =>
|
||||
static String m73(id) =>
|
||||
"${id} este deja legat la un alt cont Ente.\nDacă doriți să folosiți ${id} cu acest cont, vă rugăm să contactați asistența noastră";
|
||||
|
||||
static String m73(endDate) => "Abonamentul dvs. va fi anulat pe ${endDate}";
|
||||
static String m74(endDate) => "Abonamentul dvs. va fi anulat pe ${endDate}";
|
||||
|
||||
static String m74(completed, total) =>
|
||||
static String m75(completed, total) =>
|
||||
"${completed}/${total} amintiri salvate";
|
||||
|
||||
static String m76(storageAmountInGB) =>
|
||||
static String m77(storageAmountInGB) =>
|
||||
"De asemenea, va primii ${storageAmountInGB} GB";
|
||||
|
||||
static String m77(email) => "Acesta este ID-ul de verificare al ${email}";
|
||||
static String m78(email) => "Acesta este ID-ul de verificare al ${email}";
|
||||
|
||||
static String m78(count) =>
|
||||
static String m79(count) =>
|
||||
"${Intl.plural(count, zero: 'Curând', one: 'O zi', other: '${count} de zile')}";
|
||||
|
||||
static String m82(count) => "Se salvează ${count} amintiri...";
|
||||
static String m83(count) => "Se salvează ${count} amintiri...";
|
||||
|
||||
static String m83(endDate) => "Valabil până pe ${endDate}";
|
||||
static String m84(endDate) => "Valabil până pe ${endDate}";
|
||||
|
||||
static String m84(email) => "Verificare ${email}";
|
||||
static String m85(email) => "Verificare ${email}";
|
||||
|
||||
static String m2(email) => "Am trimis un e-mail la <green>${email}</green>";
|
||||
|
||||
static String m86(count) =>
|
||||
static String m87(count) =>
|
||||
"${Intl.plural(count, one: 'acum ${count} an', few: 'acum ${count} ani', other: 'acum ${count} de ani')}";
|
||||
|
||||
static String m87(storageSaved) => "Ați eliberat cu succes ${storageSaved}!";
|
||||
static String m88(storageSaved) => "Ați eliberat cu succes ${storageSaved}!";
|
||||
|
||||
final messages = _notInlinedMessages(_notInlinedMessages);
|
||||
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
|
||||
@@ -1346,7 +1346,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Articolele selectate vor fi șterse din toate albumele și mutate în coșul de gunoi."),
|
||||
"selectedPhotos": m4,
|
||||
"selectedPhotosWithYours": m63,
|
||||
"selectedPhotosWithYours": m64,
|
||||
"send": MessageLookupByLibrary.simpleMessage("Trimitere"),
|
||||
"sendEmail": MessageLookupByLibrary.simpleMessage("Trimiteți e-mail"),
|
||||
"sendInvite":
|
||||
@@ -1373,16 +1373,16 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"shareAnAlbumNow":
|
||||
MessageLookupByLibrary.simpleMessage("Distribuiți un album acum"),
|
||||
"shareLink": MessageLookupByLibrary.simpleMessage("Distribuiți linkul"),
|
||||
"shareMyVerificationID": m64,
|
||||
"shareMyVerificationID": m65,
|
||||
"shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage(
|
||||
"Distribuiți numai cu persoanele pe care le doriți"),
|
||||
"shareTextConfirmOthersVerificationID": m5,
|
||||
"shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage(
|
||||
"Descarcă Ente pentru a putea distribui cu ușurință fotografii și videoclipuri în calitate originală\n\nhttps://ente.io"),
|
||||
"shareTextReferralCode": m65,
|
||||
"shareTextReferralCode": m66,
|
||||
"shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage(
|
||||
"Distribuiți cu utilizatori din afara Ente"),
|
||||
"shareWithPeopleSectionTitle": m66,
|
||||
"shareWithPeopleSectionTitle": m67,
|
||||
"shareYourFirstAlbum":
|
||||
MessageLookupByLibrary.simpleMessage("Distribuiți primul album"),
|
||||
"sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1395,7 +1395,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Fotografii partajate noi"),
|
||||
"sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage(
|
||||
"Primiți notificări atunci când cineva adaugă o fotografie la un album distribuit din care faceți parte"),
|
||||
"sharedWith": m67,
|
||||
"sharedWith": m68,
|
||||
"sharedWithMe": MessageLookupByLibrary.simpleMessage("Distribuit mie"),
|
||||
"sharedWithYou":
|
||||
MessageLookupByLibrary.simpleMessage("Distribuite cu dvs."),
|
||||
@@ -1410,11 +1410,11 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Deconectați alte dispozitive"),
|
||||
"signUpTerms": MessageLookupByLibrary.simpleMessage(
|
||||
"Sunt de acord cu <u-terms>termenii de prestare ai serviciului</u-terms> și <u-policy>politica de confidențialitate</u-policy>"),
|
||||
"singleFileDeleteFromDevice": m68,
|
||||
"singleFileDeleteFromDevice": m69,
|
||||
"singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage(
|
||||
"Acesta va fi șters din toate albumele."),
|
||||
"singleFileInBothLocalAndRemote": m69,
|
||||
"singleFileInRemoteOnly": m70,
|
||||
"singleFileInBothLocalAndRemote": m70,
|
||||
"singleFileInRemoteOnly": m71,
|
||||
"skip": MessageLookupByLibrary.simpleMessage("Omiteți"),
|
||||
"social": MessageLookupByLibrary.simpleMessage("Rețele socializare"),
|
||||
"someItemsAreInBothEnteAndYourDevice":
|
||||
@@ -1462,10 +1462,10 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"storageInGB": m1,
|
||||
"storageLimitExceeded":
|
||||
MessageLookupByLibrary.simpleMessage("Limita de spațiu depășită"),
|
||||
"storageUsageInfo": m71,
|
||||
"storageUsageInfo": m72,
|
||||
"strongStrength": MessageLookupByLibrary.simpleMessage("Puternică"),
|
||||
"subAlreadyLinkedErrMessage": m72,
|
||||
"subWillBeCancelledOn": m73,
|
||||
"subAlreadyLinkedErrMessage": m73,
|
||||
"subWillBeCancelledOn": m74,
|
||||
"subscribe": MessageLookupByLibrary.simpleMessage("Abonare"),
|
||||
"subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage(
|
||||
"Aveți nevoie de un abonament plătit activ pentru a activa distribuirea."),
|
||||
@@ -1482,7 +1482,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"suggestFeatures":
|
||||
MessageLookupByLibrary.simpleMessage("Sugerați funcționalități"),
|
||||
"support": MessageLookupByLibrary.simpleMessage("Asistență"),
|
||||
"syncProgress": m74,
|
||||
"syncProgress": m75,
|
||||
"syncStopped":
|
||||
MessageLookupByLibrary.simpleMessage("Sincronizare oprită"),
|
||||
"syncing": MessageLookupByLibrary.simpleMessage("Sincronizare..."),
|
||||
@@ -1510,7 +1510,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"theseItemsWillBeDeletedFromYourDevice":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Aceste articole vor fi șterse din dispozitivul dvs."),
|
||||
"theyAlsoGetXGb": m76,
|
||||
"theyAlsoGetXGb": m77,
|
||||
"theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage(
|
||||
"Acestea vor fi șterse din toate albumele."),
|
||||
"thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1526,7 +1526,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Această adresă de e-mail este deja folosită"),
|
||||
"thisImageHasNoExifData": MessageLookupByLibrary.simpleMessage(
|
||||
"Această imagine nu are date exif"),
|
||||
"thisIsPersonVerificationId": m77,
|
||||
"thisIsPersonVerificationId": m78,
|
||||
"thisIsYourVerificationId": MessageLookupByLibrary.simpleMessage(
|
||||
"Acesta este ID-ul dvs. de verificare"),
|
||||
"thisWillLogYouOutOfTheFollowingDevice":
|
||||
@@ -1543,7 +1543,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"total": MessageLookupByLibrary.simpleMessage("total"),
|
||||
"totalSize": MessageLookupByLibrary.simpleMessage("Dimensiune totală"),
|
||||
"trash": MessageLookupByLibrary.simpleMessage("Coș de gunoi"),
|
||||
"trashDaysLeft": m78,
|
||||
"trashDaysLeft": m79,
|
||||
"trim": MessageLookupByLibrary.simpleMessage("Decupare"),
|
||||
"tryAgain": MessageLookupByLibrary.simpleMessage("Încercați din nou"),
|
||||
"turnOnBackupForAutoUpload": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1588,7 +1588,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"upgrade": MessageLookupByLibrary.simpleMessage("Îmbunătățire"),
|
||||
"uploadingFilesToAlbum": MessageLookupByLibrary.simpleMessage(
|
||||
"Se încarcă fișiere în album..."),
|
||||
"uploadingMultipleMemories": m82,
|
||||
"uploadingMultipleMemories": m83,
|
||||
"uploadingSingleMemory":
|
||||
MessageLookupByLibrary.simpleMessage("Se salvează o amintire..."),
|
||||
"upto50OffUntil4thDec": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1604,7 +1604,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"useSelectedPhoto": MessageLookupByLibrary.simpleMessage(
|
||||
"Folosiți fotografia selectată"),
|
||||
"usedSpace": MessageLookupByLibrary.simpleMessage("Spațiu utilizat"),
|
||||
"validTill": m83,
|
||||
"validTill": m84,
|
||||
"verificationFailedPleaseTryAgain":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Verificare eșuată, încercați din nou"),
|
||||
@@ -1613,7 +1613,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"verify": MessageLookupByLibrary.simpleMessage("Verificare"),
|
||||
"verifyEmail":
|
||||
MessageLookupByLibrary.simpleMessage("Verificare e-mail"),
|
||||
"verifyEmailID": m84,
|
||||
"verifyEmailID": m85,
|
||||
"verifyIDLabel": MessageLookupByLibrary.simpleMessage("Verificare"),
|
||||
"verifyPassword":
|
||||
MessageLookupByLibrary.simpleMessage("Verificați parola"),
|
||||
@@ -1650,7 +1650,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Bine ați revenit!"),
|
||||
"whatsNew": MessageLookupByLibrary.simpleMessage("Noutăți"),
|
||||
"yearly": MessageLookupByLibrary.simpleMessage("Anual"),
|
||||
"yearsAgo": m86,
|
||||
"yearsAgo": m87,
|
||||
"yes": MessageLookupByLibrary.simpleMessage("Da"),
|
||||
"yesCancel": MessageLookupByLibrary.simpleMessage("Da, anulează"),
|
||||
"yesConvertToViewer":
|
||||
@@ -1680,7 +1680,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Nu poți distribui cu tine însuți"),
|
||||
"youDontHaveAnyArchivedItems":
|
||||
MessageLookupByLibrary.simpleMessage("Nu aveți articole arhivate."),
|
||||
"youHaveSuccessfullyFreedUp": m87,
|
||||
"youHaveSuccessfullyFreedUp": m88,
|
||||
"yourAccountHasBeenDeleted":
|
||||
MessageLookupByLibrary.simpleMessage("Contul dvs. a fost șters"),
|
||||
"yourMap": MessageLookupByLibrary.simpleMessage("Harta dvs."),
|
||||
|
||||
86
mobile/lib/generated/intl/messages_ru.dart
generated
86
mobile/lib/generated/intl/messages_ru.dart
generated
@@ -169,68 +169,68 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
|
||||
static String m4(count) => "${count} выбрано";
|
||||
|
||||
static String m63(count, yourCount) => "${count} выбрано (${yourCount} ваши)";
|
||||
static String m64(count, yourCount) => "${count} выбрано (${yourCount} ваши)";
|
||||
|
||||
static String m64(verificationID) =>
|
||||
static String m65(verificationID) =>
|
||||
"Вот мой проверочный ID: ${verificationID} для ente.io.";
|
||||
|
||||
static String m5(verificationID) =>
|
||||
"Эй, вы можете подтвердить, что это ваш идентификатор подтверждения ente.io: ${verificationID}";
|
||||
|
||||
static String m65(referralCode, referralStorageInGB) =>
|
||||
static String m66(referralCode, referralStorageInGB) =>
|
||||
"Реферальный код Ente: ${referralCode} \n\nПримените его в разделе «Настройки» → «Основные» → «Рефералы», чтобы получить ${referralStorageInGB} Гигабайт бесплатно после того как вы подпишетесь на платный план";
|
||||
|
||||
static String m66(numberOfPeople) =>
|
||||
static String m67(numberOfPeople) =>
|
||||
"${Intl.plural(numberOfPeople, zero: 'Поделится с конкретными людьми', one: 'Поделено с 1 человеком', other: 'Поделено с ${numberOfPeople} людьми')}";
|
||||
|
||||
static String m67(emailIDs) => "Поделиться с ${emailIDs}";
|
||||
|
||||
static String m68(fileType) =>
|
||||
"Это ${fileType} будет удалено с вашего устройства.";
|
||||
static String m68(emailIDs) => "Поделиться с ${emailIDs}";
|
||||
|
||||
static String m69(fileType) =>
|
||||
"Это ${fileType} будет удалено с вашего устройства.";
|
||||
|
||||
static String m70(fileType) =>
|
||||
"Этот ${fileType} есть и в Ente, и на вашем устройстве.";
|
||||
|
||||
static String m70(fileType) => "Этот ${fileType} будет удалён из Ente.";
|
||||
static String m71(fileType) => "Этот ${fileType} будет удалён из Ente.";
|
||||
|
||||
static String m1(storageAmountInGB) => "${storageAmountInGB} Гигабайт";
|
||||
|
||||
static String m71(
|
||||
static String m72(
|
||||
usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) =>
|
||||
"${usedAmount} ${usedStorageUnit} из ${totalAmount} ${totalStorageUnit} использовано";
|
||||
|
||||
static String m72(id) =>
|
||||
static String m73(id) =>
|
||||
"Ваш ${id} уже связан с другой учетной записью Ente.\nЕсли вы хотите использовать ${id} с этой учетной записью, пожалуйста, свяжитесь с нашей службой поддержки";
|
||||
|
||||
static String m73(endDate) => "Ваша подписка будет отменена ${endDate}";
|
||||
static String m74(endDate) => "Ваша подписка будет отменена ${endDate}";
|
||||
|
||||
static String m74(completed, total) => "${completed}/${total} сохранено";
|
||||
static String m75(completed, total) => "${completed}/${total} сохранено";
|
||||
|
||||
static String m76(storageAmountInGB) =>
|
||||
static String m77(storageAmountInGB) =>
|
||||
"Они тоже получат ${storageAmountInGB} Гигабайт";
|
||||
|
||||
static String m77(email) =>
|
||||
static String m78(email) =>
|
||||
"Этот идентификатор подтверждения пользователя ${email}";
|
||||
|
||||
static String m80(galleryType) =>
|
||||
static String m81(galleryType) =>
|
||||
"Тип галереи ${galleryType} не поддерживается для переименования";
|
||||
|
||||
static String m81(ignoreReason) =>
|
||||
static String m82(ignoreReason) =>
|
||||
"Загрузка игнорируется из-за ${ignoreReason}";
|
||||
|
||||
static String m83(endDate) => "Действителен по ${endDate}";
|
||||
static String m84(endDate) => "Действителен по ${endDate}";
|
||||
|
||||
static String m84(email) => "Подтвердить ${email}";
|
||||
static String m85(email) => "Подтвердить ${email}";
|
||||
|
||||
static String m85(count) =>
|
||||
static String m86(count) =>
|
||||
"${Intl.plural(count, zero: 'Добавлено 0 зрителей', one: 'Добавлен 1 зритель', other: 'Добавлено ${count} зрителей')}";
|
||||
|
||||
static String m2(email) => "Мы отправили письмо на <green>${email}</green>";
|
||||
|
||||
static String m86(count) =>
|
||||
static String m87(count) =>
|
||||
"${Intl.plural(count, one: '${count} год назад', other: '${count} лет назад')}";
|
||||
|
||||
static String m87(storageSaved) => "Вы успешно освободили ${storageSaved}!";
|
||||
static String m88(storageSaved) => "Вы успешно освободили ${storageSaved}!";
|
||||
|
||||
final messages = _notInlinedMessages(_notInlinedMessages);
|
||||
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
|
||||
@@ -1561,7 +1561,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Выбранные элементы будут удалены из всех альбомов и перемещены в корзину."),
|
||||
"selectedPhotos": m4,
|
||||
"selectedPhotosWithYours": m63,
|
||||
"selectedPhotosWithYours": m64,
|
||||
"send": MessageLookupByLibrary.simpleMessage("Отправить"),
|
||||
"sendEmail": MessageLookupByLibrary.simpleMessage(
|
||||
"Отправить электронное письмо"),
|
||||
@@ -1596,16 +1596,16 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"shareAnAlbumNow":
|
||||
MessageLookupByLibrary.simpleMessage("Поделиться альбомом сейчас"),
|
||||
"shareLink": MessageLookupByLibrary.simpleMessage("Поделиться ссылкой"),
|
||||
"shareMyVerificationID": m64,
|
||||
"shareMyVerificationID": m65,
|
||||
"shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage(
|
||||
"Поделитесь только с теми людьми, с которыми вы хотите"),
|
||||
"shareTextConfirmOthersVerificationID": m5,
|
||||
"shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage(
|
||||
"Скачай Ente, чтобы мы могли легко поделиться фотографиями и видео без сжатия\n\nhttps://ente.io"),
|
||||
"shareTextReferralCode": m65,
|
||||
"shareTextReferralCode": m66,
|
||||
"shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage(
|
||||
"Поделится с пользователями без Ente"),
|
||||
"shareWithPeopleSectionTitle": m66,
|
||||
"shareWithPeopleSectionTitle": m67,
|
||||
"shareYourFirstAlbum":
|
||||
MessageLookupByLibrary.simpleMessage("Поделиться первым альбомом"),
|
||||
"sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1616,7 +1616,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Новые общие фотографии"),
|
||||
"sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage(
|
||||
"Получать уведомления, когда кто-то добавляет фото в общий альбом, в котором вы состоите"),
|
||||
"sharedWith": m67,
|
||||
"sharedWith": m68,
|
||||
"sharedWithMe":
|
||||
MessageLookupByLibrary.simpleMessage("Поделиться со мной"),
|
||||
"sharedWithYou":
|
||||
@@ -1633,11 +1633,11 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage("Выйти из других устройств"),
|
||||
"signUpTerms": MessageLookupByLibrary.simpleMessage(
|
||||
"Я согласен с <u-terms>условиями предоставления услуг</u-terms> и <u-policy>политикой конфиденциальности</u-policy>"),
|
||||
"singleFileDeleteFromDevice": m68,
|
||||
"singleFileDeleteFromDevice": m69,
|
||||
"singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage(
|
||||
"Он будет удален из всех альбомов."),
|
||||
"singleFileInBothLocalAndRemote": m69,
|
||||
"singleFileInRemoteOnly": m70,
|
||||
"singleFileInBothLocalAndRemote": m70,
|
||||
"singleFileInRemoteOnly": m71,
|
||||
"skip": MessageLookupByLibrary.simpleMessage("Пропустить"),
|
||||
"social": MessageLookupByLibrary.simpleMessage("Соцсети"),
|
||||
"someItemsAreInBothEnteAndYourDevice": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1685,10 +1685,10 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"storageInGB": m1,
|
||||
"storageLimitExceeded":
|
||||
MessageLookupByLibrary.simpleMessage("Превышен предел хранения"),
|
||||
"storageUsageInfo": m71,
|
||||
"storageUsageInfo": m72,
|
||||
"strongStrength": MessageLookupByLibrary.simpleMessage("Сильный"),
|
||||
"subAlreadyLinkedErrMessage": m72,
|
||||
"subWillBeCancelledOn": m73,
|
||||
"subAlreadyLinkedErrMessage": m73,
|
||||
"subWillBeCancelledOn": m74,
|
||||
"subscribe": MessageLookupByLibrary.simpleMessage("Подписаться"),
|
||||
"subscription": MessageLookupByLibrary.simpleMessage("Подписка"),
|
||||
"success": MessageLookupByLibrary.simpleMessage("Успешно"),
|
||||
@@ -1703,7 +1703,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"suggestFeatures":
|
||||
MessageLookupByLibrary.simpleMessage("Предложить идею"),
|
||||
"support": MessageLookupByLibrary.simpleMessage("Поддержка"),
|
||||
"syncProgress": m74,
|
||||
"syncProgress": m75,
|
||||
"syncStopped":
|
||||
MessageLookupByLibrary.simpleMessage("Синхронизация остановлена"),
|
||||
"syncing": MessageLookupByLibrary.simpleMessage("Синхронизация..."),
|
||||
@@ -1737,7 +1737,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"theseItemsWillBeDeletedFromYourDevice":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Эти элементы будут удалено с вашего устройства."),
|
||||
"theyAlsoGetXGb": m76,
|
||||
"theyAlsoGetXGb": m77,
|
||||
"theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage(
|
||||
"Они будут удален из всех альбомов."),
|
||||
"thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1753,7 +1753,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Этот адрес электронной почты уже используется"),
|
||||
"thisImageHasNoExifData": MessageLookupByLibrary.simpleMessage(
|
||||
"Это изображение не имеет exif данных"),
|
||||
"thisIsPersonVerificationId": m77,
|
||||
"thisIsPersonVerificationId": m78,
|
||||
"thisIsYourVerificationId": MessageLookupByLibrary.simpleMessage(
|
||||
"Это ваш идентификатор подтверждения"),
|
||||
"thisWillLogYouOutOfTheFollowingDevice":
|
||||
@@ -1797,7 +1797,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Двухфакторная аутентификация успешно сброшена"),
|
||||
"twofactorSetup": MessageLookupByLibrary.simpleMessage("Вход с 2FA"),
|
||||
"typeOfGallerGallerytypeIsNotSupportedForRename": m80,
|
||||
"typeOfGallerGallerytypeIsNotSupportedForRename": m81,
|
||||
"unarchive": MessageLookupByLibrary.simpleMessage("Разархивировать"),
|
||||
"unarchiveAlbum":
|
||||
MessageLookupByLibrary.simpleMessage("Разархивировать альбом"),
|
||||
@@ -1821,7 +1821,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"updatingFolderSelection":
|
||||
MessageLookupByLibrary.simpleMessage("Обновление выбора папки..."),
|
||||
"upgrade": MessageLookupByLibrary.simpleMessage("Обновить"),
|
||||
"uploadIsIgnoredDueToIgnorereason": m81,
|
||||
"uploadIsIgnoredDueToIgnorereason": m82,
|
||||
"uploadingFilesToAlbum":
|
||||
MessageLookupByLibrary.simpleMessage("Загрузка файлов в альбом..."),
|
||||
"upto50OffUntil4thDec": MessageLookupByLibrary.simpleMessage(
|
||||
@@ -1838,7 +1838,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"useSelectedPhoto":
|
||||
MessageLookupByLibrary.simpleMessage("Использовать выбранное фото"),
|
||||
"usedSpace": MessageLookupByLibrary.simpleMessage("Использовано места"),
|
||||
"validTill": m83,
|
||||
"validTill": m84,
|
||||
"verificationFailedPleaseTryAgain":
|
||||
MessageLookupByLibrary.simpleMessage(
|
||||
"Проверка не удалась, попробуйте еще раз"),
|
||||
@@ -1847,7 +1847,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"verify": MessageLookupByLibrary.simpleMessage("Подтвердить"),
|
||||
"verifyEmail": MessageLookupByLibrary.simpleMessage(
|
||||
"Подтвердить электронную почту"),
|
||||
"verifyEmailID": m84,
|
||||
"verifyEmailID": m85,
|
||||
"verifyIDLabel": MessageLookupByLibrary.simpleMessage("Подтверждение"),
|
||||
"verifyPasskey":
|
||||
MessageLookupByLibrary.simpleMessage("Подтвердить ключ"),
|
||||
@@ -1871,7 +1871,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"viewRecoveryKey": MessageLookupByLibrary.simpleMessage(
|
||||
"Просмотреть ключ восстановления"),
|
||||
"viewer": MessageLookupByLibrary.simpleMessage("Наблюдатель"),
|
||||
"viewersSuccessfullyAdded": m85,
|
||||
"viewersSuccessfullyAdded": m86,
|
||||
"visitWebToManage": MessageLookupByLibrary.simpleMessage(
|
||||
"Пожалуйста, посетите web.ente.io для управления вашей подпиской"),
|
||||
"waitingForVerification":
|
||||
@@ -1889,7 +1889,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"whatsNew": MessageLookupByLibrary.simpleMessage("Что нового"),
|
||||
"yearShort": MessageLookupByLibrary.simpleMessage("г."),
|
||||
"yearly": MessageLookupByLibrary.simpleMessage("Ежегодно"),
|
||||
"yearsAgo": m86,
|
||||
"yearsAgo": m87,
|
||||
"yes": MessageLookupByLibrary.simpleMessage("Да"),
|
||||
"yesCancel": MessageLookupByLibrary.simpleMessage("Да, отменить"),
|
||||
"yesConvertToViewer":
|
||||
@@ -1921,7 +1921,7 @@ class MessageLookup extends MessageLookupByLibrary {
|
||||
"Вы не можете поделиться с самим собой"),
|
||||
"youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage(
|
||||
"У вас нет архивных элементов."),
|
||||
"youHaveSuccessfullyFreedUp": m87,
|
||||
"youHaveSuccessfullyFreedUp": m88,
|
||||
"yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage(
|
||||
"Ваша учетная запись была удалена"),
|
||||
"yourMap": MessageLookupByLibrary.simpleMessage("Ваша карта"),
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user