mirror of
https://gitlab.com/timvisee/send.git
synced 2025-12-06 14:10:53 +03:00
Compare commits
25 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c71100c82a | ||
|
|
4f2dd96708 | ||
|
|
d8456c2c51 | ||
|
|
b7324f3a5b | ||
|
|
6890165f67 | ||
|
|
5124572dba | ||
|
|
0c1819bb15 | ||
|
|
906990991e | ||
|
|
48bdf734c5 | ||
|
|
cf63e0e804 | ||
|
|
ec66c2dc4e | ||
|
|
67dfc94ef3 | ||
|
|
f54f3ccaa2 | ||
|
|
a35e2e58a3 | ||
|
|
6ad2885a16 | ||
|
|
70662888b1 | ||
|
|
9f09a79986 | ||
|
|
db64c0467a | ||
|
|
ca52f84aa5 | ||
|
|
6fff664947 | ||
|
|
439ac0ab7c | ||
|
|
dee6b3e9cc | ||
|
|
dc9d072472 | ||
|
|
91773832c1 | ||
|
|
c524804c63 |
@@ -51,7 +51,8 @@ release-docker:
|
|||||||
- web
|
- web
|
||||||
script:
|
script:
|
||||||
- docker login "$CI_REGISTRY" -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD"
|
- docker login "$CI_REGISTRY" -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD"
|
||||||
- docker build -t send .
|
- docker buildx create --name sendBuilder
|
||||||
|
- docker buildx use sendBuilder
|
||||||
- |
|
- |
|
||||||
if [ "$CI_PIPELINE_SOURCE" == "merge_request_event" ]; then
|
if [ "$CI_PIPELINE_SOURCE" == "merge_request_event" ]; then
|
||||||
IMAGE_NAMES="$CI_REGISTRY_IMAGE/mr:$CI_MERGE_REQUEST_IID"
|
IMAGE_NAMES="$CI_REGISTRY_IMAGE/mr:$CI_MERGE_REQUEST_IID"
|
||||||
@@ -62,8 +63,7 @@ release-docker:
|
|||||||
fi
|
fi
|
||||||
- |
|
- |
|
||||||
for image in $IMAGE_NAMES; do
|
for image in $IMAGE_NAMES; do
|
||||||
docker tag send $image
|
docker buildx build --platform linux/amd64,linux/arm64 -t $image . --push
|
||||||
docker push $image
|
|
||||||
done
|
done
|
||||||
- |
|
- |
|
||||||
echo "Container image pushed. You can pull it with";
|
echo "Container image pushed. You can pull it with";
|
||||||
|
|||||||
@@ -152,7 +152,7 @@ AWS example using Ubuntu Server `20.04`: [docs/AWS.md](docs/AWS.md)
|
|||||||
- Web: _this repository_
|
- Web: _this repository_
|
||||||
- Command-line: [`ffsend`](https://github.com/timvisee/ffsend)
|
- Command-line: [`ffsend`](https://github.com/timvisee/ffsend)
|
||||||
- Android: _see [Android](#android) section_
|
- Android: _see [Android](#android) section_
|
||||||
- Thunderbird: [FileLink provider for Send](https://addons.thunderbird.net/en-US/thunderbird/addon/filelink-provider-for-send/)
|
- Thunderbird: [FileLink provider for Send](https://addons.thunderbird.net/thunderbird/addon/filelink-provider-for-send/)
|
||||||
|
|
||||||
#### Android
|
#### Android
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ function expiryInfo(translate, archive) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function password(state) {
|
function password(state) {
|
||||||
const MAX_LENGTH = 32;
|
const MAX_LENGTH = 4096;
|
||||||
|
|
||||||
return html`
|
return html`
|
||||||
<div class="mb-2 px-1">
|
<div class="mb-2 px-1">
|
||||||
@@ -486,6 +486,16 @@ module.exports.empty = function(state, emit) {
|
|||||||
})}
|
})}
|
||||||
</button>
|
</button>
|
||||||
`;
|
`;
|
||||||
|
const warning = state.WEB_UI.UPLOAD_AREA_WARNING_HTML
|
||||||
|
? html`
|
||||||
|
<p
|
||||||
|
class="w-full mt-8 p-2 border-default dark:border-grey-70 rounded-default text-orange-60 bg-yellow-40 text-center leading-normal"
|
||||||
|
>
|
||||||
|
${raw(state.WEB_UI.UPLOAD_AREA_WARNING_HTML)}
|
||||||
|
</p>
|
||||||
|
`
|
||||||
|
: '';
|
||||||
|
|
||||||
return html`
|
return html`
|
||||||
<send-upload-area
|
<send-upload-area
|
||||||
class="flex flex-col items-center justify-center border-2 border-dashed border-grey-transparent rounded-default px-6 py-16 h-full w-full dark:border-grey-60"
|
class="flex flex-col items-center justify-center border-2 border-dashed border-grey-transparent rounded-default px-6 py-16 h-full w-full dark:border-grey-60"
|
||||||
@@ -526,7 +536,7 @@ module.exports.empty = function(state, emit) {
|
|||||||
>
|
>
|
||||||
${state.translate('addFilesButton')}
|
${state.translate('addFilesButton')}
|
||||||
</label>
|
</label>
|
||||||
${upsell}
|
${upsell} ${warning}
|
||||||
</send-upload-area>
|
</send-upload-area>
|
||||||
`;
|
`;
|
||||||
|
|
||||||
@@ -559,6 +569,16 @@ module.exports.preview = function(state, emit) {
|
|||||||
${archiveDetails(state.translate, archive)}
|
${archiveDetails(state.translate, archive)}
|
||||||
</div>
|
</div>
|
||||||
`;
|
`;
|
||||||
|
const warning = state.WEB_UI.DOWNLOAD_WARNING_HTML
|
||||||
|
? html`
|
||||||
|
<p
|
||||||
|
class="w-full mt-4 p-2 border-default dark:border-grey-70 rounded-default text-orange-60 bg-yellow-40 text-center leading-normal"
|
||||||
|
>
|
||||||
|
${raw(state.WEB_UI.DOWNLOAD_WARNING_HTML)}
|
||||||
|
</p>
|
||||||
|
`
|
||||||
|
: '';
|
||||||
|
|
||||||
return html`
|
return html`
|
||||||
<send-archive
|
<send-archive
|
||||||
class="flex flex-col max-h-full bg-white p-4 w-full md:w-128 dark:bg-grey-90"
|
class="flex flex-col max-h-full bg-white p-4 w-full md:w-128 dark:bg-grey-90"
|
||||||
@@ -574,6 +594,7 @@ module.exports.preview = function(state, emit) {
|
|||||||
>
|
>
|
||||||
${state.translate('downloadButtonLabel')}
|
${state.translate('downloadButtonLabel')}
|
||||||
</button>
|
</button>
|
||||||
|
${warning}
|
||||||
</send-archive>
|
</send-archive>
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ module.exports = function(state, emit) {
|
|||||||
class="w-full border-l border-t border-b rounded-l-lg rounded-r-none ${invalid
|
class="w-full border-l border-t border-b rounded-l-lg rounded-r-none ${invalid
|
||||||
? 'border-red dark:border-red-40'
|
? 'border-red dark:border-red-40'
|
||||||
: 'border-grey'} leading-loose px-2 py-1 dark:bg-grey-80"
|
: 'border-grey'} leading-loose px-2 py-1 dark:bg-grey-80"
|
||||||
maxlength="32"
|
maxlength="4096"
|
||||||
autocomplete="off"
|
autocomplete="off"
|
||||||
placeholder="${state.translate('unlockInputPlaceholder')}"
|
placeholder="${state.translate('unlockInputPlaceholder')}"
|
||||||
oninput="${inputChanged}"
|
oninput="${inputChanged}"
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ docker pull registry.gitlab.com/timvisee/send:latest
|
|||||||
docker run -v $PWD/uploads:/uploads -p 1443:1443 \
|
docker run -v $PWD/uploads:/uploads -p 1443:1443 \
|
||||||
-e 'DETECT_BASE_URL=true' \
|
-e 'DETECT_BASE_URL=true' \
|
||||||
-e 'REDIS_HOST=localhost' \
|
-e 'REDIS_HOST=localhost' \
|
||||||
|
-e 'FILE_DIR=/uploads' \
|
||||||
registry.gitlab.com/timvisee/send:latest
|
registry.gitlab.com/timvisee/send:latest
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -33,7 +34,7 @@ Config options expecting array values (e.g. `EXPIRE_TIMES_SECONDS`, `DOWNLOAD_CO
|
|||||||
| `PORT` | Port the server will listen on (defaults to `1443`)
|
| `PORT` | Port the server will listen on (defaults to `1443`)
|
||||||
| `NODE_ENV` | Run in `development` mode (unsafe) or `production` mode (the default)
|
| `NODE_ENV` | Run in `development` mode (unsafe) or `production` mode (the default)
|
||||||
| `SEND_FOOTER_DMCA_URL` | A URL to a contact page for DMCA requests (empty / not shown by default)
|
| `SEND_FOOTER_DMCA_URL` | A URL to a contact page for DMCA requests (empty / not shown by default)
|
||||||
| `SENTRY_CLIENT`, `SENTRY_DSN` | Sentry Client ID and DNS for error tracking (optional, disabled by default)
|
| `SENTRY_CLIENT`, `SENTRY_DSN` | Sentry Client ID and DSN for error tracking (optional, disabled by default)
|
||||||
|
|
||||||
*Note: more options can be found here: https://github.com/timvisee/send/blob/master/server/config.js*
|
*Note: more options can be found here: https://github.com/timvisee/send/blob/master/server/config.js*
|
||||||
|
|
||||||
|
|||||||
26089
package-lock.json
generated
26089
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "send",
|
"name": "send",
|
||||||
"description": "File Sharing Experiment",
|
"description": "File Sharing Experiment",
|
||||||
"version": "3.4.22",
|
"version": "3.4.24",
|
||||||
"author": "Mozilla (https://mozilla.org)",
|
"author": "Mozilla (https://mozilla.org)",
|
||||||
"contributors": [
|
"contributors": [
|
||||||
"Tim Visee <3a4fb3964f@sinenomine.email> (https://timvisee.com)"
|
"Tim Visee <3a4fb3964f@sinenomine.email> (https://timvisee.com)"
|
||||||
|
|||||||
@@ -48,12 +48,12 @@ passwordSetError = Toto heslo nemohlo být nastaveno
|
|||||||
-send-brand =
|
-send-brand =
|
||||||
{ $case ->
|
{ $case ->
|
||||||
*[nom] Send
|
*[nom] Send
|
||||||
[gen] Send
|
[gen] Sendu
|
||||||
[dat] Send
|
[dat] Sendu
|
||||||
[acc] Send
|
[acc] Send
|
||||||
[voc] Send
|
[voc] Sende
|
||||||
[loc] Send
|
[loc] Sendu
|
||||||
[ins] Send
|
[ins] Sendem
|
||||||
}
|
}
|
||||||
-send-short-brand =
|
-send-short-brand =
|
||||||
{ $case ->
|
{ $case ->
|
||||||
@@ -86,7 +86,7 @@ passwordSetError = Toto heslo nemohlo být nastaveno
|
|||||||
[ins] Mozillou
|
[ins] Mozillou
|
||||||
}
|
}
|
||||||
introTitle = Jednoduché a soukromé sdílení souborů
|
introTitle = Jednoduché a soukromé sdílení souborů
|
||||||
introDescription = S { -send-brand(case: "ins") } jsou sdílené soubory šifrované end-to-end, takže ani my nevíme, co sdílíte. Platnost odkazů je navíc omezená. Soubory tak můžete sdílet soukromě a s jistotou, že se nezůstanou na internetu válet navždy.
|
introDescription = Se { -send-brand(case: "ins") } jsou sdílené soubory šifrované end-to-end, takže ani my nevíme, co sdílíte. Platnost odkazů je navíc omezená. Soubory tak můžete sdílet soukromě a s jistotou, že se nezůstanou na internetu válet navždy.
|
||||||
notifyUploadEncryptDone = Váš soubor je zašifrovaný a připraven k odeslání
|
notifyUploadEncryptDone = Váš soubor je zašifrovaný a připraven k odeslání
|
||||||
# downloadCount is from the downloadCount string and timespan is a timespanMinutes string. ex. 'Expires after 2 downloads or 25 minutes'
|
# downloadCount is from the downloadCount string and timespan is a timespanMinutes string. ex. 'Expires after 2 downloads or 25 minutes'
|
||||||
archiveExpiryInfo = Platnost vyprší po { $downloadCount } nebo za { $timespan }
|
archiveExpiryInfo = Platnost vyprší po { $downloadCount } nebo za { $timespan }
|
||||||
@@ -131,7 +131,7 @@ copyLinkDescription = Soubor můžete sdílet tímto odkazem:
|
|||||||
copyLinkButton = Zkopírovat odkaz
|
copyLinkButton = Zkopírovat odkaz
|
||||||
downloadTitle = Stáhnout soubory
|
downloadTitle = Stáhnout soubory
|
||||||
downloadDescription = Tento soubor byl sdílen přes { -send-brand(case: "acc") } s end-to-end šifrováním a odkazem s omezenou platností.
|
downloadDescription = Tento soubor byl sdílen přes { -send-brand(case: "acc") } s end-to-end šifrováním a odkazem s omezenou platností.
|
||||||
trySendDescription = Vyzkoušejte jednoduché a bezpečné sdílení souborů s { -send-brand(case: "ins") }
|
trySendDescription = Vyzkoušejte jednoduché a bezpečné sdílení souborů se { -send-brand(case: "ins") }
|
||||||
# count will always be > 10
|
# count will always be > 10
|
||||||
tooManyFiles =
|
tooManyFiles =
|
||||||
{ $count ->
|
{ $count ->
|
||||||
@@ -189,6 +189,6 @@ downloadFirefoxPromo = { -send-short-brand } od aplikace { -firefox }.
|
|||||||
shareLinkDescription = Sdílet odkaz na soubor:
|
shareLinkDescription = Sdílet odkaz na soubor:
|
||||||
shareLinkButton = Sdílet odkaz
|
shareLinkButton = Sdílet odkaz
|
||||||
# $name is the name of the file
|
# $name is the name of the file
|
||||||
shareMessage = Stáhněte si soubor „{ $name }“ s { -send-brand(case: "ins") } - jednoduché a bezpečné sdílení souborů
|
shareMessage = Stáhněte si soubor „{ $name }“ se { -send-brand(case: "ins") } - jednoduché a bezpečné sdílení souborů
|
||||||
trailheadPromo = Existuje způsob, jak ochránit své soukromí. Používejte Firefox.
|
trailheadPromo = Existuje způsob, jak ochránit své soukromí. Používejte Firefox.
|
||||||
learnMore = Zjistit více.
|
learnMore = Zjistit více.
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ introTitle = Простой и безопасный обмен файлами
|
|||||||
introDescription = { -send-brand } позволяет вам делиться файлами со сквозным шифрованием и ограниченным сроком действия ссылки на загрузку. Так что, вы сможете делиться файлами приватно и они не останутся в сети навсегда.
|
introDescription = { -send-brand } позволяет вам делиться файлами со сквозным шифрованием и ограниченным сроком действия ссылки на загрузку. Так что, вы сможете делиться файлами приватно и они не останутся в сети навсегда.
|
||||||
notifyUploadEncryptDone = Ваш файл зашифрован и готов к отправке
|
notifyUploadEncryptDone = Ваш файл зашифрован и готов к отправке
|
||||||
# downloadCount is from the downloadCount string and timespan is a timespanMinutes string. ex. 'Expires after 2 downloads or 25 minutes'
|
# downloadCount is from the downloadCount string and timespan is a timespanMinutes string. ex. 'Expires after 2 downloads or 25 minutes'
|
||||||
archiveExpiryInfo = Срок хранения истекает после { $downloadCount } или через { $timespan }
|
archiveExpiryInfo = Удалить после { $downloadCount } или через { $timespan }
|
||||||
timespanMinutes =
|
timespanMinutes =
|
||||||
{ $num ->
|
{ $num ->
|
||||||
[one] { $num } минуту
|
[one] { $num } минуту
|
||||||
@@ -89,7 +89,7 @@ gb = ГБ
|
|||||||
# localized number and byte abbreviation. example "2.5MB"
|
# localized number and byte abbreviation. example "2.5MB"
|
||||||
fileSize = { $num }{ $units }
|
fileSize = { $num }{ $units }
|
||||||
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
|
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
|
||||||
totalSize = Общий размер: { $size }
|
totalSize = Всего: { $size }
|
||||||
# the next line after the colon contains a file name
|
# the next line after the colon contains a file name
|
||||||
copyLinkDescription = Скопируйте ссылку, чтобы поделиться своим файлом:
|
copyLinkDescription = Скопируйте ссылку, чтобы поделиться своим файлом:
|
||||||
copyLinkButton = Копировать ссылку
|
copyLinkButton = Копировать ссылку
|
||||||
@@ -117,13 +117,13 @@ legalTitle = Уведомление о конфиденциальности { -s
|
|||||||
legalDateStamp = Версия 1.0, от 12 марта 2019 года
|
legalDateStamp = Версия 1.0, от 12 марта 2019 года
|
||||||
# A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m"
|
# A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m"
|
||||||
expiresDaysHoursMinutes = { $days } дн. { $hours } ч. { $minutes } мин.
|
expiresDaysHoursMinutes = { $days } дн. { $hours } ч. { $minutes } мин.
|
||||||
addFilesButton = Выберите файлы для выгрузки
|
addFilesButton = Добавить
|
||||||
uploadButton = Выгрузить
|
uploadButton = Выгрузить
|
||||||
# the first part of the string 'Drag and drop files or click to send up to 1GB'
|
# the first part of the string 'Drag and drop files or click to send up to 1GB'
|
||||||
dragAndDropFiles = Перетащите файлы сюда
|
dragAndDropFiles = Перетащите файлы сюда
|
||||||
# the second part of the string 'Drag and drop files or click to send up to 1GB'
|
# the second part of the string 'Drag and drop files or click to send up to 1GB'
|
||||||
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
|
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
|
||||||
orClickWithSize = или щёлкните здесь, чтобы отправить их (до { $size })
|
orClickWithSize = или кликните сюда для отправки файлов до { $size }
|
||||||
addPassword = Защитить паролем
|
addPassword = Защитить паролем
|
||||||
emailPlaceholder = Введите ваш адрес электронной почты
|
emailPlaceholder = Введите ваш адрес электронной почты
|
||||||
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
|
# $size is the size of the file, displayed using the fileSize message as format (e.g. "2.5MB")
|
||||||
|
|||||||
@@ -2,12 +2,12 @@ title = Send
|
|||||||
importingFile = 正在导入…
|
importingFile = 正在导入…
|
||||||
encryptingFile = 正在加密…
|
encryptingFile = 正在加密…
|
||||||
decryptingFile = 正在解密…
|
decryptingFile = 正在解密…
|
||||||
downloadCount =
|
downloadCount = { $num ->
|
||||||
{ $num ->
|
[one] 1 次下载
|
||||||
*[other] { $num } 次下载
|
*[other] { $num } 次下载
|
||||||
}
|
}
|
||||||
timespanHours =
|
timespanHours = { $num ->
|
||||||
{ $num ->
|
[one] 1 小时
|
||||||
*[other] { $num } 小时
|
*[other] { $num } 小时
|
||||||
}
|
}
|
||||||
copiedUrl = 已复制!
|
copiedUrl = 已复制!
|
||||||
@@ -26,6 +26,11 @@ notSupportedOutdatedDetail = 很可惜,此版本的 Firefox 不支持 Send 所
|
|||||||
updateFirefox = 更新 Firefox
|
updateFirefox = 更新 Firefox
|
||||||
deletePopupCancel = 取消
|
deletePopupCancel = 取消
|
||||||
deleteButtonHover = 删除
|
deleteButtonHover = 删除
|
||||||
|
footerText = 不附属于 Mozilla 或 Firefox。
|
||||||
|
footerLinkDonate = 捐助
|
||||||
|
footerLinkCli = 命令行
|
||||||
|
footerLinkDmca = DMCA
|
||||||
|
footerLinkSource = 源代码
|
||||||
passwordTryAgain = 密码不正确。请重试。
|
passwordTryAgain = 密码不正确。请重试。
|
||||||
javascriptRequired = Send 需要 JavaScript
|
javascriptRequired = Send 需要 JavaScript
|
||||||
whyJavascript = 为什么 Send 需要 JavaScript?
|
whyJavascript = 为什么 Send 需要 JavaScript?
|
||||||
@@ -142,5 +147,4 @@ shareLinkDescription = 您的文件链接:
|
|||||||
shareLinkButton = 分享链接
|
shareLinkButton = 分享链接
|
||||||
# $name is the name of the file
|
# $name is the name of the file
|
||||||
shareMessage = 使用 { -send-brand } 下载“{ $name }”:简单、安全的文件分享服务
|
shareMessage = 使用 { -send-brand } 下载“{ $name }”:简单、安全的文件分享服务
|
||||||
trailheadPromo = 捍卫隐私不是幻想。加入 Firefox 一同抗争。
|
|
||||||
learnMore = 详细了解。
|
learnMore = 详细了解。
|
||||||
|
|||||||
@@ -2,12 +2,12 @@ title = Send
|
|||||||
importingFile = 匯入中…
|
importingFile = 匯入中…
|
||||||
encryptingFile = 加密中…
|
encryptingFile = 加密中…
|
||||||
decryptingFile = 解密中…
|
decryptingFile = 解密中…
|
||||||
downloadCount =
|
downloadCount = { $num ->
|
||||||
{ $num ->
|
[one] 1 次下載
|
||||||
*[other] { $num } 次下載
|
*[other] { $num } 次下載
|
||||||
}
|
}
|
||||||
timespanHours =
|
timespanHours = { $num ->
|
||||||
{ $num ->
|
[one] 1 小時
|
||||||
*[other] { $num } 小時
|
*[other] { $num } 小時
|
||||||
}
|
}
|
||||||
copiedUrl = 已複製!
|
copiedUrl = 已複製!
|
||||||
@@ -26,6 +26,11 @@ notSupportedOutdatedDetail = 很可惜,此版本的 Firefox 不支援 Send 所
|
|||||||
updateFirefox = 更新 Firefox
|
updateFirefox = 更新 Firefox
|
||||||
deletePopupCancel = 取消
|
deletePopupCancel = 取消
|
||||||
deleteButtonHover = 刪除
|
deleteButtonHover = 刪除
|
||||||
|
footerText = 不隸屬於 Mozilla 或 Firefox。
|
||||||
|
footerLinkDonate = 捐助
|
||||||
|
footerLinkCli = 命令列
|
||||||
|
footerLinkDmca = DMCA
|
||||||
|
footerLinkSource = 原始碼
|
||||||
passwordTryAgain = 密碼不正確,請再試一次。
|
passwordTryAgain = 密碼不正確,請再試一次。
|
||||||
javascriptRequired = Send 需要開啟 JavaScript 功能
|
javascriptRequired = Send 需要開啟 JavaScript 功能
|
||||||
whyJavascript = 為什麼 Send 需要 JavaScript 才能使用?
|
whyJavascript = 為什麼 Send 需要 JavaScript 才能使用?
|
||||||
@@ -45,27 +50,28 @@ passwordSetError = 無法設定此密碼
|
|||||||
-send-short-brand = Send
|
-send-short-brand = Send
|
||||||
-firefox = Firefox
|
-firefox = Firefox
|
||||||
-mozilla = Mozilla
|
-mozilla = Mozilla
|
||||||
|
|
||||||
introTitle = 簡單而私密的檔案共享服務
|
introTitle = 簡單而私密的檔案共享服務
|
||||||
introDescription = { -send-brand } 讓您可透過點對點加密的方式來分享檔案,並提供會自動失效的鏈結。這樣一來就可以保留分享時的隱私,也確保檔案不會永久保存於網路上。
|
introDescription = { -send-brand } 讓您可透過點對點加密的方式來分享檔案,並提供會自動失效的鏈結。這樣一來就可以保留分享時的隱私,也確保檔案不會永久保存於網路上。
|
||||||
notifyUploadEncryptDone = 已加密您的檔案,可以傳送
|
notifyUploadEncryptDone = 已加密您的檔案,可以傳送
|
||||||
# downloadCount is from the downloadCount string and timespan is a timespanMinutes string. ex. 'Expires after 2 downloads or 25 minutes'
|
# downloadCount is from the downloadCount string and timespan is a timespanMinutes string. ex. 'Expires after 2 downloads or 25 minutes'
|
||||||
archiveExpiryInfo = { $downloadCount } 或 { $timespan } 後失效
|
archiveExpiryInfo = { $downloadCount } 或 { $timespan } 後失效
|
||||||
timespanMinutes =
|
timespanMinutes = { $num ->
|
||||||
{ $num ->
|
[one] 1 分鐘
|
||||||
*[other] { $num } 分鐘
|
*[other] { $num } 分鐘
|
||||||
}
|
}
|
||||||
timespanDays =
|
timespanDays = { $num ->
|
||||||
{ $num ->
|
[one] 1 天
|
||||||
*[other] { $num } 天
|
*[other] { $num } 天
|
||||||
}
|
}
|
||||||
timespanWeeks =
|
timespanWeeks = { $num ->
|
||||||
{ $num ->
|
[one] 1 週
|
||||||
*[other] { $num } 週
|
*[other] { $num } 週
|
||||||
}
|
}
|
||||||
fileCount =
|
fileCount = { $num ->
|
||||||
{ $num ->
|
[one] 1 個檔案
|
||||||
*[other] { $num } 個檔案
|
*[other] { $num } 個檔案
|
||||||
}
|
}
|
||||||
# byte abbreviation
|
# byte abbreviation
|
||||||
bytes = 位元組
|
bytes = 位元組
|
||||||
# kibibyte abbreviation
|
# kibibyte abbreviation
|
||||||
@@ -85,15 +91,15 @@ downloadTitle = 下載檔案
|
|||||||
downloadDescription = 此檔案是透過 { -send-brand } 進行分享,以點對點加密的方式來分享檔案,並提供會自動失效的鏈結。
|
downloadDescription = 此檔案是透過 { -send-brand } 進行分享,以點對點加密的方式來分享檔案,並提供會自動失效的鏈結。
|
||||||
trySendDescription = 快試試 { -send-brand },簡單安全的檔案分享機制。
|
trySendDescription = 快試試 { -send-brand },簡單安全的檔案分享機制。
|
||||||
# count will always be > 10
|
# count will always be > 10
|
||||||
tooManyFiles =
|
tooManyFiles = { $count ->
|
||||||
{ $count ->
|
[one] 一次僅能上傳 1 個檔案。
|
||||||
*[other] 一次僅能上傳 { $count } 個檔案。
|
*[other] 一次僅能上傳 { $count } 個檔案。
|
||||||
}
|
}
|
||||||
# count will always be > 10
|
# count will always be > 10
|
||||||
tooManyArchives =
|
tooManyArchives = { $count ->
|
||||||
{ $count ->
|
[one] 僅允許 1 個壓縮檔。
|
||||||
*[other] 僅允許 { $count } 個壓縮檔。
|
*[other] 僅允許 { $count } 個壓縮檔。
|
||||||
}
|
}
|
||||||
expiredTitle = 此鏈結已經失效。
|
expiredTitle = 此鏈結已經失效。
|
||||||
notSupportedDescription = 無法於此瀏覽器使用 { -send-brand }。在最新版的 { -firefox } 中使用 { -send-short-brand } 會有最佳效果,也可在大部分瀏覽器的最新版本當中使用。
|
notSupportedDescription = 無法於此瀏覽器使用 { -send-brand }。在最新版的 { -firefox } 中使用 { -send-short-brand } 會有最佳效果,也可在大部分瀏覽器的最新版本當中使用。
|
||||||
downloadFirefox = 下載 { -firefox }
|
downloadFirefox = 下載 { -firefox }
|
||||||
@@ -136,5 +142,4 @@ shareLinkDescription = 您的檔案鏈結:
|
|||||||
shareLinkButton = 分享鏈結
|
shareLinkButton = 分享鏈結
|
||||||
# $name is the name of the file
|
# $name is the name of the file
|
||||||
shareMessage = 使用 { -send-brand } 下載「{ $name }」: 簡單安全的檔案分享機制
|
shareMessage = 使用 { -send-brand } 下載「{ $name }」: 簡單安全的檔案分享機制
|
||||||
trailheadPromo = 有種方法可以保護您的隱私,加入 Firefox。
|
|
||||||
learnMore = 了解更多。
|
learnMore = 了解更多。
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ module.exports = {
|
|||||||
FOOTER_SOURCE_URL: config.footer_source_url,
|
FOOTER_SOURCE_URL: config.footer_source_url,
|
||||||
CUSTOM_FOOTER_TEXT: config.custom_footer_text,
|
CUSTOM_FOOTER_TEXT: config.custom_footer_text,
|
||||||
CUSTOM_FOOTER_URL: config.custom_footer_url,
|
CUSTOM_FOOTER_URL: config.custom_footer_url,
|
||||||
|
UPLOAD_AREA_WARNING_HTML: config.upload_area_warning_html,
|
||||||
|
DOWNLOAD_WARNING_HTML: config.download_warning_html,
|
||||||
COLORS: {
|
COLORS: {
|
||||||
PRIMARY: config.ui_color_primary,
|
PRIMARY: config.ui_color_primary,
|
||||||
ACCENT: config.ui_color_accent
|
ACCENT: config.ui_color_accent
|
||||||
|
|||||||
@@ -175,7 +175,8 @@ const conf = convict({
|
|||||||
},
|
},
|
||||||
custom_description: {
|
custom_description: {
|
||||||
format: String,
|
format: String,
|
||||||
default: 'Encrypt and send files with a link that automatically expires to ensure your important documents don’t stay online forever.',
|
default:
|
||||||
|
'Encrypt and send files with a link that automatically expires to ensure your important documents don’t stay online forever.',
|
||||||
env: 'CUSTOM_DESCRIPTION'
|
env: 'CUSTOM_DESCRIPTION'
|
||||||
},
|
},
|
||||||
detect_base_url: {
|
detect_base_url: {
|
||||||
@@ -263,6 +264,16 @@ const conf = convict({
|
|||||||
default: '',
|
default: '',
|
||||||
env: 'CUSTOM_FOOTER_URL'
|
env: 'CUSTOM_FOOTER_URL'
|
||||||
},
|
},
|
||||||
|
upload_area_warning_html: {
|
||||||
|
format: String,
|
||||||
|
default: '',
|
||||||
|
env: 'SEND_UPLOAD_AREA_WARNING_HTML'
|
||||||
|
},
|
||||||
|
download_warning_html: {
|
||||||
|
format: String,
|
||||||
|
default: '',
|
||||||
|
env: 'SEND_DOWNLOAD_WARNING_HTML'
|
||||||
|
},
|
||||||
ui_color_primary: {
|
ui_color_primary: {
|
||||||
format: String,
|
format: String,
|
||||||
default: '#0a84ff',
|
default: '#0a84ff',
|
||||||
|
|||||||
@@ -6,6 +6,13 @@ const VersionPlugin = require('./build/version_plugin');
|
|||||||
const AndroidIndexPlugin = require('./build/android_index_plugin');
|
const AndroidIndexPlugin = require('./build/android_index_plugin');
|
||||||
const ExtractTextPlugin = require('extract-text-webpack-plugin');
|
const ExtractTextPlugin = require('extract-text-webpack-plugin');
|
||||||
|
|
||||||
|
// Fix for node 18+
|
||||||
|
// See: <https://stackoverflow.com/a/78005686/1000145>
|
||||||
|
const crypto = require('crypto');
|
||||||
|
const crypto_orig_createHash = crypto.createHash;
|
||||||
|
crypto.createHash = algorithm =>
|
||||||
|
crypto_orig_createHash(algorithm == 'md4' ? 'sha256' : algorithm);
|
||||||
|
|
||||||
const webJsOptions = {
|
const webJsOptions = {
|
||||||
babelrc: false,
|
babelrc: false,
|
||||||
presets: [
|
presets: [
|
||||||
|
|||||||
Reference in New Issue
Block a user