Compare commits

...

40 Commits

Author SHA1 Message Date
Harvey Tindall 49c7d83840
fix logging and crash reports on Windows
"-H=windowsgui" disables stdout on Windows, and the io.Multiwriter used
for logging had stdout as it's first entry, which failed and caused
    logging and line caching to be skipped. stdout is now removed from
    the multiwriter in this situation. Other portion of the issue was
    because crash reports had colons in their names, which Windows
    doesn't like. Fixes #168.
2023-02-02 13:42:15 +00:00
BatavianX a30469f6ec translation from Weblate (Indonesian)
Currently translated at 100.0% (40 of 40 strings)

Translation: jfa-go/Account Creation Form
Translate-URL: https://weblate.jfa-go.com/projects/jfa-go/form/id/
2023-02-02 14:07:20 +01:00
BatavianX 045f9ef827 Translated using Weblate (Indonesian)
Currently translated at 60.8% (14 of 23 strings)

Translation: jfa-go/Common Strings
Translate-URL: https://weblate.jfa-go.com/projects/jfa-go/common-strings/id/
2023-02-02 14:07:20 +01:00
BatavianX abc13575c9 Translated using Weblate (Indonesian)
Currently translated at 70.5% (36 of 51 strings)

Translation: jfa-go/Emails
Translate-URL: https://weblate.jfa-go.com/projects/jfa-go/emails/id/
2023-02-02 14:07:20 +01:00
Farès Chati 958b824dbc translation from Weblate (French)
Currently translated at 100.0% (179 of 179 strings)

Translation: jfa-go/Admin Page
Translate-URL: https://weblate.jfa-go.com/projects/jfa-go/admin/fr/
2023-02-02 14:07:20 +01:00
collateral127 7b5f5abd22 Translated using Weblate (English (United Kingdom))
Currently translated at 100.0% (10 of 10 strings)

Translation: jfa-go/Password Reset Links
Translate-URL: https://weblate.jfa-go.com/projects/jfa-go/password-reset-links/en_GB/
2023-02-02 14:07:20 +01:00
collateral127 5b7060c6a3 Translated using Weblate (English (United Kingdom))
Currently translated at 100.0% (10 of 10 strings)

Translation: jfa-go/Telegram/Matrix/Discord bots
Translate-URL: https://weblate.jfa-go.com/projects/jfa-go/chat-bots/en_GB/
2023-02-02 14:07:20 +01:00
collateral127 bbcba005c0 Translated using Weblate (English (United Kingdom))
Currently translated at 100.0% (23 of 23 strings)

Translation: jfa-go/Common Strings
Translate-URL: https://weblate.jfa-go.com/projects/jfa-go/common-strings/en_GB/
2023-02-02 14:07:20 +01:00
collateral127 11d8b90f88 translation from Weblate (English (United Kingdom))
Currently translated at 100.0% (40 of 40 strings)

Translation: jfa-go/Account Creation Form
Translate-URL: https://weblate.jfa-go.com/projects/jfa-go/form/en_GB/
2023-02-02 14:07:20 +01:00
collateral127 b531ec9b50 Translated using Weblate (English (United Kingdom))
Currently translated at 100.0% (112 of 112 strings)

Translation: jfa-go/Setup
Translate-URL: https://weblate.jfa-go.com/projects/jfa-go/setup/en_GB/
2023-02-02 14:07:20 +01:00
collateral127 79790303a9 Translated using Weblate (English (United Kingdom))
Currently translated at 100.0% (51 of 51 strings)

Translation: jfa-go/Emails
Translate-URL: https://weblate.jfa-go.com/projects/jfa-go/emails/en_GB/
2023-02-02 14:07:20 +01:00
collateral127 11c45a67b3 translation from Weblate (English (United Kingdom))
Currently translated at 100.0% (179 of 179 strings)

Translation: jfa-go/Admin Page
Translate-URL: https://weblate.jfa-go.com/projects/jfa-go/admin/en_GB/
2023-02-02 14:07:20 +01:00
ilyigna 413ea07cbd translation from Weblate (Spanish)
Currently translated at 100.0% (40 of 40 strings)

Translation: jfa-go/Account Creation Form
Translate-URL: https://weblate.jfa-go.com/projects/jfa-go/form/es/
2023-02-02 14:07:20 +01:00
Kovács Tamás 890148051f Translated using Weblate (Hungarian)
Currently translated at 16.9% (19 of 112 strings)

Translation: jfa-go/Setup
Translate-URL: https://weblate.jfa-go.com/projects/jfa-go/setup/hu/
2023-02-02 14:07:20 +01:00
Kovács Tamás 3ba5d1f3fd translation from Weblate (Hungarian)
Currently translated at 95.0% (38 of 40 strings)

Translation: jfa-go/Account Creation Form
Translate-URL: https://weblate.jfa-go.com/projects/jfa-go/form/hu/
2023-02-02 14:07:20 +01:00
Kovács Tamás ef5a0c3f75 Added translation using Weblate (Hungarian) 2023-02-02 14:07:20 +01:00
Zabpehely 0323b2783b translation from Weblate (Hungarian)
Currently translated at 32.4% (58 of 179 strings)

Translation: jfa-go/Admin Page
Translate-URL: https://weblate.jfa-go.com/projects/jfa-go/admin/hu/
2023-02-02 14:07:20 +01:00
Linyue-GitHub b1e8bc4a46 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (112 of 112 strings)

Translation: jfa-go/Setup
Translate-URL: https://weblate.jfa-go.com/projects/jfa-go/setup/zh_Hans/
2023-02-02 14:07:20 +01:00
Linyue-GitHub e3a33d102e translation from Weblate (Chinese (Simplified))
Currently translated at 100.0% (179 of 179 strings)

Translation: jfa-go/Admin Page
Translate-URL: https://weblate.jfa-go.com/projects/jfa-go/admin/zh_Hans/
2023-02-02 14:07:20 +01:00
BIG-OP01 b9a3ed1d74 translation from Weblate (Chinese (Traditional))
Currently translated at 100.0% (40 of 40 strings)

Translation: jfa-go/Account Creation Form
Translate-URL: https://weblate.jfa-go.com/projects/jfa-go/form/zh_Hant/
2023-02-02 14:07:20 +01:00
BIG-OP01 cb0d4e8bd7 Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (51 of 51 strings)

Translation: jfa-go/Emails
Translate-URL: https://weblate.jfa-go.com/projects/jfa-go/emails/zh_Hant/
2023-02-02 14:07:20 +01:00
BIG-OP01 5ee7bdc55e Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (10 of 10 strings)

Translation: jfa-go/Telegram/Matrix/Discord bots
Translate-URL: https://weblate.jfa-go.com/projects/jfa-go/chat-bots/zh_Hant/
2023-02-02 14:07:20 +01:00
BIG-OP01 35ed4e20f0 Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (23 of 23 strings)

Translation: jfa-go/Common Strings
Translate-URL: https://weblate.jfa-go.com/projects/jfa-go/common-strings/zh_Hant/
2023-02-02 14:07:20 +01:00
BIG-OP01 a5faf0699a Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (10 of 10 strings)

Translation: jfa-go/Password Reset Links
Translate-URL: https://weblate.jfa-go.com/projects/jfa-go/password-reset-links/zh_Hant/
2023-02-02 14:07:20 +01:00
BIG-OP01 cb249b30af Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (112 of 112 strings)

Translation: jfa-go/Setup
Translate-URL: https://weblate.jfa-go.com/projects/jfa-go/setup/zh_Hant/
2023-02-02 14:07:20 +01:00
BIG-OP01 bb1e3a2c72 translation from Weblate (Chinese (Traditional))
Currently translated at 100.0% (179 of 179 strings)

Translation: jfa-go/Admin Page
Translate-URL: https://weblate.jfa-go.com/projects/jfa-go/admin/zh_Hant/
2023-02-02 14:07:20 +01:00
BIG-OP01 540b8d7c13 Added translation using Weblate (Chinese (Traditional)) 2023-02-02 14:07:20 +01:00
BIG-OP01 99e524589c Added translation using Weblate (Chinese (Traditional)) 2023-02-02 14:07:20 +01:00
BIG-OP01 295343be85 Added translation using Weblate (Chinese (Traditional)) 2023-02-02 14:07:20 +01:00
BIG-OP01 6f61d2246d add translation from Weblate (Chinese (Traditional)) 2023-02-02 14:07:20 +01:00
BIG-OP01 e0cd4ed379 Added translation using Weblate (Chinese (Traditional)) 2023-02-02 14:07:20 +01:00
BIG-OP01 9f3269bce7 Added translation using Weblate (Chinese (Traditional)) 2023-02-02 14:07:20 +01:00
BIG-OP01 464fabc3bb add translation from Weblate (Chinese (Traditional)) 2023-02-02 14:07:20 +01:00
Harvey Tindall c187b948d9
accounts: display "Contact through" above container
stops most of it being hidden at the bottom of the page.
2023-02-02 12:18:34 +00:00
Harvey Tindall eb85ee4d35
add option to auto redirect to jellyfin (or given link)
if enabled (General>Auto redirect on success), the user will not have to
    click "continue" on the form or creation success page and will
    insted be redirected. For #242.
2023-02-02 10:34:22 +00:00
Harvey Tindall de6bc02ad8
Merge branch 'main' of github.com:hrfee/jfa-go 2023-02-02 09:41:56 +00:00
Harvey Tindall d355b3167f
fix GOESBUILD for newer go versions
switched to 'go install' syntax. for #248.
2023-02-02 09:41:14 +00:00
Harvey Tindall 6cd846dfd8
Merge pull request #251 from aleksasiriski/patch-1
fixed setExpiry() and added checked to admin only
2023-02-02 09:27:12 +00:00
Aleksa Siriški 0c102f5324
added checked to admin only
because it is confusing if you go straight to `Manually set the username and password.` and you can't go next since nothing is checked above but it becomes hidden
2023-02-01 23:31:55 +01:00
Aleksa Siriški f50596c4a1
fixed setExpiry()
The bug was that setExpiry didn't work if account was enabled and didn't have an expiry already.
2023-02-01 23:11:21 +01:00
35 changed files with 1457 additions and 129 deletions

View File

@ -80,7 +80,7 @@ npm:
@if [ "$(GOESBUILD)" = "off" ]; then\
npm install esbuild;\
else\
go get -u github.com/evanw/esbuild/cmd/esbuild;\
go install github.com/evanw/esbuild/cmd/esbuild@latest;\
fi
configuration:

View File

@ -265,6 +265,15 @@
"value": "",
"advanced": true,
"description": "Set a different URL for the sign-up form to redirect the user to when they've signed up. Default to 'Public Server' or 'Server' in the Jellyfin tab."
},
"auto_redirect": {
"name": "Auto redirect on success",
"required": false,
"requires_restart": true,
"type": "bool",
"value": false,
"advanced": true,
"description": "Navigate directly to the above URL instead of needing the user to click \"Continue\"."
}
}
},

View File

