mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	finish all new user settings UI
This commit is contained in:
		@@ -267,8 +267,9 @@ func runWeb(ctx *cli.Context) {
 | 
				
			|||||||
		m.Get("", user.Settings)
 | 
							m.Get("", user.Settings)
 | 
				
			||||||
		m.Post("", bindIgnErr(auth.UpdateProfileForm{}), user.SettingsPost)
 | 
							m.Post("", bindIgnErr(auth.UpdateProfileForm{}), user.SettingsPost)
 | 
				
			||||||
		m.Post("/avatar", binding.MultipartForm(auth.UploadAvatarForm{}), user.SettingsAvatar)
 | 
							m.Post("/avatar", binding.MultipartForm(auth.UploadAvatarForm{}), user.SettingsAvatar)
 | 
				
			||||||
		m.Get("/email", user.SettingsEmails)
 | 
							m.Combo("/email").Get(user.SettingsEmails).
 | 
				
			||||||
		m.Post("/email", bindIgnErr(auth.AddEmailForm{}), user.SettingsEmailPost)
 | 
								Post(bindIgnErr(auth.AddEmailForm{}), user.SettingsEmailPost)
 | 
				
			||||||
 | 
							m.Post("/email/delete", user.DeleteEmail)
 | 
				
			||||||
		m.Get("/password", user.SettingsPassword)
 | 
							m.Get("/password", user.SettingsPassword)
 | 
				
			||||||
		m.Post("/password", bindIgnErr(auth.ChangePasswordForm{}), user.SettingsPasswordPost)
 | 
							m.Post("/password", bindIgnErr(auth.ChangePasswordForm{}), user.SettingsPasswordPost)
 | 
				
			||||||
		m.Combo("/ssh").Get(user.SettingsSSHKeys).
 | 
							m.Combo("/ssh").Get(user.SettingsSSHKeys).
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -241,7 +241,7 @@ location=Standort
 | 
				
			|||||||
update_profile=Profil aktualisieren
 | 
					update_profile=Profil aktualisieren
 | 
				
			||||||
update_profile_success=Profil aktualisiert
 | 
					update_profile_success=Profil aktualisiert
 | 
				
			||||||
change_username=Benutzername geändert
 | 
					change_username=Benutzername geändert
 | 
				
			||||||
change_username_desc=Benutzername wurde geändert, möchtest du fortfahren? Dies beeinträchtigt sämtliche Links, die dein Konto betreffen.
 | 
					change_username_prompt=Diese Änderung wird sich auf die Linkbezüge zu deinem Account auswirken.
 | 
				
			||||||
continue=Weiter
 | 
					continue=Weiter
 | 
				
			||||||
cancel=Abbrechen
 | 
					cancel=Abbrechen
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -256,6 +256,7 @@ update_avatar_success=Deine Avatar-Einstellung wurde aktualisiert.
 | 
				
			|||||||
change_password=Passwort ändern
 | 
					change_password=Passwort ändern
 | 
				
			||||||
old_password=Aktuelles Passwort
 | 
					old_password=Aktuelles Passwort
 | 
				
			||||||
new_password=Neues Passwort
 | 
					new_password=Neues Passwort
 | 
				
			||||||
 | 
					retype_new_password=Retype New Password
 | 
				
			||||||
password_incorrect=Aktuelles Passwort ist nicht korrekt.
 | 
					password_incorrect=Aktuelles Passwort ist nicht korrekt.
 | 
				
			||||||
change_password_success=Passwort geändert. Du kannst dich jetzt mit dem neuen Passwort anmelden.
 | 
					change_password_success=Passwort geändert. Du kannst dich jetzt mit dem neuen Passwort anmelden.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -265,6 +266,9 @@ email_desc=Deine primäre E-Mail-Adresse wird für Benachrichtigungen und andere
 | 
				
			|||||||
primary=Primär
 | 
					primary=Primär
 | 
				
			||||||
primary_email=Als primäre Adresse verwenden
 | 
					primary_email=Als primäre Adresse verwenden
 | 
				
			||||||
delete_email=Löschen
 | 
					delete_email=Löschen
 | 
				
			||||||
 | 
					email_deletion=E-mail Deletion
 | 
				
			||||||
 | 
					email_deletion_desc=Delete this e-mail address will remove related information from your account. Do you want to continue?
 | 
				
			||||||
 | 
					email_deletion_success=E-mail has been deleted successfully!
 | 
				
			||||||
add_new_email=Neue E-Mail-Adresse hinzufügen
 | 
					add_new_email=Neue E-Mail-Adresse hinzufügen
 | 
				
			||||||
add_email=E-Mail-Adresse hinzufügen
 | 
					add_email=E-Mail-Adresse hinzufügen
 | 
				
			||||||
add_email_confirmation_sent=Eine neue Bestätigungsmail wurde an <b>%s</b> gesendet, bitte überprüfen Sie Ihren Posteingang innerhalb von %d Stunden um die Bestätigung abzuschließen.
 | 
					add_email_confirmation_sent=Eine neue Bestätigungsmail wurde an <b>%s</b> gesendet, bitte überprüfen Sie Ihren Posteingang innerhalb von %d Stunden um die Bestätigung abzuschließen.
 | 
				
			||||||
@@ -516,7 +520,7 @@ settings.githooks=Git-Hooks
 | 
				
			|||||||
settings.basic_settings=Grundeinstellungen
 | 
					settings.basic_settings=Grundeinstellungen
 | 
				
			||||||
settings.danger_zone=Gefahrenzone
 | 
					settings.danger_zone=Gefahrenzone
 | 
				
			||||||
settings.site=Offizielle Webseite
 | 
					settings.site=Offizielle Webseite
 | 
				
			||||||
settings.update_settings=Aktualisierungseinstellungen
 | 
					settings.update_settings=Einstellungen speichern
 | 
				
			||||||
settings.change_reponame_prompt=Diese Änderung wirkt sich darauf aus, wie sich Links auf das Repository beziehen.
 | 
					settings.change_reponame_prompt=Diese Änderung wirkt sich darauf aus, wie sich Links auf das Repository beziehen.
 | 
				
			||||||
settings.transfer=Besitz übertragen
 | 
					settings.transfer=Besitz übertragen
 | 
				
			||||||
settings.transfer_desc=Übertrage dieses Repository einem anderen Benutzer oder einer Organisation in der du Admin-Rechte hast.
 | 
					settings.transfer_desc=Übertrage dieses Repository einem anderen Benutzer oder einer Organisation in der du Admin-Rechte hast.
 | 
				
			||||||
@@ -630,7 +634,6 @@ release.tag_name_already_exist=Ein Release mit diesem Tag existiert bereits.
 | 
				
			|||||||
[org]
 | 
					[org]
 | 
				
			||||||
org_name_holder=Name der Organisation
 | 
					org_name_holder=Name der Organisation
 | 
				
			||||||
org_name_helper=Gute Namen von Organisationen sind kurz und einprägsam.
 | 
					org_name_helper=Gute Namen von Organisationen sind kurz und einprägsam.
 | 
				
			||||||
org_email_helper=Die E-Mail-Adresse der Organisation erhält alle Benachrichtigungen und Bestätigungs-E-Mails.
 | 
					 | 
				
			||||||
create_org=Organisation erstellen
 | 
					create_org=Organisation erstellen
 | 
				
			||||||
repo_updated=Aktualisiert
 | 
					repo_updated=Aktualisiert
 | 
				
			||||||
people=Personen
 | 
					people=Personen
 | 
				
			||||||
@@ -654,10 +657,10 @@ settings.options=Optionen
 | 
				
			|||||||
settings.full_name=Vollständiger Name
 | 
					settings.full_name=Vollständiger Name
 | 
				
			||||||
settings.website=Webseite
 | 
					settings.website=Webseite
 | 
				
			||||||
settings.location=Standort
 | 
					settings.location=Standort
 | 
				
			||||||
settings.update_settings=Aktualisierungseinstellungen
 | 
					settings.update_settings=Einstellungen speichern
 | 
				
			||||||
settings.change_orgname=Organisationsname geändert
 | 
					 | 
				
			||||||
settings.change_orgname_desc=Organisationsname wurde geändert, möchtest du fortfahren? Dies beeinträchtigt sämtliche Links, die diese Organisation betreffen.
 | 
					 | 
				
			||||||
settings.update_setting_success=Organisationseinstellungen aktualisiert
 | 
					settings.update_setting_success=Organisationseinstellungen aktualisiert
 | 
				
			||||||
 | 
					settings.change_orgname_prompt=Diese Änderung wird sich auf die Linkbezüge zur Organisation auswirken.
 | 
				
			||||||
 | 
					settings.update_avatar_success=Avatareinstellung für die Organisation wurde erfolgreich aktualisiert.
 | 
				
			||||||
settings.delete=Organisation löschen
 | 
					settings.delete=Organisation löschen
 | 
				
			||||||
settings.delete_account=Diese Organisation löschen
 | 
					settings.delete_account=Diese Organisation löschen
 | 
				
			||||||
settings.delete_prompt=Die Organisation wird dauerhaft gelöscht. Dies kann <strong>NICHT</strong> rückgängig gemacht werden!
 | 
					settings.delete_prompt=Die Organisation wird dauerhaft gelöscht. Dies kann <strong>NICHT</strong> rückgängig gemacht werden!
 | 
				
			||||||
@@ -774,9 +777,9 @@ users.admin=Admin
 | 
				
			|||||||
users.repos=Repositorys
 | 
					users.repos=Repositorys
 | 
				
			||||||
users.created=Erzeugt
 | 
					users.created=Erzeugt
 | 
				
			||||||
users.edit=Bearbeiten
 | 
					users.edit=Bearbeiten
 | 
				
			||||||
users.auth_source=Auth-Quelle
 | 
					users.auth_source=Authentifizierungsquelle
 | 
				
			||||||
users.local=Lokal
 | 
					users.local=Lokal
 | 
				
			||||||
users.auth_login_name=Auth-Login-Name
 | 
					users.auth_login_name=Authentifizierung-Loginnname
 | 
				
			||||||
users.update_profile_success=Kontoprofil aktualisiert
 | 
					users.update_profile_success=Kontoprofil aktualisiert
 | 
				
			||||||
users.edit_account=Konto bearbeiten
 | 
					users.edit_account=Konto bearbeiten
 | 
				
			||||||
users.is_activated=Dieses Konto ist aktiviert
 | 
					users.is_activated=Dieses Konto ist aktiviert
 | 
				
			||||||
@@ -800,7 +803,7 @@ repos.watches=Beobachtungen
 | 
				
			|||||||
repos.stars=Markierungen
 | 
					repos.stars=Markierungen
 | 
				
			||||||
repos.issues=Issues
 | 
					repos.issues=Issues
 | 
				
			||||||
 | 
					
 | 
				
			||||||
auths.auth_manage_panel=Authentifizierung
 | 
					auths.auth_manage_panel=Verwaltungspanel für die Authentifizierung
 | 
				
			||||||
auths.new=Neue Authentifizierungsquelle hinzufügen
 | 
					auths.new=Neue Authentifizierungsquelle hinzufügen
 | 
				
			||||||
auths.name=Name
 | 
					auths.name=Name
 | 
				
			||||||
auths.type=Typ
 | 
					auths.type=Typ
 | 
				
			||||||
@@ -820,7 +823,7 @@ auths.attribute_mail=E-Mail Attribut
 | 
				
			|||||||
auths.filter=Benutzernamen Filter
 | 
					auths.filter=Benutzernamen Filter
 | 
				
			||||||
auths.admin_filter=Admin Filter
 | 
					auths.admin_filter=Admin Filter
 | 
				
			||||||
auths.ms_ad_sa=Ms Ad SA
 | 
					auths.ms_ad_sa=Ms Ad SA
 | 
				
			||||||
auths.smtp_auth=SMTP-Authentifizierungstyp
 | 
					auths.smtp_auth=SMTP Authentifizierungstyp
 | 
				
			||||||
auths.smtphost=SMTP-Host
 | 
					auths.smtphost=SMTP-Host
 | 
				
			||||||
auths.smtpport=SMTP-Port
 | 
					auths.smtpport=SMTP-Port
 | 
				
			||||||
auths.enable_tls=TLS-Verschlüsselung aktivieren
 | 
					auths.enable_tls=TLS-Verschlüsselung aktivieren
 | 
				
			||||||
@@ -830,11 +833,11 @@ auths.enable_auto_register=Automatische Registrierung aktivieren
 | 
				
			|||||||
auths.tips=Tipps
 | 
					auths.tips=Tipps
 | 
				
			||||||
auths.edit=Authentifizierungseinstellungen bearbeiten
 | 
					auths.edit=Authentifizierungseinstellungen bearbeiten
 | 
				
			||||||
auths.activated=Diese Authentifizierung ist aktiviert
 | 
					auths.activated=Diese Authentifizierung ist aktiviert
 | 
				
			||||||
auths.update_success=Authentifizierungseinstellungen aktualisiert
 | 
					auths.update_success=Die Authentifizierungseinstellungen wurden erfolgreich aktualisiert.
 | 
				
			||||||
auths.update=Authentifizierungseinstellungen aktualisieren
 | 
					auths.update=Authentifizierungseinstellungen aktualisieren
 | 
				
			||||||
auths.delete=Authentifizierung löschen
 | 
					auths.delete=Diese Authentifizierung löschen
 | 
				
			||||||
auths.delete_auth_title=Authentifizierungsquelle löschen
 | 
					auths.delete_auth_title=Löschen der Authentifizierung
 | 
				
			||||||
auths.delete_auth_desc=Diese Authentifizierungsquelle wird gelöscht, möchtest du fortfahren?
 | 
					auths.delete_auth_desc=Diese Authentifizierung wird gelöscht, möchtest du fortfahren?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config.server_config=Server-Konfiguration
 | 
					config.server_config=Server-Konfiguration
 | 
				
			||||||
config.app_name=Anwendungsname
 | 
					config.app_name=Anwendungsname
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -256,6 +256,7 @@ update_avatar_success = Your avatar setting has been updated successfully.
 | 
				
			|||||||
change_password = Change Password
 | 
					change_password = Change Password
 | 
				
			||||||
old_password = Current Password
 | 
					old_password = Current Password
 | 
				
			||||||
new_password = New Password
 | 
					new_password = New Password
 | 
				
			||||||
 | 
					retype_new_password = Retype New Password
 | 
				
			||||||
password_incorrect = Current password is not correct.
 | 
					password_incorrect = Current password is not correct.
 | 
				
			||||||
change_password_success = Your password was successfully changed. You can now sign using this new password.
 | 
					change_password_success = Your password was successfully changed. You can now sign using this new password.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -265,6 +266,9 @@ email_desc = Your primary e-mail address will be used for notifications and othe
 | 
				
			|||||||
primary = Primary
 | 
					primary = Primary
 | 
				
			||||||
primary_email = Set as primary
 | 
					primary_email = Set as primary
 | 
				
			||||||
delete_email = Delete
 | 
					delete_email = Delete
 | 
				
			||||||
 | 
					email_deletion = E-mail Deletion
 | 
				
			||||||
 | 
					email_deletion_desc = Delete this e-mail address will remove related information from your account. Do you want to continue?
 | 
				
			||||||
 | 
					email_deletion_success = E-mail has been deleted successfully!
 | 
				
			||||||
add_new_email = Add new e-mail address
 | 
					add_new_email = Add new e-mail address
 | 
				
			||||||
add_email = Add e-mail
 | 
					add_email = Add e-mail
 | 
				
			||||||
add_email_confirmation_sent = A new confirmation e-mail has been sent to <b>%s</b>, please check your inbox within the next %d hours to complete the confirmation process.
 | 
					add_email_confirmation_sent = A new confirmation e-mail has been sent to <b>%s</b>, please check your inbox within the next %d hours to complete the confirmation process.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -241,7 +241,7 @@ location=Atrašanās vieta
 | 
				
			|||||||
update_profile=Mainīt profilu
 | 
					update_profile=Mainīt profilu
 | 
				
			||||||
update_profile_success=Jūsu profila dati ir veiksmīgi saglabāti.
 | 
					update_profile_success=Jūsu profila dati ir veiksmīgi saglabāti.
 | 
				
			||||||
change_username=Lietotāja vārds mainīts
 | 
					change_username=Lietotāja vārds mainīts
 | 
				
			||||||
change_username_desc=Lietotājvārds tiks mainīts, vai vēlaties turpināt? Tas ietekmēs visas saites, kas attiecas uz Jūsu kontu.
 | 
					change_username_prompt=This change will affect the way how links relate to your account.
 | 
				
			||||||
continue=Turpināt
 | 
					continue=Turpināt
 | 
				
			||||||
cancel=Atcelt
 | 
					cancel=Atcelt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -256,6 +256,7 @@ update_avatar_success=Jūsu profila bilde tika veiksmīgi saglabāta.
 | 
				
			|||||||
change_password=Mainīt paroli
 | 
					change_password=Mainīt paroli
 | 
				
			||||||
old_password=Pašreizējā parole
 | 
					old_password=Pašreizējā parole
 | 
				
			||||||
new_password=Jauna parole
 | 
					new_password=Jauna parole
 | 
				
			||||||
 | 
					retype_new_password=Retype New Password
 | 
				
			||||||
password_incorrect=Ievadīta nepareiza pašreizējā parole.
 | 
					password_incorrect=Ievadīta nepareiza pašreizējā parole.
 | 
				
			||||||
change_password_success=Parole tika veiksmīgi nomainīta. Tagad jūs varat pieraksītites, izmantojot jauno paroli.
 | 
					change_password_success=Parole tika veiksmīgi nomainīta. Tagad jūs varat pieraksītites, izmantojot jauno paroli.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -265,6 +266,9 @@ email_desc=Primārā e-pasta adrese tiks izmantota sūtot notifikācijas un cit
 | 
				
			|||||||
primary=Primārā
 | 
					primary=Primārā
 | 
				
			||||||
primary_email=Iestatīt kā primāro
 | 
					primary_email=Iestatīt kā primāro
 | 
				
			||||||
delete_email=Dzēst
 | 
					delete_email=Dzēst
 | 
				
			||||||
 | 
					email_deletion=E-mail Deletion
 | 
				
			||||||
 | 
					email_deletion_desc=Delete this e-mail address will remove related information from your account. Do you want to continue?
 | 
				
			||||||
 | 
					email_deletion_success=E-mail has been deleted successfully!
 | 
				
			||||||
add_new_email=Pievienot jaunu e-pasta adresi
 | 
					add_new_email=Pievienot jaunu e-pasta adresi
 | 
				
			||||||
add_email=Pievienot e-pastu
 | 
					add_email=Pievienot e-pastu
 | 
				
			||||||
add_email_confirmation_sent=A new confirmation e-mail has been sent to <b>%s</b>, please check your inbox within the next %d hours to complete the confirmation process.
 | 
					add_email_confirmation_sent=A new confirmation e-mail has been sent to <b>%s</b>, please check your inbox within the next %d hours to complete the confirmation process.
 | 
				
			||||||
@@ -418,9 +422,9 @@ issues.filter_type.all_issues=All issues
 | 
				
			|||||||
issues.filter_type.assigned_to_you=Assigned to you
 | 
					issues.filter_type.assigned_to_you=Assigned to you
 | 
				
			||||||
issues.filter_type.created_by_you=Created by you
 | 
					issues.filter_type.created_by_you=Created by you
 | 
				
			||||||
issues.filter_type.mentioning_you=Mentioning you
 | 
					issues.filter_type.mentioning_you=Mentioning you
 | 
				
			||||||
issues.filter_sort=Sort
 | 
					issues.filter_sort=Kārtot
 | 
				
			||||||
issues.filter_sort.latest=Newest
 | 
					issues.filter_sort.latest=Jaunākie
 | 
				
			||||||
issues.filter_sort.oldest=Oldest
 | 
					issues.filter_sort.oldest=Vecakie
 | 
				
			||||||
issues.filter_sort.recentupdate=Recently updated
 | 
					issues.filter_sort.recentupdate=Recently updated
 | 
				
			||||||
issues.filter_sort.leastupdate=Least recently updated
 | 
					issues.filter_sort.leastupdate=Least recently updated
 | 
				
			||||||
issues.filter_sort.mostcomment=Most commented
 | 
					issues.filter_sort.mostcomment=Most commented
 | 
				
			||||||
@@ -429,12 +433,12 @@ issues.opened_by=opened %[1]s by <a href="%[2]s">%[3]s</a>
 | 
				
			|||||||
issues.opened_by_fake=opened %[1]s by %[2]s
 | 
					issues.opened_by_fake=opened %[1]s by %[2]s
 | 
				
			||||||
issues.previous=Previous
 | 
					issues.previous=Previous
 | 
				
			||||||
issues.next=Next
 | 
					issues.next=Next
 | 
				
			||||||
issues.open_title=Open
 | 
					issues.open_title=Atvērta
 | 
				
			||||||
issues.closed_title=Closed
 | 
					issues.closed_title=Slēgta
 | 
				
			||||||
issues.num_comments=%d comments
 | 
					issues.num_comments=%d komentāri
 | 
				
			||||||
issues.commented_at=`commented <a id="%[1]s" href="#%[1]s">%[2]s</a>`
 | 
					issues.commented_at=`commented <a id="%[1]s" href="#%[1]s">%[2]s</a>`
 | 
				
			||||||
issues.no_content=There is no content yet.
 | 
					issues.no_content=There is no content yet.
 | 
				
			||||||
issues.close_issue=Close
 | 
					issues.close_issue=Aizvērt
 | 
				
			||||||
issues.close_comment_issue=Close and comment
 | 
					issues.close_comment_issue=Close and comment
 | 
				
			||||||
issues.reopen_issue=Reopen
 | 
					issues.reopen_issue=Reopen
 | 
				
			||||||
issues.reopen_comment_issue=Reopen and comment
 | 
					issues.reopen_comment_issue=Reopen and comment
 | 
				
			||||||
@@ -447,9 +451,9 @@ issues.admin=Admin
 | 
				
			|||||||
issues.owner=Owner
 | 
					issues.owner=Owner
 | 
				
			||||||
issues.sign_up_for_free=Sign up for free
 | 
					issues.sign_up_for_free=Sign up for free
 | 
				
			||||||
issues.sign_in_require_desc=to join this conversation. Already have an account? <a href="%s">Sign in to comment</a>
 | 
					issues.sign_in_require_desc=to join this conversation. Already have an account? <a href="%s">Sign in to comment</a>
 | 
				
			||||||
issues.edit=Edit
 | 
					issues.edit=Labot
 | 
				
			||||||
issues.cancel=Cancel
 | 
					issues.cancel=Atcelt
 | 
				
			||||||
issues.save=Save
 | 
					issues.save=Saglabāt
 | 
				
			||||||
issues.label_title=Label name
 | 
					issues.label_title=Label name
 | 
				
			||||||
issues.label_color=Label color
 | 
					issues.label_color=Label color
 | 
				
			||||||
issues.label_count=%d labels
 | 
					issues.label_count=%d labels
 | 
				
			||||||
@@ -490,18 +494,18 @@ milestones.close_tab=%d Closed
 | 
				
			|||||||
milestones.closed=Closed %s
 | 
					milestones.closed=Closed %s
 | 
				
			||||||
milestones.no_due_date=No due date
 | 
					milestones.no_due_date=No due date
 | 
				
			||||||
milestones.open=Open
 | 
					milestones.open=Open
 | 
				
			||||||
milestones.close=Close
 | 
					milestones.close=Aizvērt
 | 
				
			||||||
milestones.new_subheader=Create milestones to organize your issues.
 | 
					milestones.new_subheader=Create milestones to organize your issues.
 | 
				
			||||||
milestones.create=Create Milestone
 | 
					milestones.create=Create Milestone
 | 
				
			||||||
milestones.title=Title
 | 
					milestones.title=Virsraksts
 | 
				
			||||||
milestones.desc=Description
 | 
					milestones.desc=Apraksts
 | 
				
			||||||
milestones.due_date=Due Date (optional)
 | 
					milestones.due_date=Due Date (optional)
 | 
				
			||||||
milestones.clear=Clear
 | 
					milestones.clear=Clear
 | 
				
			||||||
milestones.invalid_due_date_format=Due date format is invalid, must be 'year-mm-dd'.
 | 
					milestones.invalid_due_date_format=Due date format is invalid, must be 'year-mm-dd'.
 | 
				
			||||||
milestones.create_success=Milestone '%s' has been created successfully!
 | 
					milestones.create_success=Milestone '%s' has been created successfully!
 | 
				
			||||||
milestones.edit=Edit Milestone
 | 
					milestones.edit=Edit Milestone
 | 
				
			||||||
milestones.edit_subheader=Use better description for milestones so people won't be confused.
 | 
					milestones.edit_subheader=Use better description for milestones so people won't be confused.
 | 
				
			||||||
milestones.cancel=Cancel
 | 
					milestones.cancel=Atcelt
 | 
				
			||||||
milestones.modify=Modify Milestone
 | 
					milestones.modify=Modify Milestone
 | 
				
			||||||
milestones.edit_success=Changes of milestone '%s' has been saved successfully!
 | 
					milestones.edit_success=Changes of milestone '%s' has been saved successfully!
 | 
				
			||||||
milestones.deletion=Milestone Deletion
 | 
					milestones.deletion=Milestone Deletion
 | 
				
			||||||
@@ -585,8 +589,8 @@ settings.slack_channel=Kanāls
 | 
				
			|||||||
settings.deploy_keys=Izvietot atslēgas
 | 
					settings.deploy_keys=Izvietot atslēgas
 | 
				
			||||||
settings.add_deploy_key=Add Deploy Key
 | 
					settings.add_deploy_key=Add Deploy Key
 | 
				
			||||||
settings.no_deploy_keys=You haven't added any deploy key.
 | 
					settings.no_deploy_keys=You haven't added any deploy key.
 | 
				
			||||||
settings.title=Title
 | 
					settings.title=Virsraksts
 | 
				
			||||||
settings.deploy_key_content=Content
 | 
					settings.deploy_key_content=Saturs
 | 
				
			||||||
settings.key_been_used=Deploy key content has been used.
 | 
					settings.key_been_used=Deploy key content has been used.
 | 
				
			||||||
settings.key_name_used=Deploy key with same name has already existed.
 | 
					settings.key_name_used=Deploy key with same name has already existed.
 | 
				
			||||||
settings.add_key_success=New deploy key '%s' has been added successfully!
 | 
					settings.add_key_success=New deploy key '%s' has been added successfully!
 | 
				
			||||||
@@ -630,7 +634,6 @@ release.tag_name_already_exist=Laidiens ar šādu taga nosaukumu jau eksistē.
 | 
				
			|||||||
[org]
 | 
					[org]
 | 
				
			||||||
org_name_holder=Organizācijas nosaukums
 | 
					org_name_holder=Organizācijas nosaukums
 | 
				
			||||||
org_name_helper=Labi organizāciju nosaukumi ir īsi un tādi, kurus viegli atcerēties.
 | 
					org_name_helper=Labi organizāciju nosaukumi ir īsi un tādi, kurus viegli atcerēties.
 | 
				
			||||||
org_email_helper=Uz organizācijas e-pastu tiks sūtītas visas notifikācias un apstiprinājumi.
 | 
					 | 
				
			||||||
create_org=Izveidot organizāciju
 | 
					create_org=Izveidot organizāciju
 | 
				
			||||||
repo_updated=Atjaunināts
 | 
					repo_updated=Atjaunināts
 | 
				
			||||||
people=Personas
 | 
					people=Personas
 | 
				
			||||||
@@ -655,9 +658,9 @@ settings.full_name=Pilns vārds, uzvārds
 | 
				
			|||||||
settings.website=Mājas lapa
 | 
					settings.website=Mājas lapa
 | 
				
			||||||
settings.location=Atrašanās vieta
 | 
					settings.location=Atrašanās vieta
 | 
				
			||||||
settings.update_settings=Mainīt iestatījumus
 | 
					settings.update_settings=Mainīt iestatījumus
 | 
				
			||||||
settings.change_orgname=Mainīts organizācijas nosaukums
 | 
					 | 
				
			||||||
settings.change_orgname_desc=Organizācijas nosaukums tiks mainīts, vai vēlaties turpinat? Tas ietekmēs saites, kas attiecas uz šo organizāciju.
 | 
					 | 
				
			||||||
settings.update_setting_success=Organizācijas iestatījumi tika veiksmīgi saglabāti.
 | 
					settings.update_setting_success=Organizācijas iestatījumi tika veiksmīgi saglabāti.
 | 
				
			||||||
 | 
					settings.change_orgname_prompt=This change will affect how links relate to the organization.
 | 
				
			||||||
 | 
					settings.update_avatar_success=Organization avatar setting has been updated successfully.
 | 
				
			||||||
settings.delete=Dzēst organizāciju
 | 
					settings.delete=Dzēst organizāciju
 | 
				
			||||||
settings.delete_account=Dzēst šo organizāciju
 | 
					settings.delete_account=Dzēst šo organizāciju
 | 
				
			||||||
settings.delete_prompt=Šī darbība pilnībā dzēsīs šo organizāciju, kā arī tā ir <strong>NEATGRIEZENISKA</strong>!
 | 
					settings.delete_prompt=Šī darbība pilnībā dzēsīs šo organizāciju, kā arī tā ir <strong>NEATGRIEZENISKA</strong>!
 | 
				
			||||||
@@ -774,9 +777,9 @@ users.admin=Administrators
 | 
				
			|||||||
users.repos=Repozitoriji
 | 
					users.repos=Repozitoriji
 | 
				
			||||||
users.created=Izveidots
 | 
					users.created=Izveidots
 | 
				
			||||||
users.edit=Labot
 | 
					users.edit=Labot
 | 
				
			||||||
users.auth_source=Autorizācijas avots
 | 
					users.auth_source=Authentication Source
 | 
				
			||||||
users.local=Iebūvētā
 | 
					users.local=Iebūvētā
 | 
				
			||||||
users.auth_login_name=Autorizāciju, pietiekšanās vārds
 | 
					users.auth_login_name=Authentication Login Name
 | 
				
			||||||
users.update_profile_success=Konta profils tika veiksmīgi saglabāts.
 | 
					users.update_profile_success=Konta profils tika veiksmīgi saglabāts.
 | 
				
			||||||
users.edit_account=Labot kontu
 | 
					users.edit_account=Labot kontu
 | 
				
			||||||
users.is_activated=Konts ir aktivizēts
 | 
					users.is_activated=Konts ir aktivizēts
 | 
				
			||||||
@@ -800,14 +803,14 @@ repos.watches=Vērošana
 | 
				
			|||||||
repos.stars=Atzīmētās zvaigznītes
 | 
					repos.stars=Atzīmētās zvaigznītes
 | 
				
			||||||
repos.issues=Problēmas
 | 
					repos.issues=Problēmas
 | 
				
			||||||
 | 
					
 | 
				
			||||||
auths.auth_manage_panel=Autorizāciju pārvaldības panelis
 | 
					auths.auth_manage_panel=Authentication Manage Panel
 | 
				
			||||||
auths.new=Pievienot jaunu autorizācijas veidu
 | 
					auths.new=Add New Authentication Source
 | 
				
			||||||
auths.name=Nosaukums
 | 
					auths.name=Nosaukums
 | 
				
			||||||
auths.type=Veids
 | 
					auths.type=Veids
 | 
				
			||||||
auths.enabled=Iespējota
 | 
					auths.enabled=Iespējota
 | 
				
			||||||
auths.updated=Atjaunināta
 | 
					auths.updated=Atjaunināta
 | 
				
			||||||
auths.auth_type=Autorizācijas veids
 | 
					auths.auth_type=Authentication Type
 | 
				
			||||||
auths.auth_name=Autorizācijas nosaukums
 | 
					auths.auth_name=Authentication Name
 | 
				
			||||||
auths.domain=Domēns
 | 
					auths.domain=Domēns
 | 
				
			||||||
auths.host=Resursdators
 | 
					auths.host=Resursdators
 | 
				
			||||||
auths.port=Ports
 | 
					auths.port=Ports
 | 
				
			||||||
@@ -820,7 +823,7 @@ auths.attribute_mail=E-mail attribute
 | 
				
			|||||||
auths.filter=User Filter
 | 
					auths.filter=User Filter
 | 
				
			||||||
auths.admin_filter=Admin Filter
 | 
					auths.admin_filter=Admin Filter
 | 
				
			||||||
auths.ms_ad_sa=MS Ad SA
 | 
					auths.ms_ad_sa=MS Ad SA
 | 
				
			||||||
auths.smtp_auth=SMTP autorizācijas veids
 | 
					auths.smtp_auth=SMTP Authentication Type
 | 
				
			||||||
auths.smtphost=SMTP resursdators
 | 
					auths.smtphost=SMTP resursdators
 | 
				
			||||||
auths.smtpport=SMTP ports
 | 
					auths.smtpport=SMTP ports
 | 
				
			||||||
auths.enable_tls=Iespējot TLS šifrēšanu
 | 
					auths.enable_tls=Iespējot TLS šifrēšanu
 | 
				
			||||||
@@ -828,13 +831,13 @@ auths.skip_tls_verify=Skip TLS Verify
 | 
				
			|||||||
auths.pam_service_name=PAM Service Name
 | 
					auths.pam_service_name=PAM Service Name
 | 
				
			||||||
auths.enable_auto_register=Iespējot automātisko reģistrāciju
 | 
					auths.enable_auto_register=Iespējot automātisko reģistrāciju
 | 
				
			||||||
auths.tips=Padomi
 | 
					auths.tips=Padomi
 | 
				
			||||||
auths.edit=Labot autorizācijas iestatījumus
 | 
					auths.edit=Edit Authentication Setting
 | 
				
			||||||
auths.activated=Autentifikācija ir aktivizēta
 | 
					auths.activated=Autentifikācija ir aktivizēta
 | 
				
			||||||
auths.update_success=Autorizācijas iestatījumi tika veiksmīgi saglabāti.
 | 
					auths.update_success=Authentication setting has been updated successfully.
 | 
				
			||||||
auths.update=Mainīt autorizācijas iestatījumus
 | 
					auths.update=Update Authentication Setting
 | 
				
			||||||
auths.delete=Dzēst šo autorizāciju
 | 
					auths.delete=Delete This Authentication
 | 
				
			||||||
auths.delete_auth_title=Autorizācijas dzēšana
 | 
					auths.delete_auth_title=Authentication Deletion
 | 
				
			||||||
auths.delete_auth_desc=Šī autorizācija tiks dzēsta, vai vēlaties turpināt?
 | 
					auths.delete_auth_desc=This authentication is going to be deleted, do you want to continue?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config.server_config=Servera konfigurācija
 | 
					config.server_config=Servera konfigurācija
 | 
				
			||||||
config.app_name=Lietotnes nosaukums
 | 
					config.app_name=Lietotnes nosaukums
 | 
				
			||||||
@@ -953,6 +956,6 @@ raw_minutes=minūtes
 | 
				
			|||||||
[dropzone]
 | 
					[dropzone]
 | 
				
			||||||
default_message=Drop files here or click to upload.
 | 
					default_message=Drop files here or click to upload.
 | 
				
			||||||
invalid_input_type=You can't upload files of this type.
 | 
					invalid_input_type=You can't upload files of this type.
 | 
				
			||||||
file_too_big=File size({{filesize}} MB) exceeds maximum size({{maxFilesize}} MB).
 | 
					file_too_big=Faila izmērs ({{filesize}} MB) pārsniedz maksimālo atļauto izmēru ({{maxFilesize}} MB).
 | 
				
			||||||
remove_file=Remove file
 | 
					remove_file=Noņemt failu
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -241,7 +241,7 @@ location=所在地区
 | 
				
			|||||||
update_profile=更新信息
 | 
					update_profile=更新信息
 | 
				
			||||||
update_profile_success=您的个人信息更新成功!
 | 
					update_profile_success=您的个人信息更新成功!
 | 
				
			||||||
change_username=用户名将被修改
 | 
					change_username=用户名将被修改
 | 
				
			||||||
change_username_desc=用户名被修改,您确定要继续操作吗?这将会影响到所有与您帐户有关的链接。
 | 
					change_username_prompt=该操作将会影响到所有与您帐户有关的链接
 | 
				
			||||||
continue=继续操作
 | 
					continue=继续操作
 | 
				
			||||||
cancel=取消操作
 | 
					cancel=取消操作
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -256,6 +256,7 @@ update_avatar_success=您的头像设置更新成功!
 | 
				
			|||||||
change_password=修改密码
 | 
					change_password=修改密码
 | 
				
			||||||
old_password=当前密码
 | 
					old_password=当前密码
 | 
				
			||||||
new_password=新的密码
 | 
					new_password=新的密码
 | 
				
			||||||
 | 
					retype_new_password=重新输入新的密码
 | 
				
			||||||
password_incorrect=当前密码不正确!
 | 
					password_incorrect=当前密码不正确!
 | 
				
			||||||
change_password_success=密码修改成功!您现在可以使用新的密码登录。
 | 
					change_password_success=密码修改成功!您现在可以使用新的密码登录。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -265,6 +266,9 @@ email_desc=您的主要邮箱地址将被用于通知提醒和其它操作。
 | 
				
			|||||||
primary=主要
 | 
					primary=主要
 | 
				
			||||||
primary_email=设为主要
 | 
					primary_email=设为主要
 | 
				
			||||||
delete_email=删除
 | 
					delete_email=删除
 | 
				
			||||||
 | 
					email_deletion=邮箱删除操作
 | 
				
			||||||
 | 
					email_deletion_desc=删除该邮箱地址将会移除所有相关的信息。是否继续?
 | 
				
			||||||
 | 
					email_deletion_success=邮箱删除成功!
 | 
				
			||||||
add_new_email=添加新的邮箱地址
 | 
					add_new_email=添加新的邮箱地址
 | 
				
			||||||
add_email=添加邮箱
 | 
					add_email=添加邮箱
 | 
				
			||||||
add_email_confirmation_sent=一封待确认的电子邮件已发送到 <b>%s</b>,请在 %d 小时内检查您的收件箱,并完成确认过程。
 | 
					add_email_confirmation_sent=一封待确认的电子邮件已发送到 <b>%s</b>,请在 %d 小时内检查您的收件箱,并完成确认过程。
 | 
				
			||||||
@@ -281,7 +285,7 @@ key_name=密钥名称
 | 
				
			|||||||
key_content=密钥内容
 | 
					key_content=密钥内容
 | 
				
			||||||
add_key_success=新的 SSH 密钥 '%s' 添加成功!
 | 
					add_key_success=新的 SSH 密钥 '%s' 添加成功!
 | 
				
			||||||
delete_key=删除
 | 
					delete_key=删除
 | 
				
			||||||
ssh_key_deletion=删除 SSH 公钥
 | 
					ssh_key_deletion=删除 SSH 公钥操作
 | 
				
			||||||
ssh_key_deletion_desc=删除该 SSH 公钥将删除所有与您帐户相关的访问权限。是否继续?
 | 
					ssh_key_deletion_desc=删除该 SSH 公钥将删除所有与您帐户相关的访问权限。是否继续?
 | 
				
			||||||
ssh_key_deletion_success=SSH 公钥删除成功!
 | 
					ssh_key_deletion_success=SSH 公钥删除成功!
 | 
				
			||||||
add_on=增加于
 | 
					add_on=增加于
 | 
				
			||||||
@@ -303,7 +307,7 @@ token_name=令牌名称
 | 
				
			|||||||
generate_token=生成令牌
 | 
					generate_token=生成令牌
 | 
				
			||||||
generate_token_succees=新的操作令牌生成成功!您必须立即复制到一个安全的地方,因为该令牌只会显示一次!
 | 
					generate_token_succees=新的操作令牌生成成功!您必须立即复制到一个安全的地方,因为该令牌只会显示一次!
 | 
				
			||||||
delete_token=删除令牌
 | 
					delete_token=删除令牌
 | 
				
			||||||
access_token_deletion=删除个人操作令牌
 | 
					access_token_deletion=删除个人操作令牌操作
 | 
				
			||||||
access_token_deletion_desc=删除该个人操作令牌将删除所有相关的应用程序的访问权限。是否继续?
 | 
					access_token_deletion_desc=删除该个人操作令牌将删除所有相关的应用程序的访问权限。是否继续?
 | 
				
			||||||
delete_token_success=个人操作令牌删除成功!请更新与该令牌有关的所有应用。
 | 
					delete_token_success=个人操作令牌删除成功!请更新与该令牌有关的所有应用。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -457,7 +461,7 @@ issues.label_open_issues=%d 个开启的工单
 | 
				
			|||||||
issues.label_edit=编辑
 | 
					issues.label_edit=编辑
 | 
				
			||||||
issues.label_delete=删除
 | 
					issues.label_delete=删除
 | 
				
			||||||
issues.label_modify=修改标签
 | 
					issues.label_modify=修改标签
 | 
				
			||||||
issues.label_deletion=删除标签
 | 
					issues.label_deletion=删除标签操作
 | 
				
			||||||
issues.label_deletion_desc=删除该标签将会移除所有工单中相关的信息。是否继续?
 | 
					issues.label_deletion_desc=删除该标签将会移除所有工单中相关的信息。是否继续?
 | 
				
			||||||
issues.label_deletion_success=标签删除成功!
 | 
					issues.label_deletion_success=标签删除成功!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -504,7 +508,7 @@ milestones.edit_subheader=使用更加清晰的描述来帮助人们更好地理
 | 
				
			|||||||
milestones.cancel=取消
 | 
					milestones.cancel=取消
 | 
				
			||||||
milestones.modify=修改里程碑
 | 
					milestones.modify=修改里程碑
 | 
				
			||||||
milestones.edit_success=里程碑 '%s' 的修改内容已经生效!
 | 
					milestones.edit_success=里程碑 '%s' 的修改内容已经生效!
 | 
				
			||||||
milestones.deletion=删除里程碑
 | 
					milestones.deletion=删除里程碑操作
 | 
				
			||||||
milestones.deletion_desc=删除该里程碑将会移除所有工单中相关的信息。是否继续?
 | 
					milestones.deletion_desc=删除该里程碑将会移除所有工单中相关的信息。是否继续?
 | 
				
			||||||
milestones.deletion_success=里程碑删除成功!
 | 
					milestones.deletion_success=里程碑删除成功!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -630,7 +634,6 @@ release.tag_name_already_exist=已经存在使用相同标签进行发布的版
 | 
				
			|||||||
[org]
 | 
					[org]
 | 
				
			||||||
org_name_holder=组织名称
 | 
					org_name_holder=组织名称
 | 
				
			||||||
org_name_helper=伟大的组织都有一个简短而寓意深刻的名字。
 | 
					org_name_helper=伟大的组织都有一个简短而寓意深刻的名字。
 | 
				
			||||||
org_email_helper=组织的邮箱用于接收所有通知和确认邮件。
 | 
					 | 
				
			||||||
create_org=创建组织
 | 
					create_org=创建组织
 | 
				
			||||||
repo_updated=最后更新于
 | 
					repo_updated=最后更新于
 | 
				
			||||||
people=组织成员
 | 
					people=组织成员
 | 
				
			||||||
@@ -655,9 +658,9 @@ settings.full_name=组织全名
 | 
				
			|||||||
settings.website=官方网站
 | 
					settings.website=官方网站
 | 
				
			||||||
settings.location=所在地区
 | 
					settings.location=所在地区
 | 
				
			||||||
settings.update_settings=更新组织设置
 | 
					settings.update_settings=更新组织设置
 | 
				
			||||||
settings.change_orgname=组织名称将被修改
 | 
					 | 
				
			||||||
settings.change_orgname_desc=组织名称被修改,您确定要继续操作吗?这将会影响到所有与该组织有关的链接。
 | 
					 | 
				
			||||||
settings.update_setting_success=组织设置更新成功!
 | 
					settings.update_setting_success=组织设置更新成功!
 | 
				
			||||||
 | 
					settings.change_orgname_prompt=该操作将会影响到所有与该组织有关的链接
 | 
				
			||||||
 | 
					settings.update_avatar_success=组织头像更新成功!
 | 
				
			||||||
settings.delete=删除组织
 | 
					settings.delete=删除组织
 | 
				
			||||||
settings.delete_account=删除当前组织
 | 
					settings.delete_account=删除当前组织
 | 
				
			||||||
settings.delete_prompt=删除操作会永久清除该组织的信息,并且 <strong>不可恢复</strong>!
 | 
					settings.delete_prompt=删除操作会永久清除该组织的信息,并且 <strong>不可恢复</strong>!
 | 
				
			||||||
@@ -776,7 +779,7 @@ users.created=创建时间
 | 
				
			|||||||
users.edit=编辑
 | 
					users.edit=编辑
 | 
				
			||||||
users.auth_source=认证源
 | 
					users.auth_source=认证源
 | 
				
			||||||
users.local=本地
 | 
					users.local=本地
 | 
				
			||||||
users.auth_login_name=认证登录名
 | 
					users.auth_login_name=认证登录名称
 | 
				
			||||||
users.update_profile_success=该用户信息更新成功!
 | 
					users.update_profile_success=该用户信息更新成功!
 | 
				
			||||||
users.edit_account=编辑用户信息
 | 
					users.edit_account=编辑用户信息
 | 
				
			||||||
users.is_activated=该用户已被激活
 | 
					users.is_activated=该用户已被激活
 | 
				
			||||||
@@ -800,14 +803,14 @@ repos.watches=关注数
 | 
				
			|||||||
repos.stars=点赞数
 | 
					repos.stars=点赞数
 | 
				
			||||||
repos.issues=工单数
 | 
					repos.issues=工单数
 | 
				
			||||||
 | 
					
 | 
				
			||||||
auths.auth_manage_panel=授权认证管理面板
 | 
					auths.auth_manage_panel=认证管理面板
 | 
				
			||||||
auths.new=添加新的认证源
 | 
					auths.new=添加新的认证源
 | 
				
			||||||
auths.name=认证名称
 | 
					auths.name=认证名称
 | 
				
			||||||
auths.type=认证类型
 | 
					auths.type=认证类型
 | 
				
			||||||
auths.enabled=已启用
 | 
					auths.enabled=已启用
 | 
				
			||||||
auths.updated=最后更新时间
 | 
					auths.updated=最后更新时间
 | 
				
			||||||
auths.auth_type=授权类型
 | 
					auths.auth_type=认证类型
 | 
				
			||||||
auths.auth_name=授权名称
 | 
					auths.auth_name=认证名称
 | 
				
			||||||
auths.domain=域名
 | 
					auths.domain=域名
 | 
				
			||||||
auths.host=主机地址
 | 
					auths.host=主机地址
 | 
				
			||||||
auths.port=主机端口
 | 
					auths.port=主机端口
 | 
				
			||||||
@@ -820,7 +823,7 @@ auths.attribute_mail=邮箱属性
 | 
				
			|||||||
auths.filter=用户过滤规则
 | 
					auths.filter=用户过滤规则
 | 
				
			||||||
auths.admin_filter=管理员过滤规则
 | 
					auths.admin_filter=管理员过滤规则
 | 
				
			||||||
auths.ms_ad_sa=Ms Ad SA
 | 
					auths.ms_ad_sa=Ms Ad SA
 | 
				
			||||||
auths.smtp_auth=SMTP 授权类型
 | 
					auths.smtp_auth=SMTP 认证类型
 | 
				
			||||||
auths.smtphost=SMTP 主机地址
 | 
					auths.smtphost=SMTP 主机地址
 | 
				
			||||||
auths.smtpport=SMTP 主机端口
 | 
					auths.smtpport=SMTP 主机端口
 | 
				
			||||||
auths.enable_tls=启用 TLS 加密
 | 
					auths.enable_tls=启用 TLS 加密
 | 
				
			||||||
@@ -828,13 +831,13 @@ auths.skip_tls_verify=忽略 TLS 验证
 | 
				
			|||||||
auths.pam_service_name=PAM 服务名称
 | 
					auths.pam_service_name=PAM 服务名称
 | 
				
			||||||
auths.enable_auto_register=允许授权用户自动注册
 | 
					auths.enable_auto_register=允许授权用户自动注册
 | 
				
			||||||
auths.tips=帮助提示
 | 
					auths.tips=帮助提示
 | 
				
			||||||
auths.edit=修改授权认证设置
 | 
					auths.edit=编辑认证设置
 | 
				
			||||||
auths.activated=该授权认证已经启用
 | 
					auths.activated=该授权认证已经启用
 | 
				
			||||||
auths.update_success=授权认证设置更新成功!
 | 
					auths.update_success=认证设置更新成功!
 | 
				
			||||||
auths.update=更新授权认证信息
 | 
					auths.update=更新认证设置
 | 
				
			||||||
auths.delete=删除该授权认证
 | 
					auths.delete=删除该认证
 | 
				
			||||||
auths.delete_auth_title=授权认证删除操作
 | 
					auths.delete_auth_title=删除认证操作
 | 
				
			||||||
auths.delete_auth_desc=该授权认证将被删除,您确定要继续吗?
 | 
					auths.delete_auth_desc=该认证将被删除。是否继续?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config.server_config=服务器配置
 | 
					config.server_config=服务器配置
 | 
				
			||||||
config.app_name=应用名称
 | 
					config.app_name=应用名称
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								gogs.go
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								gogs.go
									
									
									
									
									
								
							@@ -17,7 +17,7 @@ import (
 | 
				
			|||||||
	"github.com/gogits/gogs/modules/setting"
 | 
						"github.com/gogits/gogs/modules/setting"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const APP_VER = "0.6.9.0910 Beta"
 | 
					const APP_VER = "0.6.10.0910 Beta"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func init() {
 | 
					func init() {
 | 
				
			||||||
	runtime.GOMAXPROCS(runtime.NumCPU())
 | 
						runtime.GOMAXPROCS(runtime.NumCPU())
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -546,7 +546,7 @@ func GetIssueCountByPoster(uid, rid int64, isClosed bool) int64 {
 | 
				
			|||||||
// IssueUser represents an issue-user relation.
 | 
					// IssueUser represents an issue-user relation.
 | 
				
			||||||
type IssueUser struct {
 | 
					type IssueUser struct {
 | 
				
			||||||
	ID          int64 `xorm:"pk autoincr"`
 | 
						ID          int64 `xorm:"pk autoincr"`
 | 
				
			||||||
	UID         int64 `xorm:"uid INDEX"` // User ID.
 | 
						UID         int64 `xorm:"INDEX"` // User ID.
 | 
				
			||||||
	IssueID     int64
 | 
						IssueID     int64
 | 
				
			||||||
	RepoID      int64 `xorm:"INDEX"`
 | 
						RepoID      int64 `xorm:"INDEX"`
 | 
				
			||||||
	MilestoneID int64
 | 
						MilestoneID int64
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -87,7 +87,7 @@ func init() {
 | 
				
			|||||||
		new(Team), new(OrgUser), new(TeamUser), new(TeamRepo),
 | 
							new(Team), new(OrgUser), new(TeamUser), new(TeamRepo),
 | 
				
			||||||
		new(Notice), new(EmailAddress))
 | 
							new(Notice), new(EmailAddress))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	gonicNames := []string{"SSL"}
 | 
						gonicNames := []string{"UID", "SSL"}
 | 
				
			||||||
	for _, name := range gonicNames {
 | 
						for _, name := range gonicNames {
 | 
				
			||||||
		core.LintGonicMapper[name] = true
 | 
							core.LintGonicMapper[name] = true
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1658,7 +1658,7 @@ func NotifyWatchers(act *Action) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
type Star struct {
 | 
					type Star struct {
 | 
				
			||||||
	ID     int64 `xorm:"pk autoincr"`
 | 
						ID     int64 `xorm:"pk autoincr"`
 | 
				
			||||||
	UID    int64 `xorm:"uid UNIQUE(s)"`
 | 
						UID    int64 `xorm:"UNIQUE(s)"`
 | 
				
			||||||
	RepoID int64 `xorm:"UNIQUE(s)"`
 | 
						RepoID int64 `xorm:"UNIQUE(s)"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,7 +14,7 @@ import (
 | 
				
			|||||||
// AccessToken represents a personal access token.
 | 
					// AccessToken represents a personal access token.
 | 
				
			||||||
type AccessToken struct {
 | 
					type AccessToken struct {
 | 
				
			||||||
	ID                int64 `xorm:"pk autoincr"`
 | 
						ID                int64 `xorm:"pk autoincr"`
 | 
				
			||||||
	UID               int64 `xorm:"uid INDEX"`
 | 
						UID               int64 `xorm:"INDEX"`
 | 
				
			||||||
	Name              string
 | 
						Name              string
 | 
				
			||||||
	Sha1              string    `xorm:"UNIQUE VARCHAR(40)"`
 | 
						Sha1              string    `xorm:"UNIQUE VARCHAR(40)"`
 | 
				
			||||||
	Created           time.Time `xorm:"CREATED"`
 | 
						Created           time.Time `xorm:"CREATED"`
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -110,8 +110,8 @@ func (u *User) AfterSet(colName string, _ xorm.Cell) {
 | 
				
			|||||||
// EmailAdresses is the list of all email addresses of a user. Can contain the
 | 
					// EmailAdresses is the list of all email addresses of a user. Can contain the
 | 
				
			||||||
// primary email address, but is not obligatory
 | 
					// primary email address, but is not obligatory
 | 
				
			||||||
type EmailAddress struct {
 | 
					type EmailAddress struct {
 | 
				
			||||||
	Id          int64
 | 
						ID          int64  `xorm:"pk autoincr"`
 | 
				
			||||||
	Uid         int64  `xorm:"INDEX NOT NULL"`
 | 
						UID         int64  `xorm:"INDEX NOT NULL"`
 | 
				
			||||||
	Email       string `xorm:"UNIQUE NOT NULL"`
 | 
						Email       string `xorm:"UNIQUE NOT NULL"`
 | 
				
			||||||
	IsActivated bool
 | 
						IsActivated bool
 | 
				
			||||||
	IsPrimary   bool `xorm:"-"`
 | 
						IsPrimary   bool `xorm:"-"`
 | 
				
			||||||
@@ -624,7 +624,7 @@ func deleteUser(e *xorm.Session, u *User) error {
 | 
				
			|||||||
		&Follow{FollowID: u.Id},
 | 
							&Follow{FollowID: u.Id},
 | 
				
			||||||
		&Action{UserID: u.Id},
 | 
							&Action{UserID: u.Id},
 | 
				
			||||||
		&IssueUser{UID: u.Id},
 | 
							&IssueUser{UID: u.Id},
 | 
				
			||||||
		&EmailAddress{Uid: u.Id},
 | 
							&EmailAddress{UID: u.Id},
 | 
				
			||||||
	); err != nil {
 | 
						); err != nil {
 | 
				
			||||||
		return fmt.Errorf("deleteUser: %v", err)
 | 
							return fmt.Errorf("deleteUser: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -831,11 +831,11 @@ func AddEmailAddress(email *EmailAddress) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func (email *EmailAddress) Activate() error {
 | 
					func (email *EmailAddress) Activate() error {
 | 
				
			||||||
	email.IsActivated = true
 | 
						email.IsActivated = true
 | 
				
			||||||
	if _, err := x.Id(email.Id).AllCols().Update(email); err != nil {
 | 
						if _, err := x.Id(email.ID).AllCols().Update(email); err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if user, err := GetUserByID(email.Uid); err != nil {
 | 
						if user, err := GetUserByID(email.UID); err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		user.Rands = GetUserSalt()
 | 
							user.Rands = GetUserSalt()
 | 
				
			||||||
@@ -851,7 +851,7 @@ func DeleteEmailAddress(email *EmailAddress) error {
 | 
				
			|||||||
		return ErrEmailNotExist
 | 
							return ErrEmailNotExist
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if _, err = x.Id(email.Id).Delete(email); err != nil {
 | 
						if _, err = x.Id(email.ID).Delete(email); err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -871,12 +871,12 @@ func MakeEmailPrimary(email *EmailAddress) error {
 | 
				
			|||||||
		return ErrEmailNotActivated
 | 
							return ErrEmailNotActivated
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	user := &User{Id: email.Uid}
 | 
						user := &User{Id: email.UID}
 | 
				
			||||||
	has, err = x.Get(user)
 | 
						has, err = x.Get(user)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	} else if !has {
 | 
						} else if !has {
 | 
				
			||||||
		return ErrUserNotExist{email.Uid, ""}
 | 
							return ErrUserNotExist{email.UID, ""}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Make sure the former primary email doesn't disappear
 | 
						// Make sure the former primary email doesn't disappear
 | 
				
			||||||
@@ -885,7 +885,7 @@ func MakeEmailPrimary(email *EmailAddress) error {
 | 
				
			|||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	} else if !has {
 | 
						} else if !has {
 | 
				
			||||||
		former_primary_email.Uid = user.Id
 | 
							former_primary_email.UID = user.Id
 | 
				
			||||||
		former_primary_email.IsActivated = user.IsActive
 | 
							former_primary_email.IsActivated = user.IsActive
 | 
				
			||||||
		x.Insert(former_primary_email)
 | 
							x.Insert(former_primary_email)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -962,7 +962,7 @@ func GetUserByEmail(email string) (*User, error) {
 | 
				
			|||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if has {
 | 
						if has {
 | 
				
			||||||
		return GetUserByID(emailAddress.Uid)
 | 
							return GetUserByID(emailAddress.UID)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return nil, ErrUserNotExist{0, "email"}
 | 
						return nil, ErrUserNotExist{0, "email"}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -110,7 +110,7 @@ func (f *UploadAvatarForm) Validate(ctx *macaron.Context, errs binding.Errors) b
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type AddEmailForm struct {
 | 
					type AddEmailForm struct {
 | 
				
			||||||
	Email string `binding:"Required;Email;MaxSize(50)"`
 | 
						Email string `binding:"Required;Email;MaxSize(254)"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (f *AddEmailForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors {
 | 
					func (f *AddEmailForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors {
 | 
				
			||||||
 
 | 
				
			|||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								public/css/gogs.min.css
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								public/css/gogs.min.css
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@@ -253,9 +253,6 @@ footer {
 | 
				
			|||||||
	  	text-align: center;
 | 
						  	text-align: center;
 | 
				
			||||||
	  	color: #428bca;
 | 
						  	color: #428bca;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		.ui.language.dropdown {
 | 
					 | 
				
			||||||
			z-index: 10000;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		.links >* {
 | 
							.links >* {
 | 
				
			||||||
			border-left: 1px solid #d6d6d6;
 | 
								border-left: 1px solid #d6d6d6;
 | 
				
			||||||
			padding-left: 8px;
 | 
								padding-left: 8px;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,10 +3,19 @@
 | 
				
			|||||||
	padding-bottom: @footer-margin * 2;
 | 
						padding-bottom: @footer-margin * 2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	&.settings {
 | 
						&.settings {
 | 
				
			||||||
		.key.list {
 | 
							.list {
 | 
				
			||||||
			.item.ui.grid {
 | 
								.item.ui.grid {
 | 
				
			||||||
				margin-top: 15px;
 | 
									margin-top: 15px;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							.email.list {
 | 
				
			||||||
 | 
								.item:not(:first-child) {
 | 
				
			||||||
 | 
									border-top: 1px solid #eaeaea;
 | 
				
			||||||
 | 
									height: 50px;
 | 
				
			||||||
 | 
									.button {
 | 
				
			||||||
 | 
										margin-top: -10px;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -132,6 +132,40 @@ func SettingsAvatar(ctx *middleware.Context, form auth.UploadAvatarForm) {
 | 
				
			|||||||
	ctx.Redirect(setting.AppSubUrl + "/user/settings")
 | 
						ctx.Redirect(setting.AppSubUrl + "/user/settings")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func SettingsPassword(ctx *middleware.Context) {
 | 
				
			||||||
 | 
						ctx.Data["Title"] = ctx.Tr("settings")
 | 
				
			||||||
 | 
						ctx.Data["PageIsSettingsPassword"] = true
 | 
				
			||||||
 | 
						ctx.HTML(200, SETTINGS_PASSWORD)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func SettingsPasswordPost(ctx *middleware.Context, form auth.ChangePasswordForm) {
 | 
				
			||||||
 | 
						ctx.Data["Title"] = ctx.Tr("settings")
 | 
				
			||||||
 | 
						ctx.Data["PageIsSettingsPassword"] = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if ctx.HasError() {
 | 
				
			||||||
 | 
							ctx.HTML(200, SETTINGS_PASSWORD)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if !ctx.User.ValidatePassword(form.OldPassword) {
 | 
				
			||||||
 | 
							ctx.Flash.Error(ctx.Tr("settings.password_incorrect"))
 | 
				
			||||||
 | 
						} else if form.Password != form.Retype {
 | 
				
			||||||
 | 
							ctx.Flash.Error(ctx.Tr("form.password_not_match"))
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							ctx.User.Passwd = form.Password
 | 
				
			||||||
 | 
							ctx.User.Salt = models.GetUserSalt()
 | 
				
			||||||
 | 
							ctx.User.EncodePasswd()
 | 
				
			||||||
 | 
							if err := models.UpdateUser(ctx.User); err != nil {
 | 
				
			||||||
 | 
								ctx.Handle(500, "UpdateUser", err)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							log.Trace("User password updated: %s", ctx.User.Name)
 | 
				
			||||||
 | 
							ctx.Flash.Success(ctx.Tr("settings.change_password_success"))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ctx.Redirect(setting.AppSubUrl + "/user/settings/password")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func SettingsEmails(ctx *middleware.Context) {
 | 
					func SettingsEmails(ctx *middleware.Context) {
 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("settings")
 | 
						ctx.Data["Title"] = ctx.Tr("settings")
 | 
				
			||||||
	ctx.Data["PageIsSettingsEmails"] = true
 | 
						ctx.Data["PageIsSettingsEmails"] = true
 | 
				
			||||||
@@ -150,6 +184,19 @@ func SettingsEmailPost(ctx *middleware.Context, form auth.AddEmailForm) {
 | 
				
			|||||||
	ctx.Data["Title"] = ctx.Tr("settings")
 | 
						ctx.Data["Title"] = ctx.Tr("settings")
 | 
				
			||||||
	ctx.Data["PageIsSettingsEmails"] = true
 | 
						ctx.Data["PageIsSettingsEmails"] = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Make emailaddress primary.
 | 
				
			||||||
 | 
						if ctx.Query("_method") == "PRIMARY" {
 | 
				
			||||||
 | 
							if err := models.MakeEmailPrimary(&models.EmailAddress{ID: ctx.QueryInt64("id")}); err != nil {
 | 
				
			||||||
 | 
								ctx.Handle(500, "MakeEmailPrimary", err)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							log.Trace("Email made primary: %s", ctx.User.Name)
 | 
				
			||||||
 | 
							ctx.Redirect(setting.AppSubUrl + "/user/settings/email")
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Add Email address.
 | 
				
			||||||
	emails, err := models.GetEmailAddresses(ctx.User.Id)
 | 
						emails, err := models.GetEmailAddresses(ctx.User.Id)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		ctx.Handle(500, "GetEmailAddresses", err)
 | 
							ctx.Handle(500, "GetEmailAddresses", err)
 | 
				
			||||||
@@ -157,51 +204,16 @@ func SettingsEmailPost(ctx *middleware.Context, form auth.AddEmailForm) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	ctx.Data["Emails"] = emails
 | 
						ctx.Data["Emails"] = emails
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Delete E-mail address.
 | 
					 | 
				
			||||||
	if ctx.Query("_method") == "DELETE" {
 | 
					 | 
				
			||||||
		id := ctx.QueryInt64("id")
 | 
					 | 
				
			||||||
		if id <= 0 {
 | 
					 | 
				
			||||||
			return
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if err = models.DeleteEmailAddress(&models.EmailAddress{Id: id}); err != nil {
 | 
					 | 
				
			||||||
			ctx.Handle(500, "DeleteEmail", err)
 | 
					 | 
				
			||||||
		} else {
 | 
					 | 
				
			||||||
			log.Trace("Email address deleted: %s", ctx.User.Name)
 | 
					 | 
				
			||||||
			ctx.Redirect(setting.AppSubUrl + "/user/settings/email")
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Make emailaddress primary.
 | 
					 | 
				
			||||||
	if ctx.Query("_method") == "PRIMARY" {
 | 
					 | 
				
			||||||
		id := ctx.QueryInt64("id")
 | 
					 | 
				
			||||||
		if id <= 0 {
 | 
					 | 
				
			||||||
			return
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if err = models.MakeEmailPrimary(&models.EmailAddress{Id: id}); err != nil {
 | 
					 | 
				
			||||||
			ctx.Handle(500, "MakeEmailPrimary", err)
 | 
					 | 
				
			||||||
		} else {
 | 
					 | 
				
			||||||
			log.Trace("Email made primary: %s", ctx.User.Name)
 | 
					 | 
				
			||||||
			ctx.Redirect(setting.AppSubUrl + "/user/settings/email")
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Add Email address.
 | 
					 | 
				
			||||||
	if ctx.HasError() {
 | 
						if ctx.HasError() {
 | 
				
			||||||
		ctx.HTML(200, SETTINGS_EMAILS)
 | 
							ctx.HTML(200, SETTINGS_EMAILS)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cleanEmail := strings.Replace(form.Email, "\n", "", -1)
 | 
					 | 
				
			||||||
	e := &models.EmailAddress{
 | 
						e := &models.EmailAddress{
 | 
				
			||||||
		Uid:         ctx.User.Id,
 | 
							UID:         ctx.User.Id,
 | 
				
			||||||
		Email:       cleanEmail,
 | 
							Email:       strings.TrimSpace(form.Email),
 | 
				
			||||||
		IsActivated: !setting.Service.RegisterEmailConfirm,
 | 
							IsActivated: !setting.Service.RegisterEmailConfirm,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					 | 
				
			||||||
	if err := models.AddEmailAddress(e); err != nil {
 | 
						if err := models.AddEmailAddress(e); err != nil {
 | 
				
			||||||
		if models.IsErrEmailAlreadyUsed(err) {
 | 
							if models.IsErrEmailAlreadyUsed(err) {
 | 
				
			||||||
			ctx.RenderWithErr(ctx.Tr("form.email_been_used"), SETTINGS_EMAILS, &form)
 | 
								ctx.RenderWithErr(ctx.Tr("form.email_been_used"), SETTINGS_EMAILS, &form)
 | 
				
			||||||
@@ -209,64 +221,35 @@ func SettingsEmailPost(ctx *middleware.Context, form auth.AddEmailForm) {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		ctx.Handle(500, "AddEmailAddress", err)
 | 
							ctx.Handle(500, "AddEmailAddress", err)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	} else {
 | 
					 | 
				
			||||||
		// Send confirmation e-mail
 | 
					 | 
				
			||||||
		if setting.Service.RegisterEmailConfirm {
 | 
					 | 
				
			||||||
			mailer.SendActivateEmail(ctx.Render, ctx.User, e)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			if err := ctx.Cache.Put("MailResendLimit_"+ctx.User.LowerName, ctx.User.LowerName, 180); err != nil {
 | 
					 | 
				
			||||||
				log.Error(4, "Set cache(MailResendLimit) fail: %v", err)
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			ctx.Flash.Info(ctx.Tr("settings.add_email_confirmation_sent", cleanEmail, setting.Service.ActiveCodeLives/60))
 | 
					 | 
				
			||||||
		} else {
 | 
					 | 
				
			||||||
			ctx.Flash.Success(ctx.Tr("settings.add_email_success"))
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		log.Trace("Email address added: %s", e.Email)
 | 
					 | 
				
			||||||
		ctx.Redirect(setting.AppSubUrl + "/user/settings/email")
 | 
					 | 
				
			||||||
		return
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ctx.HTML(200, SETTINGS_EMAILS)
 | 
						// Send confirmation e-mail
 | 
				
			||||||
 | 
						if setting.Service.RegisterEmailConfirm {
 | 
				
			||||||
 | 
							mailer.SendActivateEmail(ctx.Render, ctx.User, e)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if err := ctx.Cache.Put("MailResendLimit_"+ctx.User.LowerName, ctx.User.LowerName, 180); err != nil {
 | 
				
			||||||
 | 
								log.Error(4, "Set cache(MailResendLimit) fail: %v", err)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							ctx.Flash.Info(ctx.Tr("settings.add_email_confirmation_sent", e.Email, setting.Service.ActiveCodeLives/60))
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							ctx.Flash.Success(ctx.Tr("settings.add_email_success"))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						log.Trace("Email address added: %s", e.Email)
 | 
				
			||||||
 | 
						ctx.Redirect(setting.AppSubUrl + "/user/settings/email")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func SettingsPassword(ctx *middleware.Context) {
 | 
					func DeleteEmail(ctx *middleware.Context) {
 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("settings")
 | 
						if err := models.DeleteEmailAddress(&models.EmailAddress{ID: ctx.QueryInt64("id")}); err != nil {
 | 
				
			||||||
	ctx.Data["PageIsSettingsPassword"] = true
 | 
							ctx.Handle(500, "DeleteEmail", err)
 | 
				
			||||||
	ctx.HTML(200, SETTINGS_PASSWORD)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func SettingsPasswordPost(ctx *middleware.Context, form auth.ChangePasswordForm) {
 | 
					 | 
				
			||||||
	ctx.Data["Title"] = ctx.Tr("settings")
 | 
					 | 
				
			||||||
	ctx.Data["PageIsSettingsPassword"] = true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if ctx.HasError() {
 | 
					 | 
				
			||||||
		ctx.HTML(200, SETTINGS_PASSWORD)
 | 
					 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						log.Trace("Email address deleted: %s", ctx.User.Name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	tmpUser := &models.User{
 | 
						ctx.Flash.Success(ctx.Tr("settings.email_deletion_success"))
 | 
				
			||||||
		Passwd: form.OldPassword,
 | 
						ctx.JSON(200, map[string]interface{}{
 | 
				
			||||||
		Salt:   ctx.User.Salt,
 | 
							"redirect": setting.AppSubUrl + "/user/settings/email",
 | 
				
			||||||
	}
 | 
						})
 | 
				
			||||||
	tmpUser.EncodePasswd()
 | 
					 | 
				
			||||||
	if ctx.User.Passwd != tmpUser.Passwd {
 | 
					 | 
				
			||||||
		ctx.Flash.Error(ctx.Tr("settings.password_incorrect"))
 | 
					 | 
				
			||||||
	} else if form.Password != form.Retype {
 | 
					 | 
				
			||||||
		ctx.Flash.Error(ctx.Tr("form.password_not_match"))
 | 
					 | 
				
			||||||
	} else {
 | 
					 | 
				
			||||||
		ctx.User.Passwd = form.Password
 | 
					 | 
				
			||||||
		ctx.User.Salt = models.GetUserSalt()
 | 
					 | 
				
			||||||
		ctx.User.EncodePasswd()
 | 
					 | 
				
			||||||
		if err := models.UpdateUser(ctx.User); err != nil {
 | 
					 | 
				
			||||||
			ctx.Handle(500, "UpdateUser", err)
 | 
					 | 
				
			||||||
			return
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		log.Trace("User password updated: %s", ctx.User.Name)
 | 
					 | 
				
			||||||
		ctx.Flash.Success(ctx.Tr("settings.change_password_success"))
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	ctx.Redirect(setting.AppSubUrl + "/user/settings/password")
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func SettingsSSHKeys(ctx *middleware.Context) {
 | 
					func SettingsSSHKeys(ctx *middleware.Context) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1 +1 @@
 | 
				
			|||||||
0.6.9.0910 Beta
 | 
					0.6.10.0910 Beta
 | 
				
			||||||
@@ -1,60 +1,70 @@
 | 
				
			|||||||
{{template "ng/base/head" .}}
 | 
					{{template "base/head" .}}
 | 
				
			||||||
{{template "ng/base/header" .}}
 | 
					<div class="user settings emails">
 | 
				
			||||||
<div id="setting-wrapper" class="main-wrapper">
 | 
					  <div class="ui container">
 | 
				
			||||||
    <div id="user-profile-setting" class="container clear">
 | 
					    <div class="ui grid">
 | 
				
			||||||
        {{template "user/settings/nav" .}}
 | 
					      {{template "user/settings/navbar" .}}
 | 
				
			||||||
        <div class="grid-4-5 left">
 | 
					      <div class="twelve wide column content">
 | 
				
			||||||
            <div class="setting-content">
 | 
					        {{template "base/alert" .}}
 | 
				
			||||||
                {{template "ng/base/alert" .}}
 | 
					        <h4 class="ui top attached header">
 | 
				
			||||||
                <div id="user-email-setting-content">
 | 
					          {{.i18n.Tr "settings.manage_emails"}}
 | 
				
			||||||
                    <div id="user-email-panel" class="panel panel-radius">
 | 
					        </h4>
 | 
				
			||||||
                        <div class="panel-header">
 | 
					        <div class="ui attached segment">
 | 
				
			||||||
                             <strong>{{.i18n.Tr "settings.manage_emails"}}</strong>
 | 
					          <div class="ui email list">
 | 
				
			||||||
                        </div>
 | 
					            <div class="item">
 | 
				
			||||||
                        <ul class="panel-body setting-list">
 | 
					              {{.i18n.Tr "settings.email_desc"}}
 | 
				
			||||||
                            <li>{{.i18n.Tr "settings.email_desc"}}</li>
 | 
					 | 
				
			||||||
                            {{range .Emails}}
 | 
					 | 
				
			||||||
                            <li class="email clear">
 | 
					 | 
				
			||||||
                                <div class="email-content left">
 | 
					 | 
				
			||||||
									<p><strong>{{.Email}}</strong> {{if .IsPrimary}} <span class="text-red">{{$.i18n.Tr "settings.primary"}}</span> {{end}}</p>
 | 
					 | 
				
			||||||
							   </div>
 | 
					 | 
				
			||||||
							   {{if not .IsPrimary}}
 | 
					 | 
				
			||||||
							   {{if .IsActivated}}
 | 
					 | 
				
			||||||
							   <form action="{{AppSubUrl}}/user/settings/email" method="post">
 | 
					 | 
				
			||||||
                                    {{$.CsrfTokenHtml}}
 | 
					 | 
				
			||||||
                                    <input name="_method" type="hidden" value="PRIMARY">
 | 
					 | 
				
			||||||
                                    <input name="id" type="hidden" value="{{.Id}}">
 | 
					 | 
				
			||||||
                                    <button class="right email-btn btn btn-small btn-green btn-radius">{{$.i18n.Tr "settings.primary_email"}}</button>
 | 
					 | 
				
			||||||
                                </form>
 | 
					 | 
				
			||||||
								{{end}}
 | 
					 | 
				
			||||||
                                <form action="{{AppSubUrl}}/user/settings/email" method="post">
 | 
					 | 
				
			||||||
                                    {{$.CsrfTokenHtml}}
 | 
					 | 
				
			||||||
                                    <input name="_method" type="hidden" value="DELETE">
 | 
					 | 
				
			||||||
                                    <input name="id" type="hidden" value="{{.Id}}">
 | 
					 | 
				
			||||||
                                    <button class="right email-btn btn btn-small btn-red btn-radius" style="margin-right: 5px">{{$.i18n.Tr "settings.delete_email"}}</button>
 | 
					 | 
				
			||||||
                                </form>
 | 
					 | 
				
			||||||
							   {{end}}
 | 
					 | 
				
			||||||
                            </li>
 | 
					 | 
				
			||||||
                            {{end}}
 | 
					 | 
				
			||||||
                        </ul>
 | 
					 | 
				
			||||||
                        <div class="panel-header">
 | 
					 | 
				
			||||||
                             <strong>{{.i18n.Tr "settings.add_new_email"}}</strong>
 | 
					 | 
				
			||||||
                        </div>
 | 
					 | 
				
			||||||
                        <form class="form form-align panel-body" id="add-email-form" action="{{AppSubUrl}}/user/settings/email" method="post">
 | 
					 | 
				
			||||||
                            {{.CsrfTokenHtml}}                            
 | 
					 | 
				
			||||||
                            <p class="field">
 | 
					 | 
				
			||||||
                                <label class="req" for="email">{{.i18n.Tr "email"}}</label>
 | 
					 | 
				
			||||||
                                <input class="ipt ipt-large ipt-radius" id="email" name="email" type="text" required />
 | 
					 | 
				
			||||||
                            </p>
 | 
					 | 
				
			||||||
                            <p class="field">
 | 
					 | 
				
			||||||
                                <label></label>
 | 
					 | 
				
			||||||
                                <button class="btn btn-green btn-large btn-radius" id="email-add-btn">{{.i18n.Tr "settings.add_email"}}</button>
 | 
					 | 
				
			||||||
                            </p>
 | 
					 | 
				
			||||||
                        </form>
 | 
					 | 
				
			||||||
                    </div>                    
 | 
					 | 
				
			||||||
                </div>
 | 
					 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
 | 
					            {{range .Emails}}
 | 
				
			||||||
 | 
					            <div class="item ui grid">
 | 
				
			||||||
 | 
					              <div class="column">
 | 
				
			||||||
 | 
					                <strong>{{.Email}}</strong> 
 | 
				
			||||||
 | 
					                {{if .IsPrimary}}<span class="text red">{{$.i18n.Tr "settings.primary"}}</span>{{end}}
 | 
				
			||||||
 | 
					                {{if not .IsPrimary}}
 | 
				
			||||||
 | 
					                <div class="ui right">
 | 
				
			||||||
 | 
					                  <button class="ui red tiny button delete-button" data-url="{{$.Link}}/delete" data-id="{{.ID}}">
 | 
				
			||||||
 | 
					                    {{$.i18n.Tr "settings.delete_key"}}
 | 
				
			||||||
 | 
					                  </button>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					                {{if .IsActivated}}
 | 
				
			||||||
 | 
					                <div class="ui right">
 | 
				
			||||||
 | 
					                  <form action="{{$.Link}}" method="post">
 | 
				
			||||||
 | 
					                    {{$.CsrfTokenHtml}}
 | 
				
			||||||
 | 
					                    <input name="_method" type="hidden" value="PRIMARY">
 | 
				
			||||||
 | 
					                    <input name="id" type="hidden" value="{{.ID}}">
 | 
				
			||||||
 | 
					                    <button class="ui green tiny button">{{$.i18n.Tr "settings.primary_email"}}</button>
 | 
				
			||||||
 | 
					                  </form>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					                {{end}}
 | 
				
			||||||
 | 
					                {{end}}
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            {{end}}
 | 
				
			||||||
 | 
					          </div>        
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div class="ui attached bottom segment">
 | 
				
			||||||
 | 
					          <form class="ui form" action="{{.Link}}" method="post">
 | 
				
			||||||
 | 
					            {{.CsrfTokenHtml}}                            
 | 
				
			||||||
 | 
					            <div class="required field {{if .Err_Email}}error{{end}}">
 | 
				
			||||||
 | 
					              <label for="email">{{.i18n.Tr "settings.add_new_email"}}</label>
 | 
				
			||||||
 | 
					              <input id="email" name="email" type="email" autofocus required>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <button class="ui green button">
 | 
				
			||||||
 | 
					              {{.i18n.Tr "settings.add_email"}}
 | 
				
			||||||
 | 
					            </button>
 | 
				
			||||||
 | 
					          </form> 
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
{{template "ng/base/footer" .}}
 | 
					
 | 
				
			||||||
 | 
					<div class="ui small basic delete modal">
 | 
				
			||||||
 | 
					  <div class="ui icon header">
 | 
				
			||||||
 | 
					    <i class="trash icon"></i>
 | 
				
			||||||
 | 
					    {{.i18n.Tr "settings.email_deletion"}}
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					  <div class="content">
 | 
				
			||||||
 | 
					    <p>{{.i18n.Tr "settings.email_deletion_desc"}}</p>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					  {{template "base/delete_modal_actions" .}}
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					{{template "base/footer" .}}
 | 
				
			||||||
@@ -1,37 +1,36 @@
 | 
				
			|||||||
{{template "ng/base/head" .}}
 | 
					{{template "base/head" .}}
 | 
				
			||||||
{{template "ng/base/header" .}}
 | 
					<div class="user settings password">
 | 
				
			||||||
<div id="setting-wrapper" class="main-wrapper">
 | 
					  <div class="ui container">
 | 
				
			||||||
    <div id="user-profile-setting" class="container clear">
 | 
					    <div class="ui grid">
 | 
				
			||||||
        {{template "user/settings/nav" .}}
 | 
					      {{template "user/settings/navbar" .}}
 | 
				
			||||||
        <div class="grid-4-5 left">
 | 
					      <div class="twelve wide column content">
 | 
				
			||||||
            <div class="setting-content">
 | 
					        {{template "base/alert" .}}
 | 
				
			||||||
                {{template "ng/base/alert" .}}
 | 
					        <h4 class="ui top attached header">
 | 
				
			||||||
                <div id="setting-content">
 | 
					          {{.i18n.Tr "settings.change_password"}}
 | 
				
			||||||
                    <div id="user-profile-setting-content" class="panel panel-radius">
 | 
					        </h4>
 | 
				
			||||||
                        <p class="panel-header"><strong>{{.i18n.Tr "settings.change_password"}}</strong></p>
 | 
					        <div class="ui attached segment">
 | 
				
			||||||
                        <form class="form form-align panel-body" id="user-profile-form" action="{{AppSubUrl}}/user/settings/password" method="post">
 | 
					          <form class="ui form" action="{{.Link}}" method="post">
 | 
				
			||||||
                            {{.CsrfTokenHtml}}
 | 
					            {{.CsrfTokenHtml}}
 | 
				
			||||||
                            <p class="field">
 | 
					            <div class="required field {{if .Err_OldPassword}}error{{end}}">
 | 
				
			||||||
                                <label class="req" for="old-password">{{.i18n.Tr "settings.old_password"}}</label>
 | 
					              <label for="old_password">{{.i18n.Tr "settings.old_password"}}</label>
 | 
				
			||||||
                                <input class="ipt ipt-large ipt-radius {{if .Err_OldPassword}}ipt-error{{end}}" id="old-password" name="old_password" type="password" required />
 | 
					              <input id="old_password" name="old_password" type="password" autofocus required>
 | 
				
			||||||
                            </p>
 | 
					 | 
				
			||||||
                            <p class="field">
 | 
					 | 
				
			||||||
                                <label class="req" for="password">{{.i18n.Tr "settings.new_password"}}</label>
 | 
					 | 
				
			||||||
                                <input class="ipt ipt-large ipt-radius {{if .Err_Password}}ipt-error{{end}}" id="password" name="password" type="password" required />
 | 
					 | 
				
			||||||
                            </p>
 | 
					 | 
				
			||||||
                            <p class="field">
 | 
					 | 
				
			||||||
                                <label class="req" for="retype">{{.i18n.Tr "re_type"}}</label>
 | 
					 | 
				
			||||||
                                <input class="ipt ipt-large ipt-radius {{if .Err_Retype}}ipt-error{{end}}" id="retype" name="retype" type="password" required />
 | 
					 | 
				
			||||||
                            </p>
 | 
					 | 
				
			||||||
                            <p class="field">
 | 
					 | 
				
			||||||
                                <span class="form-label"></span>
 | 
					 | 
				
			||||||
                                <button class="btn btn-green btn-large btn-radius">{{.i18n.Tr "settings.change_password"}}</button>
 | 
					 | 
				
			||||||
                            </p>
 | 
					 | 
				
			||||||
                        </form>
 | 
					 | 
				
			||||||
                    </div>
 | 
					 | 
				
			||||||
                </div>
 | 
					 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
 | 
					            <div class="required field {{if .Err_Password}}error{{end}}">
 | 
				
			||||||
 | 
					              <label for="password">{{.i18n.Tr "settings.new_password"}}</label>
 | 
				
			||||||
 | 
					              <input id="password" name="password" type="password" required>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <div class="required field {{if .Err_Password}}error{{end}}">
 | 
				
			||||||
 | 
					              <label for="retype">{{.i18n.Tr "settings.retype_new_password"}}</label>
 | 
				
			||||||
 | 
					              <input id="retype" name="retype" type="password" required>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <div class="field">
 | 
				
			||||||
 | 
					               <button class="ui green button">{{$.i18n.Tr "settings.change_password"}}</button>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            </form>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
{{template "ng/base/footer" .}}
 | 
					{{template "base/footer" .}}
 | 
				
			||||||
@@ -37,12 +37,12 @@
 | 
				
			|||||||
              <input id="location" name="location"  value="{{.SignedUser.Location}}">
 | 
					              <input id="location" name="location"  value="{{.SignedUser.Location}}">
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
            <div class="required field {{if or DisableGravatar .SignedUser.UseCustomAvatar}}hide{{end}} {{if .Err_Gravatar}}error{{end}}">
 | 
					            <div class="required field {{if or DisableGravatar .SignedUser.UseCustomAvatar}}hide{{end}} {{if .Err_Gravatar}}error{{end}}">
 | 
				
			||||||
                <label for="gravatar">Gravatar {{.i18n.Tr "email"}}</label>
 | 
					              <label for="gravatar">Gravatar {{.i18n.Tr "email"}}</label>
 | 
				
			||||||
                <input id="gravatar" name="gravatar" value="{{.SignedUser.AvatarEmail}}" />
 | 
					              <input id="gravatar" name="gravatar" value="{{.SignedUser.AvatarEmail}}" />
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <div class="field">
 | 
					            <div class="field">
 | 
				
			||||||
               <button class="ui green button">{{$.i18n.Tr "settings.update_profile"}}</button>
 | 
					              <button class="ui green button">{{$.i18n.Tr "settings.update_profile"}}</button>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
          </form>
 | 
					          </form>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -58,12 +58,12 @@
 | 
				
			|||||||
              </div>
 | 
					              </div>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
            <div class="inline field">
 | 
					            <div class="inline field">
 | 
				
			||||||
                <label for="avatar">{{.i18n.Tr "settings.choose_new_avatar"}}</label>
 | 
					              <label for="avatar">{{.i18n.Tr "settings.choose_new_avatar"}}</label>
 | 
				
			||||||
                <input name="avatar" type="file" >
 | 
					              <input name="avatar" type="file" >
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <div class="field">
 | 
					            <div class="field">
 | 
				
			||||||
               <button class="ui green button">{{$.i18n.Tr "settings.update_avatar"}}</button>
 | 
					              <button class="ui green button">{{$.i18n.Tr "settings.update_avatar"}}</button>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
          </form>
 | 
					          </form>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user