@ -432,6 +432,7 @@ p.top {
.dropdown {
padding-bottom: 0.5rem;
margin-bottom: -0.5rem;
position: absolute;
}
.dropdown-display.lg {

26
exit.go
View File

@ -5,13 +5,12 @@ import (
"html/template"
"log"
"os"
"os/exec"
"path/filepath"
"runtime"
"runtime/debug"
"strings"
"time"
"github.com/pkg/browser"
)
// https://gist.github.com/swdunlop/9629168
@ -43,6 +42,21 @@ func identifyPanic() string {
return fmt.Sprintf("pc:%x", pc)
}
// OpenFile attempts to open a given file in the appropriate GUI application.
func OpenFile(fpath string) (err error) {
switch PLATFORM {
case "linux":
err = exec.Command("xdg-open", fpath).Start()
case "windows":
err = exec.Command("rundll32", "url.dll,FileProtocolHandler", fpath).Start()
case "darwin":
err = exec.Command("open", fpath).Start()
default:
err = fmt.Errorf("unknown os")
}
return
}
// Exit dumps the last 100 lines of output to a crash file in /tmp (or equivalent), and generates a prettier HTML file containing it that is opened in the browser if possible.
func Exit(err interface{}) {
tmpl, err2 := template.ParseFS(localFS, "html/crash.html", "html/header.html")
@ -63,7 +77,8 @@ func Exit(err interface{}) {
if err != nil {
data["Err"] = fmt.Sprintf("%s %v", identifyPanic(), err)
}
fpath := filepath.Join(temp, "jfa-go-crash-"+time.Now().Local().Format("2006-01-02T15:04:05"))
// Use dashes for time rather than colons for Windows
fpath := filepath.Join(temp, "jfa-go-crash-"+time.Now().Local().Format("2006-01-02T15-04-05"))
err2 = os.WriteFile(fpath+".txt", []byte(logCache), 0666)
if err2 != nil {
log.Fatalf("Failed to write crash dump file: %v", err2)
@ -78,7 +93,10 @@ func Exit(err interface{}) {
if err2 != nil {
log.Fatalf("Failed to execute template: %v", err2)
}
browser.OpenFile(fpath + ".html")
if err := OpenFile(fpath + ".html"); err != nil {
log.Printf("Failed to open browser, trying text file...")
OpenFile(fpath + ".txt")
}
if TRAY {
QuitTray()
} else {

View File

@ -8,6 +8,9 @@
{{ else }}
<title>{{ .strings.pageTitle }}</title>
{{ end }}
<script>
window.redirectToJellyfin = {{ .redirectToJellyfin }};
</script>
</head>
<body class="max-w-full overflow-x-hidden section">
<div id="modal-success" class="modal">

View File

@ -137,7 +137,7 @@
<input type="radio" class="mr-2" name="ui-jellyfin_login" value="true" checked><span>{{ .lang.Login.authorizeWithJellyfin }}</span>
</label>
<label class="row switch pl-4 pb-4">
<input type="checkbox" class="mr-2" id="ui-admin_only"><span>{{ .lang.Login.adminOnly }}</span>
<input type="checkbox" class="mr-2" id="ui-admin_only" checked><span>{{ .lang.Login.adminOnly }}</span>
</label>
<label class="row switch pl-4 pb-2">
<input type="checkbox" class="mr-2" id="ui-allow_all"><span>{{ .lang.Login.allowAll }}</span>

View File

@ -1,5 +1,217 @@
{
"meta": {
"name": "English (GB)"
},
"quantityStrings": {
"deleteUser": {
"singular": "Delete User",
"plural": "Delete Users"
},
"deletedUser": {
"singular": "Deleted {n} user.",
"plural": "Deleted {n} users."
},
"disabledUser": {
"plural": "Disabled {n} users.",
"singular": "Disabled {n} user."
},
"extendExpiry": {
"singular": "Extend expiry for {n} user",
"plural": "Extend expiry for {n} users"
},
"extendedExpiry": {
"plural": "Extended expiry for {n} users.",
"singular": "Extended expiry for {n} user."
},
"addUser": {
"singular": "Add user",
"plural": "Add users"
},
"modifySettingsFor": {
"singular": "Modify Settings for {n} user",
"plural": "Modify Settings for {n} users"
},
"deleteNUsers": {
"plural": "Delete {n} users",
"singular": "Delete {n} user"
},
"disableUsers": {
"singular": "Disable {n} user",
"plural": "Disable {n} users"
},
"enabledUser": {
"singular": "Enabled {n} user.",
"plural": "Enabled {n} users."
},
"announceTo": {
"singular": "Announce to {n} user",
"plural": "Announce to {n} users"
},
"appliedSettings": {
"singular": "Applied settings to {n} user.",
"plural": "Applied settings to {n} users."
},
"setExpiry": {
"singular": "Set expiry for {n} user",
"plural": "Set expiry for {n} users"
},
"reEnableUsers": {
"singular": "Re-enable {n} user",
"plural": "Re-enable {n} users"
}
},
"strings": {
"invites": "Invites",
"accounts": "Accounts",
"settings": "Settings",
"inviteDays": "Days",
"inviteHours": "Hours",
"inviteInfiniteUsesWarning": "invites with infinite uses can be used abusively",
"inviteSendToEmail": "Send to",
"login": "Login",
"logout": "Logout",
"apply": "Apply",
"delete": "Delete",
"updates": "Updates",
"expiry": "Expiry",
"variables": "Variables",
"preview": "Preview",
"markdownSupported": "Markdown is supported.",
"applyHomescreenLayout": "Apply homescreen layout",
"ombiProfile": "Ombi user profile",
"settingsApplyRestartNow": "Apply & restart",
"settingsApplied": "Settings applied.",
"userProfiles": "User Profiles",
"addProfile": "Add Profile",
"userProfilesLibraries": "Libraries",
"addProfileNameOf": "Profile Name",
"inviteDateCreated": "Created",
"settingsRestart": "Restart",
"inviteMinutes": "Minutes",
"inviteNumberOfUses": "Number of uses",
"warning": "Warning",
"create": "Create",
"name": "Name",
"conditionals": "Conditionals",
"contactThrough": "Contact through:",
"select": "Select",
"date": "Date",
"enabled": "Enabled",
"disabled": "Disabled",
"disable": "Disable",
"edit": "Edit",
"extendExpiry": "Extend expiry",
"sendPWR": "Send Password Reset",
"inviteMonths": "Months",
"inviteDuration": "Invite Duration",
"add": "Add",
"reEnable": "Re-enable",
"update": "Update",
"user": "User",
"userExpiryDescription": "A specified amount of time after each signup, jfa-go will delete/disable the account. You can change this behaviour in settings.",
"templates": "Templates",
"accessJFA": "Access jfa-go",
"message": "Message",
"reset": "Reset",
"donate": "Donate",
"sendPWRSuccessManual": "If the user hasn't received it, press copy to get a link to manually send to them.",
"modifySettingsDescription": "Apply settings from an existing profile, or source them directly from a user.",
"logs": "Logs",
"sendPWRManual": "User {n} has no method of contact, press copy to get a link to send to them.",
"sendPWRSuccess": "Password reset link sent.",
"customizeMessages": "Customise Messages",
"customizeMessagesDescription": "If you don't want to use jfa-go's message templates, you can create your own using Markdown.",
"modifySettings": "Modify Settings",
"sendDeleteNotificationEmail": "Send notification message",
"sendDeleteNotifiationExample": "Your account has been deleted.",
"settingsRestarting": "Restarting…",
"settingsRestartRequired": "Restart needed",
"settingsRefreshPage": "Refresh the page in a few seconds.",
"settingsRequiredOrRestartMessage": "Note: {n} indicates a required field, {n} indicates changes require a restart.",
"settingsSave": "Save",
"userProfilesDescription": "Profiles are applied to users when they create an account. A profile include library access rights and homescreen layout.",
"addProfileDescription": "Create a Jellyfin user and configure it, then select it below. When this profile is applied to an invite, new users will be created with the settings.",
"addProfileStoreHomescreenLayout": "Store homescreen layout",
"inviteNoUsersCreated": "None yet!",
"inviteUsersCreated": "Created users",
"inviteRemainingUses": "Remaining uses",
"inviteNoInvites": "None",
"inviteExpiresInTime": "Expires in {n}",
"notifyEvent": "Notify on:",
"notifyInviteExpiry": "On expiry",
"notifyUserCreation": "On user creation",
"sendPIN": "Ask the user to send the PIN below to the bot.",
"findDiscordUser": "Find Discord user",
"linkMatrixDescription": "Enter the username and password of the user to use as a bot. Once submitted, the app will restart.",
"matrixHomeServer": "Home server address",
"saveAsTemplate": "Save as template",
"deleteTemplate": "Delete template",
"settingsRestartRequiredDescription": "A restart is necessary to apply some settings you changed. Restart now or later?",
"settingsApplyRestartLater": "Apply, restart later",
"subject": "Subject",
"setExpiry": "Set expiry",
"admin": "Admin",
"download": "Download",
"search": "Search",
"advancedSettings": "Advanced Settings",
"lastActiveTime": "Last Active",
"from": "From",
"userExpiry": "User Expiry",
"aboutProgram": "About",
"version": "Version",
"commitNoun": "Commit",
"newUser": "New User",
"profile": "Profile",
"unknown": "Unknown",
"label": "Label",
"announce": "Announce",
"sendPWRValidFor": "The link is valid for 30m.",
"ombiUserDefaultsDescription": "Create an Ombi user and configure it, then select it below. It's settings/permissions will be stored and applied to new Ombi users created by jfa-go when this profile is selected.",
"userProfilesIsDefault": "Default",
"inviteNoProfile": "No Profile",
"searchDiscordUser": "Start typing the Discord username to find the user.",
"templateEnterName": "Enter a name to save this template.",
"accessJFASettings": "Cannot be changed as either \"Admin Only\" or \"Allow All\" has been set in Settings > General."
},
"notifications": {
"errorSettingsFailed": "Application failed.",
"errorLoginBlank": "The username and/or password was left blank.",
"errorLoadSettings": "Failed to load settings.",
"errorUnknown": "Unknown error.",
"errorDeleteProfile": "Failed to delete profile {n}",
"sentAnnouncement": "Announcement sent.",
"savedAnnouncement": "Announcement saved.",
"setOmbiProfile": "Stored ombi profile.",
"updateApplied": "Update applied, please restart.",
"updateAppliedRefresh": "Update applied, please refresh.",
"telegramVerified": "Telegram account verified.",
"accountConnected": "Account connected.",
"error401Unauthorized": "Unauthorised. Try refreshing the page.",
"errorSettingsAppliedNoHomescreenLayout": "Settings were applied, but applying homescreen layout may have failed.",
"errorSaveEmail": "Failed to save email.",
"errorLoadProfiles": "Failed to load profiles.",
"errorCreateProfile": "Failed to create profile {n}",
"errorLoadUsers": "Failed to load users.",
"errorSaveSettings": "Couldn't save settings.",
"errorSetOmbiProfile": "Failed to store ombi profile.",
"errorLoadOmbiUsers": "Failed to load ombi users.",
"errorFailureCheckLogs": "Failed (check console/logs)",
"errorPartialFailureCheckLogs": "Partial failure (check console/logs)",
"errorUserCreated": "Failed to create user {n}.",
"errorSendWelcomeEmail": "Failed to send welcome message (check console/logs)",
"errorApplyUpdate": "Failed to apply update, try manually.",
"errorCheckUpdate": "Failed to check for update.",
"noUpdatesAvailable": "No new updates available.",
"changedEmailAddress": "Changed email address of {n}.",
"userCreated": "User {n} created.",
"saveEmail": "Email saved.",
"createProfile": "Created profile {n}.",
"saveSettings": "Settings were saved",
"errorConnection": "Couldn't connect to jfa-go.",
"errorHomescreenAppliedNoSettings": "Homescreen layout was applied, but applying settings may have failed.",
"errorBlankFields": "Fields were left blank",
"errorSetDefaultProfile": "Failed to set default profile.",
"errorChangedEmailAddress": "Couldn't change email address of {n}.",
"updateAvailable": "A new update is available, check settings."
}
}

View File

@ -55,7 +55,7 @@
"addProfileNameOf": "Nom de profil",
"addProfileStoreHomescreenLayout": "Enregistrer la disposition de l'écran d'accueil",
"inviteNoUsersCreated": "Aucun pour l'instant !",
"inviteUsersCreated": "Utilisateurs créer",
"inviteUsersCreated": "Utilisateurs créés",
"inviteNoProfile": "Aucun profil",
"inviteDateCreated": "Créer",
"inviteRemainingUses": "Utilisations restantes",
@ -64,7 +64,7 @@
"notifyEvent": "Notifier sur :",
"notifyInviteExpiry": "À l'expiration",
"notifyUserCreation": "à la création de l'utilisateur",
"label": "Etiquette",
"label": "Nom",
"settingsRestarting": "Redémarrage…",
"settingsRestart": "Redémarrer",
"announce": "Annoncer",
@ -112,7 +112,10 @@
"sendPWRValidFor": "Ce lien est valable 30min.",
"sendPWRManual": "L'utilisateur {n} n'a pas indiqué de méthode de contact, appuyez sur copier pour recevoir un lien à lui envoyer.",
"sendPWRSuccessManual": "Si l'utilisateur ne l'a pas reçu, appuyez sur copier pour recevoir un lien à lui envoyer manuellement.",
"ombiProfile": "Profil d'utilisateur Ombi"
"ombiProfile": "Profil d'utilisateur Ombi",
"logs": "Logs",
"accessJFA": "Accès à jfa-go",
"accessJFASettings": "Ne peut pas être changé car \"Admin Only\" ou \"Allow All\" a été défini dans Paramètres > Général."
},
"notifications": {
"changedEmailAddress": "Adresse e-mail modifiée de {n}.",
@ -209,6 +212,10 @@
"disabledUser": {
"singular": "{n} utilisateur désactivé.",
"plural": "{n} utilisateurs désactivés."
},
"setExpiry": {
"singular": "Définir l'expiration pour {n} utilisateur",
"plural": "Définir l'expiration pour {n} utilisateurs"
}
}
}

View File

@ -3,63 +3,63 @@
"name": "Magyar (HU)"
},
"strings": {
"invites": "",
"accounts": "",
"settings": "",
"inviteMonths": "",
"inviteDays": "",
"inviteHours": "",
"inviteMinutes": "",
"inviteNumberOfUses": "",
"inviteDuration": "",
"warning": "",
"inviteInfiniteUsesWarning": "",
"inviteSendToEmail": "",
"login": "",
"logout": "",
"create": "",
"apply": "",
"delete": "",
"add": "",
"select": "",
"name": "",
"date": "",
"enabled": "",
"disabled": "",
"reEnable": "",
"setExpiry": "",
"disable": "",
"admin": "",
"updates": "",
"update": "",
"download": "",
"search": "",
"advancedSettings": "",
"lastActiveTime": "",
"from": "",
"user": "",
"expiry": "",
"userExpiry": "",
"userExpiryDescription": "",
"aboutProgram": "",
"version": "",
"commitNoun": "",
"newUser": "",
"profile": "",
"unknown": "",
"label": "",
"logs": "",
"announce": "",
"templates": "",
"subject": "",
"message": "",
"variables": "",
"conditionals": "",
"preview": "",
"reset": "",
"edit": "",
"donate": "",
"sendPWR": "",
"invites": "Meghívások",
"accounts": "Fiókok",
"settings": "Beállítások",
"inviteMonths": "Hónapok",
"inviteDays": "Napok",
"inviteHours": "Órák",
"inviteMinutes": "Percek",
"inviteNumberOfUses": "Felhasználások száma",
"inviteDuration": "Meghívás időtartama",
"warning": "Figyelmeztetés",
"inviteInfiniteUsesWarning": "a végtelen felhasználású meghívókkal visszaélhetnek",
"inviteSendToEmail": "Címzett",
"login": "Belépés",
"logout": "Kijelentkezés",
"create": "Létrehozás",
"apply": "Alkalmaz",
"delete": "Törlés",
"add": "Hozzáadás",
"select": "Kiválasztás",
"name": "Név",
"date": "Dátum",
"enabled": "Engedélyezve",
"disabled": "Tiltva",
"reEnable": "Újra engedélyezés",
"setExpiry": "Lejárat beállítása",
"disable": "Letiltás",
"admin": "Adminisztrátor",
"updates": "Frissítések",
"update": "Frissítés",
"download": "Letöltés",
"search": "Keresés",
"advancedSettings": "További beállítások",
"lastActiveTime": "Utoljára aktív",
"from": "Feladó",
"user": "Felhasználó",
"expiry": "Lejárat",
"userExpiry": "Felhasználói lejárat",
"userExpiryDescription": "Egy meghatározott idő után minden regisztrációt töröl, vagy felfüggeszt a jfa-go. Ezt a működést megváltoztathatod a beállításokban.",
"aboutProgram": "Névjegy",
"version": "Verzió",
"commitNoun": "Elkövet",
"newUser": "Új felhasználó",
"profile": "Profil",
"unknown": "Ismeretlen",
"label": "Címke",
"logs": "Naplók",
"announce": "Bejelentés",
"templates": "Sablonok",
"subject": "Téma",
"message": "Üzenet",
"variables": "Változók",
"conditionals": "Feltételek",
"preview": "Előnézet",
"reset": "Visszaállítás",
"edit": "Szerkesztés",
"donate": "Támogatás",
"sendPWR": "Jelszó visszaállítás küldése",
"contactThrough": "",
"extendExpiry": "",
"sendPWRManual": "",

217
lang/admin/zh-Hant.json Normal file
View File

@ -0,0 +1,217 @@
{
"meta": {
"name": "繁體中文 (TW)"
},
"strings": {
"invites": "邀請",
"accounts": "帳戶",
"settings": "設置",
"inviteMonths": "月",
"inviteDays": "日",
"inviteHours": "小時",
"inviteMinutes": "分鐘",
"inviteNumberOfUses": "使用次數",
"inviteDuration": "邀請時長",
"warning": "警告",
"inviteInfiniteUsesWarning": "無限使用次數的邀請碼可能被濫用",
"inviteSendToEmail": "發送到",
"login": "登錄",
"logout": "登出",
"create": "創建",
"apply": "應用",
"delete": "刪除",
"add": "添加",
"select": "選擇",
"name": "帳戶名稱",
"date": "日期",
"enabled": "已啟用",
"disabled": "已禁用",
"reEnable": "重新啟用",
"setExpiry": "設置到期時間",
"disable": "禁用",
"admin": "管理員",
"updates": "更新",
"update": "更新",
"download": "下載",
"search": "搜尋",
"advancedSettings": "高級設置",
"lastActiveTime": "上次啟用時間",
"from": "從",
"user": "帳戶",
"expiry": "到期",
"userExpiry": "帳戶到期",
"userExpiryDescription": "每次註冊后指定的時間jfa-go 將刪除/禁用該帳戶。您可以在設定中更改此行為。",
"aboutProgram": "關於",
"version": "版本",
"commitNoun": "提交",
"newUser": "新帳戶",
"profile": "帳戶資料",
"unknown": "未知",
"label": "標籤",
"logs": "日誌",
"announce": "公告",
"templates": "範本",
"subject": "主題",
"message": "訊息",
"variables": "變數",
"conditionals": "條件",
"preview": "預覽",
"reset": "重設",
"edit": "編輯",
"donate": "捐贈",
"sendPWR": "發送密碼重置",
"contactThrough": "聯繫方式:",
"extendExpiry": "延長到期時間",
"sendPWRManual": "使用者 {n} 沒有聯繫方式,請按 “複製” 以獲取連結並手動發送給使用者。",
"sendPWRSuccess": "已發送密碼重置連結。",
"sendPWRSuccessManual": "如果使用者沒收到,請按 “複製” 以獲取連結並手動發送給使用者。",
"sendPWRValidFor": "該連結的有效期為 30 分鐘。",
"customizeMessages": "自定義訊息",
"customizeMessagesDescription": "如果您不想使用 jfa-go 的訊息範本,可以使用 Markdown 創建自己的訊息範本。",
"markdownSupported": "支持 Markdown。",
"modifySettings": "修改設置",
"modifySettingsDescription": "應用現有配置文件中的設置,或直接從帳戶處獲取設置。",
"applyHomescreenLayout": "應用主螢幕佈局",
"sendDeleteNotificationEmail": "發送通知訊息",
"sendDeleteNotifiationExample": "您的帳戶已被刪除。",
"settingsRestart": "重新啟動",
"settingsRestarting": "正在重新啟動…",
"settingsRestartRequired": "需要重新啟動",
"settingsRestartRequiredDescription": "需要重新啟動才能應用您更改的某些設定。 現在重新啟動還是稍後重新啟動?",
"settingsApplyRestartLater": "應用,稍後重新啟動",
"settingsApplyRestartNow": "應用並重新啟動",
"settingsApplied": "已應用設置。",
"settingsRefreshPage": "幾秒鐘後刷新頁面。",
"settingsRequiredOrRestartMessage": "注意: {n} 表示必填欄位, {n} 表示更改需要重新啟動。",
"settingsSave": "儲存",
"ombiProfile": "Ombi 帳戶資料",
"ombiUserDefaultsDescription": "創建一個 Ombi 帳戶並對其進行配置,然後在下面選擇它。選擇此設定時,它的設置/權限將被存儲並應用於由 jfa-go 創建的新 Ombi 帳戶。",
"userProfiles": "帳戶資料",
"userProfilesDescription": "配置文件在使用者創建帳戶時應用於使用者。配置文件包括庫訪問權限和主螢幕佈局。",
"userProfilesIsDefault": "預設",
"userProfilesLibraries": "庫",
"addProfile": "添加配置文件",
"addProfileDescription": "創建一個 Jellyfin 帳戶並對其進行配置,然後在下面選擇它。將此設定文件應用於邀請時,將使用這些設置創建新帳戶。",
"addProfileNameOf": "配置文件名稱",
"addProfileStoreHomescreenLayout": "保存主螢幕佈局",
"inviteNoUsersCreated": "暫無!",
"inviteUsersCreated": "創建的帳戶",
"inviteNoProfile": "無資料",
"inviteDateCreated": "已創建",
"inviteRemainingUses": "剩餘使用次數",
"inviteNoInvites": "無",
"inviteExpiresInTime": "在 {n} 到期",
"notifyEvent": "通知:",
"notifyInviteExpiry": "在到期時",
"notifyUserCreation": "在創建用戶時",
"sendPIN": "要求使用者將下面的 PIN 發送給機器人。",
"searchDiscordUser": "開始鍵入 Discord 帳戶名稱以查找帳戶。",
"findDiscordUser": "查尋 Discord 帳戶",
"linkMatrixDescription": "輸入要用作機器人的帳戶的帳戶名稱和密碼。提交后,應用程序將重新啟動。",
"matrixHomeServer": "主伺服器位址",
"saveAsTemplate": "儲存為範本",
"deleteTemplate": "刪除範本",
"templateEnterName": "輸入名稱以儲存此範本。",
"accessJFA": "訪問 jfa-go",
"accessJFASettings": "無法更改,因為已在「一般設置」中設置了「僅限管理員帳戶」或「允許全部帳戶」。"
},
"notifications": {
"changedEmailAddress": "更改了 {n} 的電子郵件地址。",
"userCreated": "帳戶 {n} 已創建。",
"createProfile": "創建了配置文件 {n}。",
"saveSettings": "設置已儲存",
"saveEmail": "電子郵件已儲存。",
"sentAnnouncement": "已發送公告。",
"savedAnnouncement": "公告已儲存。",
"setOmbiProfile": "ombi 設定已存儲。",
"updateApplied": "已應用更新,請重新啟動。",
"updateAppliedRefresh": "更新已應用,請重新整理。",
"telegramVerified": "Telegram 帳戶已驗證。",
"accountConnected": "帳戶已連接。",
"errorConnection": "無法連接到 jfa-go。",
"error401Unauthorized": "未經授權。嘗試重新整理頁面。",
"errorSettingsAppliedNoHomescreenLayout": "已應用設置,但應用主螢幕佈局可能失敗。",
"errorHomescreenAppliedNoSettings": "已應用主螢幕佈局,但應用設置可能失敗。",
"errorSettingsFailed": "應用失敗。",
"errorLoginBlank": "帳戶名稱和/或密碼留空。",
"errorUnknown": "未知的錯誤。",
"errorSaveEmail": "無法儲存電子郵件。",
"errorBlankFields": "欄位留空",
"errorDeleteProfile": "無法刪除設置文件 {n}",
"errorLoadProfiles": "無法讀取設置文件。",
"errorCreateProfile": "無法創建設置文件 {n}",
"errorSetDefaultProfile": "無法設置預設設置文件。",
"errorLoadUsers": "無法讀取帳戶。",
"errorSaveSettings": "無法儲存設置。",
"errorLoadSettings": "無法讀取設置。",
"errorSetOmbiProfile": "無法儲存 ombi 設置文件。",
"errorLoadOmbiUsers": "無法讀取 ombi 帳戶。",
"errorChangedEmailAddress": "無法更改 {n} 的電子郵件地址。",
"errorFailureCheckLogs": "失敗(請檢查主控台/紀錄)",
"errorPartialFailureCheckLogs": "部分故障(請檢查主控台/日誌)",
"errorUserCreated": "無法創建帳戶 {n}。",
"errorSendWelcomeEmail": "無法送出歡迎訊息(請檢查主控台/紀錄)",
"errorApplyUpdate": "無法應用更新,請手動嘗試。",
"errorCheckUpdate": "無法檢查更新。",
"updateAvailable": "有新的更新可用,請檢查設置。",
"noUpdatesAvailable": "沒有新的更新可用。"
},
"quantityStrings": {
"modifySettingsFor": {
"singular": "修改 {n} 個帳戶的設置",
"plural": "修改 {n} 個帳戶的設置"
},
"deleteNUsers": {
"singular": "刪除 {n} 個帳戶",
"plural": "刪除 {n} 個帳戶"
},
"disableUsers": {
"singular": "禁用 {n} 個帳戶",
"plural": "禁用 {n} 個帳戶"
},
"reEnableUsers": {
"singular": "重新啟用 {n} 個帳戶",
"plural": "重新啟用 {n} 個帳戶"
},
"addUser": {
"singular": "添加帳戶",
"plural": "添加帳戶"
},
"deleteUser": {
"singular": "刪除帳戶",
"plural": "刪除帳戶"
},
"deletedUser": {
"singular": "刪除 {n} 個帳戶。",
"plural": "刪除 {n} 個帳戶。"
},
"disabledUser": {
"singular": "禁用 {n} 個帳戶。",
"plural": "禁用 {n} 個帳戶。"
},
"enabledUser": {
"singular": "已啟用 {n} 個帳戶。",
"plural": "已啟用 {n} 個帳戶。"
},
"announceTo": {
"singular": "公告給 {n} 個帳戶",
"plural": "公告給 {n} 個帳戶"
},
"appliedSettings": {
"singular": "將設置應用到 {n} 個帳戶。",
"plural": "將設置應用到 {n} 個帳戶。"
},
"extendExpiry": {
"singular": "延長 {n} 個帳戶的到期時間",
"plural": "延長 {n} 個帳戶的到期時間"
},
"setExpiry": {
"singular": "設置 {n} 個帳戶的到期時間",
"plural": "設置 {n} 個帳戶的到期時間"
},
"extendedExpiry": {
"singular": "已延長 {n} 個帳戶的到期時間。",
"plural": "已延長 {n} 個帳戶的到期時間。"
}
}
}

View File

@ -78,7 +78,7 @@
"settingsRequiredOrRestartMessage": "注意:{n} 表示必填字段,{n} 表示更改需要重新启动。",
"settingsSave": "保存",
"ombiUserDefaults": "Ombi 用户默认值",
"ombiUserDefaultsDescription": "创建并配置 Ombi 用户,然后在下面选择它。它的设置/权限将被存储并应用于由 jfa-go 创建的新 Ombi 用户",
"ombiUserDefaultsDescription": "创建并配置 Ombi 用户,然后在下面选择它。它的设置/权限将被存储并应用于由 jfa-go 创建的新 Ombi 用户",
"userProfiles": "用户档案",
"userProfilesDescription": "配置文件在用户创建帐户时应用于用户。配置文件包括库访问权限和主屏幕布局。",
"userProfilesIsDefault": "默认",
@ -97,7 +97,7 @@
"notifyEvent": "通知:",
"notifyInviteExpiry": "在到期时",
"notifyUserCreation": "在创建用户时",
"sendPIN": "用户将下面的 PIN 发送给机器人。",
"sendPIN": "要用户将下面的 PIN 发送给机器人。",
"searchDiscordUser": "开始输入 Discord 用户名以查找用户。",
"findDiscordUser": "查找 Discord 用户",
"linkMatrixDescription": "输入要用作机器人的用户的用户名和密码。一旦提交,应用程序将重新启动。",
@ -111,7 +111,10 @@
"sendPWRSuccessManual": "如果用户没收到,请按下钮复制链接,手动发给用户。",
"setExpiry": "设置到期",
"logs": "记录",
"sendPWRValidFor": "此链接有效30分钟。"
"sendPWRValidFor": "此链接有效30分钟。",
"ombiProfile": "Ombi 用户配置文件",
"accessJFASettings": "无法更改,因为“仅限管理员”或“允许所有”已在“设置”>“常规”中设置。",
"accessJFA": "访问jfa-go"
},
"notifications": {
"changedEmailAddress": "更改了 {n} 的电子邮件地址。",
@ -152,7 +155,9 @@
"errorApplyUpdate": "无法应用更新,请手动尝试。",
"errorCheckUpdate": "检查更新失败。",
"updateAvailable": "有新更新可用,请检查设置。",
"noUpdatesAvailable": "没有可用的更新。"
"noUpdatesAvailable": "没有可用的更新。",
"setOmbiProfile": "保存ombi配置文件。",
"errorSetOmbiProfile": "无法保存ombi配置文件。"
},
"quantityStrings": {
"modifySettingsFor": {
@ -206,6 +211,10 @@
"extendedExpiry": {
"singular": "延长了 {n} 个用户的有效期。",
"plural": "延长了 {n} 个用户的有效期。"
},
"setExpiry": {
"plural": "为{n}用户设置到期时间",
"singular": "为{n}用户设置到期时间"
}
}
}

View File

@ -1,5 +1,29 @@
{
"meta": {
"name": "English (GB)"
},
"strings": {
"continue": "Continue",
"time24h": "24h Time",
"linkTelegram": "Link Telegram",
"send": "Send",
"linkDiscord": "Link Discord",
"linkMatrix": "Link Matrix",
"contactDiscord": "Contact through Discord",
"username": "Username",
"password": "Password",
"emailAddress": "Email Address",
"copy": "Copy",
"copied": "Copied",
"submit": "Submit",
"success": "Success",
"error": "Error",
"time12h": "12h Time",
"theme": "Theme",
"contactEmail": "Contact through Email",
"contactTelegram": "Contact through Telegram",
"name": "Name",
"refresh": "Refresh",
"required": "Required"
}
}

View File

@ -14,6 +14,7 @@
"copy": "Salin",
"time24h": "Waktu 24 jam",
"time12h": "Waktu 12 jam",
"theme": "Tema"
"theme": "Tema",
"send": "Kirim"
}
}

29
lang/common/zh-Hant.json Normal file
View File

@ -0,0 +1,29 @@
{
"meta": {
"name": "繁體中文 (TW)"
},
"strings": {
"username": "帳戶名稱",
"password": "密碼",
"emailAddress": "電子郵件",
"name": "帳戶名稱",
"submit": "提交",
"send": "發送",
"success": "成功",
"continue": "繼續",
"error": "錯誤",
"copy": "複製",
"copied": "已複製",
"time24h": "24小時制",
"time12h": "12小時制",
"linkTelegram": "連結 Telegram",
"contactEmail": "通過電子郵件聯繫",
"contactTelegram": "通過 Telegram 聯繫",
"linkDiscord": "連結 Discord",
"linkMatrix": "連結 Matrix",
"contactDiscord": "通過 Discord 聯繫",
"theme": "主題",
"refresh": "重新整理",
"required": "必填"
}
}

View File

@ -1,5 +1,77 @@
{
"meta": {
"name": "English (GB)"
},
"emailConfirmation": {
"title": "Confirm your email - Jellyfin",
"confirmEmail": "Confirm Email",
"name": "Confirmation email",
"clickBelow": "Click the link below to confirm your email address and start using Jellyfin."
},
"welcomeEmail": {
"name": "Welcome",
"title": "Welcome to Jellyfin",
"welcome": "Welcome to Jellyfin!",
"yourAccountWillExpire": "Your account will expire on {date}.",
"jellyfinURL": "URL",
"youCanLoginWith": "You can login with the details below"
},
"strings": {
"helloUser": "Hi {username},",
"ifItWasNotYou": "If this wasn't you, please ignore this.",
"reason": "Reason"
},
"userCreated": {
"name": "User creation",
"title": "Notice: User created",
"time": "Time",
"aUserWasCreated": "A user was created using code {code}.",
"notificationNotice": "Note: Notification messages can be toggled on the admin dashboard."
},
"inviteExpiry": {
"expiredAt": "Code {code} expired at {time}.",
"notificationNotice": "Note: Notification messages can be toggled on the admin dashboard.",
"name": "Invite expiry",
"title": "Notice: Invite expired",
"inviteExpired": "Invite expired."
},
"passwordReset": {
"name": "Password reset",
"title": "Password reset requested - Jellyfin",
"ifItWasYou": "If this was you, enter the pin below into the prompt.",
"ifItWasYouLink": "If this was you, click the link below.",
"pin": "PIN",
"someoneHasRequestedReset": "Someone has recently requested a password reset on Jellyfin.",
"codeExpiry": "The code will expire on {date}, at {time} UTC, which is in {expiresInMinutes}."
},
"userDeleted": {
"title": "Your account was deleted - Jellyfin",
"yourAccountWasDeleted": "Your Jellyfin account was deleted.",
"name": "User deletion"
},
"inviteEmail": {
"name": "Invite email",
"hello": "Hi",
"toJoin": "To join, follow the below link.",
"inviteExpiry": "This invite will expire on {date} at {time}, which is in {expiresInMinutes}, so act quick.",
"linkButton": "Setup your account",
"title": "Invite - Jellyfin",
"youHaveBeenInvited": "You've been invited to Jellyfin."
},
"userExpired": {
"name": "User expiry",
"title": "Your account has expired - Jellyfin",
"yourAccountHasExpired": "Your account has expired.",
"contactTheAdmin": "Contact the administrator for more info."
},
"userDisabled": {
"name": "User disabled",
"title": "Your account has been disabled - Jellyfin",
"yourAccountWasDisabled": "Your account was disabled."
},
"userEnabled": {
"name": "User enabled",
"title": "Your account has been re-enabled - Jellyfin",
"yourAccountWasEnabled": "Your account was re-enabled."
}
}

View File

@ -3,7 +3,7 @@
"name": "Bahasa Indonesia (ID)"
},
"strings": {
"ifItWasNotYou": "Jika ini bukan kamu, silahkan mengabaikan email ini.",
"ifItWasNotYou": "Jika ini bukan kamu, silahkan abaikan email ini.",
"reason": "Alasan",
"helloUser": "Halo {username},"
},

77
lang/email/zh-Hant.json Normal file
View File

@ -0,0 +1,77 @@
{
"meta": {
"name": "繁體中文 (TW)"
},
"strings": {
"ifItWasNotYou": "如果這不是您,請忽略本信件。",
"helloUser": "你好 {username},",
"reason": "原因"
},
"userCreated": {
"name": "帳戶創建",
"title": "注意:帳戶已創建",
"aUserWasCreated": "已使用邀請碼 {code} 創建了一個帳戶。",
"time": "時間",
"notificationNotice": "注意:可以在管理儀錶板上切換通知訊息。"
},
"inviteExpiry": {
"name": "邀請到期",
"title": "通知:邀請已過期",
"inviteExpired": "邀請已過期。",
"expiredAt": "邀請碼 {code} 在 {time} 過期。",
"notificationNotice": "注意:可以在管理儀錶板上切換通知訊息。"
},
"passwordReset": {
"name": "重置密碼",
"title": "忘記密碼 - Jellfin",
"someoneHasRequestedReset": "最近在 Jellyfin 上有一個您的密碼重置申請。",
"ifItWasYou": "如果是您本人,請在密碼重置提示框中輸入下方的 PIN 碼。",
"ifItWasYouLink": "如果是您本人,請點選下方的連結。",
"codeExpiry": "該 PIN 碼將在 {expiresInMinutes} 内到期UTC 時間 {date} {time})。",
"pin": "PIN 碼"
},
"userDeleted": {
"name": "帳戶刪除",
"title": "您的帳戶已被刪除 - Jellyfin",
"yourAccountWasDeleted": "您的 Jellyfin 帳戶已被刪除。"
},
"userDisabled": {
"name": "帳戶已被禁用",
"title": "您的帳戶已被禁用 - Jellyfin",
"yourAccountWasDisabled": "您的帳戶已被禁用。"
},
"userEnabled": {
"name": "帳戶已被重新啟用",
"title": "您的帳戶已被重新啟用 - Jellyfin",
"yourAccountWasEnabled": "您的帳戶已被重新啟用。"
},
"inviteEmail": {
"name": "邀請電子郵件",
"title": "邀請 - Jellyfin",
"hello": "您好",
"youHaveBeenInvited": "您已受邀註冊 Jellyfin。",
"toJoin": "請點選以下連結來加入。",
"inviteExpiry": "此邀請將於 {date} {time} 到期,即 {expiresInMinutes} 內,請儘快註冊。",
"linkButton": "設置您的帳戶"
},
"welcomeEmail": {
"name": "歡迎",
"title": "歡迎使用 Jellyfin",
"welcome": "歡迎使用 Jellyfin",
"youCanLoginWith": "您可以使用以下資訊登錄",
"yourAccountWillExpire": "您的帳戶將在 {date} 到期。",
"jellyfinURL": "網址"
},
"emailConfirmation": {
"name": "確認電子郵件",
"title": "確認您的電子郵件 - Jellyfin",
"clickBelow": "點選下面的連結以確認您的電子郵件地址並開始使用 Jellyfin。",
"confirmEmail": "確認電子郵件"
},
"userExpired": {
"name": "帳戶到期",
"title": "您的帳號已過期 - Jellyfin",
"yourAccountHasExpired": "您的帳號已過期。",
"contactTheAdmin": "請聯繫管理員瞭解更多資訊。"
}
}

View File

@ -1,5 +1,60 @@
{
"meta": {
"name": "English (GB)"
},
"strings": {
"confirmationRequired": "Email confirmation required",
"createAccountHeader": "Create Account",
"accountDetails": "Details",
"emailAddress": "Email",
"username": "Username",
"password": "Password",
"reEnterPassword": "Re-enter Password",
"createAccountButton": "Create Account",
"passwordRequirementsHeader": "Password Requirements",
"successHeader": "Success!",
"pageTitle": "Create Jellyfin Account",
"reEnterPasswordInvalid": "Passwords are not the same.",
"confirmationRequiredMessage": "Please check your email inbox to verify your address.",
"yourAccountIsValidUntil": "Your account will be valid until {date}.",
"sendPIN": "Send the PIN below to the bot, then come back here to link your account.",
"sendPINDiscord": "Type {command} in {server_channel} on Discord, then send the PIN below.",
"matrixEnterUser": "Enter your User ID, press submit, and a PIN will be sent to you. Enter it here to continue."
},
"notifications": {
"errorUnknown": "Unknown error.",
"verified": "Account verified.",
"errorCaptcha": "Captcha incorrect.",
"errorPassword": "Check password requirements.",
"errorNoMatch": "Passwords don't match.",
"errorTelegramVerification": "Telegram verification required.",
"errorInvalidPIN": "PIN is invalid.",
"errorUserExists": "User already exists.",
"errorInvalidCode": "Invalid invite code.",
"errorMatrixVerification": "Matrix verification required.",
"errorDiscordVerification": "Discord verification required.",
"errorNoEmail": "Email required."
},
"validationStrings": {
"length": {
"singular": "Must have at least {n} character",
"plural": "Must have at least {n} characters"
},
"number": {
"plural": "Must have at least {n} numbers",
"singular": "Must have at least {n} number"
},
"special": {
"plural": "Must have at least {n} special characters",
"singular": "Must have at least {n} special character"
},
"uppercase": {
"singular": "Must have at least {n} uppercase character",
"plural": "Must have at least {n} uppercase characters"
},
"lowercase": {
"singular": "Must have at least {n} lowercase character",
"plural": "Must have at least {n} lowercase characters"
}
}
}

View File

@ -18,7 +18,7 @@
"confirmationRequiredMessage": "Por favor, revise la bandeja de entrada de su correo electrónico para verificar su dirección.",
"yourAccountIsValidUntil": "Su cuenta será válida hasta el {date}.",
"sendPINDiscord": "Escribe {command} en {server_channel} en Discord, luego envía el PIN a través de DM al bot.",
"sendPIN": "A continuacion envia el PIN al BOT, despues regresa y vincula tu cuenta.",
"sendPIN": "Envíe el PIN a continuación al bot, luego regrese aquí para vincular su cuenta.",
"matrixEnterUser": "Ingrese su ID de usuario, presione enviar y se le enviará un PIN. Ingrese aquí para continuar."
},
"notifications": {

View File

@ -1,6 +1,6 @@
{
"meta": {
"name": "Magyar (HU)"
"name": "English (US)"
},
"strings": {
"pageTitle": "Jellyfin fiók létrehozása",
@ -18,7 +18,7 @@
"confirmationRequiredMessage": "Kérjük ellenőrizze az e-mail címére küldött üzenetet, a fiók ellenőrzéséhez.",
"yourAccountIsValidUntil": "A fiókja eddig lesz érvényes: {date}.",
"sendPIN": "Az alábbi kódot küldje el a botnak, majd itt csatolja össze a fiókját.",
"sendPINDiscord": "Discordon haszánlja a {command} parancsot, a {server_channel} csatornában, majd küldje el a kódot a botnak privát üzenetben.",
"sendPINDiscord": "Discordon haszánlja a {command} parancsot, a {server_channel} csatornában, majd írja be a PIN-t.",
"matrixEnterUser": "Írja be a felhasználója azonosítóját majd nyomja meg a beküldés gombot. A kapott kódot ide írja be."
},
"notifications": {
@ -30,7 +30,10 @@
"errorInvalidPIN": "A PIN-kód érvénytelen.",
"errorUnknown": "Ismeretlen hiba.",
"errorNoEmail": "E-mail szükséges.",
"verified": "Fiók ellenőrizve."
"verified": "Fiók ellenőrizve.",
"errorPassword": "Ellenőrizze a jelszó követelményeket.",
"errorCaptcha": "Hibás Captcha.",
"errorNoMatch": "A jelszavak nem egyeznek."
},
"validationStrings": {
"length": {
@ -46,12 +49,12 @@
"plural": "Legalább {n} kisbetüs karakter"
},
"number": {
"singular": "",
"plural": ""
"singular": "Tartalmaznia kell legalább {n} számot",
"plural": "Legalább {n} számot kell tartalmazzon"
},
"special": {
"singular": "",
"plural": ""
"singular": "Legalább {n} speciális karaktert kell tartalmazzon",
"plural": "Legalább {n} speciális karaktert kell tartalmazzon"
}
}
}

View File

@ -15,11 +15,25 @@
"passwordRequirementsHeader": "Persyaratan Kata Sandi",
"successHeader": "Sukses!",
"confirmationRequired": "Konfirmasi email diperlukan",
"confirmationRequiredMessage": "Silakan periksa kotak masuk email Anda untuk memverifikasi alamat Anda."
"confirmationRequiredMessage": "Silakan periksa kotak masuk email Anda untuk memverifikasi alamat Anda.",
"sendPINDiscord": "Ketik {command} di {server_channel} pada Discord, lalu kirim PIN di bawah ini.",
"yourAccountIsValidUntil": "Akun kamu berlaku hingga {date}.",
"sendPIN": "Kirim PIN di bawah ini ke bot, lalu kembali kesini untuk menerima link ke akun kamu.",
"matrixEnterUser": "Masukkan User ID kamu, tekan submit, nomor PIN akan dikirimkan ke kamu. Masukkan untuk melanjutkan."
},
"notifications": {
"errorUserExists": "Pengguna sudah ada.",
"errorInvalidCode": "Kode undangan tidak valid."
"errorInvalidCode": "Kode undangan tidak valid.",
"errorDiscordVerification": "Butuh verifikasi pada Discord.",
"errorUnknown": "Terjadi kesalahan.",
"errorTelegramVerification": "Butuh verifikasi pada Telegram.",
"errorInvalidPIN": "Kode PIN salah.",
"errorCaptcha": "Captcha salah.",
"errorPassword": "Perhatikan persyaratan password.",
"errorNoMatch": "Password tidak sama.",
"verified": "Akun terverifikasi.",
"errorNoEmail": "Butuh Email.",
"errorMatrixVerification": "Butuh verifikasi pada Matrix."
},
"validationStrings": {
"length": {

60
lang/form/zh-Hant.json Normal file
View File

@ -0,0 +1,60 @@
{
"meta": {
"name": "繁體中文 (TW)"
},
"strings": {
"pageTitle": "創建 Jellfin 帳戶",
"createAccountHeader": "創建帳戶",
"accountDetails": "詳細資訊",
"emailAddress": "電子郵件",
"username": "帳戶名稱",
"password": "密碼",
"reEnterPassword": "重新輸入密碼",
"reEnterPasswordInvalid": "密碼不一樣。",
"createAccountButton": "創建帳戶",
"passwordRequirementsHeader": "密碼格式要求",
"successHeader": "成功!",
"confirmationRequired": "需要電子郵件確認",
"confirmationRequiredMessage": "請檢查您的電子郵件收件匣以驗證您的地址。",
"yourAccountIsValidUntil": "您的帳戶有效期至 {date}。",
"sendPIN": "將下面的 PIN 碼發送給機器人,然後返回此處連結您的帳戶。",
"sendPINDiscord": "在 Discord 上的 {server_channel} 中輸入 {command},然後發送下方的 PIN 碼。",
"matrixEnterUser": "輸入您的帳戶 ID 並點擊提交。在此處輸入發送給您的PIN 碼以繼續。"
},
"notifications": {
"errorUserExists": "帳戶已存在。",
"errorInvalidCode": "邀請碼無效。",
"errorTelegramVerification": "需要 Telegram 驗證。",
"errorDiscordVerification": "需要 Discord 驗證。",
"errorMatrixVerification": "需要 Matrix 驗證。",
"errorInvalidPIN": "無效的PIN碼。",
"errorUnknown": "未知的錯誤。",
"errorNoEmail": "電子郵件必填。",
"errorCaptcha": "CAPTCHA 驗證碼不正確。",
"errorPassword": "請您檢查密碼要求後再試。",
"errorNoMatch": "密碼不匹配。",
"verified": "帳戶已驗證。"
},
"validationStrings": {
"length": {
"singular": "必須至少包含 {n} 個字元",
"plural": "必須至少包含 {n} 個字元"
},
"uppercase": {
"singular": "必須至少包含 {n} 個大寫字母",
"plural": "必須至少包含 {n} 個大寫字母"
},
"lowercase": {
"singular": "必須至少包含 {n} 個小寫字母",
"plural": "必須至少包含 {n} 個小寫字母"
},
"number": {
"singular": "必須至少包含 {n} 個數字",
"plural": "必須至少包含 {n} 個數字"
},
"special": {
"singular": "必須至少包含 {n} 個特殊字元",
"plural": "必須至少包含 {n} 個特殊字元"
}
}
}

View File

@ -1,5 +1,16 @@
{
"meta": {
"name": "English (GB)"
},
"strings": {
"youCanLoginOmbi": "You can now log in to Jellyfin & Ombi with the below code as your password.",
"passwordReset": "Password reset",
"resetFailed": "Password reset failed",
"tryAgain": "Please try again.",
"youCanLogin": "You can now log in with the below code as your password.",
"changeYourPassword": "Make sure to change your password after you log in.",
"reset": "Reset",
"enterYourPassword": "Enter your new password below.",
"youCanLoginPassword": "You can now login with your new password. Press below to continue to Jellyfin."
}
}

16
lang/pwreset/zh-Hant.json Normal file
View File

@ -0,0 +1,16 @@
{
"meta": {
"name": "繁體中文 (TW)"
},
"strings": {
"passwordReset": "重設密碼",
"reset": "重設",
"resetFailed": "重設密碼失敗",
"tryAgain": "請重試。",
"youCanLogin": "您現在可以使用下方的代碼作為您的密碼登錄。",
"youCanLoginOmbi": "您現在可以使用下方的代碼作為您的密碼登錄 Jellyfin和Ombi。",
"youCanLoginPassword": "您現在可以使用新密碼登錄。 請按下方按鈕跳轉至 Jellyfin。",
"changeYourPassword": "請務必在登錄后更改密碼。",
"enterYourPassword": "在下方輸入您的新密碼。"
}
}

View File

@ -1,5 +1,150 @@
{
"meta": {
"name": "English (GB)"
},
"passwordValidation": {
"special": "Special characters (%, *, etc.)",
"numbers": "Numbers",
"title": "Password Validation",
"lowercase": "Lowercase characters",
"length": "Length",
"uppercase": "Uppercase characters",
"description": "If enabled, a set of password requirements will show on the account creation page, such as minimum length, uppercase/lowercase characters, etc."
},
"email": {
"method": "Sending method",
"dateFormat": "Date Format",
"useEmailAsUsername": "Use email addresses as username",
"useEmailAsUsernameNotice": "If enabled, new users will login to Jellyfin/Emby with their email address instead of a username.",
"title": "Email",
"fromAddress": "From Address",
"senderName": "Sender Name",
"encryption": "Encryption",
"mailgunApiURL": "API URL",
"description": "jfa-go can send password reset PINs and various notifications through email. You can connect to an SMTP server, or use the {n} API.",
"dateFormatNotice": "Date follows the strftime format. For more info, visit {n}."
},
"passwordResets": {
"resetLinks": "Send a link instead of a PIN",
"setPassword": "Set password through link",
"resetLinksNotice": "If Ombi integration is enabled, use this to sync Jellyfin password resets with Ombi.",
"title": "Password Resets",
"description": "When a user tries to reset their password, Jellyfin creates a file named 'passwordreset-*.json' which contains a PIN. jfa-go reads the file and sends the PIN to the user.",
"pathToJellyfin": "Path to Jellyfin configuration directory",
"pathToJellyfinNotice": "If you don't know where this is, try resetting your password in Jellyfin. A popup with '<path to jellyfin>/passwordreset-*.json' will appear.",
"resetLinksLanguage": "Default reset link language",
"setPasswordNotice": "Enabling this means the user doesn't have to change their password from the PIN after the reset. Password validation will also be enforced."
},
"helpMessages": {
"title": "Help Messages",
"description": "These messages will display in the account creation page and in some emails.",
"contactMessage": "Contact Message",
"contactMessageNotice": "Displays at the bottom of all pages except admin.",
"helpMessage": "Help Message",
"helpMessageNotice": "Displays on the account creation page.",
"successMessage": "Success Message",
"successMessageNotice": "Displays when a user creates their account.",
"emailMessage": "Email Message",
"emailMessageNotice": "Displays at the bottom of emails."
},
"strings": {
"enabled": "Enabled",
"disabled": "Disabled",
"next": "Next",
"back": "Back",
"optional": "Optional",
"serverType": "Server Type",
"port": "Port",
"serverAddress": "Server Address",
"emailSubject": "Email Subject",
"URL": "URL",
"apiKey": "API Key",
"errorUserDisabled": "User may be disabled.",
"error404": "404, check the internal URL.",
"message": "Message",
"pageTitle": "Setup - jfa-go",
"errorInvalidUserPass": "Invalid username/password.",
"errorNotAdmin": "User is not allowed to manage server.",
"errorConnectionRefused": "Connection refused."
},
"startPage": {
"welcome": "Welcome!",
"httpsNotice": "Make sure you're accessing this page via HTTPS or on a private network.",
"start": "Start",
"pressStart": "You'll need to do a few things to set up jfa-go. Press start to continue."
},
"jellyfinEmby": {
"title": "Jellyfin/Emby",
"embyNotice": "Emby support is limited and does not support password resets.",
"internal": "Internal",
"external": "External",
"description": "An admin account is needed because the API does not allow user creation using an API key. You should create a separate account and check 'Allow this user to manage the server'. You can disable everything else. Once done, enter the login details here.",
"replaceJellyfin": "Server name",
"replaceJellyfinNotice": "If given, this will replace any occurrence of 'Jellyfin' in the app.",
"addressExternalNotice": "Leave blank to use the same address.",
"testConnection": "Test Connection"
},
"endPage": {
"refreshPage": "Refresh",
"finished": "Finished!",
"restartMessage": "You can configure Discord/Telegram/Matrix bots, customise your messages and more in Settings. Click below to restart, then refresh the page."
},
"language": {
"title": "Language",
"defaultAdminLang": "Default admin language",
"defaultFormLang": "Default account creation language",
"defaultEmailLang": "Default email language",
"description": "Community translations are available for most parts of jfa-go. You can choose the default languages below, but users can still change it if they wish. If you want to help translate, sign up to {n} to start contributing!"
},
"general": {
"lightTheme": "Light",
"title": "General",
"listenAddress": "Listen Address",
"darkTheme": "Dark",
"useHTTPS": "Use HTTPS",
"httpsPort": "HTTPS Port",
"pathToCertificate": "Path to certificate",
"pathToKeyFile": "Path to key file",
"urlBase": "URL Base",
"urlBaseNotice": "Only needed if using a reverse proxy on a subdomain (e.g 'jellyf.in/accounts').",
"useHTTPSNotice": "Only recommended if you aren't using a reverse proxy."
},
"updates": {
"title": "Updates",
"updateChannel": "Update Channel",
"stable": "Stable",
"unstable": "Unstable",
"description": "Enable to be notified when new updates are available. jfa-go will check {n} every 30 minutes. No IPs or personally identifiable information are collected."
},
"login": {
"title": "Login",
"description": "To access the admin page, you need to login with a method below:",
"authorizeManual": "Username and Password: Manually set the username and password.",
"adminOnly": "Admin users only (recommended)",
"authorizeWithJellyfin": "Authorise with Jellyfin/Emby: Login details are shared with Jellyfin, which allows for multiple users.",
"allowAll": "Allow all Jellyfin users to login",
"allowAllDescription": "Not recommended, you should allow individual users to login once setup.",
"emailNotice": "Your email address can be used to receive notifications."
},
"welcomeEmails": {
"title": "Welcome messages",
"description": "If enabled, a message will be sent to new users with the Jellyfin/Emby URL and their username."
},
"ombi": {
"title": "Ombi",
"description": "By connecting to Ombi, both a Jellyfin and Ombi account will be created when a user joins through jfa-go. After setup is finished, go to Settings to set a default profile for new ombi users.",
"apiKeyNotice": "Find this in the first tab of Ombi settings."
},
"messages": {
"description": "jfa-go can send password resets and various messages through Email, Discord, Telegram, and/or Matrix. You can set up email below, and the others can be configured in Settings later. Instructions can be found on the {n}. If you don't need this, you can disable these features here.",
"title": "Messages"
},
"notifications": {
"title": "Admin Notifications",
"description": "If enabled, you can choose (per invite) to receive an message when an invite expires, or a user is created. If you didn't choose the Jellyfin login method, make sure you provided your email address, or add another contact method later."
},
"inviteEmails": {
"title": "Invite Messages",
"description": "If enabled, you can send invites directly to a user's email address, Discord or Matrix user. Because you might be using a reverse proxy, you need to provide the URL invites are accessed from. Write your URL Base, and append '/invite'."
}
}

150
lang/setup/hu-HU.json Normal file
View File

@ -0,0 +1,150 @@
{
"meta": {
"name": "English (US)"
},
"strings": {
"pageTitle": "Telepítés - jfa-go",
"next": "Következő",
"back": "Vissza",
"optional": "Opcionális",
"serverType": "Szerver típus",
"disabled": "Letiltva",
"enabled": "Engedélyezve",
"port": "Port",
"message": "Üzenet",
"serverAddress": "Szerver cím",
"emailSubject": "E-mail tárgy",
"URL": "URL",
"apiKey": "API kulcs",
"errorInvalidUserPass": "Érvénytelen felhasználónév / jelszó.",
"errorNotAdmin": "A felhasználó számára nincs engedélyezve a szerver kezelése.",
"errorUserDisabled": "Lehetséges, hogy a felhasználó le lett tiltva.",
"error404": "404, ellenőrizze a belső URL-t.",
"errorConnectionRefused": ""
},
"startPage": {
"welcome": "Üdv!",
"pressStart": "",
"httpsNotice": "",
"start": ""
},
"endPage": {
"finished": "",
"restartMessage": "",
"refreshPage": ""
},
"language": {
"title": "",
"description": "",
"defaultAdminLang": "",
"defaultFormLang": "",
"defaultEmailLang": ""
},
"general": {
"title": "",
"listenAddress": "",
"urlBase": "",
"urlBaseNotice": "",
"lightTheme": "",
"darkTheme": "",
"useHTTPS": "",
"httpsPort": "",
"useHTTPSNotice": "",
"pathToCertificate": "",
"pathToKeyFile": ""
},
"updates": {
"title": "",
"description": "",
"updateChannel": "",
"stable": "",
"unstable": ""
},
"login": {
"title": "",
"description": "",
"authorizeWithJellyfin": "",
"authorizeManual": "",
"adminOnly": "",
"allowAll": "",
"allowAllDescription": "",
"emailNotice": ""
},
"jellyfinEmby": {
"title": "",
"description": "",
"embyNotice": "",
"internal": "",
"external": "",
"replaceJellyfin": "",
"replaceJellyfinNotice": "",
"addressExternalNotice": "",
"testConnection": ""
},
"ombi": {
"title": "",
"description": "",
"apiKeyNotice": ""
},
"messages": {
"title": "",
"description": ""
},
"email": {
"title": "",
"description": "",
"method": "",
"useEmailAsUsername": "",
"useEmailAsUsernameNotice": "",
"fromAddress": "",
"senderName": "",
"dateFormat": "",
"dateFormatNotice": "",
"encryption": "",
"mailgunApiURL": ""
},
"notifications": {
"title": "",
"description": ""
},
"welcomeEmails": {
"title": "",
"description": ""
},
"inviteEmails": {
"title": "",
"description": ""
},
"passwordResets": {
"title": "",
"description": "",
"pathToJellyfin": "",
"pathToJellyfinNotice": "",
"resetLinks": "",
"resetLinksNotice": "",
"resetLinksLanguage": "",
"setPassword": "",
"setPasswordNotice": ""
},
"passwordValidation": {
"title": "",
"description": "",
"length": "",
"uppercase": "",
"lowercase": "",
"numbers": "",
"special": ""
},
"helpMessages": {
"title": "",
"description": "",
"contactMessage": "",
"contactMessageNotice": "",
"helpMessage": "",
"helpMessageNotice": "",
"successMessage": "",
"successMessageNotice": "",
"emailMessage": "",
"emailMessageNotice": ""
}
}

150
lang/setup/zh-Hant.json Normal file
View File

@ -0,0 +1,150 @@
{
"meta": {
"name": "繁體中文 (TW)"
},
"strings": {
"pageTitle": "設置 - jfa-go",
"next": "下一步",
"back": "上一步",
"optional": "可選的",
"serverType": "伺服器類型",
"disabled": "已禁用",
"enabled": "已啟用",
"port": "通訊埠",
"message": "訊息",
"serverAddress": "伺服器地址",
"emailSubject": "電子郵件主題",
"URL": "網址",
"apiKey": "API密鑰",
"errorInvalidUserPass": "無效的帳戶名稱/密碼。",
"errorNotAdmin": "此帳戶不允許管理伺服器。",
"errorUserDisabled": "此帳戶可能已被禁用。",
"error404": "404, 請檢查內部網址(internal URL)。",
"errorConnectionRefused": "連線遭拒。"
},
"startPage": {
"welcome": "歡迎!",
"pressStart": "您需要完成幾個步驟來設置jfa-go。點擊 開始 以繼續。",
"httpsNotice": "請確保您通過 HTTPS 或專用網路訪問此頁面。",
"start": "開始"
},
"endPage": {
"finished": "已完成!",
"restartMessage": "您可以設置Discord/Telegram/Matrix機器人在“設置”中自定義您的訊息和其他內容。點擊下方重新啟動然後重整頁面。",
"refreshPage": "重新整理"
},
"language": {
"title": "語言",
"description": "jfa-go 的大部分內容都仰賴社群翻譯。您可以選擇下面的預設語言,但使用者仍然可以根據需要進行更改。如果您想改進翻譯,請在 {n} 註冊以開始貢獻您的一份力量!",
"defaultAdminLang": "預設管理語言",
"defaultFormLang": "預設帳戶創建語言",
"defaultEmailLang": "預設電子郵件語言"
},
"general": {
"title": "一般",
"listenAddress": "監聽埠",
"urlBase": "基底URL",
"urlBaseNotice": "只有在子網域上使用反向代理時才需要例如“jellyf.in/accounts”。",
"lightTheme": "明亮",
"darkTheme": "黑暗",
"useHTTPS": "使用HTTPS",
"httpsPort": "HTTPS 通訊埠",
"useHTTPSNotice": "只有在您不使用反向代理時才推薦使用。",
"pathToCertificate": "證書文件路徑",
"pathToKeyFile": "密鑰文件路徑"
},
"updates": {
"title": "更新",
"description": "啟用此選項可在有新更新可用時收到通知。jfa-go 每 30 分鐘將對 {n} 檢查一次。不會收集任何IP或個人身份資訊。",
"updateChannel": "更新頻道",
"stable": "穩定版",
"unstable": "非穩定版"
},
"login": {
"title": "登錄",
"description": "要存取管理頁面,您需要使用以下方法登錄:",
"authorizeWithJellyfin": "使用Jellyfin/Emby授權登錄詳細資訊與Jellyfin共用允許使用多個帳戶。",
"authorizeManual": "帳戶名稱和密碼:手動設置帳戶名稱和密碼。",
"adminOnly": "僅限管理員帳戶(推薦)",
"allowAll": "允許所有Jellyfin帳戶登錄",
"allowAllDescription": "不建議,您應該允許個別使用者在登錄后設置。",
"emailNotice": "您的電子郵件地址可用於接收通知。"
},
"jellyfinEmby": {
"title": "Jellyfin/Emby",
"description": "需要管理員帳戶,因為 API 不允許使用 API 金鑰創建帳戶。您應該創建一個單獨的帳戶並選取「 允許此使用者管理伺服器」。您可以關閉其他所有內容。完成後,在此處輸入登錄詳細資訊。",
"embyNotice": "對 Emby 提供有限支持,不支持密碼重置功能。",
"internal": "內部",
"external": "外部",
"replaceJellyfin": "伺服器名稱",
"replaceJellyfinNotice": "如果填寫,則替換應用程式中出現的所有 'Jellyfin' 字樣。",
"addressExternalNotice": "留空以使用相同的地址。",
"testConnection": "測試連接"
},
"ombi": {
"title": "Ombi",
"description": "通過連接到 Ombi當使用者通過 jfa-go 加入時,將創建 Jellyfin 和 Ombi 帳戶。設置完成後,轉到 “設置” 為新的 ombi 帳戶設置預設配置檔。",
"apiKeyNotice": "在 Ombi “設置”的第一個選項卡中找到它。"
},
"messages": {
"title": "訊息",
"description": "jfa-go 可以通過電子郵件、Discord、Telegram 和/或 Matrix 發送密碼重置和各種消息。您可以在下面設置電子郵件,其他電子郵件可以稍後在「設置」中進行配置。說明可以在 {n} 上找到。如果不需要此功能,可以在此處禁用這些功能。"
},
"email": {
"title": "電子郵件",
"description": "jfa-go 可以通過電子郵件發送密碼重置PIN和各種通知。您可以連接到 SMTP 伺服器,或使用 {n} API。",
"method": "發送方式",
"useEmailAsUsername": "使用電子郵件地址作為使用者名稱",
"useEmailAsUsernameNotice": "如果啟用新使用者將使用他們的電子郵件地址而不是帳戶名稱登錄Jellyfin/Emby。",
"fromAddress": "寄件者地址",
"senderName": "寄件者名稱",
"dateFormat": "日期格式",
"dateFormatNotice": "日期遵循 strftime 格式。有關詳細資訊,請訪問 {n}。",
"encryption": "加密",
"mailgunApiURL": "API URL"
},
"notifications": {
"title": "管理員通知",
"description": "如果啟用,您可以選擇(每個邀請)在邀請過期或創建帳戶時接收消息。如果您沒有選擇 Jellyfin 登錄方式,請確保您提供了電子郵件地址,或稍後添加其他聯繫方式。"
},
"welcomeEmails": {
"title": "歡迎訊息",
"description": "如果啟用,將向新帳戶發送一條消息,其中包含 Jellyfin/Emby URL 及其帳戶名稱。"
},
"inviteEmails": {
"title": "邀請通知",
"description": "如果啟用您可以直接向使用者的電子郵件、Discord 或 Matrix 帳戶發送邀請。由於您可能使用的是反向代理因此需要提供從中訪問邀請的URL。寫下您的 URL 庫,並附加 “/invite”。"
},
"passwordResets": {
"title": "重置密碼",
"description": "當用戶嘗試重置密碼時Jellyfin 會創建一個名為 “passwordreset-*.json” 的檔,其中包含一個 PIN 碼。jfa-go 讀取該文件並將 PIN 碼發送給使用者。",
"pathToJellyfin": "Jellyfin 配置目錄的路徑",
"pathToJellyfinNotice": "如果您不知道它在哪裡請嘗試在Jellyfin中重置密碼。將出現一個帶有 “<path to jellyfin>/passwordreset-*.json” 的彈出視窗。",
"resetLinks": "發送連結而不是 PIN 碼",
"resetLinksNotice": "如果啟用了 Ombi 集成,請使用此選項將 Jellyfin 密碼重置與 Ombi 同步。",
"resetLinksLanguage": "預設重置連結語言",
"setPassword": "通過連結設置密碼",
"setPasswordNotice": "啟用此功能意味著使用者不必在重置後從 PIN 更改其密碼。並將強制執行密碼驗證。"
},
"passwordValidation": {
"title": "密碼驗證",
"description": "如果啟用,帳戶創建頁面上將顯示一組密碼要求,例如最小長度、大寫/小寫字元等。",
"length": "長度",
"uppercase": "大寫字元",
"lowercase": "小寫字元",
"numbers": "數字",
"special": "特殊字元(%、* 等)"
},
"helpMessages": {
"title": "幫助訊息",
"description": "這些訊息將顯示在帳戶創建頁面和某些電子郵件中。",
"contactMessage": "聯繫方式",
"contactMessageNotice": "顯示在除管理員之外的所有頁面的底部。",
"helpMessage": "幫助訊息",
"helpMessageNotice": "顯示在帳戶創建頁面上。",
"successMessage": "成功訊息",
"successMessageNotice": "在使用者創建其帳戶時顯示。",
"emailMessage": "電子郵件訊息",
"emailMessageNotice": "顯示在電子郵件的底部。"
}
}

View File

@ -43,7 +43,7 @@
"general": {
"title": "常规",
"listenAddress": "监听端口",
"urlBase": "URL Base",
"urlBase": "URL地址",
"urlBaseNotice": "仅在子域上使用反向代理时才需要例如“jellyf.in/accounts”。",
"lightTheme": "明亮",
"darkTheme": "暗黑",
@ -66,7 +66,9 @@
"authorizeWithJellyfin": "从Jellyfin/Emby 授权:登录信息与 Jellyfin 同步,允许使用多个用户。",
"authorizeManual": "用户名和密码:手动设置用户名和密码。",
"adminOnly": "仅允许管理员账户(推荐)",
"emailNotice": "您的电子邮件地址可以用来接收通知。"
"emailNotice": "您的电子邮件地址可以用来接收通知。",
"allowAllDescription": "不建议,您应该允许单个用户在设置后登录。",
"allowAll": "允许所有Jellyfin用户登录"
},
"jellyfinEmby": {
"title": "Jellyfin/Emby",
@ -99,7 +101,7 @@
"dateFormat": "日期格式",
"dateFormatNotice": "日期遵循 strftime 格式。如需更多信息,请访问 {n}。",
"encryption": "加密",
"mailgunApiURL": "API URL"
"mailgunApiURL": "API地址"
},
"notifications": {
"title": "管理员通知",

View File

@ -1,5 +1,16 @@
{
"meta": {
"name": "English (GB)"
},
"strings": {
"startMessage": "Hi!\nEnter your Jellyfin PIN code here to verify your account.",
"languageMessage": "Note: See available languages with {command}, and set language with {command} <language code>.",
"discordDMs": "Please check your DMs for a response.",
"matrixStartMessage": "Hi\nEnter the below PIN in the Jellyfin sign-up page to verify your account.",
"discordStartMessage": "Hi!\n Enter your PIN with `/pin <PIN>` to verify your account.",
"invalidPIN": "That PIN was invalid, try again.",
"pinSuccess": "Success! You can now return to the sign-up page.",
"languageMessageDiscord": "Note: set your language with /lang <language name>.",
"languageSet": "Language set to {language}."
}
}

View File

@ -0,0 +1,16 @@
{
"meta": {
"name": "繁體中文 (TW)"
},
"strings": {
"startMessage": "您好!\n請在這裡輸入 Jellyfin 的 PIN 碼來驗證您的帳戶。",
"discordStartMessage": "您好!\n請輸入 “/PINPIN 碼>” 來驗證您的帳戶。",
"matrixStartMessage": "您好\n在 Jellyfin 註冊頁面中輸入以下 PIN 碼以驗證您的帳戶。",
"invalidPIN": "該 PIN 碼無效,請重試。",
"pinSuccess": "成功! 您現在可以返回註冊頁面。",
"languageMessage": "提示:使用 {command} 查看可用語言,並使用 {command} <language code> 來設置語言。",
"languageMessageDiscord": "提示:使用 “/lang <語言>” 設置語言。",
"languageSet": "語言設置為Language。",
"discordDMs": "請檢查您的私人通信以獲取回復。"
}
}

6
log.go
View File

@ -27,7 +27,11 @@ func logOutput() (closeFunc func(), err error) {
closeFunc = func() {}
return
}
writers = append(writers, colorStripper{f})
if PLATFORM == "windows" {
writers = []io.Writer{colorStripper{lineCache}, colorStripper{f}}
} else {
writers = append(writers, colorStripper{f})
}
closeFunc = func() {
w.Close()
<-wExit

View File

@ -1,3 +1,4 @@
//go:build tray
// +build tray
package main
@ -9,7 +10,6 @@ import (
"syscall"
"github.com/getlantern/systray"
"github.com/skratchdot/open-golang/open"
)
var TRAY = true
@ -101,7 +101,8 @@ func onReady() {
case <-mRestart.ClickedCh:
trayRestart()
case <-mOpenLogs.ClickedCh:
open.Start(logPath)
log.Printf("Opening %s\n", logPath)
OpenFile(logPath)
case <-mQuit.ClickedCh:
systray.Quit()
}

View File

@ -10,7 +10,8 @@ interface formWindow extends Window {
telegramModal: Modal;
discordModal: Modal;
matrixModal: Modal;
confirmationModal: Modal
confirmationModal: Modal;
redirectToJellyfin: boolean;
code: string;
messages: { [key: string]: string };
confirmation: boolean;
@ -412,7 +413,12 @@ const create = (event: SubmitEvent) => {
if (!vals[type]) { valid = false; }
}
if (req.status == 200 && valid) {
window.successModal.show();
if (window.redirectToJellyfin == true) {
const url = ((document.getElementById("modal-success") as HTMLDivElement).querySelector("a.submit") as HTMLAnchorElement).href;
window.location.href = url;
} else {
window.successModal.show();
}
} else {
submitSpan.classList.add("~critical");
submitSpan.classList.remove("~urge");

View File

@ -1334,9 +1334,7 @@ export class accountsList {
const list = this._collectUsers();
let applyList: string[] = [];
for (let id of list) {
if (this._users[id].expiry || enableUser) {
applyList.push(id);
}
applyList.push(id);
}
this._enableExpiryReason.classList.add("unfocused");
let header: string;

View File

@ -170,6 +170,7 @@ func (app *appContext) ResetPassword(gc *gin.Context) {
data["helpMessage"] = app.config.Section("ui").Key("help_message").String()
data["successMessage"] = app.config.Section("ui").Key("success_message").String()
data["jfLink"] = app.config.Section("ui").Key("redirect_url").String()
data["redirectToJellyfin"] = app.config.Section("ui").Key("auto_redirect").MustBool(false)
data["validate"] = app.config.Section("password_validation").Key("enabled").MustBool(false)
data["requirements"] = app.validator.getCriteria()
data["strings"] = app.storage.lang.PasswordReset[lang].Strings
@ -437,13 +438,18 @@ func (app *appContext) InviteProxy(gc *gin.Context) {
fail()
return
}
gcHTML(gc, http.StatusOK, "create-success.html", gin.H{
"cssClass": app.cssClass,
"strings": app.storage.lang.Form[lang].Strings,
"successMessage": app.config.Section("ui").Key("success_message").String(),
"contactMessage": app.config.Section("ui").Key("contact_message").String(),
"jfLink": app.config.Section("ui").Key("redirect_url").String(),
})
jfLink := app.config.Section("ui").Key("redirect_url").String()
if app.config.Section("ui").Key("auto_redirect").MustBool(false) {
gc.Redirect(301, jfLink)
} else {
gcHTML(gc, http.StatusOK, "create-success.html", gin.H{
"cssClass": app.cssClass,
"strings": app.storage.lang.Form[lang].Strings,
"successMessage": app.config.Section("ui").Key("success_message").String(),
"contactMessage": app.config.Section("ui").Key("contact_message").String(),
"jfLink": jfLink,
})
}
inv, ok := app.storage.invites[code]
if ok {
l := len(inv.Keys)
@ -461,35 +467,36 @@ func (app *appContext) InviteProxy(gc *gin.Context) {
matrix := matrixEnabled && app.config.Section("matrix").Key("show_on_reg").MustBool(true)
data := gin.H{
"urlBase": app.getURLBase(gc),
"cssClass": app.cssClass,
"cssVersion": cssVersion,
"contactMessage": app.config.Section("ui").Key("contact_message").String(),
"helpMessage": app.config.Section("ui").Key("help_message").String(),
"successMessage": app.config.Section("ui").Key("success_message").String(),
"jfLink": app.config.Section("ui").Key("redirect_url").String(),
"validate": app.config.Section("password_validation").Key("enabled").MustBool(false),
"requirements": app.validator.getCriteria(),
"email": email,
"username": !app.config.Section("email").Key("no_username").MustBool(false),
"strings": app.storage.lang.Form[lang].Strings,
"validationStrings": app.storage.lang.Form[lang].validationStringsJSON,
"notifications": app.storage.lang.Form[lang].notificationsJSON,
"code": code,
"confirmation": app.config.Section("email_confirmation").Key("enabled").MustBool(false),
"userExpiry": inv.UserExpiry,
"userExpiryMonths": inv.UserMonths,
"userExpiryDays": inv.UserDays,
"userExpiryHours": inv.UserHours,
"userExpiryMinutes": inv.UserMinutes,
"userExpiryMessage": app.storage.lang.Form[lang].Strings.get("yourAccountIsValidUntil"),
"langName": lang,
"passwordReset": false,
"telegramEnabled": telegram,
"discordEnabled": discord,
"matrixEnabled": matrix,
"emailRequired": app.config.Section("email").Key("required").MustBool(false),
"captcha": app.config.Section("captcha").Key("enabled").MustBool(false),
"urlBase": app.getURLBase(gc),
"cssClass": app.cssClass,
"cssVersion": cssVersion,
"contactMessage": app.config.Section("ui").Key("contact_message").String(),
"helpMessage": app.config.Section("ui").Key("help_message").String(),
"successMessage": app.config.Section("ui").Key("success_message").String(),
"jfLink": app.config.Section("ui").Key("redirect_url").String(),
"redirectToJellyfin": app.config.Section("ui").Key("auto_redirect").MustBool(false),
"validate": app.config.Section("password_validation").Key("enabled").MustBool(false),
"requirements": app.validator.getCriteria(),
"email": email,
"username": !app.config.Section("email").Key("no_username").MustBool(false),
"strings": app.storage.lang.Form[lang].Strings,
"validationStrings": app.storage.lang.Form[lang].validationStringsJSON,
"notifications": app.storage.lang.Form[lang].notificationsJSON,
"code": code,
"confirmation": app.config.Section("email_confirmation").Key("enabled").MustBool(false),
"userExpiry": inv.UserExpiry,
"userExpiryMonths": inv.UserMonths,
"userExpiryDays": inv.UserDays,
"userExpiryHours": inv.UserHours,
"userExpiryMinutes": inv.UserMinutes,
"userExpiryMessage": app.storage.lang.Form[lang].Strings.get("yourAccountIsValidUntil"),
"langName": lang,
"passwordReset": false,
"telegramEnabled": telegram,
"discordEnabled": discord,
"matrixEnabled": matrix,
"emailRequired": app.config.Section("email").Key("required").MustBool(false),
"captcha": app.config.Section("captcha").Key("enabled").MustBool(false),
}
if telegram {
data["telegramPIN"] = app.telegram.NewAuthToken()