From 82a7b0292e835d4b754baa0684fb941a87b9b4a1 Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Thu, 25 Jan 2018 14:03:22 +0000 Subject: [PATCH 01/25] [skip ci] Updated translations via Crowdin --- options/locale/locale_es-ES.ini | 164 ++++++++ options/locale/locale_fr-FR.ini | 14 + options/locale/locale_it-IT.ini | 225 +++++++++++ options/locale/locale_ja-JP.ini | 646 ++++++++++++++++++++++++++++++-- options/locale/locale_ko-KR.ini | 64 ++++ options/locale/locale_nl-NL.ini | 13 + options/locale/locale_tr-TR.ini | 564 ++++++++++++++++++++++++++++ options/locale/locale_zh-CN.ini | 18 +- options/locale/locale_zh-TW.ini | 48 +++ 9 files changed, 1717 insertions(+), 39 deletions(-) diff --git a/options/locale/locale_es-ES.ini b/options/locale/locale_es-ES.ini index 0cf6d0a22..e30d2b4cf 100644 --- a/options/locale/locale_es-ES.ini +++ b/options/locale/locale_es-ES.ini @@ -71,6 +71,7 @@ db_name=Nombre de la base de datos db_helper=Por favor, utiliza el motor INNODB con la codificación de caracteres utf8_general_ci para MySQL. ssl_mode=Modo SSL path=Ruta +sqlite_helper=Ruta del archivo a la base de datos SQLite3 o TiDB.
Utilice la ruta absoluta al iniciar como servicio. err_empty_db_path=La ruta a la base de datos SQLite3 o TiDB no puede estar vacía. err_invalid_tidb_name=El nombre de la base de datos TiDB no puede contener los caracteres "." ni "-". no_admin_and_disable_registration=No puede deshabilitar el registro sin crear una cuenta de administrador. @@ -82,14 +83,17 @@ app_name_helper=Usted puede poner su nombre de la organización aquí. repo_path=Ruta del repositorio de Raiz (Root) repo_path_helper=Todos los repositorios remotos de Git se guardarán en este directorio. lfs_path=Ruta raíz LFS +lfs_path_helper=Los archivos almacenados con Git LFS, se almacenarán en este directorio. Dejar vacío para deshabilitar LFS. run_user=Ejecutar como Usuario run_user_helper=El usuario necesita tener acceso a la Ruta Raíz del Repositorio y ejecutar Gitea. domain=Dominio domain_helper=Esto afecta a las URLs para clonar por SSH. ssh_port=Puerto SSH +ssh_port_helper=Número de puerto que está usando su servidor SSH. Dejar vacío para deshabilitar. http_port=Puerto HTTP http_port_helper=Puerto en el que escuchará la aplicación. app_url=URL de la aplicación +app_url_helper=Esto afecta al clon URL de HTTP/HTTPS y algunas notificaciones de correo electrónico. log_root_path=Ruta del registro log_root_path_helper=Directorio donde almacenar los registros. @@ -97,6 +101,7 @@ optional_title=Configuración opcional email_title=Configuración del servicio de correo smtp_host=Servidor SMTP smtp_from=Desde +smtp_from_helper=Remitente de email, RFC 5322. Puede ser solamente una dirección de correo electrónico, o estar en el formato "Nombre" . mailer_user=Usuario remitente mailer_password=Contraseña del Remitente register_confirm=Habilitar la Confirmación en el Registro @@ -111,6 +116,7 @@ federated_avatar_lookup_popup=Habilitar búsqueda de avatares federador para usa disable_registration=Desactivar Auto-Registro disable_registration_popup=Desactivar auto-registro del usuario, solo el administrador podrá crear cuentas nuevas. openid_signin_popup=Activar inicio de sesión vía OpenID +openid_signup_popup=Habilitar auto-registro basado en OpenID enable_captcha=Activar Captcha enable_captcha_popup=Requerir CAPTCHA para auto-registro de usuario. require_sign_in_view=Activar el Inicio de Sesión obligatorio para Ver Páginas @@ -133,7 +139,11 @@ install_success=¡Bienvenido! Gracias por elegir Gitea. Diviértete. Y, ¡cuidat invalid_log_root_path=La ruta para los registros es inválida: %v default_keep_email_private=Valor por defecto para guardar correo electrónico privado default_keep_email_private_popup=Este es el valor predeterminado para la visibilidad de la dirección de correo electrónico del usuario. Si establecido en true, la dirección de correo electrónico de todos los nuevos usuarios se ocultará hasta que el usuario cambia su configuración. +default_allow_create_organization=Valor de permiso predeterminado para que nuevos usuarios creen organizaciones +default_allow_create_organization_popup=Este es el valor del permiso predeterminado que se asignará a los nuevos usuarios. Si es establecido en "activado", los nuevos usuarios podrán crear Organizaciones. +default_enable_timetracking_popup=Los repositorios tendrán habilitado el seguimiento de tiempo por defecto, según esta configuración no_reply_address=Dirección de no respuesta +no_reply_address_helper=El dominio para la dirección de correo electrónico en los registros del git, si el usuario mantiene su dirección de correo electrónico en privado. Por ejemplo, el usuario 'Juan' y 'noreply.example.org' será 'joe@noreply.example.org' [home] uname_holder=Nombre de usuario o correo electrónico @@ -168,9 +178,12 @@ remember_me=Recuérdame forgot_password_title=He olvidado mi contraseña forgot_password=¿Has olvidado tu contraseña? sign_up_now=¿Necesitas una cuenta? Regístrate ahora. +confirmation_mail_sent_prompt=Un nuevo correo de confirmación se ha enviado a %s. Comprueba tu bandeja de entrada en las siguientes %s para completar el registro. +reset_password_mail_sent_prompt=Un correo de confirmación se ha enviado a %s. Comprueba tu bandeja de entrada en las siguientes %s para completar el reinicio de contraseña. active_your_account=Activa tu cuenta prohibit_login=Ingreso prohibido prohibit_login_desc=Su cuenta tiene prohibido ingresar al sistema, fovor contactar al administrador del sistema. +resent_limit_prompt=Estás solicitando el reenvío del email de activación con demasiada frecuencia. Espera 3 minutos. has_unconfirmed_mail=Hola %s, tu correo electrónico (%s) no está confirmado. Si no has recibido un correo de confirmación o necesitas que lo enviemos de nuevo, por favor, haz click en el siguiente botón. resend_mail=Haz click aquí para reenviar tu correo electrónico de activación email_not_associate=Esta dirección de correo electrónico no esta asociada a ninguna cuenta. @@ -179,13 +192,20 @@ reset_password=Restablecer su contraseña invalid_code=Lo sentimos, tu código de confirmación ha expirado o no es válido. reset_password_helper=Haga Clic aquí para restablecer su contraseña password_too_short=La longitud de la contraseña no puede ser menor a %d. +non_local_account=Las cuentas no locales no pueden cambiar las contraseñas a través de la interfaz web de Gitea. verify=Verificar +twofa_scratch_used=Ya has utilizado el código. Has sido redirigido a la página de configuración de dos factores poder remover la inscripción del dispositivo o generar un nuevo código. +twofa_passcode_incorrect=Su contraseña es incorrecta. Si extravió el dispositivo, use su código de cero para iniciar sesión. twofa_scratch_token_incorrect=El código cero es incorrecto. login_userpass=Usuario / contraseña login_openid=OpenID openid_connect_submit=Conectar openid_connect_title=Accede con una cuenta existente +openid_connect_desc=El sistema no reconoce los URI OpenID elegidos, puede anexarlo a una cuenta existente. openid_register_title=Crear una nueva cuenta +openid_register_desc=El sistema no conoce los OpenID URI elegidos, puede asociarlos a una nueva cuenta aquí. +openid_signin_desc=URIs de ejemplo: https://anne.me, bob.openid.org.cn, gnusocial.net/carry +disable_forgot_password_mail=Se ha desactivado el restablecimiento de contraseña. Contacte al administrador del sitio. [mail] activate_account=Por favor, active su cuenta @@ -220,6 +240,8 @@ TreeName=Ruta del archivo Content=Contenido require_error=` no puede estar vacío.` +alpha_dash_error=`deben ser caracteres alfanuméricos válidos o guiones (-_). ` +alpha_dash_dot_error=` deben ser caracteres válidos alfanuméricos, guiones (-_) o puntos. ` size_error=` debe ser de tamaño %s.` min_size_error=` debe contener al menos %s caracteres.` max_size_error=` debe contener como máximo %s caracteres.` @@ -241,6 +263,7 @@ username_password_incorrect=Nombre de usuario o contraseña incorrectos. enterred_invalid_repo_name=Por favor, asegúrate de que has introducido el nombre correctamente. enterred_invalid_owner_name=Por favor, asegúrate de que el nombre del propietario introducido es correcto. user_not_exist=Este usuario no existe. +last_org_owner=No está permitido quitar el último propietario del equipo, porque siempre debe haber al menos un propietario en una organización determinada. cannot_add_org_to_team=Organización no puede agregarse como un miembro del equipo. invalid_ssh_key=Lo sentimos, no hemos podido verificar tu clave SSH: %s @@ -336,10 +359,15 @@ add_email_success=Tu nuevo correo electrónico se ha añadido correctamente. add_openid_success=Su nueva dirección de OpenID se ha agregado correctamente. keep_email_private=Mantener la dirección de correo electrónico privada keep_email_private_popup=Si activa esta opción se ocultará su dirección de correo electrónico a otros usuarios. +openid_desc=Sus direcciones OpenID le permitirán delegar autenticación a su proveedor de elección manage_ssh_keys=Gestionar Claves SSH manage_gpg_keys=Administrar claves GPG add_key=Añadir Clave +ssh_desc=Estas son las claves SSH asociadas con su cuenta. Debido a que estas teclas permiten que cualquier persona que las utilice, acceder a los repositorios, es muy importante que se asegúrese que reconocerlas. +gpg_desc=Estas son las claves GPG asociadas con su cuenta. Debido a que estas teclas permiten que las colaboraciones sean verificadas, es muy importante que mantenga segura la clave privada correspondiente. +ssh_helper=¿Necesitas ayuda? Echa un vistazo en la guía de GitHub para crear tus propias claves SSH o resolver problemas comunes que puede encontrar al usar SSH. +gpg_helper=¿Necesitas ayuda? Echa un vistazo en la guía de GitHub sobre GPG. add_new_key=Añadir clave SSH add_new_gpg_key=Añadir clave GPG ssh_key_been_used=Ya se ha utilizado esta clave pública. @@ -356,6 +384,7 @@ delete_key=Eliminar ssh_key_deletion=Borrado de Clave SSH gpg_key_deletion=Eliminación de claves GPG ssh_key_deletion_desc=Al eliminar esta clave SSH, revocarás todo acceso utilizando esta clave SSH para tu cuenta. ¿Quieres continuar? +gpg_key_deletion_desc=Eliminar esta clave GPG des-verificará todas las colaboraciones firmadas con esta clave GPG. ¿Seguro que desea continuar? ssh_key_deletion_success=La clave SSH ha sido eliminada. gpg_key_deletion_success=La clave GPG ha sido eliminada. add_on=Añadido en @@ -363,12 +392,16 @@ valid_until=Válido hasta valid_forever=Válido para siempre last_used=Utilizado por última vez en no_activity=No hay actividad reciente +can_read_info=Leer +can_write_info=Escribir key_state_desc=Esta clave ha sido usada en los últimos 7 días token_state_desc=Este token ha sido utilizado en los últimos 7 días show_openid=Mostrar mi perfil hide_openid=Esconderse de perfil +ssh_disabled=SSH está desactivado manage_social=Gestionar Redes Sociales asociadas +social_desc=Esta es una lista cuentas sociales asociadas. Por razones de seguridad, asegúrese de que reconoce todas estas entradas, ya que puede ser utilizadas para iniciar sesión en su cuenta. unbind=Desvincular unbind_success=Cuenta social ha sido independiente desde su cuenta. @@ -378,17 +411,27 @@ tokens_desc=Tokens generados que pueden ser usados para acceder al API de Gitea. new_token_desc=Desde ahora, todos los tokens tendrán acceso completo a tu cuenta. token_name=Nombre del Token generate_token=Generar Token +generate_token_success=Su token de acceso fue generado con éxito. Asegúrese de copiarlo ahora, no será capaz de hacerlo más adelante. delete_token=Eliminar access_token_deletion=Borrado de Token de Acceso Personal +access_token_deletion_desc=Borrar este token de acceso personal, revocará el acceso de cualquier aplicación que use este token. ¿Desea continuar? +delete_token_success=El token de acceso personal ha sido eliminado. No olvide actualizar cualquier aplicación que use este token. +twofa_desc=Gitea admite la autenticación de dos factores para mejorar la seguridad de su cuenta. +twofa_is_enrolled=Su cuenta actualmente está registrada en la autenticación de dos factores. twofa_not_enrolled=Tu cuenta no está actualmente inscrita en la autenticación de doble factor. twofa_disable=Deshabilitar autenticación en dos pasos +twofa_scratch_token_regenerated=Tu token ha sido regenerado. Ahora es %s. Guárdelo en un lugar seguro. twofa_enroll=Habilitar autenticación en dos pasos twofa_disable_note=Si es necesario, puede deshabilitar la autenticación en dos pasos. +twofa_disable_desc=Deshabilitar la autenticación de dos factores hará que su cuenta sea menos segura. ¿Seguro que desea continuar? +regenerate_scratch_token_desc=Si extravió su token, o ya lo usó para iniciar sesión, puede restablecerlo aquí. twofa_disabled=La autenticación en dos pasos ha sido deshabilitada. scan_this_image=Analiza esta imagen con la aplicación de autenticación: or_enter_secret=O introduzca el secreto: %s +then_enter_passcode=Y use el código de acceso que la aplicación le dio: passcode_invalid=Esa contraseña no es válido. Vuelve a intentarlo. +twofa_enrolled=Su cuenta ha sido vinculada con autenticación de dos factores. Asegúrese de guardar su ficha de scratch (%s), ya que sólo aparecerá una vez. manage_account_links=Gestionar los vínculos de la cuenta manage_account_links_desc=Cuentas externas vinculadas a esta cuenta @@ -429,14 +472,20 @@ auto_init=Inicializar los archivos seleccionados y plantillas de este repositori create_repo=Crear repositorio default_branch=Rama por defecto mirror_prune=Purgar +mirror_prune_desc=Elimine cualquier referencia de seguimiento remota, que ya no exista +mirror_interval=Intervalo de copia de seguridad (unidades de tiempo válidas: "h", "m", "s") mirror_address=Dirección de la réplica mirror_address_desc=Por favor, incluya las credenciales de usuario necesarias en la dirección. mirror_last_synced=Última sincronización watchers=Seguidores stargazers=Fans forks=Forks +pick_reaction=Escoge tu reacción +reactions_more=y %d más form.reach_limit_of_creation=Ya han alcanzado su límite de repositorios de %d. +form.name_reserved=El nombre de repositorio '%s' está reservado. +form.name_pattern_not_allowed=El nombre del repositorio '%s' no está permitido. need_auth=Requiere autorización migrate_type=Tipo de migración @@ -448,9 +497,11 @@ migrate.clone_local_path=o ruta del servidor local migrate.permission_denied=No te está permitido importar repositorios locales. migrate.invalid_local_path=Rutal local inválida, no existe o no es un directorio. migrate.failed=Migración fallida: %v +migrate.lfs_mirror_unsupported=La duplicación de objetos LFS no es compatible; utilice 'git lfs fetch --all' y 'git lfs push  en su lugar. mirror_from=espejo de forked_from=forked de +fork_from_self=No puedes hacer "fork" a un repositorio que ya tienes. copy_link=Copiar copy_link_success=¡Copiado! copy_link_error=Presione ⌘ + C o Ctrl-C para copiar @@ -459,6 +510,7 @@ unwatch=Dejar de seguir watch=Seguir unstar=Eliminar destacado star=Destacar +fork=Cuchillo download_archive=Descargar este repositorio no_desc=Sin descripción @@ -485,11 +537,13 @@ file_view_raw=Ver original file_permalink=Enlace permanente file_too_large=Este archivo es demasiado grande para ser mostrado video_not_supported_in_browser=Tu navegador no soporta el tag video de HTML5. +stored_lfs=Almacenados con Git LFS editor.new_file=Nuevo archivo editor.upload_file=Subir archivo editor.edit_file=Editar archivo editor.preview_changes=Vista previa de los cambios +editor.cannot_edit_non_text_files=No se pueden editar archivos binarios desde la interfaz web editor.edit_this_file=Editar este archivo editor.must_be_on_a_branch=Debes estar en una rama para hacer o proponer cambios en este archivo editor.fork_before_edit=Debes hacer un fork de este repositorio antes de editar el archivo @@ -516,6 +570,7 @@ editor.directory_is_a_file=La entrada '%s' en el directorio padre es un archivo editor.file_is_a_symlink=El archivo '%s' es un enlace simbólico que no puede ser modificado desde el editor web editor.filename_is_a_directory=El nombre del fichero '%s' es un directorio existente en este repositorio. editor.file_editing_no_longer_exists=El archivo '%s' que estás editando ya no existe en este repositorio. +editor.file_changed_while_editing=Desde que comenzó a editar, el contenido del archivo ha sido cambiado. Clic aquí para ver qué ha cambiado o presione confirmar de nuevo para sobrescribir los cambios. editor.file_already_exists=Ya existe un archivo con nombre '%s' en este repositorio. editor.no_changes_to_show=No existen cambios para mostrar. editor.fail_to_update_file=Error al actualizar/crear el archivo '%s', error: %v @@ -534,6 +589,7 @@ commits.message=Mensaje commits.date=Fecha commits.older=Anterior commits.newer=Posterior +commits.signed_by=Firmado por commits.gpg_key_id=ID clave GPG @@ -555,12 +611,19 @@ issues.new_label=Nueva Etiqueta issues.new_label_placeholder=Nombre etiqueta... issues.create_label=Crear etiqueta issues.label_templates.title=Carga un conjunto predefinido de etiquetas +issues.label_templates.info=Todavía no hay ninguna etiqueta. Puede hacer clic en el botón "Nueva Etiqueta" debajo, para crear uno o utilizar un conjunto predefinido. issues.label_templates.helper=Seleccionar un conjunto de etiquetas issues.label_templates.use=Usar este conjunto de etiquetas issues.label_templates.fail_to_load_file=Error al cargar el archivo de plantilla de etiqueta '%s': %v +issues.add_label_at=añadida la etiqueta
%s
%s +issues.remove_label_at=eliminada la etiqueta
%s
%s +issues.add_milestone_at=`agregado esto al %s hito %s ' +issues.change_milestone_at=` modificó el hito de %s to %s %s` +issues.remove_milestone_at=`eliminado esto del %s hito %s ' issues.deleted_milestone=`(eliminado)` issues.self_assign_at=`auto asignado este %s` issues.add_assignee_at='fue asignado por %s %s' +issues.change_title_at=`título cambiado de %s a %s %s` issues.delete_branch_at=`rama eliminada %s %s` issues.open_tab=%d abiertas issues.close_tab=%d cerradas @@ -585,6 +648,7 @@ issues.filter_sort.leastcomment=Menos comentadas issues.action_open=Abrir issues.action_close=Cerrar issues.action_label=Etiqueta +issues.action_milestone=Hito issues.action_assignee=Asignado a issues.action_assignee_no_select=Sin asignado issues.opened_by=abierta %[1]s por %[3]s @@ -620,6 +684,8 @@ issues.label_edit=Editar issues.label_delete=Borrar issues.label_modify=Edición de Etiqueta issues.label_deletion=Borrado de Etiqueta +issues.label_deletion_desc=Eliminar esta etiqueta la eliminará de todos los problemas reportados. ¿Seguro que quiere continuar? +issues.label_deletion_success=La etiqueta ha sido eliminada exitosamente. issues.label.filter_sort.alphabetically=Alfabéticamente issues.label.filter_sort.by_size=Tamaño issues.label.filter_sort.reverse_by_size=Tamaño reversa @@ -628,6 +694,7 @@ issues.attachment.open_tab='Haga clic para ver "%s" en una pestaña nueva' issues.attachment.download=`Haga clic para descargar "%s"` issues.subscribe=Suscribir issues.unsubscribe=Desuscribirse +issues.tracking_already_started='Ya has comenzado el tiempo de seguimiento en este tema!' issues.add_time_hours=Horas issues.add_time_minutes=Minutos issues.cancel_tracking=Cancelar @@ -648,12 +715,15 @@ pulls.merged_title_desc=fusionados %[1]d commits de %[2]s en pulls.tab_conversation=Conversación pulls.tab_commits=Commits pulls.tab_files=Archivos modificados +pulls.reopen_to_merge=Vuelva a abrir la solicitud de "pull" para realizar una fusión. pulls.merged=Fusionado pulls.data_broken=Los datos de este pull request ya no están disponibles porque se ha eliminado la información del fork. pulls.is_checking=Se está procediendo a la búsqueda de conflictos, por favor actualice la página en unos momentos. pulls.can_auto_merge_desc=Este Pull Request puede ser fusionado automáticamente. +pulls.cannot_auto_merge_desc=Hay conflictos con esta solicitud de extracción, no se puede fusionar automáticamente. pulls.cannot_auto_merge_helper=Por favor, fusiona manualmente para resolver los conflictos. pulls.merge_pull_request=Fusionar Pull Request +pulls.open_unmerged_pull_exists=No puede realizar volver a abrir la operación porque ya hay una solicitud de extracción abierta (#%d) del mismo repositorio con, la misma información a la espera. milestones.new=Nuevo hito milestones.open_tab=%d abiertas @@ -671,10 +741,12 @@ milestones.clear=Limpiar milestones.invalid_due_date_format=El formato de la fecha límite no es válido, debe ser 'yyyy-mm-dd'. milestones.create_success=¡El milestone '%s' ha sido creado con éxito! milestones.edit=Editar Milestone +milestones.edit_subheader=Use una buena descripción para los hitos, para que las personas no se confundan. milestones.cancel=Cancelar milestones.modify=Modificar Milestone milestones.edit_success=¡Los cambios al milestone '%s' se han guardado con éxito! milestones.deletion=Borrar milestone +milestones.deletion_desc=Al eliminar este hito, lo eliminará de todos los problemas relacionados. ¿Quieres continuar? milestones.deletion_success=¡El milestone ha sido eliminado con éxito! milestones.filter_sort.most_complete=Más completa milestones.filter_sort.most_issues=Mayoría de los problemas @@ -683,16 +755,21 @@ milestones.filter_sort.least_issues=Menos problemas wiki=Wiki wiki.welcome=Bienvenidos a la wiki del proyecto +wiki.welcome_desc=Una wiki le permite a usted y sus colaboradores fácilmente documentar su proyecto. +wiki.desc=La wiki es un lugar para almacenar documentación wiki.create_first_page=Crear la primera página wiki.page=Página wiki.filter_page=Filtrar página wiki.new_page=Crear nueva página +wiki.default_commit_message=Escriba una nota acerca de la actualización de esta página (opcional). wiki.save_page=Guardar página wiki.last_commit_info=%s editó esta página %s wiki.edit_page_button=Editar wiki.new_page_button=Nueva página wiki.delete_page_button=Eliminar página +wiki.delete_page_notice_1=Esto eliminará la página "%s". Asegúrese de querer eliminar esta página. wiki.page_already_exists=Ya existe una página con el mismo nombre. +wiki.reserved_page=El nombre de la página wiki %s está reservado, seleccione un nombre diferente. wiki.pages=Páginas wiki.last_updated=Última actualización %s @@ -701,6 +778,9 @@ activity.period.halfweekly=3 días activity.period.weekly=1 semana activity.period.monthly=1 mes activity.overview=Resumen +activity.active_prs_count_1=%d Solicitud de extracción Activa +activity.active_prs_count_n=%d Solicitudes "pull" activas +activity.merged_prs_count_1=Solicitud de extracción combinada activity.closed_issues_count_1=Incidencia cerrada activity.closed_issues_count_n=Incidencias cerradas activity.title.issues_n=%d incidencias @@ -710,12 +790,14 @@ activity.closed_issue_label=Cerrada activity.new_issues_count_1=Nueva incidencia activity.new_issues_count_n=Nuevas incidencias activity.new_issue_label=Abierta +activity.unresolved_conv_desc=Lista de todos los problemas antiguos y solicitudes de extracción, que han cambiado recientemente pero que aún no se han resuelto. search=Buscar search.search_repo=Buscar repositorio search.results=Resultados de la búsqueda para "%s" en %s settings=Configuración +settings.desc=La configuración es donde puede administrar la configuración del repositorio settings.options=Opciones settings.collaboration=Colaboración settings.collaboration.admin=Administrador @@ -727,6 +809,7 @@ settings.githooks=Git Hooks settings.basic_settings=Configuración Básica settings.mirror_settings=Configuración de réplica settings.sync_mirror=Sincronizar ahora +settings.mirror_sync_in_progress=Sincronización de clone en progreso. Actualice la página en un minuto para revisar. settings.site=Sitio oficial settings.update_settings=Actualizar configuración settings.advanced_settings=Ajustes avanzados @@ -738,20 +821,27 @@ settings.external_wiki_url_desc=Los visitantes serán redireccionados a la URL c settings.issues_desc=Habilitar rastreo de incidencias settings.use_internal_issue_tracker=Usar rastreo de incidencias ligero incluido settings.use_external_issue_tracker=Usar tracker externo de incidencias +settings.external_tracker_url_error=La URL del "rastreador de problemas externos" no es válida settings.external_tracker_url_desc=Los visitantes serán redireccionados a la URL cuando hagan click en la pestaña. settings.tracker_url_format=Formato URL del tracker de incidencias externo settings.tracker_issue_style=Estilo de etiquetado del tracker externo de incidencias: settings.tracker_issue_style.numeric=Numérico settings.tracker_issue_style.alphanumeric=Alfanumérico settings.tracker_url_format_desc=Puedes usar las plantillas {user} {repo} {index} para el nombre de usuario, nombre del repositorio e índice de la incidencia. +settings.enable_timetracker=Habilitar rastreador de tiempo +settings.allow_only_contributors_to_track_time=Permitir que sólo los contribuyentes registren el tiempo settings.pulls_desc=Habilitar Pull Requests para aceptar contribuciones públicas settings.danger_zone=Zona de Peligro settings.new_owner_has_same_repo=El nuevo propietario tiene un repositorio con el mismo nombre. settings.convert=Convertir en un repositorio normal +settings.convert_desc=Puede convertir este clone a un depósito regular. No se puede deshacer. settings.convert_notices_1=- Esta operación convertirá este repositorio espejo en un repositorio normal y no podrá deshacerse. settings.convert_confirm=Confirmar conversión +settings.convert_succeed=El repositorio se ha convertido en un repositorio regular. settings.transfer=Transferir la propiedad settings.transfer_desc=Transferir este repositorio a otro usuario u organización donde tengas permisos de administración. +settings.transfer_notices_1=- Perderá el acceso si el nuevo propietario es un usuario individual. +settings.transfer_notices_2=- Conservará el privilegio de acceso si el nuevo propietario es una organización y usted es uno de los propietarios de dicha organización. settings.transfer_form_title=Por favor, introduce la siguiente información para confirmar la operación: settings.wiki_delete=Eliminar datos de la wiki settings.wiki_delete_desc=Una vez borrados los datos de la wiki no habrá vuelta atrás. Por favor, asegúrate de que es lo que quieres. @@ -760,9 +850,13 @@ settings.wiki_deletion_success=Los datos de la wiki del repositorio han sido bor settings.delete=Eliminar este repositorio settings.delete_desc=Una vez has eliminado un repositorio, no hay vuelta atrás. Por favor, asegúrate de que es lo que quieres. settings.delete_notices_1=- Esta operación NO PUEDE revertirse. +settings.delete_notices_2=- Esta operación borrará permanentemente todo en el repositorio de %s, incluidas asociaciones de código, problemas, comentarios, wiki y colaboradores. +settings.delete_notices_fork_1=- Todos los forks se convertirán en repositorios independientes después de la eliminación. settings.deletion_success=Repositorio se ha eliminado. +settings.update_settings_success=Las opciones del repositorio han sido actualizadas. settings.transfer_owner=Nuevo Propietario settings.make_transfer=Transferir +settings.transfer_succeed=La propiedad del repositorio ha sido transferida. settings.confirm_delete=Confirmar eliminación settings.add_collaborator=Añadir nuevo colaborador settings.add_collaborator_success=El nuevo colaborador ha sido añadido. @@ -774,10 +868,13 @@ settings.search_user_placeholder=Buscar usuario... settings.org_not_allowed_to_be_collaborator=Las organizaciones no tiene permitido ser añadidas como colaboradores. settings.user_is_org_member=El usuario es miembro de la organización, no puede ser añadido como colaborador. settings.add_webhook=Añadir Webhook +settings.hooks_desc=Los webhooks son muy similares a los desencadenantes básicos de eventos HTTP POST. Cuando ocurra algo en Gitea, enviaremos una notificación al host objetivo. Aprende más en el webhooks guide. settings.webhook_deletion=Eliminar Webhook +settings.webhook_deletion_desc=Eliminar este webhook eliminará su información y todo el historial de entrega. ¿Seguro que desea continuar? settings.webhook_deletion_success=¡Webhook eliminado con éxito! settings.webhook.test_delivery=Test de entrega settings.webhook.test_delivery_desc=Enviar un falso evento Push de entrega para probar tus ajustes de webhook +settings.webhook.test_delivery_success=Un Webhook de prueba se ha agregado a la cola de entrega. Puede tomar algunos segundos antes de aparecer en la historia de entrega. settings.webhook.request=Petición settings.webhook.response=Respuesta settings.webhook.headers=Encabezado @@ -787,6 +884,7 @@ settings.githook_edit_desc=Si el hook no está activo, se mostrará contenido de settings.githook_name=Nombre del Hook settings.githook_content=Contenido del Hook settings.update_githook=Actualizar Hook +settings.add_webhook_desc=Gitea enviará una solicitud POST a la URL que especifique, junto con información sobre el evento que ocurrió. También puede especificar qué formato de datos desea recibir al activar el enlace (JSON, x-www-form-urlencoded, XML, etc.). Encontrará más información en nuestra webhooks guide. settings.payload_url=URL de Payload settings.content_type=Tipo de contenido settings.secret=Secreto @@ -804,6 +902,7 @@ settings.event_create_desc=Rama o etiqueta creada settings.event_pull_request_desc=Pull request, abierta, cerrada, reabierta, editada, asignada, desasignada, con etiqueta actualizada, con etiqueta eliminada, o sincronizada. settings.event_push_desc=Git push a un repositorio settings.active=Activo +settings.active_helper=También se enviará información sobre el evento que activó el anclaje. settings.add_hook_success=Se ha añadido un nuevo webhook. settings.update_webhook=Actualizar Webhook settings.update_hook_success=Se ha actualizado el Webhook. @@ -814,6 +913,8 @@ settings.add_slack_hook_desc=Añade integración con Slack a tu settings.slack_token=Token settings.slack_domain=Dominio settings.slack_channel=Canal +settings.add_discord_hook_desc=Agregue la integración con Discord a su repositorio. +settings.add_dingtalk_hook_desc=Añadir integración Dingtalk a su repositorio. settings.deploy_keys=Claves de Despliegue settings.add_deploy_key=Añadir Clave de Despliegue settings.deploy_key_desc=La clave de desarrollo tiene sólo acceso de lectura. No es igual que las claves SSH de las cuentas personales. @@ -824,6 +925,12 @@ settings.key_been_used=Se ha usado la clave de despliegue. settings.key_name_used=Ya existe una clave de despliegue con el mismo nombre. settings.add_key_success=¡La nueva clave de desplieque '%s' ha sido creada con éxito! settings.deploy_key_deletion=Eliminar Clave de Despliegue +settings.deploy_key_deletion_desc=Eliminar esta clave evitará que este repositorio tenga acceso con él. ¿Desea continuar? +settings.deploy_key_deletion_success=Clave de implementación eliminada con éxito. +settings.protect_this_branch=Proteger esta rama +settings.protect_this_branch_desc=Desactiva "push" a la fuerza y evita la eliminación. +settings.protect_whitelist_committers=Lista blanca de quien puede publicar en esta rama +settings.protect_whitelist_committers_desc=Agregue usuarios o equipos a la lista blanca. Los usuarios de la lista blanca omiten restricciones de inserción típicas. settings.protect_whitelist_search_users=Buscar usuarios settings.protect_whitelist_teams=Equipos cuyos miembros pueden hacer push a esta rama. settings.protect_whitelist_search_teams=Buscar equipos @@ -858,6 +965,8 @@ release.stable=Estable release.edit=editar release.ahead=%d commits en %s desde esta release release.source_code=Código Fuente +release.new_subheader=Publique lanzamientos para hacer un seguimiento a las versiones de proyecto. +release.edit_subheader=Un registro de cambios detallado puede ayudar a los usuarios a comprender qué se ha cambiado. release.tag_name=Nombre de la etiqueta release.target=Destino release.tag_helper=Escoge una etiqueta existente o crea una nueva. @@ -942,6 +1051,7 @@ settings.delete_prompt=La organización será eliminada permanentemente. ¡Y todos los repositorios de esta organización. members.membership_visibility=Visibilidad de Membresía: members.public=Público @@ -961,7 +1071,9 @@ teams.leave=Abandonar teams.read_access=Acceso de Lectura teams.read_access_helper=Este equipo podrá ver y clonar sus repositorios. teams.write_access=Acceso de Escritura +teams.write_access_helper=Este grupo podrá leer e publicar a sus repositorios. teams.admin_access=Acceso de administrador +teams.admin_access_helper=Este equipo podrá hacer push/pull en sus repositorios, así como añadir otros colaboradores a ellos. teams.no_desc=Este equipo no tiene descripción teams.settings=Configuración teams.owners_permission_desc=Los propietarios tienen acceso completo a todos los repositorios y tienen derechos de administración en la organización. @@ -970,6 +1082,7 @@ teams.update_settings=Actualizar configuración teams.delete_team=Eliminar este equipo teams.add_team_member=Añadir miembro al equipo teams.delete_team_title=Eliminar equipo +teams.delete_team_desc=Ya que se eliminará este equipo, los miembros de este pueden perder acceso a algunos repositorios. ¿Desea continuar? teams.delete_team_success=El equipo ha sido eliminado. teams.read_permission_desc=Este equipo tiene permisos de Lectura: sus miembros pueden ver y clonar los repositorios del equipo. teams.write_permission_desc=Este equipo tiene permisos de Escritura: sus miembros pueden leer y hacer push a los repositorios del equipo. @@ -999,8 +1112,22 @@ dashboard.statistic_info=La base de datos de Gitea contiene %d usuarios, dashboard.operation_name=Nombre de la operación dashboard.operation_switch=Interruptor dashboard.operation_run=Ejecutar +dashboard.clean_unbind_oauth_success=Se han eliminado las conexiones de OAuth no vinculadas. dashboard.delete_inactivate_accounts=Eliminar todas las cuentas inactivas +dashboard.delete_inactivate_accounts_success=Todas las cuentas inactivas han sido eliminadas. dashboard.delete_repo_archives=Eliminar todos los archivos de repositorios +dashboard.delete_repo_archives_success=Todos los archivos de repositorios han sido eliminados. +dashboard.delete_missing_repos=Eliminar todos los registros de repositorio que le faltan sus archivos Git +dashboard.delete_missing_repos_success=Se han eliminado todos los registros de repositorio que faltan los archivos de Git. +dashboard.git_gc_repos=Llevar acabo recolección de basura en todos los repositorios +dashboard.git_gc_repos_success=Todos los repositorios han terminado de ejecutar la recolección de basura. +dashboard.resync_all_sshkeys=Escriba de nuevo el archivo '.ssh/authorized_keys' (para las teclas de Gitea SSH). No es necesario hacer esto si está utilizando el servidor SSH incorporado. +dashboard.resync_all_sshkeys_success=Todas las claves públicas controladas por Gitea han sido reescritas. +dashboard.resync_all_hooks=Resincronice los anclajes de pre-recepción, actualización y post-recepción de todos los repositorios. +dashboard.resync_all_hooks_success=Se han vuelto a sincronizar todos los "hooks" de pre-recepción, actualización y post-recepción de los repositorios. +dashboard.reinit_missing_repos=Reiniciar todos los repositorios Git faltantes de los que existen registros +dashboard.reinit_missing_repos_success=Todos los repositorios Git faltantes para los que existen registros se han reinicializado. +dashboard.sync_external_users_started=Sincronización externa del usuario iniciada dashboard.server_uptime=Tiempo de actividad del servidor dashboard.current_goroutine=Gorutinas actuales dashboard.current_memory_usage=Uso de memoria actual @@ -1040,10 +1167,12 @@ users.created=Creado users.last_login=Último inicio de sesión users.never_login=Nunca inició sesión users.send_register_notify=Enviar notificación de registro al usuario +users.new_success=La cuenta '%s' ha sido creada. users.edit=Editar users.auth_source=Fuente de Autenticación users.auth_login_name=Nombre de Inicio de sesión de autenticación users.password_helper=Deje el campo vacío si no desea cambiar la contraseña. +users.update_profile_success=Perfil de cuenta actualizado. users.edit_account=Editar Cuenta users.max_repo_creation=Límite máximo de repositorios users.max_repo_creation_desc=(Configura a -1 para usar el límite global por defecto) @@ -1051,10 +1180,13 @@ users.is_admin=Esta cuenta tiene permisos de administrador users.allow_import_local=Esta cuenta dispone de permisos para importar repositorios locales users.update_profile=Actualizar Perfil de la Cuenta users.delete_account=Eliminar esta Cuenta +users.still_own_repo=Este usuario todavía posee uno o más repositorios. Estos repositorios que deben ser eliminados o trasladados primero. +users.still_has_org=Este usuario todavía es miembro de una o más organizaciones. Este usuario necesita abandonar o eliminarlas primero. orgs.name=Nombre orgs.teams=Equipos orgs.members=Miembros +orgs.new_orga=Crear organización repos.owner=Propietario repos.name=Nombre @@ -1074,6 +1206,7 @@ auths.security_protocol=Protocolo de seguridad auths.domain=Dominio auths.port=Puerto auths.bind_password=Contraseña Bind +auths.bind_password_helper=Advertencia: Esta contraseña se almacena en texto sin formato. Se recomienda usar una cuenta de solo lectura. auths.user_base=Base de búsqueda de usuarios auths.user_dn=DN de Usuario auths.attribute_username=Atributo de nombre de usuario @@ -1087,13 +1220,29 @@ auths.admin_filter=Filtro de aministrador auths.smtp_auth=Tipo de autenticación SMTP auths.smtpport=Puerto SMTP auths.allowed_domains=Dominios Permitidos +auths.allowed_domains_helper=Dejar vacío para permitir todos los dominios. Múltiples dominios deben estar separados por una coma ','. auths.enable_tls=Habilitar cifrado TLS auths.skip_tls_verify=Omitir la verificación TLS auths.pam_service_name=Nombre del Servicio PAM +auths.oauth2_use_custom_url=Utilizar URLs personalizadas en vez de direcciones URL por defecto auths.enable_auto_register=Hablilitar Auto-Registro auths.tips=Consejos +auths.tips.oauth2.general.tip=Al registrar una nueva autenticación vía OAuth2, la URL de devolución/redirección debe ser: /user/oauth2//callback +auths.tip.bitbucket=Registrar un nuevo usuario de OAuth en https://bitbucket.org/account/user//oauth-consumers/new y agregar el permiso "Cuenta"-"Lectura +auths.tip.dropbox=Crear nueva aplicación en https://www.dropbox.com/developers/apps +auths.tip.facebook=Registre una nueva aplicación en https://developers.facebook.com/apps y agregue el producto "Facebook Login +auths.tip.github=Registre una nueva aplicación OAuth en https://github.com/settings/applications/new +auths.tip.gitlab=Registrar nueva solicitud en https://gitlab.com/profile/applications +auths.tip.google_plus=Obtenga las credenciales del cliente de OAuth2 desde la consola API de Google (https://console.developers.google.com/) +auths.tip.openid_connect=Use el OpenID Connect Discovery URL (/.well-known/openid-configuration) para especificar los puntos finales +auths.tip.twitter=Ir a https://dev.twitter.com/apps, crear una aplicación y asegurarse de que está activada la opción "Permitir que esta aplicación sea usada para iniciar sesión con Twitter". auths.activated=Esta autenticación ha sido activada +auths.new_success=Se agregó la autenticación '%s'. +auths.update_success=Configuración de autenticación actualizada. +auths.delete_auth_desc=Esta fuente de autenticación se eliminará. ¿Seguro de que quiere continuar? +auths.still_in_used=Esta fuente de autenticación todavía es utilizada por uno o más usuarios, por favor eliminarlos o convertirlos primero a otra fuente de inicio de sesión. auths.deletion_success=¡La autenticación ha sido eliminada con éxito! +auths.login_source_exist=Fuente de inicio de sesión '%s' ya existe. config.server_config=Configuración del servidor config.app_name=Nombre de la Aplicación @@ -1140,6 +1289,8 @@ config.mail_notify=Notificación por Correo Electrónico config.disable_key_size_check=Deshabilitar la comprobación de Tamaño Mínimo de Clave config.enable_captcha=Activar Captcha config.active_code_lives=Habilitar Vida del Código +config.default_allow_create_organization=Permiso predeterminado para crear organizaciones +config.default_allow_only_contributors_to_track_time=Permitir que sólo los contribuyentes rastreen el tiempo de forma predeterminada config.webhook_config=Configuración de Webhooks config.queue_length=Tamaño de Cola de Envío @@ -1151,6 +1302,7 @@ config.mailer_disable_helo=Desactivar HELO config.mailer_name=Nombre config.mailer_user=Usuario config.send_test_mail=Enviar email de prueba +config.test_mail_failed=Error al enviar correo electrónico de prueba a '%s': %v config.test_mail_sent=El email de prueba ha sido enviado a '%s'. config.oauth_config=Configuración OAuth @@ -1203,6 +1355,7 @@ monitor.start=Hora de Inicio monitor.execute_time=Tiempo de ejecución notices.system_notice_list=Notificaciones del Sistema +notices.view_detail_header=Ver detalles de notificación notices.actions=Acciones notices.select_all=Sleccionar todo notices.deselect_all=Deseleccionar todo @@ -1212,6 +1365,7 @@ notices.delete_all=Eliminar todas las notificaciones notices.type=Tipo notices.type_1=Repositorio notices.desc=Descripción +notices.delete_success=Los avisos del sistema se han eliminado. [action] create_repo=creó el repositorio %s @@ -1227,6 +1381,8 @@ comment_issue=`comentó en la incidencia %s#%[2]s` merge_pull_request=`fusionado pull request %s#%[2]s` transfer_repo=transfirió el repositorio %s a %s push_tag=hizo push del tag %[2]s a %[3]s +delete_tag=etiqueta eliminada %[2]s de %[3]s +delete_branch=rama %[2]s eliminada, de %[3]s [tool] ago=hace %s @@ -1251,15 +1407,23 @@ raw_minutes=minutos [dropzone] invalid_input_type=No está permitido cargar archivos de este tipo. +file_too_big=El tamaño del archivo ({{filesize}} MB) excede el tamaño máximo de ({{maxFilesize}} MB). remove_file=Eliminar archivo [notification] unread=Sin leer read=Leídas +no_unread=No tiene ninguna notificación sin leer. +no_read=No tiene ninguna notificación de lectura. mark_as_read=Marcar como leído mark_as_unread=Marcar como no leído [gpg] +error.no_committer_account=Ninguna cuenta está vinculada al correo electrónico del colaborador +error.no_gpg_keys_found=No se encontró ninguna clave conocida en la base de datos para esta firma +error.failed_retrieval_gpg_keys=Error al recuperar clave asociada a la cuenta de colaborador [units] +error.no_unit_allowed_repo=No se puede encontrar ninguna unidad en este repositorio a la que se le permita acceder +error.unit_not_allowed=No tiene permitido visitar esta unidad de repositorio diff --git a/options/locale/locale_fr-FR.ini b/options/locale/locale_fr-FR.ini index c2714aee3..488cd3989 100644 --- a/options/locale/locale_fr-FR.ini +++ b/options/locale/locale_fr-FR.ini @@ -63,6 +63,7 @@ cancel=Annuler install=Installation title=Configuration initiale docker_helper=Si vous exécutez Gitea grâce à Docker, merci de lire la procédure attentivement avant de modifier quoi que ce soit sur cette page. +requite_db_desc=Gitea requiert MySQL, MSSQL, PostgreSQL, SQLite3 ou TiDB. db_title=Paramètres de la base de données db_type=Type de base de données host=Hôte @@ -269,6 +270,7 @@ openid_been_used=Adresse OpenID '%s' déjà utilisée. username_password_incorrect=Nom d'utilisateur ou mot de passe incorrect. enterred_invalid_repo_name=Veuillez vérifier que le nom saisi du dépôt soit correct. enterred_invalid_owner_name=Veuillez vérifier que le nom du propriétaire saisi soit correct. +enterred_invalid_password=Veuillez vérifier que le mot de passe saisi soit correct. user_not_exist=Cet utilisateur n'existe pas. last_org_owner=L'utilisateur à exclure est le dernier membre de l'équipe propriétaire. Il doit y avoir un autre propriétaire. cannot_add_org_to_team=Une organisation ne peut être ajoutée comme membre d'une équipe. @@ -399,6 +401,8 @@ valid_until=Valide jusqu’à valid_forever=Valide pour toujours last_used=Dernière utilisation le no_activity=Aucune activité récente +can_read_info=Lecture +can_write_info=Écriture key_state_desc=Cette clé a été utilisée durant les 7 derniers jours token_state_desc=Ce jeton a été utilisé durant les 7 derniers jours show_openid=Afficher sur mon profil @@ -753,7 +757,12 @@ pulls.is_checking=La recherche de conflits est toujours en cours, veuillez rafra pulls.can_auto_merge_desc=Cette demande d'ajout peut être fusionnée automatiquement. pulls.cannot_auto_merge_desc=Cette demande d'ajout ne peut pas être fusionnée automatiquement à cause de conflits. pulls.cannot_auto_merge_helper=Fusionner manuellement afin de résoudre les conflits. +pulls.no_merge_desc=Cette pull request ne peut pas être fusionnée car aucune option de fusion n'est activée. +pulls.no_merge_helper=Pour fusionner cette pull request, activez au moins une option de fusion dans les paramètres du dépôt ou fusionnez la pull request manuellement. pulls.merge_pull_request=Fusionner la demande d'ajout +pulls.rebase_merge_pull_request=Rebase et fusionner +pulls.squash_merge_pull_request=Squash et fusionner +pulls.invalid_merge_option=Vous ne pouvez pas utiliser cette option de fusion pour cette pull request pulls.open_unmerged_pull_exists=`Vous ne pouvez effectuer une réouverture car il y a une demande d'ajout ouverte (#%d) depuis le même dépôt avec les mêmes informations de fusion et qui est en attente de fusion.` milestones.new=Nouveau jalon @@ -892,6 +901,8 @@ settings.tracker_url_format_desc=Vous pouvez utiliser l'espace réservé { settings.enable_timetracker=Activer le traqueur de temps settings.allow_only_contributors_to_track_time=N'autoriser que les contributeurs à suivre le temps settings.pulls_desc=Activer les pull requests pour accepter les contributions publiques +settings.pulls.allow_merge_commits=Autoriser les commits de fusion +settings.pulls.allow_rebase_merge=Autoriser le rebase pour les commits de fusion settings.danger_zone=Zone de danger settings.new_owner_has_same_repo=Le nouveau propriétaire a déjà un dépôt nommé ainsi. settings.convert=Convertir en dépôt ordinaire @@ -984,6 +995,8 @@ settings.add_dingtalk_hook_desc=Intégrer Dingtalk à votre dé settings.deploy_keys=Clés de déploiement settings.add_deploy_key=Ajouter une clé de déploiement settings.deploy_key_desc=Les clés de déploiement ont un accès en lecture seule. Elles sont différentes des clés SSH personnelles. +settings.is_writable=Autoriser l'accès en écriture +settings.is_writable_info=Cette clé peut-elle être utilisée pour push vers ce dépôt ? Les clés de déploiement ont toujours un accès de pull. settings.no_deploy_keys=Vous n'avez ajouté aucune clé de déploiement. settings.title=Titre settings.deploy_key_content=Contenu @@ -1308,6 +1321,7 @@ auths.attribute_mail=Attribut de l'e-mail auths.attributes_in_bind=Aller chercher les attributs dans le contexte de liaison DN auths.filter=Filtre utilisateur auths.admin_filter=Filtre administrateur +auths.ms_ad_sa=Rechercher les attributs MS AD auths.smtp_auth=Type d'authentification SMTP auths.smtphost=Hôte SMTP auths.smtpport=Port SMTP diff --git a/options/locale/locale_it-IT.ini b/options/locale/locale_it-IT.ini index 6bde4ecf8..a41bbd64c 100644 --- a/options/locale/locale_it-IT.ini +++ b/options/locale/locale_it-IT.ini @@ -1,11 +1,15 @@ app_desc=Un servizio Git auto-ospitato pronto all'uso +home=Home dashboard=Pannello di controllo explore=Esplora help=Aiuto sign_in=Accedi +sign_in_with=Accedi con sign_out=Esci sign_up=Registrati +link_account=Collega account +link_account_signin_or_signup=Effettua il login con le credenziali esistenti per collegare il tuo account esistente con questo; oppure crea un nuovo account register=Registrati website=Sito Web version=Versione @@ -16,6 +20,7 @@ notifications=Notifiche create_new=Crea... user_profile_and_more=Profilo utente e altro signed_in_as=Accesso effettuato come +enable_javascript=Questo sito funziona meglio con JavaScript username=Nome utente email=E-mail @@ -32,14 +37,21 @@ mirror=Mirror new_repo=Nuovo Repository new_migrate=Nuova Migrazione new_mirror=Nuovo Mirror +new_fork=Nuovo Fork new_org=Nuova organizzazione manage_org=Gestisci le organizzazioni admin_panel=Pannello di amministrazione account_settings=Impostazioni dell'account settings=Impostazioni your_profile=Il tuo profilo +your_starred=Stellate your_settings=Impostazioni +all=Tutti +sources=Sorgenti +mirrors=Mirror +collaborative=Condivisi +forks=Fork activities=Attivitá pull_requests=Pull Request @@ -49,21 +61,29 @@ cancel=Annulla [install] install=Installazione +title=Configurazione iniziale +docker_helper=Se stai utilizzando Gitea su Docker, per favore leggi le linee guida con attenzione prima di cambiare qualcosa su questa pagina. +requite_db_desc=Gitea richiede MySQL, PostgreSQL, SQLite3 o TiDB. db_title=Impostazioni Database db_type=Tipo di database host=Host user=Utente password=Password db_name=Nome del database +db_helper=Utilizza il motore INNODB con codifica utf8_general_ci per MySQL. ssl_mode=Modalità SSL path=Percorso +sqlite_helper=Il percorso assoluto al database SQLite3 o TiDB.
Per favore usa il percorso assoluto quando usi Gitea come servizio. err_empty_db_path=Il percorso file del database SQLite3 o TiDB non può essere vuoto. err_invalid_tidb_name=Il nome del database TiDB non ammette caratteri "." e "-". no_admin_and_disable_registration=Non puoi disabilitare la registrazione senza aver creato un amministratore. err_empty_admin_password=La password dell'amministratore non puo' essere vuota. +general_title=Impostazioni Generali app_name=Nome Applicazione +app_name_helper=Puoi inserire qui il nome della tua organizzazione. repo_path=Percorso Root del Repository +repo_path_helper=Tutti i repository Git remoti saranno salvati in questa directory. lfs_path=Percorso file LFS lfs_path_helper=I file aggiunti con Git LFS verranno salvati in questa cartella. Lascia vuoto per disabilitare LFS. run_user=Esegui con l'utente @@ -71,9 +91,11 @@ run_user_helper=L'utente deve avere accesso al percorso root del repository e av domain=Dominio domain_helper=Questo influisce sugli URL per il clonaggio via SSH. ssh_port=Porta SSH +ssh_port_helper=Numero di porta utilizzato dal server SSH esistente. Lascia vuoto per disabilitare l'integrazione con SSH. http_port=Porta HTTP http_port_helper=Porta di ascolto dell'applicazione. app_url=URL Applicazione +app_url_helper=Questo influisce sugli URL per il clonaggio tramite HTTP/HTTPS e alcune notifiche email. log_root_path=Percorso dei log log_root_path_helper=Directory in cui scrivere i file di log. @@ -81,20 +103,29 @@ optional_title=Impostazioni Facoltative email_title=Impostazioni E-mail smtp_host=Host SMTP smtp_from=Da +smtp_from_helper=Mail da indirizzo, RFC 5322. Può essere un singolo indirizzo email oppure il formato "Nome" . +mailer_user=Mittente mailer_password=Password del Mittente register_confirm=Abilita Conferma di Registrazione +mail_notify=Abilita Notifiche Tramite Email server_service_title=Impostazioni del Server e Altri Servizi offline_mode=Abilita Modalità Offline +offline_mode_popup=Disabilitare CDN in modo che tutti i file di risorse siano serviti localmente. disable_gravatar=Disattiva il servizio Gravatar disable_gravatar_popup=Disabilita Gravatar e sorgenti customizzate, tutti gli avatar vengono caricati dagli utenti o come predefinito. federated_avatar_lookup=Abilita Ricerca di Federated Avatar federated_avatar_lookup_popup=Enable federated avatars lookup to use federated open source service based on libravatar. disable_registration=Disabilita Registrazione Manuale disable_registration_popup=Disabilita la registrazione manuale degli utenti, solo gli amministratori possono creare account. +openid_signin=Attiva l'accesso OpenID +openid_signin_popup=Abilitare il login utente tramite OpenID +openid_signup=Abilitare la registrazione automatica OpenID +openid_signup_popup=Abilita la registrazione automatica basata su OpenID enable_captcha=Abilita Captcha enable_captcha_popup=Richiedi convalida captcha per i nuovi utenti. require_sign_in_view=Abilita Richiesta di Accesso per Vedere le Pagine require_sign_in_view_popup=Solo gli utenti loggati possono vedere le pagine, i visitatori potranno vedere solo le pagine di accesso e registrazione. +admin_setting_desc=Non è necessario creare un account admin in questo momento. Il primo utente che si registra sul sito guadagnerà automaticamente l'accesso a livello amministratore. admin_title=Impostazioni Account Amministratore admin_name=Nome utente admin_password=Password @@ -102,44 +133,92 @@ confirm_password=Conferma Password admin_email=E-mail dell'Admin install_btn_confirm=Installare Gitea test_git_failed=Fallito il test del comando git: %v +sqlite3_not_available=La tua attuale versione non supporta SQLite3, si prega di scaricare la versione eseguibile ufficiale da %s, NON la versione gobuild. +invalid_db_setting=Configurazione del database non valida: %v invalid_repo_path=Percorso root del repository invalido: %v +run_user_not_match=Esegui utente non è l'utente corrente: %s -> %s +save_config_failed=Salvataggio della configurazione non riuscito: %v invalid_admin_setting=Impostazioni account Admin non valide: %v +install_success=Benvenuto! Grazie per aver scelto Gitea. Divertiti e abbi cura di te! invalid_log_root_path=Percorso dei log invalido: %v +default_keep_email_private=Valore predefinito per mantenere Privata Email +default_keep_email_private_popup=Questo è il valore di default per la visibilità dell'indirizzo email dell'utente. Se impostato a vero l'indirizzo email di tutti i nuovi utenti sarà nascosto fino a quando l'utente non cambierà le sue impostazioni. +default_allow_create_organization=Valore di autorizzazione predefinito per i nuovi utenti per creare organizzazioni +default_allow_create_organization_popup=Questo è il valore di default del permesso che sarà assegnato ad ogni nuovo utente. Se impostato su vero ai nuovi utenti sarà permesso creare Organizzazioni. +default_enable_timetracking_popup=I repository avranno il monitoraggio del tempo abilitato per impostazione predefinita in base a queta configurazione +no_reply_address=Indirizzo di non riposta +no_reply_address_helper=Dominio per indirizzo di posta elettronica dell'utente nei registri di git se egli mantiene il suo indirizzo email privato. Ad esempio, l'utente 'joe' e 'noreply.example.org' sarà 'joe@noreply.example.org' [home] uname_holder=Nome Utente o E-mail +password_holder=Password switch_dashboard_context=Cambia Dashboard Context my_repos=I miei Repository +show_more_repos=Mostra altri repository... collaborative_repos=Repository Condivisi my_orgs=Le mie Organizzazioni my_mirrors=I miei Mirror view_home=Vedi %s +search_repos=Trova un repository ... issues.in_your_repos=Nei tuoi repository [explore] repos=Repository users=Utenti +organizations=Organizzazioni search=Cerca +repo_no_results=Non sono stati trovati repository corrispondenti. +user_no_results=Non sono stati trovati utenti corrispondenti. +org_no_results=Non sono state trovate organizzazioni corrispondenti. [auth] +create_new_account=Crea Account register_helper_msg=Hai già un account? Accedi ora! +social_register_helper_msg=Hai già una conta? Iscriviti ora! disable_register_prompt=Siamo spiacenti, registrazione è stata disabilitata. Si prega di contattare l'amministratore del sito. disable_register_mail=Siamo spiacenti, la conferma di registrazione via Mail è stata disattivata. remember_me=Ricordami +forgot_password_title=Password Dimenticata +forgot_password=Password dimenticata? sign_up_now=Bisogno di un account? Iscriviti ora. +confirmation_mail_sent_prompt=Una nuova email di conferma è stata inviata a %s. Per favore controlla la tua posta in arrivo nelle prossime %s per completare il processo di registrazione. +reset_password_mail_sent_prompt=Una email di conferma è stata inviata a %s. Per favore controlla la tua posta in arrivo nelle prossime %s per completare il processo di reset della password. active_your_account=Attiva il tuo Account prohibit_login=Accesso Vietato +prohibit_login_desc=Il tuo account è impossibilitato al login, contatta l'amministratore del sito. +resent_limit_prompt=Siamo spiacenti, hai già richiesto un'e-mail di attivazione recentemente. Si prega di attendere 3 minuti, quindi riprovare. has_unconfirmed_mail=Ciao %s, hai un indirizzo di posta elettronica non confermato (%s). Se non hai ricevuto una e-mail di conferma o vuoi riceverla nuovamente, fare clic sul pulsante qui sotto. resend_mail=Clicca qui per inviare nuovamente l'e-mail di attivazione +email_not_associate=L'indirizzo email non è associato ad alcuna conta. +send_reset_mail=Clicca qui per inviare nuovamente la tua email di reimpostazione della password reset_password=Reimposta la tua Password +invalid_code=Siamo spiacenti, il tuo codice di conferma è scaduto o non è valido. reset_password_helper=Clicca qui per reimpostare la password password_too_short=La lunghezza della password non può essere meno %d caratteri. +non_local_account=La conta non locali non possono cambiare la password attraverso l'interfaccia web di Gitea. +verify=Verifica +scratch_code=Codice Gratta e Vinci +use_scratch_code=Utilizza un codice di zero +twofa_scratch_used=Hai usato il tuo codice zero. Sei stato reindirizzato alla pagina di configurazione a due fattori quindi puoi rimuovere la registrazione dal dispositivo o generare un nuovo codice zero. +twofa_passcode_incorrect=Il codice di accesso non è corretto. Se smarrito il tuo dispositivo, utilizzare il codice gratta e Vinci per effettuare il login. +twofa_scratch_token_incorrect=I tuo codice scratch non è corretto. +login_userpass=Utente / Password +login_openid=OpenID +openid_connect_submit=Connetti +openid_connect_title=Connetti a una conta esistente +openid_connect_desc=Il sistema non conosce gli URI OpenID scelti, è possibile aggiungerlo a una conta esistente. +openid_register_title=Crea Nuovo Account +openid_register_desc=Il sistema non conosce gli URI OpenID scelti, è possibile associarli a una nuova conta. +openid_signin_desc=Esempio di URIs: https://anne.me, bob.openid.org.cn, gnusocial.net/carry +disable_forgot_password_mail=Siamo spiacenti, la reimpostazione della password è stata disabilitata. Si prega di contattare l'amministratore del sito. [mail] activate_account=Per favore attiva il tuo account activate_email=Verifica il tuo indirizzo e-mail reset_password=Reimposta la tua password +register_success=Registrazione completata con successo +register_notify=Benvenuto su Gitea [modal] yes=Sì @@ -167,6 +246,9 @@ TreeName=Percorso del file Content=Contenuto require_error=` non può essere vuoto.` +alpha_dash_error=` ammessi solo caratteri alfanumerici o trattini(-_).` +alpha_dash_dot_error=` ammessi solo caratteri alfanumerici, trattini(-_) o punti.` +git_ref_name_error=`deve essere ben formato come nome di riferimento.` size_error='deve essere %s.' min_size_error=` deve contenere almeno %s caratteri.` max_size_error=` deve contenere massimo %s caratteri.` @@ -174,10 +256,32 @@ email_error=` non è un indirizzo e-mail valido.` url_error=` non è un URL valido.` include_error=` deve contenere la stringa '%s'.` unknown_error=Errore sconosciuto: +captcha_incorrect=Il Captcha non corrisponde. +password_not_match=Le password inserite non corrispondono. +username_been_taken=Nome utente già in uso. +repo_name_been_taken=Nome del repository già in uso. +org_name_been_taken=Nome dell'organizzazione già in uso. +team_name_been_taken=Il nome del Team è già utilizzato. +team_no_units_error=La squadra deve avere almeno un'unità abilitata. +email_been_used=Email già in uso. +openid_been_used=Indirizzo OpenID '%s' già utilizzato. +username_password_incorrect=Nome utente o password errati. +enterred_invalid_repo_name=Si prega di assicurarsi che il nome del repository inserito sia corretto. +enterred_invalid_owner_name=Si prega di assicurarsi che il nome del proprietario inserito sia corretto. +enterred_invalid_password=Assicurati che la password che hai inserito sia corretta. +user_not_exist=L'utente non esiste. +last_org_owner=La rimozione dell'ultimo utente rimasto dai proprietari del team non è permesso perché deve esserci sempre almeno un proprietario in ogni organizzazione. +cannot_add_org_to_team=L'Organizzazione non può essere aggiunta come membro del team. +invalid_ssh_key=Siamo spiacenti, non siamo stati in grado di verificare la tua chiave SSH: %s +invalid_gpg_key=Siamo spiacenti, non siamo stati in grado di verificare la tua chiave GPG: %s +unable_verify_ssh_key=La chiave ssh non può essere verificata; per favore controlla di nuovo se c'è un errore. auth_failed=Autenticazione non riuscita: %v +still_own_repo=Il tuo account possiede ancora almeno un repository, dovete prima cancellarli o trasferirne la proprietà. +still_has_org=La tua conta è ancora membro di almeno un'organizzazione; devi lasciarli prima. +org_still_own_repo=Questa organizzazione ha ancora repository; è necessario eliminarli o tranferirli prima. target_branch_not_exist=Il ramo (branch) di destinazione non esiste. @@ -192,63 +296,98 @@ following=Seguiti follow=Segui unfollow=Non seguire più +form.name_reserved=L'username '%s' è riservato. +form.name_pattern_not_allowed=La struttura del nome utente '%s' non è consentita. [settings] profile=Profilo password=Password +security=Sicurezza avatar=Avatar +ssh_gpg_keys=SSH / GPG chiavi social=Account Sociali applications=Applicazioni orgs=Organizzazioni +repos=Repository delete=Elimina account twofa=Verifica in due passaggi +account_link=Conta esterni +organization=Organizzazione +uid=Uid public_profile=Profilo pubblico +profile_desc=Il tuo indirizzo email è pubblico e verrà utilizzato per le notifiche relative conta e alle operazioni basate sul web tramite l'interfaccia web. +password_username_disabled=Gli utenti non locali non sono ammessi a cambiare il loro nome utente. Per maggiori dettagli si prega di contattare l'amministratore di sistema. full_name=Nome Completo website=Sito web location=Posizione update_profile=Aggiorna Profilo +update_profile_success=Il tuo profilo è stato aggiornato. change_username=Username Cambiato +change_username_prompt=Questa modifica cambierà i collegamenti a la tua conta. continue=Continua cancel=Annulla lookup_avatar_by_mail=Ricerca Avatar per mail +federated_avatar_lookup=Ricerca per avatar federata enable_custom_avatar=Abilita avatar personalizzato choose_new_avatar=Scegli un nuovo avatar update_avatar=Aggiorna le impostazioni avatar delete_current_avatar=Elimina Avatar attuale uploaded_avatar_not_a_image=Il file caricato non è un'immagine. +update_avatar_success=Le impostazioni del tuo avatar sono state aggiornate. change_password=Cambia Password old_password=Password attuale new_password=Nuova Password retype_new_password=Re-inserisci la password +password_incorrect=La Password attuale non è corretta. +change_password_success=La tua password è stata cambiata con successo. Ora puoi firmare usando la tua nuova password. +password_change_disabled=Gli utenti non locali non possono cambiare la loro password attraverso l'interfaccia web. emails=Indirizzi e-mail manage_emails=Gestisci indirizzi email +manage_openid=Gestici gli indirizzi OpenID email_desc=Il tuo indirizzo e-mail primario sarà usato per le notifiche e altre operazioni. primary=Primario primary_email=Imposta come primario delete_email=Elimina +email_deletion=Elimina E-mail +email_deletion_desc=Eliminado questo indirizzo email tutte le informazioni correlate nel tuo conta verranno eliminate. Git conferma che l'uso di questa email non cambierà. Vuoi continuare? email_deletion_success=Indirizzo e-mail eliminato con successo! +openid_deletion=Eliminazione OpenID +openid_deletion_desc=La rimozione di questo indirizzo OpenID della tua conta ti impedirà di accedere con esso. Sei sicuro di voler continuare? +openid_deletion_success=OpenID è stato rimosso con successo! add_new_email=Aggiungi un nuovo indirizzo E-mail +add_new_openid=Aggiungere nuovo OpenID URI add_email=Aggiungi E-mail +add_openid=Aggiungere OpenID URI +add_email_confirmation_sent=Una nuova email di conferma è stata inviata a '%s'. Si prega di controllare la tua casella di posta entro il prossimo %s per confermare la tua email. add_email_success=Il tuo nuovo indirizzo e-mail è stato aggiunto con successo. +add_openid_success=Il tuo nuovo indirizzo OpenID è stato aggiunto con successo. keep_email_private=Mantieni Indirizzo Email Privato keep_email_private_popup=Il tuo indirizzo email sarà nascosto agli altri utenti se questa opzione è abilitata. +openid_desc=Gli indirizzi OpenID ti permetteranno di delegare l'autenticazione al tuo fornitore di scelta manage_ssh_keys=Gestisci chiavi SSH add_key=Aggiungi Chiave +ssh_desc=Queste sono le chiavi SSH associate a la tua conta. Perchè queste chiavi consentono a chiunque le usi di accedere ai propri repository, è molto importante assicurarsi di riconoscerle. +gpg_desc=Queste sono le chiavi GPG associate a la tua conta. Perchè queste chiavi consentono di confermare, è molto importante mantenere la chiave privata corrispondente al sicuro. +ssh_helper= Hai bisogno di aiuto? Dai un'occhiata alla guida di GitHub crea le tue chiavi SSH o risolvere problemi comuni puoi trovare usando SSH. add_new_key=Aggiungi Chiave SSH key_name=Nome della Chiave key_content=Contenuto delete_key=Elimina ssh_key_deletion=Eliminazione chiave SSH +ssh_key_deletion_desc=Rimuovendo questa chiave SSH tutti gli accessi saranno revocati usando questa chiave SSH per la tua conta. Vuoi continuare? add_on=Aggiunto il last_used=Ultimo accesso il no_activity=Nessuna attività recente +can_read_info=Letto +can_write_info=Scrivere manage_social=Gestisci gli Account Sociali Associati +social_desc=Questa è una lista di conta social associati. Per motivi di sicurrezza, assicurati di riconoscere tutte queste voci, in quanto possono essere utilizzate per accedere a la tua conta. unbind=Disassocia manage_access_token=Gestisci i Token di Accesso Personale @@ -256,9 +395,13 @@ generate_new_token=Genera Nuovo Token new_token_desc=Da questo momento, ogni token avrà pieno accesso al tuo account. token_name=Nome Token generate_token=Genera Token +generate_token_success=Il token di accesso è stato generato correttamente! Assicurati di copiarlo ora, perchè non sarai più in grado di vederlo più tardi! delete_token=Elimina access_token_deletion=Eliminazione Token di accesso personale +access_token_deletion_desc=La rimozione di questo token di accesso personale revoca l'accesso per qualsiasi applicazioni che utilizza questo token. Vuoi continuare? +delete_token_success=Il token di accesso personale è stato rimosso. Non dimenticare di aggiornare le applicazioni che utilizzano questo token. +twofa_desc=Gitea supporta l'autenticazione a due fattori per migliorare la sicurezza de la tua conta. twofa_disable=Disattiva verifica in due passaggi @@ -287,11 +430,15 @@ auto_init=Inizializzare questo repository con i file e il modello selezionati create_repo=Crea Repository default_branch=Ramo (Branch) predefinito mirror_prune=Rimuovi +mirror_prune_desc=Rimuovere eventuali riferimenti di tracciamento remoto che non esistono più sul telecomando mirror_address=Indirizzo del mirror +mirror_address_desc=Si prega di includere tutte le credenziali dell'utente necessarie nell'indirizzo. watchers=Osservatori stargazers=Fan forks=Fork +reactions_more=e %d più +form.reach_limit_of_creation=Hai già raggiunto il tuo limite %d repository. need_auth=Richiesta di autorizzazione migrate_type=Tipo di migrazione @@ -302,6 +449,7 @@ migrate.clone_address_desc=Può essere un URL HTTP/HTTPS/GIT o il percorso del s migrate.permission_denied=Non è consentito importare repository locali. migrate.invalid_local_path=Percorso locale non valido, non esiste o non è una cartella. migrate.failed=Migrazione non riuscita: %v +migrate.lfs_mirror_unsupported=La duplicazione di oggetti LFS non è supportata - usa ' git lfs fetch --tutti e 'git lfs push --tutti invece. mirror_from=mirror da forked_from=forkato da @@ -340,6 +488,32 @@ editor.upload_file=Carica File editor.edit_file=Modifica file editor.preview_changes=Anteprima modifiche editor.edit_this_file=Modifica questo file +editor.fork_before_edit=È necessario posizionare questo repository prima di modificare il file +editor.filename_help=Per aggiungere una directory, digitarla e premere/. Per eliminare un directory, vai all'inizio del campo e premi il tasto backspace. +editor.or=o +editor.cancel_lower=cancellare +editor.commit_changes=Apporta le modifiche +editor.add_tmpl=Aggiungi '%s/' +editor.add=Aggiungi '%s' +editor.update=Aggiornare '%s' +editor.delete=Eliminare '%s' +editor.commit_message_desc=Aggiungi una descrizione estesa facoltativa... +editor.commit_directly_to_this_branch=Impegnarsi direttamente con il %s branch. +editor.create_new_branch=Creare un nuovo branch per questo commit e inizia una pull request. +editor.new_branch_name_desc=Nome del nuovo branch... +editor.cancel=Cancellare +editor.filename_cannot_be_empty=Il nome del file non può essere vuoto. +editor.branch_already_exists=Branch '%s' esiste già in questo repository. +editor.directory_is_a_file=Ingresso '%s' nel percorso principale è un file non una directory in questo repository. +editor.file_is_a_symlink=Il file '%s' è un collegamento simbolico che non può essere modificato dall'editor web +editor.filename_is_a_directory=Il nome del file '%s' è un directory esistente in questo repository. +editor.file_editing_no_longer_exists=Il file '%s' staii modificando non esiste più nel repository. +editor.file_changed_while_editing=Il contenuto del file è stato modificato da quando ha iniziato la modifica. Clicca qui per vedere cosa è stato cambiato o premere di nuovo conferma per sovrascrivere tali modifiche. +editor.file_already_exists=Un file con nome '%s' esiste già in questo repository. +editor.no_changes_to_show=Non ci sono cambiamenti da mostrare. +editor.fail_to_update_file=Errore durante l'aggiornamento/ creazione del file '%s' con errore: %v +editor.add_subdir=Aggiungi sottocartella... +editor.unable_to_upload_files=Impossibile caricare i file su '%s' con errore:%v commits.search=Ricerca una versione commits.author=Autore @@ -385,6 +559,13 @@ issues.filter_sort.recentupdate=Aggiornati di recente issues.filter_sort.leastupdate=Aggiornati tempo fa issues.filter_sort.mostcomment=I più commentati issues.filter_sort.leastcomment=I meno commentati +issues.action_open=Aperto +issues.action_close=Chiuso +issues.action_label=Etichetta +issues.action_milestone=Pietra Miliare +issues.action_milestone_no_select=Nessuna pietra miliare +issues.action_assignee=Assegnatario +issues.action_assignee_no_select=Nessun assegnatario issues.opened_by=aperto %[1]s da %[3]s issues.opened_by_fake=aperto %[1]s da %[2]s issues.previous=Pagina precedente @@ -430,12 +611,21 @@ pulls.merged_title_desc=ha unito %[1]d commit da %[2]s a %[3] pulls.tab_conversation=Conversazione pulls.tab_commits=Commit pulls.tab_files=File modificati +pulls.reopen_to_merge=Riapri questa pull request per effettuare l'unione. pulls.merged=Unito +pulls.has_merged=Questa pull request è stata unita con successo. pulls.data_broken=I dati di questa pull request si sono rotti causa dell'eliminazione delle informazioni di fork. pulls.is_checking=Il controllo dei conflitti è ancora in corso, per favore aggiorna pagina tra qualche istante. pulls.can_auto_merge_desc=La pull request non può essere mergiata automaticamente. +pulls.cannot_auto_merge_desc=Questa pull request non può essere unita automaticamente poiché sono presenti dei conflitti. pulls.cannot_auto_merge_helper=Effettua il merge manualmente per risolvere i conflitti. +pulls.no_merge_desc=Questa pull request non può essere unita poiché la possibilità di unire PR è stata disabilitata. +pulls.no_merge_helper=Per unire questa pull request abilita almeno una opzione di unione nelle impostazioni della repository o uniscila manualmente. pulls.merge_pull_request=Unisci Pull Request +pulls.rebase_merge_pull_request=Fai rebase e unisci +pulls.squash_merge_pull_request=Fai squash e unisci +pulls.invalid_merge_option=Non puoi utilizzare questa opzione di merge per questa pull request +pulls.open_unmerged_pull_exists=`Non puoi riaprire la pull request perché c'è già una pull request aperta (#%d) nella stessa repository con le stesse informazioni per l'unione e deve ancora essere unita.` milestones.new=Nuova Milestone milestones.open_tab=%d Aperti @@ -473,6 +663,10 @@ wiki.page_already_exists=Esiste già una pagina Wiki con questo stesso nome. wiki.pages=Pagine wiki.last_updated=Ultimo aggiornamento: %s +activity.merged_prs_count_1=Pull Request Unita +activity.merged_prs_count_n=Pull request unite +activity.title.prs_merged_by=%s unita da %s +activity.merged_prs_label=Unite settings=Impostazioni @@ -489,6 +683,8 @@ settings.use_internal_issue_tracker=Use builtin lightweight issue tracker settings.use_external_issue_tracker=Utilizza gestore di problemi esterno settings.tracker_url_format=Formato URL Gestore Problemi Esterno settings.pulls_desc=Abilita le pull requests per accettare contributi pubblici +settings.pulls.allow_merge_commits=Permetti commit di unione +settings.pulls.allow_rebase_merge=Permetti rebase per unire commit settings.danger_zone=Zona Pericolosa settings.new_owner_has_same_repo=Il nuovo proprietario ha già un repository con lo stesso nome. Per favore scegli un altro nome. settings.convert=Converti in Repository Regolare @@ -800,6 +996,8 @@ config.db_path_helper=(per "sqlite3" e "tidb") config.service_config=Configurazione Servizio config.register_email_confirm=Richiedono Conferma dell'Email config.disable_register=Disabilita Registrazione +config.enable_openid_signup=Attiva la registrazione tramite OpenID +config.enable_openid_signin=Attiva l'accesso tramite OpenID config.show_registration_button=Mostra Pulsane Registrazione config.require_sign_in_view=Richiesto Accesso per Vedere config.mail_notify=Email di Notifica @@ -815,6 +1013,7 @@ config.mailer_config=Configurazione Mailer config.mailer_enabled=Attivo config.mailer_disable_helo=Disattiva HELO config.mailer_name=Nome +config.mailer_host=Host config.mailer_user=Utente config.send_test_mail=Invia email di test config.test_mail_sent=Una mail di prova è stata inviata a '%s'. @@ -841,6 +1040,12 @@ config.picture_config=Configurazione Foto config.picture_service=Servizio foto config.disable_gravatar=Disabilita Gravatar +config.git_max_diff_lines=Numero massimo di righe di diff (per singolo file) +config.git_max_diff_line_characters=Numero massimo di caratteri di diff (per singola riga) +config.git_max_diff_files=Numero massimo di file diff mostrati +config.git_gc_args=Parametri GC +config.git_migrate_timeout=Timeout per la migrazione +config.git_mirror_timeout=Timeout per l'aggiornamento del mirror config.log_config=Configurazione Log config.log_mode=Modalità Log @@ -871,15 +1076,24 @@ create_repo=ha creato il repository %s rename_repo=repository rinominato da %[1]s a [3]s commit_repo=ha pushato nel %[3]s in %[4]s create_issue=`ha aperto il problema %s#%[2]s` +close_issue=`problema chiuso %s#%[2]s` +reopen_issue=`problema riaperto %s#%[2]s` create_pull_request=`creata pull request %s#%[2]s` +close_pull_request=`richiesta di pull chiuso %s#%[2]s` +reopen_pull_request=`richiesta di riapertura riaperta %s#%[2]s` comment_issue=`ha commentato il problema %s#%[2]s` +merge_pull_request=`unita pull request %s#%[2]s` transfer_repo=ha trasferito il repository %s a %s push_tag=ha pushato il tag %[2]s a %[3]s +delete_tag=tag eliminato %[2]s da %[3]s +delete_branch=branch eliminato %[2]s da %[3]s +compare_commits=Confronta %d commits [tool] ago=%s fa from_now=%s da adesso now=ora +future=futuro 1s=1 secondo 1m=1 minuto 1h=1 ora @@ -898,12 +1112,23 @@ raw_seconds=secondi raw_minutes=minuti [dropzone] +default_message=Trascina i files o clicca per caricare. invalid_input_type=Non è possibile caricare file di questo tipo. +file_too_big=La dimensione del file ({{filesize}} MB) supera la dimensione massima ({{maxFilesize}} MB). remove_file=Rimuovi file [notification] +notifications=Notifiche +no_unread=Non hai notifiche non lette. +no_read=Non hai nessuna notifica di lettura. +mark_as_read=Segna come letto +mark_as_unread=Segna come non letto +mark_all_as_read=Segna tutti come letti [gpg] +error.no_gpg_keys_found=Non sono state trovate chiavi note per questa firma nel database +error.failed_retrieval_gpg_keys=Impossibile recuperare alcuna chiave associata a la conta del committer [units] +error.no_unit_allowed_repo=Nessuna unità può essere trovata in questo ripository a cui è consentito l'accesso diff --git a/options/locale/locale_ja-JP.ini b/options/locale/locale_ja-JP.ini index 50ce0f5e0..3d11c5eef 100644 --- a/options/locale/locale_ja-JP.ini +++ b/options/locale/locale_ja-JP.ini @@ -1,30 +1,34 @@ -app_desc=Go言語で実装したセルフホストGitサービス +app_desc=自分のサーバーで手軽に動かせるGitサービス home=ホーム dashboard=ダッシュボード explore=エクスプローラ help=ヘルプ sign_in=サインイン +sign_in_with=外部アカウントでログイン sign_out=サインアウト sign_up=サインアップ link_account=連携アカウント +link_account_signin_or_signup=外部アカウントを既に存在するアカウントに連携する、または外部アカウントで新しいアカウントを登録する register=登録 website=WEBサイト version=バージョン page=ページ template=テンプレート language=言語 -notifications=お知らせ +notifications=通知 create_new=作成... -user_profile_and_more=ユーザープロファイルなど -signed_in_as=サインイン済み +user_profile_and_more=ユーザープロフィール等 +signed_in_as=ログイン済み +enable_javascript=このサイトはJavaScriptを使用しています username=ユーザ名 -email=E-mail +email=Eメールアドレス password=パスワード re_type=再入力 -captcha=CAPTCHA +captcha=Captcha twofa=2段階認証 +twofa_scratch=2段階認証スクラッチコード passcode=パスコード repository=リポジトリ @@ -33,7 +37,7 @@ mirror=ミラー new_repo=新しいリポジトリ new_migrate=新しい移行 new_mirror=新しいミラー -new_fork=新しいリポジトリのフォーク +new_fork=新しいフォーク new_org=新しい組織 manage_org=組織を管理 admin_panel=管理者パネル @@ -58,29 +62,40 @@ cancel=キャンセル [install] install=インストール title=初期設定 +docker_helper=DockerでGiteaを稼動する場合は、このページに変更を加える前に、 ガイドラインをよく読んでください。 +requite_db_desc=Gitea には、MySQL、PostgreSQL、SQLite3、または TiDB が必要です。 db_title=データベース設定 db_type=データベースの種類 host=ホスト user=ユーザ password=パスワード db_name=データベース名 +db_helper=MySQLではエンジンがINNODB、文字セットがutf8_general_ciである必要があります。 ssl_mode=SSL モード path=パス +sqlite_helper=SQLite3かTiDBのデータベースのファイルパスです。
サービスとして開始する際には絶対パスを利用してください。 err_empty_db_path=SQLite3 または TiDB データベースのパスを空にすることはできません。 -err_invalid_tidb_name=TiDB データベース名は文字"."と"-"を許可しない。 +err_invalid_tidb_name=TiDBデータベース名に文字"."と"-"を使用することはできません。 no_admin_and_disable_registration=管理者アカウントを作成せずに登録を無効にすることはできません。 err_empty_admin_password=管理者パスワードは空白にできません。 +general_title=アプリケーション全般設定 app_name=アプリケーション名 +app_name_helper=組織の名前を入力してください。 repo_path=リポジトリのルートパス +repo_path_helper=すべてのGitリモートリポジトリはこのディレクトリに保存されます。 +lfs_path=LFSルートパス +lfs_path_helper=Git LFSによってこのディレクトリにファイルが保存されます。空欄にするとLFSを無効にします。 run_user=実行ユーザ -run_user_helper=ユーザーはリポジトリ ルートパスへのアクセス、及びGitea を実行する権限を所有する必要があります。 +run_user_helper=実行ユーザーはリポジトリルートパスへのアクセス権限、およびGiteaを実行する権限をもつ必要があります。 domain=ドメイン domain_helper=これはSSH用クローンURLに影響します。 ssh_port=SSH ポート +ssh_port_helper=SSHサーバーを使用する場合はポート番号を入力してください。 空白にした場合は無効化されます。 http_port=HTTP ポート http_port_helper=アプリケーションが待ち受けするポート番号。 app_url=アプリケーションの URL +app_url_helper=HTTP/HTTPSのクローンURL、および一部のEメール通知に影響します。 log_root_path=ログのパス log_root_path_helper=ログファイルを書き込むディレクトリ。 @@ -88,21 +103,29 @@ optional_title=オプション設定 email_title=メールサービス設定 smtp_host=SMTP ホスト smtp_from=差出人 +smtp_from_helper=送信者のEメールアドレスをRFC 5322形式で指定してください。メールアドレスのみか、"Name" としてください。 mailer_user=送信者 mailer_password=送信者のパスワード register_confirm=登録の確認を有効にする mail_notify=メール通知を有効にする server_service_title=サーバーとその他のサービスの設定 offline_mode=オフラインモードを有効にする +offline_mode_popup=CDNを使用せずにローカルからリソースファイルを配信します。 disable_gravatar=Gravatarのサービスを無効にします -disable_gravatar_popup=Gravatarとカスタムソースを無効にして、全てのアバターをユーザーによってアップロードされたものかデフォルトなものにします。 -federated_avatar_lookup_popup=Enable federated avatars lookup to use federated open source service based on libravatar. -disable_registration=自己登録を無効にする -disable_registration_popup=自己登録を無効にし、管理者のみがアカウント作成できる +disable_gravatar_popup=Gravatarとカスタムソースを無効にします。ユーザーによってアップロードされたものか、デフォルトのものが使われるようになります。 +federated_avatar_lookup=Federatedアバターサービスを有効にする +federated_avatar_lookup_popup=Libravatarを使用したフェデレーテッド・アバター検索を有効にします。 +disable_registration=ユーザー自身での新規登録を無効にする +disable_registration_popup=ユーザー自身での新規登録を無効にし、管理者のみがアカウント作成できるようにします。 +openid_signin=OpenIDでのログインを有効にする +openid_signin_popup=OpenIDでのユーザーのログインを有効にします +openid_signup=OpenIDでの自己登録を有効にする +openid_signup_popup=OpenIDベースでの自己登録を有効にします enable_captcha=Captchaを有効にする enable_captcha_popup=ユーザによる自己登録のため、有効なcaptchaが必要です。 require_sign_in_view=サインインしたユーザのみページ閲覧を許可 require_sign_in_view_popup=サインインしたユーザのみがページを閲覧できます。ビジターはサインインもしくはサインアップページのみ見られます。 +admin_setting_desc=今すぐ管理者アカウントを作成する必要はありません。一番最初に登録されたユーザーは自動的に管理者になります。 admin_title=管理者アカウントの設定 admin_name=ユーザ名 admin_password=パスワード @@ -110,14 +133,25 @@ confirm_password=パスワード確認 admin_email=管理者の電子メール install_btn_confirm=Gitea をインストール test_git_failed='Git' コマンドテストに失敗: %v +sqlite3_not_available=このバージョンはSQLite3をサポートしていません。gobuildバージョンではない公式のバイナリを %s からダウンロードしてください。 invalid_db_setting=データベース設定が無効:%v invalid_repo_path=リポジトリのルート パスが無効です: %v run_user_not_match=実行ユーザーは現在のユーザーではありません:%s → %s +save_config_failed=設定ファイルの保存に失敗しました: %v invalid_admin_setting=管理者アカウントの設定が無効です: %v +install_success=ようこそ!Giteaを選んでいただき光栄です。 invalid_log_root_path=ログのルートパスがむこうです: %v +default_keep_email_private=メールアドレス非公開設定の既定値 +default_keep_email_private_popup=メールアドレスの公開/非公開設定の既定値です。trueにするとすべてのユーザーのメールアドレスは、ユーザーが設定を変更するまで非公開になります。 +default_allow_create_organization=ユーザーにデフォルトで組織の作成を許可する +default_allow_create_organization_popup=これはデフォルトで新しいユーザーに付与される権限です。trueにセットすると、新しいユーザーは組織を作成することができるようになります。 +default_enable_timetracking=タイムトラッキングをデフォルトで有効にする +default_enable_timetracking_popup=この設定によって、リポジトリのタイムトラッキング機能はデフォルトで有効になります。 +no_reply_address=No-replyアドレス +no_reply_address_helper=メールアドレスを非公開にしているユーザーがgitのログに表示される場合のメールアドレスのドメインです。例えば'noreply.example.org'を設定すると、ユーザー'joe'は'joe@noreply.example.org'と表示されます。 [home] -uname_holder=ユーザー名またはEメール +uname_holder=ユーザー名またはEメールアドレス password_holder=パスワード switch_dashboard_context=ダッシュ ボードのコンテキストを切替 my_repos=自分のリポジトリ @@ -132,31 +166,53 @@ issues.in_your_repos=あなたのリポジトリ [explore] repos=リポジトリ -users=ユーザ +users=ユーザー organizations=組織 search=検索 +repo_no_results=一致するリポジトリが見つかりませんでした。 +user_no_results=一致するユーザーが見つかりませんでした。 +org_no_results=一致する組織が見つかりませんでした。 [auth] create_new_account=アカウント作成 register_helper_msg=既にアカウントをお持ちですか?今すぐログインしましょう! +social_register_helper_msg=既にアカウントをお持ちですか?連携しましょう。 disable_register_prompt=申し訳ありませんが、現在登録は受け付けておりません。サイトの管理者にお問い合わせください。 disable_register_mail=申し訳ありませんが、登録メールの確認機能が無効になっています。 remember_me=ログインしたままにする forgot_password_title=パスワードをお忘れですか? forgot_password=パスワードをお忘れですか? sign_up_now=アカウントが必要ですか?今すぐ登録しましょう! +confirmation_mail_sent_prompt=%s に確認メールを送信しました、%s以内に受信トレイを確認し、登録手続きを完了してください。 +reset_password_mail_sent_prompt=%s に確認メールを送信しました、%s以内に受信トレイを確認し、パスワードリセット手続きを完了してください。 active_your_account=アカウントを有効化 prohibit_login=ログイン禁止 +prohibit_login_desc=あなたのアカウントはログインを禁止されています。サイト管理者にお問い合わせください。 +resent_limit_prompt=確認メールは既に送信されています。申し訳ありませんが、3分お待ちください。 has_unconfirmed_mail=こんにちは %s さん、あなたの電子メール アドレス (%s) は未確認です。もし確認メールをまだ確認できていないか、改めて再送信する場合は、下のボタンをクリックしてください。 resend_mail=アクティベーションメールを再送信するにはここをクリック +email_not_associate=このEメールアドレスは、どのアカウントにも関連付けられません。 +send_reset_mail=パスワードリセットメールを再送するにはここをクリックしてください reset_password=パスワードリセット +invalid_code=申し訳ありませんが、確認用コードが期限切れか、正しくありません。 reset_password_helper=パスワードをリセットするにはここをクリック password_too_short=%d文字未満のパスワードは設定できません。 +non_local_account=ローカルアカウント以外はGiteaのWebインタフェースからパスワードを変更することはできません。 +verify=確認 +scratch_code=スクラッチコード +use_scratch_code=スクラッチコードを使う +twofa_scratch_used=あなたはスクラッチコードを使用しています。2段階認証の設定ページにリダイレクトされ、デバイスの登録を解除したり新しいスクラッチコードを生成することができます。 +twofa_passcode_incorrect=パスコードが正しくありません。デバイスが見当たらない場合、スクラッチコードを使ってログインしてください。 twofa_scratch_token_incorrect=スクラッチのコードが正しくありません。 login_userpass=ユーザー/パスワード login_openid=OpenID openid_connect_submit=接続 +openid_connect_title=既存のアカウントに接続 +openid_connect_desc=選択した OpenID URI は未登録です。既存のアカウントに追加できます。 openid_register_title=アカウント新規作成 +openid_register_desc=選択した OpenID URI は未登録です。既存のアカウントに関連付けることができます。 +openid_signin_desc=URIの例: https://anne.me, bob.openid.org.cn, gnusocial.net/carry +disable_forgot_password_mail=申し訳ありませんが、パスワードリセット機能は無効になっています。サイトの管理者にお問い合わせください。 [mail] activate_account=あなたのアカウントを有効にしてください。 @@ -171,7 +227,7 @@ no=いいえ modify=変更 [form] -UserName=ユーザ名 +UserName=ユーザー名 RepoName=リポジトリ名 Email=Eメールアドレス Password=パスワード @@ -186,30 +242,47 @@ AdminEmail=管理者の電子メール NewBranchName=新しいブランチ名 CommitSummary=コミットの概要 CommitMessage=コミットメッセージ +CommitChoice=コミットを選択 TreeName=ファイルのパス Content=コンテンツ -require_error=空にできません +require_error=`は空にできません` +alpha_dash_error=`は英数字、ダッシュ(-_)のみ使用可能です。` +alpha_dash_dot_error=`は英数字、ダッシュ(-_)、ドットのみ使用可能です。` +git_ref_name_error=`は有効なGit参照名である必要があります。` size_error=`サイズは %s である必要があります` -min_size_error=' 少なくとも %s 文字の必要があります ' -max_size_error=' %s 文字以下の必要があります ' -email_error=' は有効な電子メール アドレスではない ' -url_error=' は有効な URL はありません。 ' -include_error=' 文字列 '%s' を含める必要があります。 ' +min_size_error=`は%s文字以上である必要があります。` +max_size_error=`は%s文字以下である必要があります。` +email_error=`は有効なEメールアドレスではありません。` +url_error=` は有効な URL はありません。 ` +include_error=`文字列 '%s' を含める必要があります。` unknown_error=不明なエラー: +captcha_incorrect=Captchaが正しくありません。 password_not_match=入力したパスワードが一致しません。 username_been_taken=ユーザー名は既に使用されています。 repo_name_been_taken=このリポジトリ名は既に使用されています。 org_name_been_taken=組織名は既に使用されています。 team_name_been_taken=チーム名は既に使用されています。 +team_no_units_error=チームに対して少なくとも1つのユニットが有効化されている必要があります。 email_been_used=そのメールアドレスはすでに使用されています。 openid_been_used=OpenID のアドレス '%s' は既に使用されています。 username_password_incorrect=ユーザー名またはパスワードが正しくありません +enterred_invalid_repo_name=入力したリポジトリの名前が正しいかを確認してください。 +enterred_invalid_owner_name=入力した所有者名が正しいかを確認してください。 +enterred_invalid_password=入力したパスワードが正しいかを確認してください。 user_not_exist=指定されたユーザーは存在しません。 +last_org_owner=すべての組織には少なくとも1人の所有者が必要なため、所有者チームの唯一のユーザーを削除することはできません。 +cannot_add_org_to_team=組織はチームメンバーとして追加できません。 +invalid_ssh_key=SSHキーを検証できません: %s +invalid_gpg_key=GPGキーを検証できません: %s +unable_verify_ssh_key=このSSHキーは検証できません。間違いがないかもう一度確認してください。 auth_failed=認証に失敗しました: %v +still_own_repo=このアカウントが所有するリポジトリが存在します。リポジトリを削除するか移譲する必要があります。 +still_has_org=このアカウントは組織に所属しています。組織から脱退するか組織を削除する必要があります。 +org_still_own_repo=この組織が所有するリポジトリが存在します。リポジトリを削除するか移譲する必要があります。 target_branch_not_exist=ターゲットブランチが存在しない @@ -219,12 +292,13 @@ join_on=参加しました repositories=リポジトリ activity=パブリック・アクティビティ followers=フォロワー -starred=スター +starred=お気に入りのリポジトリ following=フォロー follow=フォロー unfollow=フォロー解除 form.name_reserved=ユーザー名 '%s' は予約されています。 +form.name_pattern_not_allowed=ユーザー名の形式 '%s' は許可されていません。 [settings] profile=プロフィール @@ -240,101 +314,189 @@ delete=アカウントを削除 twofa=2段階認証 account_link=外部アカウント organization=組織 -uid=Uid +uid=ユーザーID public_profile=パブリック プロフィール +profile_desc=あなたのEメールアドレスは公開され、アカウントに関連する通知や、Webインタフェース上で行われる操作に使われます。 +password_username_disabled=ローカルユーザー以外はユーザー名を変更できません。詳細は管理者に問い合わせてください。 full_name=フルネーム website=WEBサイト location=ロケーション update_profile=プロファイル更新 -update_profile_success=プロフィールが更新されました +update_profile_success=プロフィールが更新されました。 change_username=ユーザー名が変更されました +change_username_prompt=この変更はアカウントへのリンクに影響します。 continue=続行 cancel=キャンセル lookup_avatar_by_mail=メールからアバターを取得 +federated_avatar_lookup=Federatedアバターサービス enable_custom_avatar=カスタムのアバターを有効にする choose_new_avatar=新しいアバターを選択 update_avatar=アバターの設定を更新 delete_current_avatar=現在のアバターを削除 uploaded_avatar_not_a_image=アップロードされたファイルは画像ではない。 +update_avatar_success=アバター設定が更新されました。 change_password=パスワードを変更 old_password=現在のパスワード new_password=新しいパスワード retype_new_password=新しいパスワードを再入力します。 password_incorrect=現在のパスワードが正しくありません。 -change_password_success=あなたのパスワードは正常に変更されました。これで、新しいパスワードを使用してサインインできます。 +change_password_success=パスワードが正常に変更されました。新しいパスワードでログインすることができます。 +password_change_disabled=ローカルユーザー以外はWebインタフェースからパスワードを変更できません。 -emails=E-mail アドレス +emails=Eメールアドレス manage_emails=E-mail アドレスを管理 -email_desc=あなたのプライマリメールアドレスは、通知やその他の操作に使用されます。 +manage_openid=OpenIDアドレスを管理 +email_desc=あなたのプライマリEメールアドレスは、通知やその他の操作に使用されます。 primary=プライマリー primary_email=プライマリに設定 delete_email=削除 -email_deletion=メールを削除します。 +email_deletion=Eメールアドレスの削除 +email_deletion_desc=このEメールアドレスを削除すると、関連する情報もアカウントから削除されます。このEメールアドレスを使ったGitコミットが変更されることはありません。続行しますか? email_deletion_success=電子メールが正常に削除されました。 openid_deletion=OpenID削除 +openid_deletion_desc=OpenIDアドレスを削除すると、これを使ってアカウントにログインすることができなくなります。続行しますか? +openid_deletion_success=OpenIDは正常に削除されました。 add_new_email=新しいe-mailアドレスを追加 +add_new_openid=新しいOpenID URIを追加する add_email=電子メールを追加します。 +add_openid=OpenID URIを追加する +add_email_confirmation_sent='%s' に確認メールを送信しました、%s以内に受信トレイを確認し、確認手続きを完了してください。 add_email_success=新しいe-mail アドレスが追加されました。 -keep_email_private=メール アドレスを非公開にする +add_openid_success=新しいOpenIDアドレスが正常に追加されました。 +keep_email_private=Eメールアドレスを非公開にする +keep_email_private_popup=設定すると他のユーザーからEメールアドレスが見えなくなります。 +openid_desc=OpenIDアドレスによって、選択したプロバイダに認証を委任することができます。 manage_ssh_keys=SSH キーを管理 +manage_gpg_keys=GPGキーを管理 add_key=キーを追加 +ssh_desc=あなたのアカウントに関連付けられているSSHキーの一覧です。SSHキーがあれば誰でもリポジトリへのアクセス権を得ることができるため、見覚えのないSSHキーがないかよく確認してください。 +gpg_desc=あなたのアカウントに関連付けられているGPGキーの一覧です。GPGキーがあれば誰でもコミットを正しく検証させることができるため、秘密鍵は安全に保存してください。 +ssh_helper=ヘルプが必要ですか? GitHubのガイドをご覧ください: SSHキーの作成、SSHを使う際によくある問題 +gpg_helper=ヘルプが必要ですか? GitHubのガイドをご覧ください: GPGについて add_new_key=SSH キーを追加 +add_new_gpg_key=GPGキーを追加 +ssh_key_been_used=同じ公開鍵が既に登録されています。 +ssh_key_name_used=同じ名前の公開鍵が既に存在しています。 +gpg_key_id_used=同じIDを持つGPG公開鍵が既に存在しています。 +gpg_no_key_email_found=GPGキーに結びついているEメールアドレスが見つかりませんでした。 +subkeys=サブキー +key_id=キー ID key_name=キーの名前 key_content=コンテンツ +add_key_success=SSHキー '%s' が追加されました。 +add_gpg_key_success=GPGキー '%s' が追加されました。 delete_key=削除 ssh_key_deletion=SSH キーの削除 +gpg_key_deletion=GPGキーの削除 +ssh_key_deletion_desc=このSSHキーを削除すると、このSSHキーを使ってアカウントにアクセスすることができなくなります。続行しますか? +gpg_key_deletion_desc=このGPGキーを削除すると、このGPGキーで署名された全てのコミットが未検証になります。続行しますか? +ssh_key_deletion_success=SSHキーが削除されました。 +gpg_key_deletion_success=GPGキーが削除されました。 add_on=追加された +valid_until=有効期限 +valid_forever=永久に有効 last_used=最終使用日 no_activity=最近の活動なし +can_read_info=読み取り +can_write_info=書き込み +key_state_desc=この鍵は7日間以内に使われています。 +token_state_desc=このトークンは7日間以内に使われています。 show_openid=プロファイルに表示する hide_openid=プロファイルに表示しない +ssh_disabled=SSHは無効です manage_social=関連付けられているSNSアカウントを管理 +social_desc=関連付けられているソーシャルアカウント一覧です。セキュリティ上の観点から、これらのアカウントに見覚えがあるか確認してください。これらを使ってあなたのアカウントにログインすることができます。 unbind=バインド解除 +unbind_success=ソーシャルアカウントの関連付けが解除されました。 manage_access_token=パーソナルアクセス トークンを管理 generate_new_token=新しいトークンを生成 +tokens_desc=生成したトークンを利用してGiteaのAPIにアクセスすることができます。 new_token_desc=今のところ、全てのトークンはあなたのアカウントにフルアクセスできます。 token_name=トークン名 generate_token=トークンを生成 +generate_token_success=アクセストークンは正常に生成されました。これは二度と表示されませんので、今必ずコピーしておいてください。 delete_token=削除 access_token_deletion=パーソナルアクセストークンの削除 +access_token_deletion_desc=この個人アクセストークンを削除すると、このトークンを利用するすべてのアプリケーションがアクセスできなくなります。続行しますか? +delete_token_success=個人アクセストークンは削除されました。このトークンを利用しているアプリケーションを更新することを忘れないでください。 +twofa_desc=Giteaはアカウントの安全性を高めるための2段階認証をサポートしています。 +twofa_is_enrolled=このアカウントは2段階認証が有効になっています。 +twofa_not_enrolled=このアカウントは2段階認証が設定されていません。 +twofa_disable=2段階認証を無効にする +twofa_scratch_token_regenerate=スクラッチトークンを再生成 +twofa_scratch_token_regenerated=スクラッチトークンは再生性されました。新しいトークンは %s です。安全な場所に保管してください。 +twofa_enroll=2段階認証を有効にする +twofa_disable_note=必要であれば2段階認証を無効にできます。 +twofa_disable_desc=2段階認証を無効にするとアカウントの安全性が低下します。続行してよろしいですか? +regenerate_scratch_token_desc=スクラッチトークンが見当たらない場合、またはトークンをログインに使用した場合、トークンをリセットできます。 +twofa_disabled=2段階認証は無効化されました。 +scan_this_image=この画像を認証アプリケーションで読み取ってください。 or_enter_secret=または、シークレットを入力してください: %s +then_enter_passcode=認証アプリケーションに表示されるパスコードを入力してください。 +passcode_invalid=パスコードが正しくありません。再度お試しください。 +twofa_enrolled=このアカウントで2要素認証が有効になりました。スクラッチトークン (%s) を確実に保管してください。これは1度しか表示されません! +manage_account_links=アカウント関連付けの管理 +manage_account_links_desc=このアカウントに関連付けられた外部アカウント +account_links_not_available=このアカウントに関連付けられた外部アカウントは現在存在しません +remove_account_link=アカウントの関連付けをを削除 +remove_account_link_desc=関連付けを削除すると、このアカウントを使ったアクセスが一切できなくなります。続行しますか? +remove_account_link_success=アカウントの関連付けは正常に削除されました。 +orgs_none=あなたはどの組織のメンバーでもありません。 +repos_none=あなたはリポジトリを所有していません。 delete_account=アカウントを削除 delete_prompt=この操作をするとアカウントが完全に削除され、二度と元に戻すことができなくなります ! confirm_delete_account=削除の確認 delete_account_title=アカウントの削除 +delete_account_desc=このアカウントを永久に削除します。続行しますか? [repo] owner=オーナー repo_name=リポジトリ名 +repo_name_helper=よいリポジトリ名は、短く覚えやすく他と重複しないキーワードから構成されるものです。 visibility=公開/非公開 visiblity_helper=このリポジトリはプライベートです。 +visiblity_helper_forced=管理者は、強制的にすべての新しいリポジトリを非公開にしています。 visiblity_fork_helper=(この値の変更はすべてのフォークに適用されます) clone_helper=クローンに関してお困りであれば ヘルプ を参照しましょう。 fork_repo=リポジトリをフォーク fork_from=フォーク元 +fork_visiblity_helper=フォークされたリポジトリの可視状態は変更できません。 repo_desc=説明 repo_lang=言語 +repo_gitignore_helper=.gitignoreテンプレートを選択してください。 license=ライセンス license_helper=ライセンス ファイルを選択 +readme=Readme readme_helper=Readme ファイルのテンプレートを選択 auto_init=選択されたファイルおよびテンプレートでリポジトリを初期化 create_repo=リポジトリを作成 default_branch=デフォルトのブランチ +mirror_prune=除去 +mirror_prune_desc=リモートに存在しない参照を除去する +mirror_interval=ミラーの間隔(単位 "h", "m", "s" が使用可能です) +mirror_interval_invalid=ミラーの間隔が不正です。 mirror_address=ミラー アドレス +mirror_address_desc=必要なユーザー資格情報をアドレスに含めてください。 mirror_last_synced=最終同期 watchers=ウォッチャー +stargazers=お気に入り forks=フォーク +pick_reaction=リアクションを選択 +reactions_more=さらに %d 件 +form.reach_limit_of_creation=リポジトリを%d個以上作成することはできません。 +form.name_reserved=リポジトリ名 '%s' は予約されています。 +form.name_pattern_not_allowed=リポジトリ名の形式 '%s' は使用できません。 need_auth=認証が必要 migrate_type=マイグレーションの種類 @@ -342,22 +504,35 @@ migrate_type_helper=このリポジトリは、 ミラ migrate_repo=リポジトリを移行 migrate.clone_address=クローンアドレス migrate.clone_address_desc=これは、HTTP/HTTPS/GIT URL またはローカル サーバー パスを設定できます。 +migrate.clone_local_path=またはローカルサーバーのパス migrate.permission_denied=ローカル リポジトリをインポートすることはできません。 migrate.invalid_local_path=ローカルパスが無効です。存在しないかディレクトリではありません。 migrate.failed=移行に失敗しました: %v +migrate.lfs_mirror_unsupported=LFS オブジェクトのミラーはサポートされていません。代わりに 'git lfs fetch --all' と 'git lfs push --all' を使ってください。 mirror_from=同期ミラー forked_from=フォーク元 +fork_from_self=自分の所有しているリポジトリはフォークできません。 copy_link=コピー copy_link_success=コピーされました! copy_link_error=⌘ C または Ctrl-C キーを押してコピー copied=コピー成功 +unwatch=ウォッチ解除 +watch=ウォッチ +unstar=お気に入りから外す +star=お気に入りに登録 +fork=フォーク +download_archive=このリポジトリをダウンロード no_desc=説明なし quick_guide=クイック ガイド clone_this_repo=このリポジトリのクローンを作成 +create_new_repo_command=コマンドラインから新しいリポジトリを作成 +push_exist_repo=コマンドラインから既存のリポジトリをプッシュ +bare_message=このリポジトリには内容がありません。 code=コード +code.desc=コードには、コードが保管されています。 branch=ブランチ tree=ツリー filter_branch_and_tag=ブランチまたはタグをフィルタリング @@ -368,26 +543,58 @@ pulls=プルリクエスト labels=ラベル milestones=マイルストーン commits=コミット +commit=コミット releases=リリース +file_raw=Raw形式 file_history=履歴 file_view_raw=Rawデータを見る file_permalink=パーマリンク file_too_large=このファイルは大きすぎるため、表示できません。 +video_not_supported_in_browser=このブラウザはHTML5のvideoタグをサポートしていません。 +stored_lfs=Git LFSで保管されています +commit_graph=コミットグラフ +editor.new_file=ファイルを作成 +editor.upload_file=ファイルをアップロード editor.edit_file=ファイルを編集 +editor.preview_changes=変更をプレビュー +editor.cannot_edit_non_text_files=バイナリファイルをWebインタフェースから編集することはできません editor.edit_this_file=このファイルを編集 +editor.must_be_on_a_branch=このファイルを作成または変更の提案をするには、ブランチ上である必要があります。 +editor.fork_before_edit=このファイルを編集する前にこのリポジトリをフォークする必要があります。 editor.delete_this_file=このファイルを削除 +editor.must_have_write_access=このファイルを作成または変更の提案をするには、書き込み権限が必要です。 +editor.file_delete_success=ファイル '%s' は正常に削除されました。 +editor.name_your_file=ファイル名を指定... +editor.filename_help=ディレクトリを作成するには、/ を入力してください。ディレクトリを削除するには、入力欄の先頭でバックスペースを押してください。 +editor.or=または editor.cancel_lower=キャンセル editor.commit_changes=変更をコミット +editor.add_tmpl='%s/' を追加 editor.add='%s' を追加 editor.update='%s' を更新 editor.delete='%s' を削除 +editor.commit_message_desc=詳細を追加... +editor.commit_directly_to_this_branch=ブランチ%sへ直接コミットする。 +editor.create_new_branch=新しいブランチにコミットしてプルリクエストを作成する。 editor.new_branch_name_desc=新しいブランチ名... editor.cancel=キャンセル editor.filename_cannot_be_empty=ファイル名を入力してください。 editor.branch_already_exists=ブランチ '%s' は、このリポジトリに既に存在します。 +editor.directory_is_a_file=リポジトリのファイル '%s' はディレクトリではありません。 +editor.file_is_a_symlink=ファイル '%s' はシンボリックリンクのため、Webエディターからは変更できません。 +editor.filename_is_a_directory=リポジトリにディレクトリ '%s' が既に存在します。 +editor.file_editing_no_longer_exists=編集したファイル '%s' は既にこのリポジトリに存在しません。 +editor.file_changed_while_editing=あなたが編集をはじめて以降、ファイルの内容が変更されています。ここをクリックして何が変更されたか確認するか、もう一度コミットをクリックして変更を上書きできます。 +editor.file_already_exists=ファイル '%s' は既に存在します。 +editor.no_changes_to_show=表示する変更箇所はありません。 +editor.fail_to_update_file=ファイル '%s' を作成または変更できませんでした: %v +editor.add_subdir=サブディレクトリを追加... +editor.unable_to_upload_files='%s' へファイルをアップロードすることができませんでした: %v editor.upload_files_to_dir='%s' にファイルをアップロードする +editor.cannot_commit_to_protected_branch=保護されたブランチ '%s' にコミットすることはできません。 +commits.desc=コミットでは、コードの変更履歴を見ることができます。 commits.commits=コミット commits.search=コミットの検索 commits.find=検索 @@ -397,9 +604,13 @@ commits.message=メッセージ commits.date=日付 commits.older=古い commits.newer=新しい +commits.signed_by=署名者 +commits.gpg_key_id=GPGキーID ext_issues=外部課題 +ext_issues.desc=外部の課題管理ページへのリンク +issues.desc=課題では、タスクやバグを管理することができます。 issues.new=新しい問題 issues.new.labels=ラベル issues.new.no_label=ラベルなし @@ -412,13 +623,27 @@ issues.new.closed_milestone=クローズされたマイルストーン issues.new.assignee=担当者 issues.new.clear_assignee=担当者をクリア issues.new.no_assignee=担当者なし +issues.no_ref=ブランチ/タグが指定されていません issues.create=問題を作成 issues.new_label=新しいラベル issues.new_label_placeholder=ラベル名... issues.create_label=ラベルを作成 +issues.label_templates.title=予め定義されたラベルセットを読み込む +issues.label_templates.info=まだラベルはありません。上の"新しいラベル"をクリックして新しいラベルを作成するか、以下の予め定義されたラベルセットを使うことができます。 issues.label_templates.helper=ラベルセットを選択する issues.label_templates.use=このラベルセットを使用する +issues.label_templates.fail_to_load_file=ラベルテンプレート '%s' を読み込めませんでした: %v +issues.add_label_at=が %[4]s にラベル
%[3]s
を追加しました +issues.remove_label_at=が %[4]s にラベル
%[3]s
を削除しました +issues.add_milestone_at=`が %[2]s にマイルストーン %[1]s を追加しました` +issues.change_milestone_at=`が %[3]s にマイルストーンを %[1]s から %[2]s へ変更しました` +issues.remove_milestone_at=`が %[2]s にマイルストーン %[1]s を削除しました` issues.deleted_milestone=`(削除済)` +issues.self_assign_at=`が %s に自身によって担当者に設定されました` +issues.add_assignee_at=`が %[2]s に %[1]s によって担当者に設定されました` +issues.remove_assignee_at=`が %s に担当者を解任しました` +issues.change_title_at=`が %[3]s にタイトルを %[1]s から %[2]s に変更しました` +issues.delete_branch_at=`が %[2]s にブランチ %[1]s を削除しました` issues.open_tab=%d オープン issues.close_tab=%d クローズ issues.filter_label=ラベル @@ -446,20 +671,28 @@ issues.action_milestone=マイルストーン issues.action_milestone_no_select=マイルストーンなし issues.action_assignee=担当者 issues.action_assignee_no_select=担当者なし +issues.opened_by=%[3]sが %[1]s に作成しました +issues.opened_by_fake=%[2]s が %[1]s に作成しました issues.previous=前ページ issues.next=次ページ issues.open_title=オープン issues.closed_title=クローズ issues.num_comments=%d コメント +issues.commented_at=`が %s にコメントしました` +issues.delete_comment_confirm=このコメントを削除してよろしいですか? issues.no_content=まだコンテンツがありません issues.close_issue=閉じる issues.close_comment_issue=コメントしてクローズ issues.reopen_issue=再開 issues.reopen_comment_issue=コメントと再開 issues.create_comment=コメント  +issues.closed_at=`が %[2]s に閉じました` +issues.reopened_at=`が %[2]s に再び開きました` +issues.commit_ref_at=`がコミット %[2]s でこの課題に言及しました` issues.poster=ポスター issues.collaborator=コラボレータ issues.owner=オーナー +issues.sign_in_require_desc=ログインして議論に参加 issues.edit=編集 issues.cancel=キャンセル issues.save=保存 @@ -471,16 +704,36 @@ issues.label_edit=編集 issues.label_delete=削除 issues.label_modify=ラベルの変更 issues.label_deletion=ラベルの削除 +issues.label_deletion_desc=ラベルを削除するとすべての課題から削除されます。続行しますか? +issues.label_deletion_success=ラベルは正常に削除されました。 +issues.label.filter_sort.alphabetically=アルファベット順 +issues.label.filter_sort.reverse_alphabetically=逆アルファベット順 issues.label.filter_sort.by_size=サイズ +issues.label.filter_sort.reverse_by_size=長さの逆順 issues.num_participants=参加者数 %d +issues.attachment.open_tab=`クリックして新しいタブで "%s" を見る` +issues.attachment.download=`クリックして "%s" をダウンロード` +issues.subscribe=購読する +issues.unsubscribe=購読の解除 +issues.tracker=タイムトラッカー issues.start_tracking_short=開始 +issues.start_tracking=タイムトラッキングを開始 +issues.start_tracking_history=`が %s に作業を開始` +issues.tracking_already_started=`この課題で既にタイムトラッキングを開始しています` issues.stop_tracking=停止 +issues.stop_tracking_history=`が %s に作業を終了` +issues.add_time=手動で時間を追加 issues.add_time_short=追加 issues.add_time_cancel=キャンセル +issues.add_time_history=`が %s に作業時間を追加` issues.add_time_hours=時間 issues.add_time_minutes=分 +issues.add_time_sum_to_small=時間が入力されていません issues.cancel_tracking=キャンセル +issues.cancel_tracking_history=`が %s にタイムトラッキングを中断` +issues.time_spent_total=総経過時間 +pulls.desc=プルでは、コードレビューとマージリクエストの管理を行えます。 pulls.new=新しいプルリクエスト pulls.compare_changes=変更を比較 pulls.compare_changes_desc=2つのブランチを比較し、プルリクエストを作成します。 @@ -488,14 +741,29 @@ pulls.compare_base=ベース pulls.compare_compare=比較 pulls.filter_branch=フィルターブランチ pulls.no_results=結果が見つかりませんでした。 +pulls.nothing_to_compare=ベースブランチとヘッドブランチが同一であるため、比較するものがありません。 pulls.has_pull_request=`既にプルリクエストがこれらのターゲット間に存在します: %[2]s#%[3]d` pulls.create=プルリクエストを作成します。 +pulls.title_desc=が %[1]d 個のコミットを %[2]s から %[3]s へマージしようとしています +pulls.merged_title_desc=が %[4]s に %[1]d 個のコミットを %[2]s から %[3]s へマージしました pulls.tab_conversation=会話 pulls.tab_commits=コミット pulls.tab_files=ファイルが変更された +pulls.reopen_to_merge=このプルリクエストをマージする場合は、再び開いてください pulls.merged=マージされた +pulls.has_merged=このプルリクエストは正常にマージされました。 +pulls.data_broken=フォーク情報の削除によってこのプルリクエストのデータは壊れています。 +pulls.is_checking=コンフリクトの確認が進行中です。しばらく経ってからページを更新してください。 +pulls.can_auto_merge_desc=このプルリクエストは自動的にマージできます。 +pulls.cannot_auto_merge_desc=コンフリクトが存在するため、このプルリクエストは自動的にマージできません。 pulls.cannot_auto_merge_helper=競合を解決するためには、手動でマージする必要があります。 +pulls.no_merge_desc=マージオプションが有効になっていないため、このプルリクエストをマージすることはできません。 +pulls.no_merge_helper=このプルリクエストをマージするには、少なくとも1つのマージオプションをリポジトリ設定で有効にするか、手動でマージする必要があります。 pulls.merge_pull_request=プルリクエストをマージします。 +pulls.rebase_merge_pull_request=リベースしてマージ +pulls.squash_merge_pull_request=スカッシュしてマージ +pulls.invalid_merge_option=このプルリクエストにこのマージオプションを使うことはできません +pulls.open_unmerged_pull_exists=`同じリポジトリに同じマージ情報持つ未解決のプルリクエスト (#%d) が存在するため再び開くことができません。` milestones.new=新しいマイルストーン milestones.open_tab=%d オープン @@ -513,36 +781,91 @@ milestones.clear=消去 milestones.invalid_due_date_format=期限日付のフォーマットが無効、'yyyy-mm-dd' のフォーマットが必要です。 milestones.create_success=マイルス トーン '%s' が正常に作成されました! milestones.edit=マイルス トーンを編集 +milestones.edit_subheader=メンバーを混乱させないよう、マイルストーンの説明はわかりやすくしましょう。 milestones.cancel=キャンセル milestones.modify=マイルス トーンを変更します。 milestones.edit_success=マイルス トーン '%s' の変更が正常に保存されました。 milestones.deletion=マイルス トーンの削除 +milestones.deletion_desc=このマイルストーンを削除すると、全ての課題から削除されます。続行しますか? milestones.deletion_success=マイルス トーンは正常に削除されました。 +milestones.filter_sort.closest_due_date=期日が近い +milestones.filter_sort.furthest_due_date=期日が遠い milestones.filter_sort.least_complete=完成度の低い順 milestones.filter_sort.most_complete=完成度の高い順 milestones.filter_sort.most_issues=課題の多い順 milestones.filter_sort.least_issues=課題の少ない順 ext_wiki=外部Wiki +ext_wiki.desc=外部 Wiki へのリンク wiki=Wiki wiki.welcome=Wiki へようこそ! +wiki.welcome_desc=Wiki によって、あなたや共同編集者は手軽にプロジェクトを文書化できます。 +wiki.desc=Wiki では、文書を保管することができます。 wiki.create_first_page=最初のページを作成する。 wiki.page=ページ wiki.filter_page=フィルターページ wiki.new_page=新しいページを作成 +wiki.default_commit_message=このページの更新についてメモを書く(オプション) wiki.save_page=ページを保存 wiki.last_commit_info=%s このページを編集 %s wiki.edit_page_button=編集 wiki.new_page_button=新規ページ wiki.delete_page_button=ページの削除 +wiki.delete_page_notice_1=ページ "%s" を削除します。続行しますか? wiki.page_already_exists=既に同じ名前のWiki ページが存在します。 +wiki.reserved_page=Wiki ページ %s は予約されています。別の名前を指定してください。 wiki.pages=ページ wiki.last_updated=最終更新 %s +activity=アクティビティ +activity.period.filter_label=期間: +activity.period.daily=1 日 +activity.period.halfweekly=3 日 +activity.period.weekly=1 週間 +activity.period.monthly=1 ヶ月 +activity.overview=概要 +activity.active_prs_count_1=%d 件のアクティブなプルリクエスト +activity.active_prs_count_n=%d 件のアクティブなプルリクエスト +activity.merged_prs_count_1=マージされたプルリクエスト +activity.merged_prs_count_n=マージされたプルリクエスト +activity.opened_prs_count_1=提案されたプルリクエスト +activity.opened_prs_count_n=提案されたプルリクエスト +activity.title.user_1=%d 人のユーザー +activity.title.user_n=%d 人のユーザー +activity.title.prs_1=%d 件のプルリクエスト +activity.title.prs_n=%d 件のプルリクエスト +activity.title.prs_merged_by=%s が %s によってマージされました +activity.title.prs_opened_by=%s が %s によって提案されました +activity.merged_prs_label=マージ +activity.opened_prs_label=提案 +activity.active_issues_count_1=%d 件のアクティブな課題 +activity.active_issues_count_n=%d 件のアクティブな課題 +activity.closed_issues_count_1=終了した課題 +activity.closed_issues_count_n=終了した課題 +activity.title.issues_1=%d 件の課題 +activity.title.issues_n=%d 件の課題 +activity.title.issues_closed_by=%s が %s によって閉じられました +activity.title.issues_created_by=%s が %s によって開かれました +activity.closed_issue_label=終了 +activity.new_issues_count_1=新しい課題 +activity.new_issues_count_n=新しい課題 +activity.new_issue_label=開始 +activity.title.unresolved_conv_1=%d 件の未解決議論 +activity.title.unresolved_conv_n=%d 件の未解決議論 +activity.unresolved_conv_desc=最近変更があったが未解決の課題とプルリクエストの一覧 +activity.unresolved_conv_label=開始 +activity.title.releases_1=%d 件のリリース +activity.title.releases_n=%d 件のリリース +activity.title.releases_published_by=%s が %s によって発行されました +activity.published_release_label=発行 +search=検索 +search.search_repo=リポジトリの検索 +search.results=%[3]s 内での "%[1]s" の検索結果 settings=設定 +settings.desc=設定では、リポジトリの設定を管理することができます。 settings.options=オプション settings.collaboration=コラボレーション settings.collaboration.admin=管理 @@ -554,6 +877,7 @@ settings.githooks=Git のフック settings.basic_settings=基本設定 settings.mirror_settings=ミラー設定 settings.sync_mirror=今すぐ同期 +settings.mirror_sync_in_progress=ミラー同期が進行中です。数分後にページを更新してください。 settings.site=公式サイト settings.update_settings=設定の更新 settings.advanced_settings=拡張設定 @@ -566,33 +890,65 @@ settings.external_wiki_url_desc=Visitors will be redirected to URL when they cli settings.issues_desc=課題トラッキングツールを有効にする settings.use_internal_issue_tracker=Use builtin lightweight issue tracker settings.use_external_issue_tracker=外部課題トラッキングシステムを使用 +settings.external_tracker_url=外部の課題トラッキングツールのURL +settings.external_tracker_url_error=外部の課題トラッキングツールのURLが不正です +settings.external_tracker_url_desc=課題タブをクリックした時、このURLを開くようになります。 settings.tracker_url_format=外部課題トラッキングツール URLのフォーマット +settings.tracker_issue_style=外部の課題トラッキングツールの命名規則: settings.tracker_issue_style.numeric=数値 +settings.tracker_issue_style.alphanumeric=英数字 +settings.tracker_url_format_desc=プレースホルダ{user} {repo} {index}を利用できます。それぞれユーザー名、リポジトリ名、課題番号です。 +settings.enable_timetracker=タイムトラッカーを有効にする +settings.allow_only_contributors_to_track_time=コントリビューターのみにタイムトラッキングを許可 +settings.pulls_desc=プルリクエストを有効にしてコントリビューションを受け入れる +settings.pulls.ignore_whitespace=コンフリクト確認時に空白文字による変更を無視 +settings.pulls.allow_merge_commits=マージコミットを許可 +settings.pulls.allow_rebase_merge=マージのためのリベースを許可 +settings.pulls.allow_squash_commits=マージする前のスカッシュを許可 settings.danger_zone=危険地帯 settings.new_owner_has_same_repo=新しいオーナーは、既に同じ名前のリポジトリを持っています。 +settings.convert=通常のリポジトリに変更する +settings.convert_desc=ミラーを通常のリポジトリに変更できます。元に戻すことはできません。 +settings.convert_notices_1=- ミラーを通常のリポジトリに変更します。元に戻すことはできません。 +settings.convert_confirm=続行する +settings.convert_succeed=通常のリポジトリに変更されました。 settings.transfer=オーナー移転 settings.transfer_desc=リポジトリをあなたが管理者権限を持っている別のユーザーまた組織に移譲します。 +settings.transfer_notices_1=- 新しい所有者が個人ユーザーの場合、あなたはリポジトリにアクセスできなくなります。 +settings.transfer_notices_2=- 新しい所有者が組織で、あなたがその組織の所有者である場合はアクセス権が残ります。 +settings.transfer_form_title=操作を確認するために、以下の情報を入力してください: settings.wiki_delete=Wikiのデータ消去 settings.wiki_delete_desc=Wikiのデータを消去すると元に戻すことは出来ません。よく確認してください。 +settings.wiki_delete_notices_1=- %s の Wiki を削除して無効にします。 +settings.wiki_deletion_success=リポジトリの Wiki のデータは削除されました。 settings.delete=このリポジトリを削除 settings.delete_desc=リポジトリを削除すると元に戻せません。確実に確認してください。 settings.delete_notices_1=-この操作は元に戻せません 。 +settings.delete_notices_2=- %s のコード、課題、コメント、Wiki、共同編集者の関連付けを含むすべてが永久に削除されます。 +settings.delete_notices_fork_1=- 削除後、すべてのフォークは独立したリポジトリになります。 settings.deletion_success=リポジトリが削除されました。 +settings.update_settings_success=リポジトリの設定が更新されました。 settings.transfer_owner=新しいオーナー settings.make_transfer=転送 +settings.transfer_succeed=リポジトリの所有権は移譲されました。 settings.confirm_delete=削除を確認 settings.add_collaborator=新しい共同編集者を追加 settings.add_collaborator_success=新しい共同編集者が追加されました。 settings.delete_collaborator=削除 settings.collaborator_deletion=共同編集者の削除 +settings.collaborator_deletion_desc=削除後、このユーザーはこのリポジトリへアクセスできなくなります。続行しますか? settings.remove_collaborator_success=共同編集者が削除されました。 settings.search_user_placeholder=Search users settings.org_not_allowed_to_be_collaborator=組織を共同編集者として追加することはできません。 settings.user_is_org_member=ユーザーは組織の一員なので、共同編集者として追加することはできません。 settings.add_webhook=Webhook を追加 +settings.hooks_desc=WebフックはHTTP POSTイベントトリガに良く似ています。Giteaで何かが起こると、指定のホストへ通知を送信します。詳細はこちらのWebフックガイドをご覧ください。 settings.webhook_deletion=Webhook を削除 +settings.webhook_deletion_desc=Webフックを削除すると、すべての情報と配信履歴が削除されます。続行しますか? settings.webhook_deletion_success=Webhook が正常に削除されました。 settings.webhook.test_delivery=テスト配信 +settings.webhook.test_delivery_desc=Webフックの設定をテストするために偽のイベントを配信します +settings.webhook.test_delivery_success=テストWebフックが配信キューに追加されました。配信履歴に表示されるまで数秒かかります。 settings.webhook.request=リクエスト settings.webhook.response=レスポンス settings.webhook.headers=ヘッダ @@ -603,6 +959,7 @@ settings.githook_edit_desc=もしフックがアクティブではない場合 settings.githook_name=フックの名前 settings.githook_content=コンテンツをフック settings.update_githook=フックを更新 +settings.add_webhook_desc=Giteaは発生したイベントの情報をPOSTリクエストで指定されたURLに送信します。フックの発行時に受け取るデータの形式(JSON, x-www-form-urlencoded, XML, など)も指定することができます。より詳しい情報はWebフックガイドをご覧ください。 settings.payload_url=ペイロードの URL settings.content_type=コンテンツ タイプ settings.secret=秘密 @@ -618,11 +975,13 @@ settings.event_choose=必要なものを選択しましょう。 settings.event_create=作成 settings.event_create_desc=ブランチ、またはタグを作成 settings.event_pull_request=プルリクエスト +settings.event_pull_request_desc=プルリクエストの開閉、編集、担当者変更、ラベル更新、同期 settings.event_push=プッシュ settings.event_push_desc=Git リポジトリにプッシュ settings.event_repository=リポジトリ settings.event_repository_desc=リポジトリの作成または削除 settings.active=アクティブ +settings.active_helper=このフックを発行したイベントの詳細情報を併せて配信する。 settings.add_hook_success=新しい webhook が追加されました。 settings.update_webhook=Webhookを更新 settings.update_hook_success=Webhook を更新しました。 @@ -633,9 +992,13 @@ settings.add_slack_hook_desc= Slack インテグレーション settings.slack_token=トークン settings.slack_domain=ドメイン settings.slack_channel=チャンネル +settings.add_discord_hook_desc=リポジトリに Discord 連携を追加します。 +settings.add_dingtalk_hook_desc=リポジトリに Dingtalk 連携を追加します。 settings.deploy_keys=デプロイキー settings.add_deploy_key=デプロイキーを追加 settings.deploy_key_desc=個人アカウントのSSHキーとは異なり、デプロイキーは読み取り専用アクセスとなります。 +settings.is_writable=書き込み権限を付与 +settings.is_writable_info=このキーにこのリポジトリへのプッシュ許可しますか?デプロイキーは常にプル権限を持っています。 settings.no_deploy_keys=でプロキーは1つも追加されていません。 settings.title=タイトル settings.deploy_key_content=コンテント @@ -643,34 +1006,59 @@ settings.key_been_used=デプロイキーが使用されています。 settings.key_name_used=同じ名前のデプロイキーが既に存在しています。 settings.add_key_success=新しいデプロイキー '%s'が正常に追加されました! settings.deploy_key_deletion=デプロイキーを削除 +settings.deploy_key_deletion_desc=このデプロイキーを削除すると、このリポジトリに関連するすべてのアクセス権も削除されます。続行しますか? +settings.deploy_key_deletion_success=デプロイキーが正常に削除されました。 settings.branches=ブランチ settings.protected_branch=ブランチの保護 -settings.protected_branch_can_push=プッシュを許可しますか? +settings.protected_branch_can_push=プッシュを許可する +settings.protected_branch_can_push_yes=プッシュできます +settings.protected_branch_can_push_no=プッシュできません +settings.branch_protection=ブランチ %s の保護 settings.protect_this_branch=このブランチを保護する +settings.protect_this_branch_desc=強制プッシュを無効にして削除を防止する +settings.protect_whitelist_committers=このブランチへのプッシュ権限を与えるホワイトリストユーザー +settings.protect_whitelist_committers_desc=ユーザーまたはチームをホワイトリストに追加します。追加されたユーザはプッシュの制限を受けません。 +settings.protect_whitelist_users=このブランチへのプッシュ権限を与えるユーザー settings.protect_whitelist_search_users=ユーザーを検索する +settings.protect_whitelist_teams=メンバーにこのブランチへのプッシュ権限を与えるチーム settings.protect_whitelist_search_teams=チームを検索する settings.add_protected_branch=保護を有効にする settings.delete_protected_branch=保護を無効にする +settings.update_protect_branch_success=ブランチ %s の保護設定は正常に変更されました。 +settings.remove_protected_branch_success=ブランチ %s の保護設定は正常に削除されました +settings.protected_branch_deletion=保護されたブランチの削除 +settings.protected_branch_deletion_desc=書き込み権限のあるユーザーはこのブランチに直接プッシュできるようになります。よろしいですか? +settings.default_branch_desc=デフォルトブランチはプルリクエストやコミットが自動的に作成される際、別のブランチが指定されなかった場合に"ベース"として選択されるブランチです。 settings.choose_branch=ブランチを選択する... +settings.no_protected_branch=保護されたブランチがありません diff.browse_source=ソースを参照 diff.parent=親 diff.commit=コミット +diff.data_not_available=差分の内容は表示できません diff.show_diff_stats=差分情報を表示 diff.show_split_view=分割表示 +diff.show_unified_view=統一表示 diff.stats_desc=共有%d 個のファイルを変更した%d 個の追加%d 個の削除を含む +diff.bin=バイナリ diff.view_file=ファイルの表示 +diff.file_suppressed=ファイル差分が大きすぎるため省略します +diff.too_many_files=多くのファイルが変更されたため、一部のファイルはこの差分に表示されません +releases.desc=リリースでは、プロジェクトのバージョンを管理することができます。 release.releases=リリース release.new_release=新しいリリース release.draft=ドラフト release.prerelease=プレリリース release.stable=安定 release.edit=編集 -release.ahead=このリリース以降 %s へ %d コミット +release.ahead=このリリース以降 %d 件のコミットが %s へ反映されました。 release.source_code=ソース コード +release.new_subheader=プロジェクトのバージョンを追跡するため、リリースを発行します。 +release.edit_subheader=詳細な変更ログは、何が改善されたのかを知る上で役に立つでしょう。 release.tag_name=タグ名 release.target=ターゲット +release.tag_helper=既存のタグを選択するか、新しいタグを作成します。 release.title=タイトル release.content=コンテント release.write=書込み @@ -684,12 +1072,35 @@ release.save_draft=下書きを保存 release.edit_release=リリースを編集 release.delete_release=このリリースを削除 release.deletion=リリースの削除 +release.deletion_desc=このリリースを削除すると、対応するGitのタグも削除されます。コードを失うことはありません。続行しますか? +release.deletion_success=リリースが削除されました。 release.tag_name_already_exist=このタグ名には既にリリースが存在します。 +release.tag_name_invalid=タグ名が不正です。 release.downloads=ダウンロード -branch.delete=分岐 %s を削除します。 +branch.name=ブランチ名 +branch.search=ブランチを検索 +branch.already_exists=ブランチ %s は既に存在します +branch.delete_head=削除 +branch.delete=ブランチ %s を削除 +branch.delete_html=ブランチを削除 +branch.delete_desc=ブランチを削除すると復元できません。よく確認してください。 +branch.delete_notices_1=この操作は取り消しできません。 +branch.delete_notices_2=- この操作はブランチ %s のすべての情報を永久に削除します。 +branch.delete_notices_html=- この操作はブランチ %s のすべての情報を永久に削除します。 branch.deletion_success='%s' は削除されました。 -branch.deletion_failed=分岐 %s を削除できませんでした。 +branch.deletion_failed=ブランチ %s の削除に失敗しました。 +branch.delete_branch_has_new_commits=マージ後に新しいコミットが追加されているため %s を削除できません。 +branch.create_branch=ブランチ %s を作成 +branch.create_from='%s' から +branch.create_success=ブランチ '%s' が正常に作成されました。 +branch.branch_already_exists=ブランチ '%s' は既にリポジトリに存在します。 +branch.branch_name_conflict=ブランチ名 '%s' は既に存在するブランチ '%s' と衝突しています。 +branch.tag_collision=ブランチ '%s' は同じ名前が既にリポジトリに存在するため、タグとして作成できません。 +branch.deleted_by=%s によって削除 +branch.restore_success=%s は正常に復元されました +branch.restore_failed=ブランチ %s を復元できませんでした。 +branch.protected_deletion_failed=保護されたブランチ %s を削除することはできません。 [org] org_name_holder=組織名 @@ -705,9 +1116,14 @@ create_new_team=新しいチームを作成 org_desc=説明 team_name=チーム名 team_desc=説明 +team_name_helper=議論時に用いるチーム名です。 +team_desc_helper=どんなチームですか? +team_permission_desc=このチームに必要な権限レベルは? +team_unit_desc=このチームへどのユニットへのアクセス権を与えますか? form.name_reserved=組織名 '%s' は予約されています。 form.name_pattern_not_allowed=組織名のパターン '%s' は許可されていません。 +form.create_org_not_allowed=このユーザーは組織の作成が許可されていません。 settings=設定 settings.options=オプション @@ -715,12 +1131,18 @@ settings.full_name=フルネーム settings.website=WEBサイト settings.location=ロケーション settings.update_settings=設定の更新 +settings.update_setting_success=組織の設定が更新されました。 +settings.change_orgname_prompt=この変更は組織へのリンクに影響します。 +settings.update_avatar_success=組織のアバター画像が更新されました。 settings.delete=組織を削除 settings.delete_account=この組織を削除 settings.delete_prompt=この操作をすると組織が完全に削除され、二度と元に戻すことができなくなります ! settings.confirm_delete_account=削除を確認 settings.delete_org_title=組織の削除 +settings.delete_org_desc=この組織は永久に削除されます。続行しますか? +settings.hooks_desc=この組織のすべてのリポジトリに対して発行されるWebフックを追加します。 +members.membership_visibility=所属の公開/非公開: members.public=パブリック members.public_helper=プライベートにする members.private=プライベート @@ -738,7 +1160,9 @@ teams.leave=退出 teams.read_access=読み取りアクセス権 teams.read_access_helper=このチームはリポジトリの閲覧とクローンをすることができます。 teams.write_access=書き込みアクセス権 +teams.write_access_helper=このチームはリポジトリの閲覧とプッシュすることができます。 teams.admin_access=管理者のアクセス権 +teams.admin_access_helper=このチームはリポジトリへのプッシュ、プル、および他の共同編集者を追加することができます。 teams.no_desc=このチームは説明がありません。 teams.settings=設定 teams.owners_permission_desc=オーナーはすべてのリポジトリ へのフルアクセス権、組織の 管理権限を持ちます。 @@ -747,6 +1171,7 @@ teams.update_settings=設定の更新 teams.delete_team=このチームを削除 teams.add_team_member=チーム メンバーを追加 teams.delete_team_title=チームの削除 +teams.delete_team_desc=このチームが削除されると、メンバーはいくつかのリポジトリへのアクセス権を失う可能性があります。続行しますか? teams.delete_team_success=このチームが削除されました。 teams.read_permission_desc=このチームは読み取り権限を持ち: メンバーはリポジトリの表示及びクローンの作成ができます。 teams.write_permission_desc=このチームは書き込み権限を持ち: メンバーはリポジトリの表示及リポジトリへのプッシュができます。 @@ -766,6 +1191,8 @@ authentication=認証 config=コンフィギュレーション notices=システム通知 monitor=モニタリング +first_page=最初 +last_page=最後 total=合計: %d dashboard.statistic=統計 @@ -775,8 +1202,24 @@ dashboard.statistic_info=Gitea データベースは %d ユーザ, %d< dashboard.operation_name=操作の名前 dashboard.operation_switch=スイッチ dashboard.operation_run=実行 +dashboard.clean_unbind_oauth=関連付けられていないOAuth接続を削除 +dashboard.clean_unbind_oauth_success=すべての関連付けられていないOAuth接続は削除されました。 dashboard.delete_inactivate_accounts=非アクティブのアカウントをすべて削除 +dashboard.delete_inactivate_accounts_success=すべての非アクティブなアカウントは削除されました。 dashboard.delete_repo_archives=リポジトリのすべてのアーカイブを削除 +dashboard.delete_repo_archives_success=リポジトリのすべてのアーカイブが削除されました。 +dashboard.delete_missing_repos=Gitファイルが失われたリポジトリのすべてのレコードを削除 +dashboard.delete_missing_repos_success=Gitファイルが削除されたリポジトリのすべてのレコードが削除されました。 +dashboard.git_gc_repos=すべてのリポジトリでガベージコレクションを実行 +dashboard.git_gc_repos_success=すべてのリポジトリでガベージコレクションが実行されました。 +dashboard.resync_all_sshkeys=GiteaのSSHキーのために'.ssh/authorized_keys'ファイルを再生成する。内蔵SSHサーバーを使っている場合は、これを行う必要はありません。 +dashboard.resync_all_sshkeys_success=Giteaが管理するすべての公開鍵が書き込まれました。 +dashboard.resync_all_hooks=すべてリポジトリの pre-receive, update, post-receive フックを更新する。 +dashboard.resync_all_hooks_success=すべてリポジトリの pre-receive, update, post-receive フックが更新されました。 +dashboard.reinit_missing_repos=レコードの存在するすべての失われたGitリポジトリを再初期化する +dashboard.reinit_missing_repos_success=レコードの存在するすべての失われたGitリポジトリが再初期化されました。 +dashboard.sync_external_users=外部ユーザーデータの同期 +dashboard.sync_external_users_started=外部ユーザーの同期を開始しました dashboard.server_uptime=サーバーの稼働時間 dashboard.current_goroutine=現在のGoroutine dashboard.current_memory_usage=現在のメモリ使用量 @@ -807,76 +1250,151 @@ dashboard.total_gc_pause=GC一時停止の合計 dashboard.last_gc_pause=直近のGC一時停止 dashboard.gc_times=GC実行回数 +users.user_manage_panel=ユーザー管理パネル users.new_account=新規アカウントを作成 users.name=名前 users.activated=アクティブ化 users.admin=アドミン users.repos=リポジトリ users.created=作成されました +users.last_login=最終ログイン +users.never_login=未ログイン users.send_register_notify=登録通知をユーザーに送信 +users.new_success=アカウント '%s' が作成されました。 users.edit=編集 users.auth_source=認証ソース users.local=ローカル users.auth_login_name=認証ログイン名 users.password_helper=それをそのまま空のままにします。 +users.update_profile_success=アカウントのプロフィールが更新されました。 users.edit_account=アカウントの編集 +users.max_repo_creation=最大リポジトリ数制限 +users.max_repo_creation_desc=( -1 を設定するとデフォルトの制限が適用されます) +users.is_activated=有効 +users.prohibit_login=ログイン制限 users.is_admin=このアカウントには管理者の権限を持つ +users.allow_git_hook=Gitフックの作成を許可 +users.allow_import_local=ローカルリポジトリのインポートを許可 +users.allow_create_organization=組織の作成を許可 users.update_profile=アカウント ・ プロファイルを更新 users.delete_account=このアカウントを削除 +users.still_own_repo=このアカウントが所有するリポジトリが存在します。リポジトリを削除するか移譲する必要があります。 +users.still_has_org=このユーザーは組織に所属しています。組織から脱退するか組織を削除する必要があります。 +users.deletion_success=アカウントが正常に削除されました。 +orgs.org_manage_panel=組織管理パネル orgs.name=名前 orgs.teams=チーム orgs.members=メンバー +orgs.new_orga=組織を作成 +repos.repo_manage_panel=リポジトリ管理パネル repos.owner=オーナー repos.name=名前 repos.private=プライベート +repos.watches=ウォッチ +repos.stars=お気に入り repos.issues=課題 +repos.size=容量 +auths.auth_manage_panel=認証管理パネル auths.new=新しいソースを追加 auths.name=名前 auths.type=タイプ +auths.enabled=有効 +auths.syncenabled=ユーザー同期を有効にする auths.updated=更新しました auths.auth_type=認証タイプ auths.auth_name=認証名 +auths.security_protocol=セキュリティプロトコル auths.domain=ドメイン auths.host=ホスト auths.port=ポート auths.bind_dn=バインド DN auths.bind_password=バインド パスワード +auths.bind_password_helper=警告: このパスワードは暗号化されずに格納されます。特権を持つアカウントを使用しないでください。 auths.user_base=ユーザ検索ベース +auths.user_dn=ユーザーDN +auths.attribute_username=ユーザー名の属性 +auths.attribute_username_placeholder=ログインフォームの値を使う場合は空にしてください。 auths.attribute_name=名前属性 auths.attribute_surname=名字属性 auths.attribute_mail=Eメール属性 +auths.attributes_in_bind=属性をバインドDNのコンテクストから取得する auths.filter=User フィルター auths.admin_filter=Admin フィルター +auths.ms_ad_sa=MS AD 検索属性 auths.smtp_auth=SMTP 認証の種類 auths.smtphost=SMTP ホスト auths.smtpport=SMTP ポート auths.allowed_domains=許可されているドメイン +auths.allowed_domains_helper=制限しない場合は空にしてください。複数ドメインを指定する場合はカンマ","で区切ってください。 auths.enable_tls=TLS 暗号化を有効にする auths.skip_tls_verify=TLSベリファイを省略 auths.pam_service_name=PAMサービス名 +auths.oauth2_provider=OAuth2プロバイダ +auths.oauth2_clientID=クライアントID (キー) +auths.oauth2_clientSecret=クライアント シークレット +auths.openIdConnectAutoDiscoveryURL=OpenID Connect自動検出URL +auths.oauth2_use_custom_url=デフォルトURLの代わりにカスタムURLを使用する +auths.oauth2_tokenURL=トークン URL +auths.oauth2_authURL=認可 URL +auths.oauth2_profileURL=プロフィール URL +auths.oauth2_emailURL=Eメール URL auths.enable_auto_register=自動登録を有効にする auths.tips=ヒント +auths.tips.oauth2.general=OAuth2 認証 +auths.tips.oauth2.general.tip=新しいOAuth2認証を登録する際、コールバック/リダイレクトURLは以下の通りにしてください: /user/oauth2//callback +auths.tip.oauth2_provider=OAuth2プロバイダ +auths.tip.bitbucket=新しいOAuthコンシューマを https://bitbucket.org/account/user//oauth-consumers/new から登録し、"Account"-"Read"権限を追加してください +auths.tip.dropbox=新しいアプリケーションを https://www.dropbox.com/developers/apps から登録してください +auths.tip.facebook=新しいアプリケーションを https://developers.facebook.com/apps で登録し、"Facebook Login"を追加してください。 +auths.tip.github=新しいOAuthアプリケーションを https://github.com/settings/applications/new から登録してください。 +auths.tip.gitlab=新しいアプリケーションを https://gitlab.com/profile/applications から追加してください +auths.tip.google_plus=OAuth2クライアント資格情報を Google API コンソール (https://console.developers.google.com/) から取得してください +auths.tip.openid_connect=エンドポイントの指定に OpenID Connect自動検出URL (/.well-known/openid-configuration) を使用してください +auths.tip.twitter=https://dev.twitter.com/apps へアクセスしてアプリケーションを作成し、“Allow this application to be used to Sign in with Twitter”オプションを有効にしてください。 +auths.edit=認証設定を編集 auths.activated=認証がアクティブされました +auths.new_success=新しい認証 '%s' が追加されました。 +auths.update_success=認証の設定が更新されました。 +auths.update=認証設定を更新 +auths.delete=この認証ソースを削除 +auths.delete_auth_title=認証ソースを削除 +auths.delete_auth_desc=認証ソースを削除します。続行しますか? +auths.still_in_used=この認証ソースは一部のユーザーに利用されています。それらのユーザーを削除するか、別のログインタイプに変更してください。 auths.deletion_success=認証が正常に削除されました。 +auths.login_source_exist=認証ソース '%s' は既に存在します。 config.server_config=サーバーの構成 config.app_name=アプリケーション名 config.app_ver=アプリケーションのバージョン config.app_url=アプリケーションの URL +config.custom_conf=設定ファイルのパス config.domain=ドメイン config.offline_mode=オフラインモード config.disable_router_log=ルーターのログを無効にする config.run_user=実行ユーザ config.run_mode=実行モード +config.git_version=Gitバージョン config.repo_root_path=リポジトリのルートパス +config.lfs_root_path=LFSルートパス config.static_file_root_path=静的ファイルのルートパス config.log_file_root_path=ログ ファイルのルート パス config.script_type=スクリプトの種類 config.reverse_auth_user=リバース認証ユーザ +config.ssh_config=SSH設定 +config.ssh_enabled=有効 +config.ssh_start_builtin_server=内蔵サーバーを起動 +config.ssh_domain=ドメイン +config.ssh_port=ポート番号 +config.ssh_listen_port=待受ポート番号 +config.ssh_root_path=ルートパス +config.ssh_key_test_path=キーテストパス +config.ssh_keygen_path=キージェネレータ('ssh-keygen')パス +config.ssh_minimum_key_size_check=最小キー長のチェック +config.ssh_minimum_key_sizes=最小キー長 config.db_config=データベースの構成 config.db_type=タイプ @@ -886,20 +1404,30 @@ config.db_user=ユーザ config.db_ssl_mode=SSL モード config.db_ssl_mode_helper=(「postgres」のみ) config.db_path=パス +config.db_path_helper=("sqlite3"および"tidb"のみ) config.service_config=サービスの構成 config.register_email_confirm=電子メールの確認を必要 config.disable_register=登録を無効にする +config.enable_openid_signup=OpenIDでの登録が有効 +config.enable_openid_signin=OpenIDでのログインが有効 config.show_registration_button=登録ボタンを表示します。 config.require_sign_in_view=サインインを要求 config.mail_notify=メール通知 config.disable_key_size_check=最小キー サイズ チェックを無効にします config.enable_captcha=Captchaを有効にする config.active_code_lives=コードリンクの有効期限をアクティブ +config.reset_password_code_lives=パスワードリセット用リンクの有効期限 +config.default_keep_email_private=メールアドレス非公開設定の既定値 +config.default_allow_create_organization=デフォルトで組織を作成する権限を持つ +config.default_enable_timetracking=タイムトラッキングがデフォルトで有効 +config.default_allow_only_contributors_to_track_time=デフォルトでコントリビューターのみにタイムトラックを許可 +config.no_reply_address=No-replyアドレス config.webhook_config=Webhook設定 config.queue_length=キューの長さ config.deliver_timeout=送信タイムアウト +config.skip_tls_verify=TLSの確認が無効 config.mailer_config=メーラーの構成 config.mailer_enabled=有効にした @@ -907,8 +1435,15 @@ config.mailer_disable_helo=HELOコマンド無効 config.mailer_name=名前 config.mailer_host=ホスト config.mailer_user=ユーザ +config.mailer_use_sendmail=Sendmailを使う +config.mailer_sendmail_path=Sendmailのパス +config.mailer_sendmail_args=Sendmailの追加引数 +config.send_test_mail=テストメールを送信 +config.test_mail_failed='%s' へのメール送信に失敗しました: %v +config.test_mail_sent=テストメールが '%s' へ送信されました。 config.oauth_config=OAuth 構成 +config.oauth_enabled=有効 config.cache_config=キャッシュの構成 config.cache_adapter=キャッシュ アダプター @@ -928,7 +1463,19 @@ config.cookie_life_time=クッキーのライフタイム config.picture_config=画像構成 config.picture_service=画像サービス config.disable_gravatar=グラバターを無効にする +config.enable_federated_avatar=フェデレーテッド・アバターサービスが有効 +config.git_config=Git設定 +config.git_disable_diff_highlight=Diffのハイライトが無効 +config.git_max_diff_lines=最大の差分行数(1ファイルあたり) +config.git_max_diff_line_characters=最大の差分文字数(1行あたり) +config.git_max_diff_files=差分を表示する最大ファイル数 +config.git_gc_args=GC引数 +config.git_migrate_timeout=移行タイムアウト +config.git_mirror_timeout=ミラー更新タイムアウト +config.git_clone_timeout=クローン操作のタイムアウト +config.git_pull_timeout=プル操作のタイムアウト +config.git_gc_timeout=GC 操作のタイムアウト config.log_config=ログの構成 config.log_mode=ログ モード @@ -945,6 +1492,7 @@ monitor.start=開始日時 monitor.execute_time=実行時間: notices.system_notice_list=システム通知 +notices.view_detail_header=通知の詳細を表示 notices.actions=アクション notices.select_all=全て選択 notices.deselect_all=すべて選択解除 @@ -955,17 +1503,25 @@ notices.type=タイプ notices.type_1=リポジトリ notices.desc=説明 notices.op=Op。 +notices.delete_success=システム通知が削除されました。 [action] create_repo=がリポジトリ %s を作成しました rename_repo=%[1]s から [3]s にリポジトリ名を変更しました commit_repo=%[4]s%[3]sにプッシュしました -create_issue=`問題 %s#%[2]s を開きました` -create_pull_request=`プルリクエスト %s[2]sを作成` -comment_issue=`問題 %s#%[2]s のコメント` -merge_pull_request=`プルリクエスト %s[2]sをマージしました` +create_issue=`が課題 %s#%[2]s を作成しました` +close_issue=`が課題 %s#%[2]s を閉じました` +reopen_issue=`が課題 %s#%[2]s を再び開きました` +create_pull_request=`がプルリクエスト %s#%[2]s を作成しました` +close_pull_request=`がプルリクエスト %s#%[2]s を閉じました` +reopen_pull_request=`がプルリクエスト %s#%[2]s を再び開きました` +comment_issue=`が課題 %s#%[2]s へコメントしました` +merge_pull_request=`がプルリクエスト %s#%[2]s をマージしました` transfer_repo=リポジトリ %s%s へ転送しました push_tag=%[3]s に タグ %[2]s をプッシュしました +delete_tag=タグ %[2]s を %[3]s から削除しました +delete_branch=ブランチ %[2]s を %[3]s から削除しました +compare_commits=これら %d 件のコミットの比較を表示 [tool] ago=%s 前 @@ -990,17 +1546,31 @@ raw_seconds=秒 raw_minutes=分 [dropzone] +default_message=ここにファイルをドロップまたはクリックしてアップロードします。 invalid_input_type=このタイプのファイルはアップロードできません. +file_too_big=アップロードされたファイルのサイズ ({{filesize}} MB) が最大サイズ ({{maxFilesize}} MB) を超えています。 remove_file=ファイル削除 [notification] +notifications=通知 unread=未読 read=既読 +no_unread=未読の通知はありません +no_read=既読の通知はありません pin=Pin 通知 mark_as_read=既読にする mark_as_unread=未読にする +mark_all_as_read=全て既読にする [gpg] +error.extract_sign=書名の抽出に失敗しました +error.generate_hash=コミットのハッシュ生成に失敗しました +error.no_committer_account=コミット者のEメールアドレスに関連付けられたアカウントが存在しません +error.no_gpg_keys_found=この署名に対応する既知のキーがデータベースに存在しません +error.not_signed_commit=署名されたコミットではありません +error.failed_retrieval_gpg_keys=コミット者のアカウントに関連付けられたキーを取得できませんでした [units] +error.no_unit_allowed_repo=あなたがアクセス権を持つリポジトリユニットが存在しません +error.unit_not_allowed=あなたはこのリポジトリユニットにアクセス権限かありません diff --git a/options/locale/locale_ko-KR.ini b/options/locale/locale_ko-KR.ini index 196433edb..dff13de80 100644 --- a/options/locale/locale_ko-KR.ini +++ b/options/locale/locale_ko-KR.ini @@ -41,8 +41,14 @@ admin_panel=관리자 패널 account_settings=계정 설정 settings=설정 your_profile=프로필 +your_starred=즐겨찾기 your_settings=설정 +all=전체 +sources=소스 +mirrors=미러 +collaborative=협업 +forks=포크 activities=활동 pull_requests=풀 리퀘스트 @@ -53,6 +59,7 @@ cancel=취소 [install] install=설치 title=초기 설정 +docker_helper=Docker내에서 Gitea를 실행하고 있다면 이 페이지를 변경하기 전 가이드라인을 주의 깊게 읽어주세요. db_title=데이터베이스 설정 db_type=데이터베이스 유형 host=호스트 @@ -80,6 +87,7 @@ run_user_helper=사용자 계정은 저장소에 접근할 권한과 Gitea를 domain=도메인 domain_helper=Git SSH url에 영향을 미칩니다. ssh_port=SSH 포트 +ssh_port_helper=SSH 서버가 실행되고 있는 포트를 입력하세요. 비워둘 경우 SSH를 사용하지 않습니다. http_port=HTTP 포트 http_port_helper=포트 번호는 애플리케이션에서 열고 있습니다. app_url=애플리케이션 URL @@ -92,6 +100,7 @@ email_title=이메일 서비스 설정 smtp_host=SMTP 호스트 smtp_from=에서 smtp_from_helper=메일 발송 주소(RFC 5322). 일반적인 이메일 주소형태나 "Name" 형태를 입력할 수 있습니다. +mailer_user=전송자 mailer_password=발송 주소의 비밀번호 register_confirm=등록 확인 활성화 mail_notify=메일 알림 활성화 @@ -104,6 +113,10 @@ federated_avatar_lookup=연합 아바타 조회 활성화 federated_avatar_lookup_popup=libravatar 기반 오픈소스 서비스 사용 목적으로 연합 아바타 조회를 허용하기 disable_registration=직접 등록할 수 없게 함 disable_registration_popup=사용자가 직접 등록할 수 없게 합니다. 관리자만이 추가할 수 있습니다. +openid_signin=OpenID 로그인 사용 +openid_signin_popup=OpenID를 통한 유저 로그인 사용 +openid_signup=OpenID 계정생성 사용 +openid_signup_popup=OpenID 기반의 계정생성 사용 enable_captcha=Captcha 활성화 enable_captcha_popup=사용자 등록시 캡차 요구 require_sign_in_view=페이지를 보기 위해 로그인 사용 활성화 @@ -122,10 +135,14 @@ invalid_repo_path=저장소 루트 경로가 올바르지 않습니다: %v run_user_not_match=실행 유저가 현재 유저가 아닙니다: %s -> %s save_config_failed=설정을 저장할 수 없습니다: %v invalid_admin_setting=관리자 계정 설정이 잘못되었습니다: %v +install_success=환영합니다! Gitea를 선택해 주셔서 감사합니다. invalid_log_root_path=로그 루트 경로가 올바르지 않습니다: %v +default_keep_email_private=이메일을 숨기는 것을 기본으로 함 default_keep_email_private_popup=이것은 사용자의 이메일 주소 표시에 대한 기본 값입니다. 만약 true로 설정하신다면 모든 새로운 사용자의 이메일 주소는 그 사용자가 설정을 변경할때 까지 가려집니다. default_allow_create_organization=새로운 사용자가 조직을 만드는것에 대한 기본 권한값 default_allow_create_organization_popup=새 사용자에게 할당될 기본 사용 권한 값입니다. 만약 true로 설정된 경우에는 새 사용자가 조직을 생성할 수 있습니다. +default_enable_timetracking=시간 추적 사용을 기본으로 함 +default_enable_timetracking_popup=이 값에 따라 레포지터리의 시간대별 변경사항 추적에 대한 기본값이 설정됩니다. no_reply_address=회신 금지 주소 [home] @@ -183,7 +200,10 @@ login_userpass=사용자 / 비밀번호 login_openid=OpenID openid_connect_submit=연결 openid_connect_title=기존 계정으로 연결하기 +openid_connect_desc=선택한 OpenID URI는 시스템에 저장되어 있지 않습니다, 이 URI를 기존 계정에 연결시킬 수 있습니다. openid_register_title=새 계정 생성 +openid_register_desc=선택한 OpenID URI는 시스템에 저장되어 있지 않습니다, 이 URI를 새 계정과 연결시킬 수 있습니다. +openid_signin_desc=URI 예제: https://anne.me, bob.openid.org.cn, gnusocial.net/carry disable_forgot_password_mail=죄송합니다, 비밀번호 초기화가 비활성화 되어있습니다. 사이트 관리자에게 문의 해주세요. [mail] @@ -221,6 +241,7 @@ Content=컨텐츠 require_error=` 비어 있을 수 없습니다.` alpha_dash_error=`은(는) 숫자, 알파벳, 대시(-_) 문자로만 구성되어야 합니다.` alpha_dash_dot_error=` 숫자, 알파벳, 점(.), 대시(-_) 문자로만 구성되어야 합니다.` +git_ref_name_error=` 유효한 git 레퍼런스명이어야 합니다.` size_error=` %s 글자여야 합니다.` min_size_error=` 최소 %s 글자여야 합니다.` max_size_error=` %s 글자를 넘을 수 없습니다.` @@ -228,6 +249,7 @@ email_error=` 올바른 이메일 주소가 아닙니다.` url_error=` 올바른 URL이 아닙니다.` include_error=` 반드시 '%s'를 포함해야 합니다.` unknown_error=알 수 없는 오류: +captcha_incorrect=CAPTCHA에 대한 답변이 올바르지 않습니다. username_been_taken=이미 사용하고 있는 아이디입니다. repo_name_been_taken=이미 사용하고 있는 저장소 이름입니다. @@ -350,6 +372,7 @@ no_activity=최근 활동 없음 key_state_desc=이 키는 최근 1주일 동안 사용된 적이 있습니다. token_state_desc=이 토큰은 최근 1주일 동안 사용된 적이 있습니다. show_openid=프로필에 표시 +hide_openid=프로필에서 숨기기 manage_social=SNS계정 관리 unbind=해제 @@ -369,9 +392,13 @@ passcode_invalid=그 인증코드는 올바르지 않습니다. 다시 시도해 manage_account_links=계정 링크 관리 manage_account_links_desc=외부 계정들이 이 계정에 연결됨 +account_links_not_available=이 계정에 연결된 외부 계정이 존재하지 않습니다. remove_account_link=연결된 계정 삭제 +remove_account_link_desc=이 연결 계정을 지우면 관련된 모든 접근 권한이 사라집니다. 계속 하시겠습니까? +remove_account_link_success=연결된 계정이 성공적으로 지워졌습니다. orgs_none=당신은 어떤 조직의 구성원도 아닙니다. +repos_none=어떤 레포지터리도 존재하지 않습니다. delete_account=계정 삭제 delete_prompt=당신의 계정을 삭제합니다. 완료된 후에는 취소할 수 없습니다. @@ -385,6 +412,7 @@ repo_name=저장소 이름 repo_name_helper=좋은 저장소 이름은 보통 짧고 기억하기 좋은 특별한 키워드로 이루어 집니다. visibility=가시성 visiblity_helper=이 저장소는 비공개 저장소입니다 +visiblity_helper_forced=시스템 관리자가 모든 새 레포지터리를 비공개로 하도록 설정했습니다. visiblity_fork_helper=(이 값의 변경은 모든 포크에 영향을 줍니다) clone_helper=클론하는데에 도움이 필요하면 Help에 방문하세요. fork_repo=저장소 포크 @@ -411,6 +439,7 @@ watchers=주시하고 있는 사람들 stargazers=별을 준 사람들 forks=포크 +form.reach_limit_of_creation=이미 최대치인 %d 개의 레포지터리를 가지고 있습니다. form.name_reserved=저장소 이름 '%s'은 예약 되어 있습니다. form.name_pattern_not_allowed=저장소 이름 패턴 '%s'은 허용 되지 않습니다. @@ -424,20 +453,31 @@ migrate.clone_local_path=또는 로컬 서버 경로 migrate.permission_denied=로컬 저장소는 가져오기를 할 수 없습니다. migrate.invalid_local_path=잘못된 로컬 경로입니다. 존재하지 않는 경로거나 폴더가 아닙니다. migrate.failed=마이그레이션 실패: %v +migrate.lfs_mirror_unsupported=LFS 오브젝트에 대한 미러링은 지원하지 않습니다 - 'git lfs fetch --all' 과 'git lfs push -all' 을 대신 사용하세요. mirror_from=의 미러 forked_from=원본 프로젝트 : +fork_from_self=이미 당신이 소유한 레포지터리를 포크할 수는 없습니다! copy_link=복사 copy_link_success=복사됨! copy_link_error=⌘-C 나 Ctrl-C를 눌러 복사 copied=복사 완료 +unwatch=보지않기 +watch=보기 +unstar=좋아요 취소 +star=좋아요 fork=포크 +download_archive=이 레포지터리 다운로드 no_desc=설명 없음 quick_guide=퀵 가이드 clone_this_repo=이 저장소 복제 +create_new_repo_command=커맨드 라인에서 새 레포리지터리 생성 +push_exist_repo=커맨드라인에서 기존 레포지터리 푸시 +bare_message=이 레포지터리에는 아무것도 없습니다. code=코드 +code.desc=Code는 코드가 담긴 곳입니다. branch=브렌치 tree=트리 filter_branch_and_tag=브랜치나 태그로 필터 @@ -453,11 +493,15 @@ file_history=히스토리 file_view_raw=원본 보기 file_permalink=고유링크 file_too_large=이 파일은 표시하기엔 너무 큽니다. +video_not_supported_in_browser=브라우저가 HTML5 비디오 태그를 지원하지 않습니다. +stored_lfs=Git LFS에 저장되어 있습니다 +commit_graph=커밋 그래프 editor.new_file=파일 생성 editor.upload_file=파일 업로드 editor.edit_file=파일 수정 editor.preview_changes=변경내용 미리보기 +editor.cannot_edit_non_text_files=웹 인터페이스에서는 바이너리 파일을 고칠 수 없습니다. editor.edit_this_file=해당 파일 편집 editor.must_be_on_a_branch=파일 변경을 제안하려면 해당하는 브랜치에 있어야 합니다. editor.fork_before_edit=파일을 편집 하기 전에 이 저장소를 포크 해야 합니다. @@ -484,6 +528,7 @@ editor.directory_is_a_file=항목 '%s'의 상위 경로는 이 저장소의 디 editor.file_is_a_symlink=파일 '%s'는 웹 에디터에서 수정할 수 없는 심볼릭 링크입니다 editor.filename_is_a_directory=파일명 '%s'는 이 저장소에 이미 존재하는 디렉토리명입니다. editor.file_editing_no_longer_exists=편집중인 파일 '%s'는 저장소에 더 이상 존재하지 않습니다. +editor.file_changed_while_editing=수정을 시작한 이후에 파일 내용이 변경되었습니다. 여기를 눌러 무엇이 변경되었는지 확인하고, 그 변경 사항을 덮어 쓰려면 커밋 버튼을 다시 한번 누르세요. editor.file_already_exists=이 저장소에 이름이 '%s'인 파일이 이미 존재합니다. editor.no_changes_to_show=표시할 변경사항이 없습니다. editor.fail_to_update_file=파일 '%s'를 변경/추가 하는데 실패하였습니다. 에러: %v @@ -502,6 +547,8 @@ commits.message=메시지 commits.date=날짜 commits.older=이전 commits.newer=최신 +commits.signed_by=로그인 계정 +commits.gpg_key_id=GPG 키 ID ext_issues=외부 버그 @@ -518,6 +565,7 @@ issues.new.closed_milestone=마일스톤 닫기 issues.new.assignee=담당자 issues.new.clear_assignee=담당자 초기화 issues.new.no_assignee=담당자 없음 +issues.no_ref=Branch/Tag 가 지정되어 있지 않습니다. issues.create=이슈 생성 issues.new_label=새로운 레이블 issues.new_label_placeholder=레이블 이름... @@ -591,12 +639,28 @@ issues.label_deletion=레이블 삭제 issues.label_deletion_desc=이 라벨을 지우면 모든 이슈에서 이것이 지워집니다. 계속 하시겠습니까? issues.label_deletion_success=라벨이 성공적으로 삭제 되었습니다! issues.label.filter_sort.alphabetically=알파벳순 +issues.label.filter_sort.reverse_alphabetically=이름 역순으로 정렬 issues.label.filter_sort.by_size=크기 issues.num_participants=참여자 %d명 issues.attachment.open_tab=`클릭하여 "%s" 새탭으로 보기` issues.attachment.download=' "%s"를 다운로드 하려면 클릭 하십시오 ' issues.subscribe=구독하기 issues.unsubscribe=구독 취소 +issues.tracker=시간 추적기 +issues.start_tracking_short=시작 +issues.start_tracking=시간 추적 시작 +issues.start_tracking_history=`%s가 작업 시작` +issues.stop_tracking=중단 +issues.stop_tracking_history=`작업 중단 %s` +issues.add_time=수동으로 시간 추가 +issues.add_time_short=추가 +issues.add_time_cancel=취소 +issues.add_time_history=`사용 시간이 추가됨 %s` +issues.add_time_hours=시간 +issues.add_time_minutes=분 +issues.add_time_sum_to_small=시간을 입력하지 않았습니다 +issues.cancel_tracking=취소 +issues.time_spent_total=총 사용 시간 pulls.new=새 풀 리퀘스트 pulls.compare_changes=변경 사항 비교 diff --git a/options/locale/locale_nl-NL.ini b/options/locale/locale_nl-NL.ini index 8d23754a4..5e6788d48 100644 --- a/options/locale/locale_nl-NL.ini +++ b/options/locale/locale_nl-NL.ini @@ -49,6 +49,8 @@ your_settings=Uw instellingen all=Alles sources=Bronnen +mirrors=Kopieën +collaborative=Samenwerkend forks=Forks activities=Activiteiten @@ -386,6 +388,7 @@ key_state_desc=Deze sleutel werd gebruikt in de laatste 7 dagen token_state_desc=Dit token werd gebruikt in de laatste 7 dagen show_openid=Tonen op profiel hide_openid=Verbergen van profiel +ssh_disabled=SSH is uitgeschakeld manage_social=Beheer gekoppelde sociale accounts unbind=Loskoppelen @@ -399,7 +402,9 @@ delete_token=Verwijderen access_token_deletion=Persoonlijke toegangstoken verwijderen +manage_account_links=Onderhoud account koppelingen remove_account_link=Gekoppeld account verwijderen +remove_account_link_success=Account koppeling is succesvol verwijderd! orgs_none=U bent geen lid van een organisatie. repos_none=U bezit geen repositories @@ -440,6 +445,8 @@ mirror_last_synced=Laatste synchronisatie watchers=Volgers stargazers=Stargazers forks=Forks +pick_reaction=Kies je reactie +reactions_more=en %d meer form.reach_limit_of_creation=U hebt uw limiet van %d repositories al bereikt. form.name_reserved=Repositorienaam '%s' is gereserveerd. @@ -478,6 +485,7 @@ bare_message=Deze repository bevat geen inhoud. code=Code branch=Branch +tree=Tree filter_branch_and_tag=Filter op branch of tag branches=Branches tags=Labels @@ -486,10 +494,12 @@ pulls=Pull-aanvragen labels=Labels milestones=Mijlpalen commits=Commits +commit=Commit releases=Publicaties file_raw=Ruw file_history=Geschiedenis file_view_raw=Weergave ruw bestand +file_permalink=Permalink file_too_large=Dit bestand is te groot om te tonen video_not_supported_in_browser=Uw browser ondersteunt geen HTML5 video. stored_lfs=Opgeslagen met Git LFS @@ -507,6 +517,7 @@ editor.file_delete_success=Bestand '%s' is succesvol verwijderd! editor.name_your_file=Bestandsnaam... editor.or=of editor.cancel_lower=annuleer +editor.commit_changes=Wijzigingen doorvoeren editor.add_tmpl='%s/' toevoegen editor.add='%s' toevoegen editor.update='%s' updaten @@ -536,6 +547,7 @@ commits.message=Bericht commits.date=Datum commits.older=Ouder commits.newer=Nieuwer +commits.signed_by=Getekend door issues.new=Nieuw probleem @@ -878,6 +890,7 @@ diff.show_diff_stats=Toon Diff Stats diff.show_split_view=Zij-aan-zij weergave diff.show_unified_view=Gecombineerde weergave diff.stats_desc=%d gewijzigde bestanden met toevoegingen van %d en %d verwijderingen +diff.bin=BIN diff.view_file=Bestand weergeven diff.file_suppressed=Diff onderdrukt omdat het te groot bestand diff --git a/options/locale/locale_tr-TR.ini b/options/locale/locale_tr-TR.ini index 143266b16..7bdbf283a 100644 --- a/options/locale/locale_tr-TR.ini +++ b/options/locale/locale_tr-TR.ini @@ -5,22 +5,31 @@ dashboard=Pano explore=Keşfet help=Yardım sign_in=Giriş Yap +sign_in_with=Şununla giriş yap sign_out=Çıkış Yap sign_up=Kaydol +link_account=Bağlantı hesabı +link_account_signin_or_signup=Mevcut hesabınızı bu hesaba bağlamak için mevcut kimlik bilgileriniz ile giriş yapınız. Ya da, yeni bir hesap oluşturun register=Üye Ol website=Web sitesi version=Sürüm page=Sayfa template=Şablon language=Dil +notifications=Bildirimler create_new=Oluştur... user_profile_and_more=Kullanıcı profili ve daha fazlası signed_in_as=Giriş yapan: +enable_javascript=Bu web sayfasi javascript ile daha iyi çalışır username=Kullanıcı Adı email=E-Posta password=Parola re_type=Tekrar Girin +captcha=Captcha +twofa=İki aşamalı doğrulama +twofa_scratch=İki aşamalı çizgi kodu +passcode=Şifre repository=Depo organization=Organizasyon @@ -28,14 +37,21 @@ mirror=Yansıma new_repo=Yeni Depo new_migrate=Yeni Göç new_mirror=Yeni Yansıma +new_fork=Yeni Depo Bölünmesi new_org=Yeni Organizasyon manage_org=Organizasyonları Yönet admin_panel=Yönetim Paneli account_settings=Hesap Ayarları settings=Ayarlar your_profile=Profiliniz +your_starred=Yıldızlandın your_settings=Ayarlarınız +all=Tümü +sources=Kaynaklar +mirrors=Yansımalar +collaborative=İşbirlikçi +forks=Çatallar activities=Aktiviteler pull_requests=Değişiklik İsteği @@ -45,29 +61,40 @@ cancel=İptal [install] install=Kurulum +title=Başlangıç yapılandırması +docker_helper=Gitea'yı Docker içinde kullanıyorsanız bu sayfada herhangi bir değişiklik yapmadan önce lütfen kılavuzu dikkatlice okuyunuz. db_title=Veritabanı Ayarları db_type=Veritabanı Türü host=Sunucu user=Kullanıcı password=Parola db_name=Veritabanı Adı +db_helper=Lütfen MySQL için INNODB motorunu utf8_general_ci karakter setiyle kullanın. ssl_mode=SSL Biçimi path=Yol +sqlite_helper=Bu dosyanın yolu SQLite3 veya TiDB veritabanına ulaşmaktadır.
Lütfen göreve başladığınızda kesin olan yolu kullanın. err_empty_db_path=SQLite3 veya TiDB veritabanı yolu boş olamaz. err_invalid_tidb_name=TiDB veritabanı adında "." ve "-" karakterlerine izin verilmez. no_admin_and_disable_registration=Bir yönetici hesabı oluşturmadan kullanıcı kaydını devre dışı bırakamazsınız. err_empty_admin_password=Yönetici parolası boş olamaz. +general_title=Genel uygulama ayarları app_name=Uygulama Adı +app_name_helper=Buraya kuruluş adınızı yazabilirsiniz. repo_path=Depo Kök Dizini +repo_path_helper=Tüm uzak git depoları bu dizine kaydedilecektir. +lfs_path=LFS kök dizini +lfs_path_helper=Git LFS ile depolanan dosyalar bu dizinde depolanacaktır. LFS'yi devre dışı bırakmak için, boş bırakın. run_user=Çalıştıran Kullanıcı run_user_helper=Kullanıcının deponun kök dizinine ve Gitea'u çalıştırmaya erişim izni olmalıdır. domain=Alan Adı domain_helper=Bu, SSH klon bağlantılarını etkiler. ssh_port=SSH Portu +ssh_port_helper=SSH sunucunuzun port numarası. Devre dışı bırakmak için boş bırakın. http_port=HTTP Portu http_port_helper=Uygulamanın dinleyeceği port. app_url=Uygulama Bağlantısı +app_url_helper=Bu, HTTP / HTTPS kopya bağlantılarını ve bazı e-posta bildirimlerini etkilemektedir. log_root_path=Günlük Dosyaları Yolu log_root_path_helper=Günlük dosyalarının yazılacağı dizin. @@ -75,19 +102,29 @@ optional_title=İsteğe Bağlı Ayarlar email_title=E-Posta Servisi Ayarları smtp_host=SMTP Sunucusu smtp_from=Kimden +smtp_from_helper=RFC 5322 adresinden posta. Sadece bir e-posta adresı veya "ad" şeklinde olmalıdır. +mailer_user=Gönderen kullanıcı mailer_password=Gönderen Parolası register_confirm=Kayıt Onayını Etkinleştir +mail_notify=E-posta bildirimlerini etkinleştir server_service_title=Sunucu ve Diğer Servis Ayarları offline_mode=Çevrim Dışı Modu Etkinleştir +offline_mode_popup=CDN'yi devre dışı bıraktığınızda tüm kaynak dosyaları yerel olarak sunulacaktır. disable_gravatar=Gravatar Servisini Devre Dışı Bırak disable_gravatar_popup=Gravatar ve özel kaynakları devre dışı bırak. Tüm avatarlar kullanıcılar tarafından yüklenir veya varsayılan kalır. +federated_avatar_lookup=Birleşik avatar aramasını etkinleştir federated_avatar_lookup_popup=Enable federated avatars lookup to use federated open source service based on libravatar. disable_registration=Kendi Kendine Kaydolmayı Devre Dışı Bırak disable_registration_popup=Kullanıcının kendi kendine kaydolmasını devre dışı bırak, yalnızca yönetici yeni hesaplar oluşturabilir. +openid_signin=OpenID Oturum Açmayı Etkinleştiriniz +openid_signin_popup=Açık kimlik ile kullanıcı girişini etkinleştir +openid_signup=Açık Kimlik Kişisel kaydı etkinleştir +openid_signup_popup=Kişisel kayıt özelliğine dayalı Açık Kimliği etkinleştir enable_captcha=Captcha'yı Etkinleştir enable_captcha_popup=Kullanıcının kendi kendine kaydolması için captcha doğrulaması gereksin. require_sign_in_view=Sayfaları Görüntüleyebilmek İçin Giriş Yapmayı Mecbur Kıl require_sign_in_view_popup=Yalnızca giriş yapmış kullanıcılar sayfaları görüntüleyebilir, ziyaretçiler yalnızca giriş yap/kaydol sayfalarını görüntüleyebilir. +admin_setting_desc=Şu an da bir yönetici hesabı oluşturmanız gerekmemektedir. Siteye kaydolan ilk kullanıcı otomatik olarak yönetici yetkilerine kavuşacaktır. admin_title=Yönetici Hesabı Ayarları admin_name=Kullanıcı Adı admin_password=Parola @@ -95,45 +132,93 @@ confirm_password=Parolayı Doğrula admin_email=Yönetici E-Postası install_btn_confirm=Gitea'u Kur test_git_failed='git' komut testi başarısız: %v +sqlite3_not_available=Mevcut sürümünüz SQLite3'ü desteklememektedir, lütfen %s'den resmi olan ikili versiyonu indiriniz, gobuilt versiyonu indirmeyiniz. +invalid_db_setting=Veritabanı ayarı geçersiz: %v invalid_repo_path=Depo kök dizini geçersiz: %v +run_user_not_match=Aktif olarak çalışan kullanıcı geçerli kullanıcı değildir: %s->%s +save_config_failed=%v Yapılandırması kaydedilirken hata oluştu invalid_admin_setting=Yönetici hesap ayarları geçersiz: %v +install_success=Hoşgeldiniz! Gitea'yı seçtiğiniz için teşekkür ederiz. Kendinize iyi bakın, iyi eğlenceler! invalid_log_root_path=Günlük kök dizini geçersiz: %v +default_keep_email_private=E-postanızı özel olarak tutmanız için varsayılan değer +default_keep_email_private_popup=Bu, kullanıcıların e-posta adreslerinin görünürlüğü için varsayılan değerdir. Eğer doğru olarak ayarlanırsa, tüm yeni kullanıcıların e-posta adresleri kullanıcılar kendi ayarlarını değiştirene kadar gizli olarak kalacaktır. +default_allow_create_organization=Bu, yeni kullanıcılar için belirlenecek olan varsayılan izin değeridir +default_allow_create_organization_popup=Bu, yeni kullanıcılar için ilişkilendirilecek varsayılan bir izin değeridir. Eğer doğru bir şekilde ayarlanırsa yeni kullanıcıların kuruluşlar oluşturmasına izin verilecektir. +default_enable_timetracking=Varsayılan olarak zaman takibini etkinleştir +default_enable_timetracking_popup=Depoların bu ayara dayalı varsayılan olacak şekilde zaman takibinin etkinleşmesi mümkün olacaktır +no_reply_address=Cevapsız adres +no_reply_address_helper=Eğer kullanıcılar e-posta adreslerini özel bir şekilde saklamak isterlerse bu alan adı içerisindeki git loglarını kullanabilirler.Örneğin 'joe' kişisi ve 'noreply.example.org' 'joe@noreply.example.org' şeklini alacaktır [home] uname_holder=Kullanıcı Adı veya E-Posta password_holder=Parola switch_dashboard_context=Panoya Geçiş Yap my_repos=Depolarım +show_more_repos=Daha fazla depo göster ... collaborative_repos=Katkıya Açık Depolar my_orgs=Organizasyonlarım my_mirrors=Yansılarım view_home=%s Görüntüle +search_repos=Depo bul ... issues.in_your_repos=Depolarınızda [explore] repos=Depolar users=Kullanıcılar +organizations=Organizasyonlar search=Ara +repo_no_results=Eşleşen depo bulunamadı. +user_no_results=Eşleşen kullanıcı bulunamadı. +org_no_results=Eşleşen organizasyon bulunamadı. [auth] +create_new_account=Hesap oluştur register_helper_msg=Bir hesabınız var mı? Şimdi giriş yapın! +social_register_helper_msg=Zaten hesabınız var mı? Şimdi giriş yapın! disable_register_prompt=Üzgünüz, kaydolma devre dışı bırakıldı. Lütfen site yöneticisiyle irtibata geçin. disable_register_mail=Üzgünüz, kayıt doğrulama e-postası devre dışı bırakıldı. remember_me=Beni Hatırla +forgot_password_title=Şifremi unuttum +forgot_password=Şifrenizi mi unuttunuz? sign_up_now=Bir hesaba mı ihtiyacınız var? Şimdi kaydolun. +confirmation_mail_sent_prompt=Yeni onay e-postası %s adresine gönderildi. Lütfen gelen kutunuzu bir sonraki %s e kadar kontrol edip kayıt işlemini tamamlayın. +reset_password_mail_sent_prompt=Onay e-postası %s adresine gönderildi. Lütfen gelen kutunuzu bir sonraki %s e kadar kontrol edip şifre yenileme işlemini tamamlayın. active_your_account=Hesabınızı Aktifleştirin prohibit_login=Oturum açılması yasak +prohibit_login_desc=Hesabınız ile oturum açmanız yasaklanmış, lütfen site yönetimi ile iletişime geçin. +resent_limit_prompt=Üzgünüz, henüz bir etkinleştirme e-postası talebinde bulundunuz. Lütfen 3 dakika bekleyip tekrar deneyin. has_unconfirmed_mail=Merhaba %s, doğrulanmamış bir e-posta adresin var (%s). Bir doğrulama e-postası almadıysanız ya da yenisine ihtiyacınız varsa lütfen aşağıdaki düğmeye tıklayın. resend_mail=Doğrulama e-postasını tekrar almak için buraya tıklayın +email_not_associate=Bu e-posta adresi hiçbir hesap ile ilişkilendirilmemiştir. +send_reset_mail=Parola sıfırlama e-postasını (yeniden) göndermek için buraya tıklayın reset_password=Parolanızı Sıfırlayın +invalid_code=Üzgünüz, onay kodunuzun süresi dolmuş veya geçerli değildir. reset_password_helper=Parolanızı sıfırlamak için buraya tıklayın password_too_short=Parola uzunluğu %d karakterden az olamaz. +non_local_account=Yerel olmayan hesaplar şifreleri Gitea web arayüzü üzerinden değiştiremezler. +verify=Doğrula +scratch_code=Çizgi kodu +use_scratch_code=Bir çizgi kodu kullanınız +twofa_scratch_used=Çizgi kodunuzu kullandınız. İki aşamalı ayarlar sayfasına yönlendirildiniz, burada cihaz kaydınızı kaldırabilir veya yeni bir çizgi kodu oluşturabilirsiniz. +twofa_passcode_incorrect=Parolanız doğru değildir. Cihazınızı doğru konumlandıramadıysanız, giriş için çizgi kodunuzu kullanın. +twofa_scratch_token_incorrect=Çizgi kodunuz doğru değildir. +login_userpass=Kullanıcı Adı / Parola +login_openid=Açık Kimlik +openid_connect_submit=Bağlan +openid_connect_title=Mevcut olan bir hesaba bağlan +openid_connect_desc=Seçilen Açık Kimlik URI'leri sistem tarafından bilinmiyor, seçmiş olduğunuz bu URI'ye mevcut bie hesap ile katılabilirsiniz. +openid_register_title=Yeni hesap oluştur +openid_register_desc=Seçilen Açık Kimlik URI'leri sistem tarafından bulunamadı, onu yeni bir hesapla ilişkilendirebilirsiniz, seçtiğiniz URI'yi burada yeni bir hesapla ilişkilendirebilirsiniz. +openid_signin_desc=Örnek URI'ler: https://anne.me, bob.openid.org.cn, gnusocial.net/carry +disable_forgot_password_mail=Üzgünüm, şifre sıfırlaması devre dışı bırakıldı. Lütfen site yöneticisiyle iletişime geçin. [mail] activate_account=Lütfen hesabınızı aktifleştirin activate_email=E-posta adresinizi doğrulayın reset_password=Parolanızı sıfırlayın +register_success=Kayıt başarılı +register_notify=Gitea'ya Hoş Geldiniz [modal] yes=Evet @@ -153,9 +238,18 @@ TeamName=Takım ismi AuthName=Yetkilendirme adı AdminEmail=Yönetici e-postası +NewBranchName=Yeni şube adı +CommitSummary=İşleme özeti +CommitMessage=İşleme mesajı +CommitChoice=İşleme tercihi TreeName=Dosya yolu +Content=İçerik require_error=` boş olamaz.` +alpha_dash_error=` geçerli alfanümerik veya çizgi(-_) karakterleri olmalıdır.` +  +alpha_dash_dot_error=` geçerli alfanümerik, çizgi(-_) veya nokta karakterleri olmalıdır.` +git_ref_name_error=` git referans ismi iyi oluşturulmuş olmalıdır.` size_error=` uzunluk en fazla %s olmalıdır.` min_size_error=` en az %s karakter içermelidir.` max_size_error=` en fazla %s karakter içermelidir.` @@ -163,10 +257,31 @@ email_error=' geçerli bir e-posta adresi değil.' url_error=` geçerli bir bağlantı değil.` include_error=` '%s' içermelidir.` unknown_error=Bilinmeyen hata: +captcha_incorrect=CAPTCHA yanıtı doğru değil. +password_not_match=Seçtiğiniz şifreler uyuşmuyor. +username_been_taken=Kullanıcı adı daha önce alınmış. +repo_name_been_taken=Depo adı zaten kullanılıyor. +org_name_been_taken=Organizasyon ismi zaten kullanılıyor. +team_name_been_taken=Takım adı zaten alınmış. +team_no_units_error=Takımın aktif olması için en azından bir üniteye sahip olması gerekir. +email_been_used=E-posta zaten kullanılıyor. +openid_been_used=OpenID adresi '%s' zaten kullanımda. +username_password_incorrect=Geçersiz kullanıcı adı veya şifre. +enterred_invalid_repo_name=Lütfen girdiğiniz depo adının doğru olduğundan emin olun. +enterred_invalid_owner_name=Lütfen girdiğiniz depo sahibi isminin doğru olduğuna emin olun. +user_not_exist=Böyle bir kullanıcı yok. +last_org_owner=Bir takım içerisinde ki son kullanıcıyı silmenize müsade edilmiyor çünkü herhangi bir organizasyon en azından bir yönetici bulunmak zorunda. +cannot_add_org_to_team=Organizasyon, takım üyesi olarak eklenemez. +invalid_ssh_key=Üzgünüz, SSH anahtarınızı doğrulayamadık: %s +invalid_gpg_key=Üzgünüz, GPG anahtarınızı doğrulayamadık: %s +unable_verify_ssh_key=Ssh anahtarı doğrulanamadı; lütfen herhangi bir hata olasılığına karşı tekrar kontrol edin. auth_failed=Kimlik doğrulaması başarısız oldu: %v +still_own_repo=Hesabınız hala en az bir depoya sahip. Öncelikle bu depoyu silmeniz veya transfer etmeniz gerekmektedir. +still_has_org=Hesabınız hala en az bir organizasyonun üyesi; önce ayrılmanız gerekiyor. +org_still_own_repo=Bu organizasyon hala bazı depoların sahibi; Öncelikle bunları silmeniz veya transfer etmeniz gerekiyor. target_branch_not_exist=Hedef dal mevcut değil. @@ -181,88 +296,181 @@ following=Takip Edilenler follow=Takip Et unfollow=Takibi Bırak +form.name_reserved=%s Kullanıcı adı rezerve edilmiş. +form.name_pattern_not_allowed='%s' kullanıcı adı şekline izin verilmemektedir. [settings] profile=Profil password=Parola +security=Güvenlik +avatar=Avatar +ssh_gpg_keys=SSH / GPG Anahtarları social=Sosyal Medya Hesapları applications=Uygulamalar orgs=Organizasyonlar +repos=Depolar delete=Hesabı Sil +twofa=İki Aşamalı Doğrulama +account_link=Harici hesaplar +organization=Organizasyon uid=Tekil ID public_profile=Herkese Açık Profil +profile_desc=E-posta adresiniz herkese açıktır ve hesabınızla ilgili bilgilendirmelerde ve web tabanlı operasyonlarda kullanılacaktır. +password_username_disabled=Yerel olmayan kullanıcılara, kullanıcı adlarını değiştirme izni verilmemiştir. Daha fazla bilgi edinmek için lütfen sistem yöneticisi ile iletişime geçiniz. full_name=Ad Soyad website=Web Sitesi location=Konum update_profile=Profili Güncelle +update_profile_success=Profil resminiz güncellendi. change_username=Kullanıcı Adınız Değiştirildi +change_username_prompt=Bu değişiklik, hesabınıza olan bağlantıları değiştirecektir. continue=Devam Et cancel=İptal +lookup_avatar_by_mail=E-posta ile Avatar Araması +federated_avatar_lookup=Birleşmiş Avatar Araması enable_custom_avatar=Özel Avatarı Etkinleştir choose_new_avatar=Yeni Avatar Seç update_avatar=Avatar Ayarlarını Güncelle delete_current_avatar=Güncel Avatarı Sil uploaded_avatar_not_a_image=Yüklenen dosya bir resim dosyası değil. +update_avatar_success=Avatar ayarınız güncelleştirildi. change_password=Parolayı Değiştir old_password=Mevcut Parola new_password=Yeni Parola retype_new_password=Yeni parolayı tekrar yazın +password_incorrect=Mevcut şifre hatalıdır. +change_password_success=Şifreniz başarıyla değiştirildi. Yeni şifrenizi kullanarak giriş yapabilirsiniz. +password_change_disabled=Yerel olmayan kullanıcıların web arayüzü üzerinden şifrelerini değiştirmelerine izin verilmemiştir. emails=E-Posta Adresleri manage_emails=E-Posta Adreslerini Yönet +manage_openid=Açık Kimlik Adreslerini Yönet email_desc=Birincil e-posta adresiniz bilgilendirmeler ve diğer işlemler için kullanılacaktır. primary=Birincil primary_email=Birincil yap delete_email=Sil +email_deletion=E-postayı sil +email_deletion_desc=Bu e-posta adresini silmek, bütün ilgili bilgileri hesabınızdan silmek anlamına gelir. Bu e-postayı kullanan git işlemleri bir değişikliğe uğramayacaktır. Devam etmek istiyor musunuz? email_deletion_success=E-posta adresi başarıyla silindi! +openid_deletion=Açık Kimlik Silme +openid_deletion_desc=Bu Açık Kimlik adresini hesabınızdan silmek, bu Açık Kimlik adresi ile tekrar giriş yapmanıza engel olacaktır. Devam etmek istediğinize emin misiniz? +openid_deletion_success=Açık Kimlik başarılı bir şekilde silindi! add_new_email=Yeni e-posta adresi ekle +add_new_openid=Yeni bir Açık Kimlik URI'si ekle add_email=E-posta ekle +add_openid=Açık Kimlik URI 'si ekle +add_email_confirmation_sent='%s' adresine yeni bir doğrulama e-postası gönderildi. E-postanızı doğrulamak için %s'daki gelen kutunuzu kontrol ediniz. add_email_success=Yeni e-posta adresiniz başarıyla eklendi. +add_openid_success=Yeni Açık Kimlik adresiniz başarıyla kaydedildi. +keep_email_private=E-posta Adresini Kişisel Olarak Sakla +keep_email_private_popup=Bu seçenek ayarlanırsa E-posta adresiniz diğer kullanıcılardan gizlenecektir. +openid_desc=Açık kimlik adresleriniz, seçtiğiniz sağlayıcıya kimlik doğrulama yetkisi vermenize olanak sağlayacaktır manage_ssh_keys=SSH Anahtarlarını Yönet +manage_gpg_keys=GPH Anahtarlarını Yönet add_key=Anahtar Ekle +ssh_desc=Bunlar hesabınızla ilişkilendirilmiş olan SSH anahtarlarıdır. Bu anahtarlar depolarınıza erişmek maksadıyla bunları kullanan herkese izin verdiği için, onları tanıdığınızdan emin olmanız çok önemlidir. +gpg_desc=Bunlar hesabınızla ilişkilendirilmiş GPG anahtarlarıdır. Bu anahtarlar tahattütlerin doğrulanmasına izin verdiği için, ilgili özel anahtarı güvende tutmanız çok önemlidir. +ssh_helper=Yardıma ihtiyacınız mı var? Github klavuzundaki Kendi SSH anahtarınızı oluşturun bölümüne göz atın veya SSH'ı kullanırken karşılaşabileceğinizortak problemler'i çözün. +gpg_helper=Yardıma ihtiyacınız mı var?Github klavuzundaki GPG hakkında bölümüne göz atınız. add_new_key=SSH Anahtarı Ekle +add_new_gpg_key=GPG Anahtarı Ekle +ssh_key_been_used=Bu genel anahtar zaten kullanımdadır. +ssh_key_name_used=Aynı isimde genel bir anahtar zaten mevcuttur. +gpg_key_id_used=Aynı kimliği sahip olan bir genel GPG anahtarı zaten mevcuttur. +gpg_no_key_email_found=GPG anahtarına eklenmiş hiçbir e-postanız bulunamadı. +subkeys=Alt anahtarlar +key_id=Anahtar Kimliği key_name=Anahtar İsmi key_content=İçerik +add_key_success=SSH anahtarınız '%s' eklenmiştir. +add_gpg_key_success=GPG anahtarınız '%s' eklenmiştir. delete_key=Sil ssh_key_deletion=SSH Anahtarı Silme +gpg_key_deletion=GPG Anahtarını Silme +ssh_key_deletion_desc=Bu SSH anahtarını silmeniz, hesabınız için bu SSH anahtarını kullanarak yapılan tüm erişimleri engelleyecektir. Devam etmek istiyor musunuz? +gpg_key_deletion_desc=Bu GPG anahtarını silmeniz, GPG anahtarıyla imzalanan tüm taahhütlerin doğrulamamasına neden olacaktır. Yine de devam etmek istediğinize emin misiniz? +ssh_key_deletion_success=SSH anahtarı silindi. +gpg_key_deletion_success=GPG anahtarı silindi. add_on=Eklendiği tarih +valid_until=-E kadar geçerli +valid_forever=Sürekli geçerlidir last_used=Son kullanım no_activity=Yeni aktivite yok +key_state_desc=Bu anahtar son 7 gün içinde kullanılmıştır +token_state_desc=Bu token son 7 gün içinde kullanılmıştır +show_openid=Profilde göster +hide_openid=Profilden gizle +ssh_disabled=SSH devre dışı bırakıldı manage_social=Bağlanmış Sosyal Hesapları Yönet +social_desc=Bu, sosyal hesaplarınızla ilişkilendirilmiş hesaplarınızın bir listesidir. Güvenlik nedenlerinden dolayı, lütfen bütün bu girişleri tanıdığınızdan emin olunuz, çünkü bunlar hesabınıza giriş yapmak için başkaları tarafından kullanılabilirler. unbind=Bağlantıyı Kopar +unbind_success=Bu sosyal hesap, sizin hesabınıza bağlanmamış durumdadır. manage_access_token=Kişisel Erişim Anahtarlarını Yönet generate_new_token=Yeni Erişim Anahtarı Üret +tokens_desc=Oluşturduğunuz tokenler, Gitea API'lerine erişebilmek için kullanılabilen tokenlerdir. new_token_desc=Her bir erişim anahtarının hesabınıza tam erişim yetkisi olacaktır. token_name=Erişim Anahtarı İsmi generate_token=Erişim Anahtarı Üret +generate_token_success=Erişim tokeniniz başarılı bir şekilde üretilmiştir. Bu tokenin bir yedeğini aldığınızdan emin olun, çünkü bunu tekrar görme şansınız olmayacaktır! delete_token=Sil access_token_deletion=Kişisel Erişim Anahtarını Silme +access_token_deletion_desc=Bu kişisel erişim tokenini silerseniz, bu tokeni kullanan herhangi bir uygulama için erişim iptal edilecektir. Devam etmek istiyor musunuz? +delete_token_success=Kişisel erişim jetonu kaldırıldı. Bu jetonu kullanırken uygulamaları güncellemeyi unutmayın. +twofa_desc=Gitea hesabınızın güvenliğini arttırmak için iki faktörlü kimlik doğrulamayı destekler. +twofa_is_enrolled=Hesabınız şu anda iki faktörlü kimlik doğrulaması içinde kaydedilmiş. +twofa_not_enrolled=Hesabınız şu anda iki faktörlü kimlik doğrulaması içinde kaydedilmemiş. +twofa_disable=İki faktörlü kimlik doğrulamayı devre dışı bırak +twofa_scratch_token_regenerate=Kazıma jetonunu yenile +twofa_scratch_token_regenerated=Kazıma jetonunuz yenilendi. Şimdi %s. Güvenli bir yerde tutunuz. +twofa_enroll=İki faktörlü kimlik doğrulama içine kaydet +twofa_disable_note=Gerekliyse, iki faktörlü kimlik doğrulamasını devre dışı bırakabilirsiniz. +twofa_disable_desc=İki faktörlü kimlik doğrulamasını devre dışı bırakmak hesabınızı daha az güvenli yapacaktır. Devam etmek istediğinizden emin misiniz? +regenerate_scratch_token_desc=Kazıma jetonunuzu yanlış yerleştirirseniz, veya zaten oturum açmada kullandıysanız, onu burada sıfırlayabilirsiniz. +twofa_disabled=İki faktörlü kimlik doğrulama devre dışı bırakıldı. +scan_this_image=Kim doğrulama uygulamanızla bu görüntüyü tarayın: +or_enter_secret=Veya gizli şeyi girin: %s +then_enter_passcode=Ve uygulamanın verdiği şifre kodunu girin: +passcode_invalid=Bu şifre kodu geçersiz. Tekrar deneyin. +twofa_enrolled=Hesabınız iki faktörlü kimlik doğrulama içinde kaydedilmiş. Kazıma jetonunuzu kaydettiğinizden emin olun (%s), çünkü yalnızca bir kez gösterilecek! +manage_account_links=Hesap bağlantılarını yönet +manage_account_links_desc=Harici hesaplar bu hesapla bağlantılandı +account_links_not_available=Şu anda bu hesapla bağlantılı harici hesap bulunmuyor +remove_account_link=Bağlantılı hesabı kaldır +remove_account_link_desc=Bu bağlantılı hesabı kaldırmak bu hesabı kullanan ilgili tüm erişimleri yürürlükten kaldıracak. Devam etmek istiyor musunuz? +remove_account_link_success=Hesap bağlantısı başarıyla kaldırıldı! +orgs_none=Herhangi bir organizasyonun bir üyesi değilsiniz. +repos_none=Herhangi bir depoya sahip değilsiniz delete_account=Hesabınızı Silin delete_prompt=Bu işlem hesabınızı kalıcı olarak silecektir ve GERİ ALINAMAZ! confirm_delete_account=Silmeyi Onayla delete_account_title=Hesap Silme +delete_account_desc=Bu hesabı kalıcı olarak silmek istediğinizden emin misiniz? [repo] owner=Sahibi repo_name=Depo İsmi +repo_name_helper=İyi bir depo ismi kısa, akılda kalıcı ve özel anahtar kelimelerden oluşur. visibility=Görünürlük visiblity_helper=Bu depo Özel +visiblity_helper_forced=Sistem yöneticiniz tüm yeni depoların Özel olmasını zorunlu kıldı visiblity_fork_helper=(Bu değerin değişmesi tüm çatallamaları etkileyecektir) clone_helper=Klonlama konusunda yardıma mı ihtiyacınız var? Yardım bağlantısını ziyaret edin! fork_repo=Depoyu Çatalla fork_from=Buradan Çatalla +fork_visiblity_helper=Forklanmış bir deponun görünürlüğünü değiştiremezsiniz. repo_desc=Açıklama repo_lang=Dil +repo_gitignore_helper=.gitignore şablonları seç license=Lisans license_helper=Bir lisans dosyası seçin readme=Benioku @@ -271,11 +479,21 @@ auto_init=Bu depoyu seçilen dosya ve şablonlarla oluştur create_repo=Depo Oluştur default_branch=Varsayılan Dal mirror_prune=Buda +mirror_prune_desc=Artık uzakta bulunmayan her uzaktan-izleme referaslarını kaldır +mirror_interval=Yansıma aralığı (geçerli zaman birimleri "sa", "dk", "sn") +mirror_interval_invalid=Yansıma aralığı geçerli değil mirror_address=Yansı Adresi +mirror_address_desc=Lütfen adrese gerekli kullanıcı kimlik bilgilerini dahil edin. +mirror_last_synced=Son Senkron watchers=İzleyenler stargazers=Yıldızlayanlar forks=Çatallamalar +pick_reaction=Reaksiyonunu seç +reactions_more=ve %d daha fazla +form.reach_limit_of_creation=Zaten %d depo limitinize ulaştınız. +form.name_reserved=Depo ismi '%s' rezerve edildi. +form.name_pattern_not_allowed=Depo ismi modeline '%s' izin verilmiyor. need_auth=Yetkilendirme Gereklidir migrate_type=Göç Türü @@ -283,12 +501,15 @@ migrate_type_helper=Bu depo bir yansı olacaktır migrate_repo=Depoyu Göç Ettir migrate.clone_address=Klon Adresi migrate.clone_address_desc=Bu bağlantı HTTP/HTTPS/GIT veya yerel bir sunucu yolu olabilir. +migrate.clone_local_path=veya yerel sunucu yolu migrate.permission_denied=Yerel depoları içeri aktarma izniniz yok. migrate.invalid_local_path=Geçersiz yerel dizin! Böyle bir yol yok ya da bir dizin değil. migrate.failed=Göç başarısız: %v +migrate.lfs_mirror_unsupported=LFS nesneleri yansıtma desteklenmiyor - yerine 'git lfs fetch --all' ve 'git lfs push --all' kullanın. mirror_from=şunun yansıması forked_from=şundan çatallanmış +fork_from_self=Zaten sahip olduğunuz bir depoyu forklayamazsınız! copy_link=Kopyala copy_link_success=Kopyalandı! copy_link_error=Kopyalamak için ⌘-C veya Ctrl-C tuşlarına basın @@ -298,12 +519,17 @@ watch=İzle unstar=Yıldızı Kaldır star=Yıldızla fork=Çatalla +download_archive=Bu depoyu indir no_desc=Açıklama Yok quick_guide=Hızlı Başlangıç Kılavuzu clone_this_repo=Bu depoyu klonla +create_new_repo_command=Komut satırında yeni bir depo oluşturuluyor +push_exist_repo=Komut satırından mevcut bir depo itiliyor +bare_message=Bu depo herhangi bir içerik içermiyor. code=Kod +code.desc=Kod, kodun depolandığı yerdedir branch=Dal tree=Ağaç filter_branch_and_tag=Dal veya biçim imini filtrele @@ -314,26 +540,74 @@ pulls=Değişiklik İstekleri labels=Etiketler milestones=Kilometre Taşları commits=İşlemeler +commit=İşle releases=Sürümler file_raw=Ham file_history=Geçmiş file_view_raw=Ham Görünüm file_permalink=Kalıcı Bağlantı file_too_large=Bu dosya sergilenmek için çok büyük +video_not_supported_in_browser=Tarayıcınız HTML5 video etiketi desteklemiyor. +stored_lfs=Git LFS ile depolandı +commit_graph=Grafik işle +editor.new_file=Yeni dosya +editor.upload_file=Dosya yükle editor.edit_file=Dosya düzenle +editor.preview_changes=Değişiklikleri Önizle +editor.cannot_edit_non_text_files=Web arayüzünden ikili dosyalar düzenlenemiyor +editor.edit_this_file=Bu dosyayı düzenle +editor.must_be_on_a_branch=Bu dosyaya değişiklik yapmak veya önermek için bir branşta olmalısınız +editor.fork_before_edit=Dosyayı düzenlemeden önce bu depoyu forklamalısınız +editor.delete_this_file=Bu dosyayı sil +editor.must_have_write_access=Bu dosyaya değişiklikler yapmak veya önermek için yazma erişiminizin olması gerekir +editor.file_delete_success='%s' dosyası başarıyla silindi! +editor.name_your_file=Dosyanızı isimlendirin... +editor.filename_help=Dizine eklemek için, sadece yazın ve basın /. Bir dizini kaldırmak için, alanın başlangıcına gidin ve boşluk tuşuna basın. +editor.or=veya editor.cancel_lower=iptal +editor.commit_changes=Değişiklikleri Uygula +editor.add_tmpl=Ekle '%s/' +editor.add='%s' ekle +editor.update='%s' güncelle +editor.delete='%s' sil +editor.commit_message_desc=İsteğe bağlı uzun bir açıklama ekleyin... +editor.commit_directly_to_this_branch=Doğrudan %s bölümüne uygula. +editor.create_new_branch=Bu işlem için bir yeni branş oluşturun ve bir çekme istediği başlatın. +editor.new_branch_name_desc=Yeni bölüm adı... editor.cancel=İptal +editor.filename_cannot_be_empty=Dosya adı boş olamaz. +editor.branch_already_exists='%s' bölümü bu depoda zaten mevcut. +editor.directory_is_a_file=Ana yoldaki girdi '%s' bu depodaki bir rehber olmayan bir dosyadır. +editor.file_is_a_symlink=Dosya '%s' web düzenleyiciden değiştirilemeyen bir sembolik bağdır +editor.filename_is_a_directory='%s' dosya adı bu depoda mevcut bir dizindir. +editor.file_editing_no_longer_exists=Düzenlediğiniz '%s' dosyası artık depoda mevcut değil. +editor.file_changed_while_editing=Düzenlemeye başladığınızdan bu yana dosya içeriği değişti. Neyin değiştiğini görmek için buraya tıklayın veya bu değişikliklerin üzerine yazmak için uygula'ya tekrar basın. +editor.file_already_exists=Bu depoda '%s' isimli bir dosya zaten mevcut. +editor.no_changes_to_show=Gösterilecek değişiklik yok. +editor.fail_to_update_file=Şu hata ile '%s' dosyasını güncelleme/oluşturma başarısız oldu: %v +editor.add_subdir=Alt dizin ekle... +editor.unable_to_upload_files=Şu hata ile dosyalar '%s' 'a yüklenemedi: %v +editor.upload_files_to_dir=Dosyaları '%s' 'a yükle +editor.cannot_commit_to_protected_branch=Korunan bölüm '%s' 'e uygulanamıyor. +commits.desc=İşlemeler kodun değişim geçmişini gösterir commits.commits=İşlemeler commits.search=İşleme Arama +commits.find=Ara +commits.search_all=Tüm Bölümler commits.author=Yazar commits.message=Mesaj commits.date=Tarih commits.older=Daha Eski commits.newer=Daha yeni +commits.signed_by=İmzalayan +commits.gpg_key_id=GPC anahtar kimliği +ext_issues=Ext Sorunları +ext_issues.desc=Ext Sorunları bir harici sorun yönetim sayfasına bağlantı kurar +issues.desc=Sorunlar görevlerin ve bugların yönetildiği yerdir issues.new=Yeni Sorun issues.new.labels=Etiketler issues.new.no_label=Etiket Yok @@ -346,10 +620,27 @@ issues.new.closed_milestone=Kapanmış Kilometre Taşları issues.new.assignee=Atanan issues.new.clear_assignee=Atamayı Temizle issues.new.no_assignee=Atanan Kişi Yok +issues.no_ref=Bölüm/Etiket Belirtilmedi issues.create=Sorun Oluştur issues.new_label=Yeni Etiket issues.new_label_placeholder=Etiket adı... issues.create_label=Etiket Oluştur +issues.label_templates.title=Önceden tanımlanmış bir etiket seti yükle +issues.label_templates.info=Henüz hiç etiket yok. Bir tane oluşturmak için yukarıdaki "Yeni Etiket" düğmesine tıklayabilir veya aşağıdan önceden tanımlanmış bir set kullanabilirsiniz. +issues.label_templates.helper=Bir etiket seti seçin +issues.label_templates.use=Bir etiket seti kullanın +issues.label_templates.fail_to_load_file=Etiket şablon dosyası yüklemesi başarısız oldu '%s':%v +issues.add_label_at=eklenen
%s
etiket %s +issues.remove_label_at=kaldırılan
%s
etiket %s +issues.add_milestone_at=`bu %s yol taşına eklendi %s` +issues.change_milestone_at=` %sden%sye yol taşı düzenlendi %s` +issues.remove_milestone_at=`bu dosya %s yol taşından kaldırıldı %s` +issues.deleted_milestone=`(silindi)` +issues.self_assign_at=`kendiliğinden atanmış bu %s` +issues.add_assignee_at=`%s tarafından atandı %s` +issues.remove_assignee_at=`onların %s atamalarını kaldırdı` +issues.change_title_at=`başlık %sden %se değiştirildi %s` +issues.delete_branch_at=`branş %s silindi %s` issues.open_tab=%d açık issues.close_tab=%d kapanmış issues.filter_label=Etiket @@ -370,6 +661,13 @@ issues.filter_sort.recentupdate=Yakın zamanda güncellenmiş issues.filter_sort.leastupdate=Yakın olmayan zamanda güncellenmiş issues.filter_sort.mostcomment=En çok yorum yapılan issues.filter_sort.leastcomment=En az yorum yapılan +issues.action_open=Açık +issues.action_close=Kapalı +issues.action_label=Etiket +issues.action_milestone=Katedilen Yol +issues.action_milestone_no_select=Katedilen Yol Yok +issues.action_assignee=Vekil +issues.action_assignee_no_select=Vekil yok issues.opened_by=%[3]s tarafından %[1]s kere açıldı issues.opened_by_fake=%[2]s tarafından %[1]s kere açıldı issues.previous=Önceki @@ -388,8 +686,10 @@ issues.create_comment=Yorum yap issues.closed_at=`%[2]s kapattı` issues.reopened_at=`%[2]s yeniden açtı` issues.commit_ref_at=`%[2]s işlemesinde bu sorunu işaret etti` +issues.poster=Poster issues.collaborator=Katkıcı issues.owner=Sahibi +issues.sign_in_require_desc=Bu konuşmaya katılmak için oturum aç. issues.edit=Düzenle issues.cancel=İptal issues.save=Kaydet @@ -401,8 +701,36 @@ issues.label_edit=Düzenle issues.label_delete=Sil issues.label_modify=Etiket Düzenleme issues.label_deletion=Etiket Silme +issues.label_deletion_desc=Bu etiketi silmek onu tüm konulardan kaldıracak. Devam etmek istediğinize emin misiniz? +issues.label_deletion_success=Etiket başarıyla silindi! +issues.label.filter_sort.alphabetically=Alfabetik +issues.label.filter_sort.reverse_alphabetically=Ters alfabetik +issues.label.filter_sort.by_size=Boyut +issues.label.filter_sort.reverse_by_size=Ters boyut issues.num_participants=%d Katılımcı +issues.attachment.open_tab=`Yeni bir sekmede "%s" görmek için tıkla` +issues.attachment.download=`"%s" indirmek için tıkla` +issues.subscribe=Abone Ol +issues.unsubscribe=Abonelikten Çık +issues.tracker=Zaman izleyici +issues.start_tracking_short=Başlat +issues.start_tracking=Zaman izlemeyi başlat +issues.start_tracking_history=`%s çalışması başlatıldı` +issues.tracking_already_started=`Bu konuda zaten zaman izleyicisini başlattınız!` +issues.stop_tracking=Durdur +issues.stop_tracking_history=`%s çalışması durduruldu` +issues.add_time=Manuel olarak zaman ekle +issues.add_time_short=Ekle +issues.add_time_cancel=İptal +issues.add_time_history=`%s harcanan zaman eklendi` +issues.add_time_hours=Saat +issues.add_time_minutes=Dakika +issues.add_time_sum_to_small=Zaman girilmedi +issues.cancel_tracking=İptal +issues.cancel_tracking_history=` %s zaman izleyicisi iptal edildi ` +issues.time_spent_total=Toplam harcanan zaman +pulls.desc=Yönetim kodunuzun incelemesini çeker ve istekler birleşir pulls.new=Yeni Değişiklik İsteği pulls.compare_changes=Değişiklikleri Karşılaştır pulls.compare_changes_desc=İki dalı karşılaştır ve değişiklikler için değişiklik isteğinde bulun. @@ -418,12 +746,16 @@ pulls.merged_title_desc=%[3]s %[4]s içindeki %[2]s i pulls.tab_conversation=Sohbet pulls.tab_commits=İşlemeler pulls.tab_files=Değiştirilen dosyalar +pulls.reopen_to_merge=Bir birleşim uygulamak için lütfen bu çekme isteğini yeniden açın. pulls.merged=Birleştirildi +pulls.has_merged=Bu çekme isteği başarıyla birleştirildi. pulls.data_broken=Bu değişiklik isteğinin verisi, çatallama bilgilerinin silinmesi nedeniyle bozulmuş. pulls.is_checking=Çakışma kontrolü sürüyor. Lütfen birkaç dakika içinde sayfayı yenileyin. pulls.can_auto_merge_desc=Bu değişiklik isteği otomatik olarak birleştirilebilir. +pulls.cannot_auto_merge_desc=Çatışmalar olduğundan bu çekme isteği otomatik olarak birleştirilemiyor. pulls.cannot_auto_merge_helper=Çakışmaları çözmek için lütfen elle birleştirin. pulls.merge_pull_request=Değişiklik İsteğini Birleştir +pulls.open_unmerged_pull_exists=`Tekrar açma işlemini uygulayamazsınız çünkü zaten aynı depodan aynı birleştirme bilgisiyle birleştirmek için bekleyen bir açık çekme isteği (#%d) var.` milestones.new=Yeni Kilometre Taşı milestones.open_tab=%d Açık @@ -441,29 +773,91 @@ milestones.clear=Temizle milestones.invalid_due_date_format=Bitiş tarihi formatı geçersiz. 'yyyy-mm-dd' şeklinde olmalı. milestones.create_success=Kilometre taşı '%s' başarıyla oluşturuldu! milestones.edit=Kilometre Taşını Düzenle +milestones.edit_subheader=Kilometre taşı için insanların kafasını karıştırmayacak iyi bir açıklama kullanın. milestones.cancel=İptal milestones.modify=Kilometre Taşını Düzenle milestones.edit_success='%s' kilometre taşının değişiklikleri başarıyla kaydedildi! milestones.deletion=Kilometre Taşı Silme +milestones.deletion_desc=Bu kilometre taşını silmek onu tüm ilgili konulardan kaldıracak. Devam etmek istiyor musunuz? milestones.deletion_success=Kilometre taşı başarıyla silindi! +milestones.filter_sort.closest_due_date=En yakın zamanı gelmiş tarih +milestones.filter_sort.furthest_due_date=En uzak zamanı gelmiş tarih +milestones.filter_sort.least_complete=En az tamamlama +milestones.filter_sort.most_complete=En çok tamamlama +milestones.filter_sort.most_issues=En çok sorun +milestones.filter_sort.least_issues=En az sorun +ext_wiki=Ext Wiki +ext_wiki.desc=Ext Wiki harici bir wiki sistemine bağlar +wiki=Wiki +wiki.welcome=Wiki projesine hoş geldiniz +wiki.welcome_desc=Bir wiki size ve işbirlikçilerinize projenizi kolayca belgelemek için olanak sağlar. +wiki.desc=Wiki belgeleme depolaması için bir yerdir wiki.create_first_page=İlk sayfayı oluştur wiki.page=Sayfa wiki.filter_page=Sayfa filtrele wiki.new_page=Yeni Sayfa Oluştur +wiki.default_commit_message=Bu sayfa güncellemesi hakkında bir not yaz (isteğe bağlı). wiki.save_page=Sayfayı Kaydet wiki.last_commit_info=%s bu sayfayı düzenledi %s wiki.edit_page_button=Düzenle wiki.new_page_button=Yeni Sayfa wiki.delete_page_button=Sayfayı Sil +wiki.delete_page_notice_1=Bu "%s" sayfasını silecek. Lütfen bu sayfası silmek istediğinizden emin olun. wiki.page_already_exists=Aynı isimde bir Wiki sayfası zaten var. +wiki.reserved_page=Wiki sayfa adı %s rezerve edilmiş, lütfen farklı bir isim seçin. wiki.pages=Sayfalar wiki.last_updated=Son güncelleme %s +activity=Aktivite +activity.period.filter_label=Dönem: +activity.period.daily=1 gün +activity.period.halfweekly=3 gün +activity.period.weekly=1 hafta +activity.period.monthly=1 ay +activity.overview=Genel Bakış +activity.active_prs_count_1=%d Aktif Çekme İsteği +activity.active_prs_count_n=%d Aktif Çekme İstekleri +activity.merged_prs_count_1=Birleştirilmiş Çekme İsteği +activity.merged_prs_count_n=Birleştirilmiş Çekme İstekleri +activity.opened_prs_count_1=Önerilen Çekme İsteği +activity.opened_prs_count_n=Önerilen Çekme İstekleri +activity.title.user_1=%d kullanıcı +activity.title.user_n=%d kullanıcı +activity.title.prs_1=%d Çekme isteği +activity.title.prs_n=%d Çekme istekleri +activity.title.prs_merged_by=%s tarafından %s birleştirildi +activity.title.prs_opened_by=%s tarafından %s önerildi +activity.merged_prs_label=Birleştirilen +activity.opened_prs_label=Önerilen +activity.active_issues_count_1=%d Aktif Konu +activity.active_issues_count_n=%d Aktif Konular +activity.closed_issues_count_1=Kapalı Konu +activity.closed_issues_count_n=Kapalı Konular +activity.title.issues_1=%d Konu +activity.title.issues_n=%d Konular +activity.title.issues_closed_by=%s tarafından %s kapandı +activity.title.issues_created_by=%s tarafından %s oluşturuldu +activity.closed_issue_label=Kapalı +activity.new_issues_count_1=Yeni Konu +activity.new_issues_count_n=Yeni Konular +activity.new_issue_label=Açıldı +activity.title.unresolved_conv_1=%d Çözümlenmemiş konuşma +activity.title.unresolved_conv_n=%d Çözümlenmemiş konuşmalar +activity.unresolved_conv_desc=Tüm eski konuların ve son zamanlarda değiştirilmiş fakat henüz çözümlenmemiş çekme isteklerinin listesi. +activity.unresolved_conv_label=Açık +activity.title.releases_1=%d Serbest bırak +activity.title.releases_n=%d Serbest bırakmalar +activity.title.releases_published_by=%s tarafından %s yayınlandı +activity.published_release_label=Yayınlandı +search=Ara +search.search_repo=Depo ara +search.results="%s" için %s içinde sonuçları ara settings=Ayarlar +settings.desc=Ayarlar, depo için ayarları yönetebileceğiniz yerdir settings.options=Tercihler settings.collaboration=İş birliği settings.collaboration.admin=Yönetici @@ -473,36 +867,58 @@ settings.collaboration.undefined=Belirsiz settings.hooks=Web İstekleri settings.githooks=Git İstekleri settings.basic_settings=Temel Ayarlar +settings.mirror_settings=Yansıma Ayarları +settings.sync_mirror=Şimdi Senkronla +settings.mirror_sync_in_progress=Yansıma senkronu sürüyor. Lütfen bir dakika içinde tekrar kontrol etmek için sayfayı yenileyin. settings.site=Resmi Web Sitesi settings.update_settings=Ayarları Güncelle settings.advanced_settings=Gelişmiş Ayarlar settings.wiki_desc=Viki sıstemini etkinleştir +settings.use_internal_wiki=Builtin wiki kullan settings.use_external_wiki=Harici Wiki kullan settings.external_wiki_url=Harici Wiki bağlantısı +settings.external_wiki_url_error=Harici Wiki URLsi geçersiz settings.external_wiki_url_desc=Ziyaretçiler, sekmeye tıkladıklarında bağlantıya yönlendirilecektir. +settings.issues_desc=Konu izleyici etkinleştir settings.use_internal_issue_tracker=Use builtin lightweight issue tracker settings.use_external_issue_tracker=Harici sorun takipçisi kullan +settings.external_tracker_url=Harici Konu İzleyici URLsi +settings.external_tracker_url_error=Harici Konu İzleyici URLsi geçersiz +settings.external_tracker_url_desc=Sekmeye tıkladıklarında ziyaretçiler belirtilen URLye yönlendirilecekler. settings.tracker_url_format=Harici Sorun Takipçisi Bağlantı Formatı settings.tracker_issue_style=Harici Hata İzleyicisi Adlandırma Stili: settings.tracker_issue_style.numeric=Sayısal settings.tracker_issue_style.alphanumeric=Alfanumerik settings.tracker_url_format_desc=Kullanıcı adı, depo ismi ve hata indeksi için {kullanıcı} {depo} {indeks} tutucusunu kullanabilirsiniz. +settings.enable_timetracker=Zaman izleyiciyi etkinleştir +settings.allow_only_contributors_to_track_time=Zamanı izlemek için sadece katkıda bulunanlara izin ver settings.pulls_desc=Herkese açık katkıları kabul etmek için değişiklik isteklerini etkinleştirin settings.danger_zone=Tehlike Alanı settings.new_owner_has_same_repo=Yeni sahibin aynı isimde başka bir deposu var. Lütfen farklı bir isim seçin. settings.convert=Düzenli Depoya Dönüştür +settings.convert_desc=Bu yansımayı düzenli bir depoya dönüştürebilirsiniz. Bu geri alınamaz. settings.convert_notices_1=- Bu işlem, bu depo yansımasını düzenli türe dönüştürür ve geri alınamaz. settings.convert_confirm=Sohbeti Onayla +settings.convert_succeed=Depo düzenli bir depoya dönüştürüldü. settings.transfer=Sahipliği Aktar settings.transfer_desc=Bu depoyu başka bir kullanıcıya veya yönetici yetkilerine sahip olduğunuz başka bir organizasyona aktarın. +settings.transfer_notices_1=- Yeni sahip bireysel bir kullanıcıysa erişiminizi kaybedeceksiniz. +settings.transfer_notices_2=- Yeni sahip bir organizasyonsa ve siz sahiplerden biriyseniz erişimi koruyacaksınız. +settings.transfer_form_title=İşleminizi onaylamak için lütfen aşağıdaki bilgileri girin: settings.wiki_delete=Wiki Verisini Sil settings.wiki_delete_desc=Wiki verisini bir kez sildiğiniz taktirde geri getiremezsiniz. Lütfen emin olun. settings.wiki_delete_notices_1=- Bu işlem %s için Wiki'yi silecek ve devre dışı bırakacaktır. +settings.wiki_deletion_success=Depo wiki verisi temizlendi. settings.delete=Bu Depoyu Sil settings.delete_desc=Bir depoyu bir kez sildiğiniz taktirde geri getiremezsiniz. Lütfen emin olun. settings.delete_notices_1=- Bu işlem geri ALINAMAZ. +settings.delete_notices_2=- Bu işlem kodlar, konular, yorumlar, wiki ve işbirlikçi dernekler dahil %s depodaki her şeyi kalıcı olarak silecektir. +settings.delete_notices_fork_1=- Tüm forklar silme işleminden sonra bağımsız depolar haline gelecek. +settings.deletion_success=Depo silindi. +settings.update_settings_success=Depo seçenekleri güncellendi. settings.transfer_owner=Yeni Sahip settings.make_transfer=Transfer Et +settings.transfer_succeed=Depo sahipliği transfer edildi. settings.confirm_delete=Silmeyi Onayla settings.add_collaborator=Yeni Katkıcı Ekle settings.add_collaborator_success=Yeni katkıcı eklendi. @@ -514,10 +930,13 @@ settings.search_user_placeholder=Kullanıcı ara... settings.org_not_allowed_to_be_collaborator=Organizasyon, bir katkıcı olarak eklenemez. settings.user_is_org_member=Kullanıcı organizasyon üyesi olduğu için katkıcı olarak eklenemez. settings.add_webhook=Web İsteği Ekle +settings.hooks_desc=Web kancaları temel HTTP POST olay tetikleyicilere çok benzer. Gitea içinde bir şey meydana geldiğinde, hedef hosta bir bildirim göndereceğiz. web kancaları rehberinde daha fazlasını öğren. settings.webhook_deletion=Web İsteğini Sil +settings.webhook_deletion_desc=Bu web kancasını silmek kendi bilgisini ve tüm dağıtım geçmişini kaldıracak. Devam etmek istediğinize emin misiniz? settings.webhook_deletion_success=Web isteği başarıyla silindi! settings.webhook.test_delivery=Test Dağıtımı settings.webhook.test_delivery_desc=Web isteği ayarlarınızı test etmek için sahte bir anlık olay gönderin +settings.webhook.test_delivery_success=Test web kancası dağıtım kuyruğuna eklendi. Dağıtım geçmişinde görünmeden bu bir kaç saniye sürebilir. settings.webhook.request=İstekler settings.webhook.response=Cevaplar settings.webhook.headers=Başlıklar @@ -528,11 +947,14 @@ settings.githook_edit_desc=İstek aktif değilse örnek içerik sunulacaktır. settings.githook_name=İstek İsmi settings.githook_content=İstek İçeriği settings.update_githook=İsteği Güncelle +settings.add_webhook_desc=Gitea, belirttiğiniz URL'ye gerçekleşen olay hakkında bilgi ile birlikte bir POST isteği gönderecektir. Kancanın tetiklenmesi üzerine hangi veri biçimini almak istediğinizi de belirtebilirsiniz (JSON, x-www-form-urlencoded, XML, vs). Daha fazla bilgi web kancaları rehberimizde bulunabilir. settings.payload_url=Yük Bağlantısı settings.content_type=İçerik Türü settings.secret=Gizli settings.slack_username=Kullanıcı Adı settings.slack_icon_url=Simge Bağlantısı +settings.discord_username=Kullanıcı adı +settings.discord_icon_url=Simge URL'si settings.slack_color=Renk settings.event_desc=Bu istek ne zaman tetiklenecek? settings.event_push_only=Yalnızca anlık olay. @@ -540,8 +962,14 @@ settings.event_send_everything=Her şeye ihtiyacım var. settings.event_choose=Neye ihtiyacım olduğunu seçtir. settings.event_create=Oluştur settings.event_create_desc=Dal veya biçim imi oluşturuldu +settings.event_pull_request=İstek Çek +settings.event_pull_request_desc=Çekme isteği açıldı, kapandı, tekrar açıldı, düzenlendi, atandı, atanmadı, etiket güncellendi, etiket temizlendi veya senkronize edildi. +settings.event_push=Çek settings.event_push_desc=Bir depoya git push +settings.event_repository=Depo +settings.event_repository_desc=Depo oluşturuldu veya silindi settings.active=Aktif +settings.active_helper=Kancayı tetikleyen olayla ilgili bilgi de gönderilecek. settings.add_hook_success=Yeni web isteği eklendi. settings.update_webhook=Web İsteğini Düzenle settings.update_hook_success=Web isteği güncellendi. @@ -552,6 +980,8 @@ settings.add_slack_hook_desc=Deponuza Slack entegrasyonunu ekle settings.slack_token=Erişim Anahtarı settings.slack_domain=Alan Adı settings.slack_channel=Kanal +settings.add_discord_hook_desc=Deponuza Discord entegrasyonu ekleyin. +settings.add_dingtalk_hook_desc=Deponuza Dingtalk entegrasyonu ekleyin. settings.deploy_keys=Dağıtım Anahtarları settings.add_deploy_key=Dağıtım Anahtarı Ekle settings.deploy_key_desc=Dağıtım anahtarlarının yalnızca okuma izni vardır. Kişisel hesapların SSH anahtarlarıyla aynı değillerdir. @@ -562,18 +992,46 @@ settings.key_been_used=Dağıtım anahtarının içeriği kullanımda. settings.key_name_used=Aynı isimde bir dağıtım anahtarı zaten var. settings.add_key_success=Yeni dağıtım anahtarı '%s' başarıyla eklendi! settings.deploy_key_deletion=Dağıtım Anahtarını Sil +settings.deploy_key_deletion_desc=Bu dağıtım anahtarını silmek bu deponun onunla erişimini önleyecek. Devam etmek istiyor musunuz? +settings.deploy_key_deletion_success=Dağıtım anahtarı başarıyla silindi! +settings.branches=Branşlar +settings.protected_branch=Branş Koruması +settings.protected_branch_can_push=İtmeye izin verilsin mi? +settings.protected_branch_can_push_yes=İtebilirsiniz +settings.protected_branch_can_push_no=İtemezsiniz +settings.branch_protection=%s için Branş Koruması +settings.protect_this_branch=Bu bölümü koru +settings.protect_this_branch_desc=Zorla itmeyi ve silme önlemeyi devre dışı bırak. +settings.protect_whitelist_committers=Bu branşa kimin itebileceği beyaz liste +settings.protect_whitelist_committers_desc=Bu branşın beyaz listesine kullanıcılar veya takımlar ekle. Beyaz listeli kullanıcılar tipik itme kısıtlamalarını atlatır. +settings.protect_whitelist_users=Bu branşa itebilecek kullanıcılar +settings.protect_whitelist_search_users=Kullanıcıları ara +settings.protect_whitelist_teams=Bu branşa itebilecek üyelerin takımları. +settings.protect_whitelist_search_teams=Takımları ara +settings.add_protected_branch=Korumayı etkinleştir +settings.delete_protected_branch=Korumayı devre dışı bırak +settings.update_protect_branch_success=Branş %s koruma ayarları başarıyla değiştirildi. +settings.remove_protected_branch_success=Branş %s koruma ayarları başarıyla kaldırıldı +settings.protected_branch_deletion=Korunan bir branşı silmek için +settings.protected_branch_deletion_desc=Yazma izinleri olan herhangi biri bu branşa doğrudan itebilecek. Emin misiniz? +settings.default_branch_desc=Varsayılan branş, farklı bir branş belirtmediğiniz sürece tüm çekme isteklerinin ve kod işlemelerinin otomatik olarak yapılması karşısında deponuzdaki "taban" şube olarak düşünülür. +settings.choose_branch=Bir branş seç... +settings.no_protected_branch=Korunan bölüm yok diff.browse_source=Kaynağa Gözat diff.parent=ebeveyn diff.commit=işleme +diff.data_not_available=Farklı İçerik Mevut Değil diff.show_diff_stats=Farklılık Durumunu Göster diff.show_split_view=Görünümü Böl diff.show_unified_view=Birleşik Görünüm diff.stats_desc= %d değiştirilmiş dosya ile %d ekleme ve %d silme +diff.bin=BIN diff.view_file=Dosyayı Görüntüle diff.file_suppressed=Dosya farkı çok büyük olduğundan ihmal edildi diff.too_many_files=Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor +releases.desc=Serbest bırakmalar projenizin yönetim versiyonlarına yerleştirmedir release.releases=Sürümler release.new_release=Yeni Sürüm release.draft=Taslak @@ -582,8 +1040,10 @@ release.stable=Kararlı release.edit=düzenle release.ahead=%s son sürümden beri %d işleme release.source_code=Kaynak Kodu +release.edit_subheader=Detaylı bir değişiklik günlüğü, kullanıcıların neyin değiştiğini anlamasına yardımcı olabilir. release.tag_name=Biçim imi adı release.target=Hedef +release.tag_helper=Mevcut bir etiket seçin veya yeni bir etiket oluşturun. release.title=Başlık release.content=İçerik release.write=Yaz @@ -597,10 +1057,34 @@ release.save_draft=Taslağı Kaydet release.edit_release=Taslağı Düzenle release.delete_release=Bu Sürümü Sil release.deletion=Sürüm Silme +release.deletion_desc=Bu sürümü silmek, bununla uyumlu Git etiketini silecektir. Herhangi bir kod kaybetmeyeceksiniz. Devam etmek istiyor musunuz? +release.deletion_success=Sürüm silindi. release.tag_name_already_exist=Bu biçim imi adıyla başka bir sürüm zaten var. release.tag_name_invalid=Etiket adı geçerli değil. release.downloads=İndirmeler +branch.name=Bölüm adı +branch.search=Bölümleri ara +branch.already_exists=%s isimli bir bölüm zaten mevcut. +branch.delete_head=Sil +branch.delete=%s Bölümünü Sil +branch.delete_html=Bölüm Sil +branch.delete_desc=Bir bölümü silmek kalıcıdır. Geri almanın bir yolu yoktur. +branch.delete_notices_1=- Bu işlem geri ALINAMAZ. +branch.delete_notices_2=- Bu işlem %s bölümündeki her şeyi kalıcı olarak silecek. +branch.delete_notices_html=- Bu işlem branştaki her şeyi kalıcı olarak silecek +branch.deletion_success=%s silindi. +branch.deletion_failed=Branş %s silme başarısız oldu. +branch.delete_branch_has_new_commits=Birleştirmeden sonra yeni taahhütler eklendiğinden dolayı %s silinemedi. +branch.create_branch=Branş %s oluştur +branch.create_from='%s'den +branch.create_success=Branş '%s' başarıyla oluşturuldu! +branch.branch_already_exists=Branş '%s' zaten bu depoda bulunuyor. +branch.branch_name_conflict=Branş adı '%s' zaten mevcut olan branş '%s' ile çatışıyor. +branch.deleted_by=%s tarafından silindi +branch.restore_success=%s başarıyla onarıldı +branch.restore_failed=Branş %s onarımı başarısız oldu. +branch.protected_deletion_failed=Korunan branş %s'i silmek mümkün değil. [org] org_name_holder=Organizasyon Adı @@ -616,9 +1100,14 @@ create_new_team=Yeni Ekip Oluştur org_desc=Açıklama team_name=Ekip Adı team_desc=Açıklama +team_name_helper=Konuşmalardan bu takımdan bahsetmek için bu ismi kullanacaksınız. +team_desc_helper=Bu takım ne için? +team_permission_desc=Bu takım hangi izinlere sahip olmalı? +team_unit_desc=Bu takım erişim için hangi birimlere sahip olmalı? form.name_reserved=Organizasyon adı '%s' başka birisine ayrılmış. form.name_pattern_not_allowed=Organizasyon adı modeli '%s' geçersiz. +form.create_org_not_allowed=Bu kullanıcıya bir organizasyon oluşturması için izin verilmedi. settings=Ayarlar settings.options=Seçenekler @@ -626,11 +1115,16 @@ settings.full_name=Tam İsim settings.website=Web Sitesi settings.location=Lokasyon settings.update_settings=Ayarları Güncelle +settings.update_setting_success=Organizasyon ayarları güncellendi. +settings.change_orgname_prompt=Bu değişiklik organizasyona bağlantıları değiştirecek. +settings.update_avatar_success=Organizasyon avatarı güncellendi. settings.delete=Organizasyonu Sil settings.delete_account=Bu Organizasyonu Sil settings.delete_prompt=Organizasyon kalıcı olarak kaldırılacaktır ve bu işlem geri ALINAMAZ! settings.confirm_delete_account=Silmeyi Onaylıyorum settings.delete_org_title=Organizasyon Silme +settings.delete_org_desc=Organizasyon kalıcı olarak silinecek, devam etmek istediğinize emin misiniz? +settings.hooks_desc=Bu organizasyon altındaki tüm depolar için tetiklenecek webhook'lar ekle. members.membership_visibility=Üyelik Görünürlüğü: members.public=Herkese Açık @@ -650,7 +1144,9 @@ teams.leave=Ayrıl teams.read_access=Okuma Erişimi teams.read_access_helper=Bu takım, tüm depolarını görüntüleyebilecek ve klonlayabilecektir. teams.write_access=Yazma Erişimi +teams.write_access_helper=Bu takım okuyabilecek ve kendi depolarına itebilecek. teams.admin_access=Yönetici Erişimi +teams.admin_access_helper=Bu takım onlara diğer işbirlikçileri ekleyebileceği gibi, kendi depolarına itebilecek ve çekebilecek. teams.no_desc=Herhangi bir takım açıklaması yok teams.settings=Ayarlar teams.owners_permission_desc=Sahiplerin tüm depolara tam yetkisi ve organizasyona yönetici yetkisi vardır. @@ -659,6 +1155,8 @@ teams.update_settings=Ayarları Güncelle teams.delete_team=Bu Ekibi Sil teams.add_team_member=Ekip Üyesi Ekle teams.delete_team_title=Takım Silme +teams.delete_team_desc=Bu takım silineceği için, bu takımın üyeleri bazı depolara erişimlerini kaybedebilir. Devam etmek istiyor musunuz? +teams.delete_team_success=Takım silindi. teams.read_permission_desc=Bu takımın yetkilerinden Okuma izni: üyeler görüntüleyebilir ve takımın depolarını klonlayabilir. teams.write_permission_desc=Bu takımın yetkilerinden Yazma izni: üyeler okuyabilir ve takımın depolarına push yapabilir. teams.admin_permission_desc=Bu takımın yetkilerinden Yönetici izni: üyeler okuyabilir, push yapabilir ve takımın depolarına yeni katkıcılar ekleyebilir. @@ -688,8 +1186,23 @@ dashboard.statistic_info=Gitea veritabanında %d kullanıcı, %d o dashboard.operation_name=İşlem Adı dashboard.operation_switch=Geç dashboard.operation_run=Çalıştır +dashboard.clean_unbind_oauth=Bağsız OAuth bağlantılarını temizle +dashboard.clean_unbind_oauth_success=Tüm bağsız OAuth bağlantıları silindi. dashboard.delete_inactivate_accounts=Etkin olmayan tüm hesapları sil +dashboard.delete_inactivate_accounts_success=Tüm aktif olmayan hesaplar silindi. dashboard.delete_repo_archives=Tüm depo arşivlerini sil +dashboard.delete_repo_archives_success=Tüm depoların arşivleri silindi. +dashboard.delete_missing_repos=Git dosyaları eksik olan tüm depo kayıtlarını sil +dashboard.delete_missing_repos_success=Tüm Git dosyaları eksik olan depo kayıtları silindi. +dashboard.git_gc_repos=Tüm depolarda çöp toplamayı gerçekleştir +dashboard.git_gc_repos_success=Tüm depolar çöp toplama yürütmesini bitirdi. +dashboard.resync_all_sshkeys_success=Gitea tarafından kontrol edilen tüm genel anahtarlar tekrar yazıldı. +dashboard.resync_all_hooks=Tüm depoların yeniden alımı, güncellemesi ve gönderi alım kancalarını yeniden senkronize et. +dashboard.resync_all_hooks_success=Tüm depoların önceden alımı, güncellemesi ve gönderi alımı kancaları yeniden senkronize edildi. +dashboard.reinit_missing_repos=Kayıtları bulunanlar için tüm eksik Git depolarını yeniden başlat +dashboard.reinit_missing_repos_success=Kayıtları bulunanlar için tüm eksik Git depoları yeniden başlatıldı. +dashboard.sync_external_users=Harici kullanıcı verisini senkronize et +dashboard.sync_external_users_started=Harici kullanıcı senkronizasyonu başlatıldı dashboard.server_uptime=Sunucunun Ayakta Kalma Süresi dashboard.current_goroutine=Güncel Goroutine'ler dashboard.current_memory_usage=Güncel Bellek Kullanımı @@ -720,49 +1233,68 @@ dashboard.total_gc_pause=Toplam GC Durması dashboard.last_gc_pause=Son GC Durması dashboard.gc_times=GC Zamanları +users.user_manage_panel=Kullanıcı Yönetim Paneli users.new_account=Yeni Hesap Oluştur users.name=İsim users.activated=Aktifleştirilmiş users.admin=Yönetici users.repos=Depolar users.created=Oluşturuldu +users.last_login=Son Oturum Açma users.send_register_notify=Kullanıcıya Kaydolma Bildirimi Gönder +users.new_success='%s' hesabı oluşturuldu. users.edit=Düzenle users.auth_source=Yetkilendirme Kaynağı users.local=Yerel users.auth_login_name=Yetkilendirmeye Giriş İsmi users.password_helper=Değiştirmemek için burayı boş bırakın. +users.update_profile_success=Hesap profili güncellendi. users.edit_account=Hesabı Düzenle users.max_repo_creation=Maksimum Depo Oluşturma Limiti users.max_repo_creation_desc=(Genel varsayılan limiti kullanmak için -1 yazın) +users.is_activated=Hesap etkinleştirildi +users.prohibit_login=Oturum açma devre dışı users.is_admin=Bu hesap, yönetici izinlerine sahiptir +users.allow_git_hook=Git kancaları oluşturmaya izin verildi users.allow_import_local=Bu hesap, yerel depoları içeri aktarmak için gereken yetkilere sahip +users.allow_create_organization=Organizasyon oluşturmaya izin verildi users.update_profile=Hesap Profilini Güncelle users.delete_account=Bu Hesabı Sil +users.still_own_repo=Bu kullanıcı hala bir veya daha fazla deponun sahibi. Bu depoların öncelikle silinmiş veya transfer edilmiş olması gerekir. +users.still_has_org=Bu kullanıcı bir veya daha fazla organizasyonun halen bir üyesi. Bu kullanıcının öncelikle onlardan ayrılması veya silinmesi gerekir. +users.deletion_success=Hesap başarıyla silindi. +orgs.org_manage_panel=Organizasyon Yönetimi orgs.name=İsim orgs.teams=Ekipler orgs.members=Üyeler +orgs.new_orga=Organizasyon Oluştur +repos.repo_manage_panel=Depo Yönetimi repos.owner=Sahibi repos.name=İsim repos.private=Özel repos.watches=İzlemeler repos.stars=Yıldızlar repos.issues=Sorunlar +repos.size=Boyut +auths.auth_manage_panel=Kimlik Doğrulama Yönetimi auths.new=Yeni Kaynak Ekle auths.name=İsim auths.type=Tür auths.enabled=Aktifleştirilmiş +auths.syncenabled=Kullanıcı senkronizasyonunu etkinleştir auths.updated=Güncellendi auths.auth_type=Yetki Türü auths.auth_name=Yetki İsmi auths.security_protocol=Güvenlik Protokolü auths.domain=Alan Adı auths.host=Sunucu +auths.port=Bağlantı Noktası auths.bind_dn=Bağlama DN'i auths.bind_password=Bağlama Parolası +auths.bind_password_helper=Uyarı: Bu şifre düz metin halinde saklanıyor. Salt okunur hesap kullanmanız kesinlikle önerilir. auths.user_base=Kullanıcı Arama Tabanı auths.user_dn=Kullanıcı DN'i auths.attribute_username=Kullanıcı özelliği @@ -773,6 +1305,7 @@ auths.attribute_mail=E-posta özelliği auths.attributes_in_bind=Bağlı DN tabanındaki özellikleri çek auths.filter=Kullanıcı Filtresi auths.admin_filter=Yönetici Filtresi +auths.ms_ad_sa=MS AD Arama Nitelikleri auths.smtp_auth=SMTP Yetkilendirme Türü auths.smtphost=SMTP Sunucusu auths.smtpport=SMTP Portu @@ -780,20 +1313,38 @@ auths.allowed_domains=İzin Verilen Alan Adları auths.enable_tls=TLS Şifrelemeyi Aktifleştir auths.skip_tls_verify=TLS Doğrulamasını Atla auths.pam_service_name=PAM Servis Adı +auths.oauth2_clientID=İstemci Kimliği (Anahtar) +auths.oauth2_use_custom_url=Varsayılan URL'ler yerine özel URL'ler kullanın auths.enable_auto_register=Otomatik Kaydolmayı Aktifleştir auths.tips=İpuçları +auths.tip.dropbox=https://www.dropbox.com/developers/apps adresinde yeni bir uygulama oluştur +auths.tip.facebook=https://developers.facebook.com/apps adresinde yeni bir uygulama kaydedin ve "Facebook Giriş" ürününü ekleyin +auths.tip.github=https://github.com/settings/applications/new adresinde yeni bir OAuth uygulaması kaydedin +auths.tip.gitlab=https://gitlab.com/profile/applications adresinde yeni bir uygulama kaydedin +auths.tip.twitter=https://dev.twitter.com/apps adresine gidin, bir uygulama oluşturun ve "Twitter ile giriş yapmak için bu uygulamanın kullanılmasına izin ver" seçeneğinin etkinleştirildiğinden emin olun. +auths.edit=Kimlik Doğrulama Ayarlarını Düzenle auths.activated=Bu yetkilendirme aktif +auths.new_success=Kimlik doğrulama '%s' eklendi. +auths.update_success=Kim doğrulama ayarları güncellendi. +auths.update=Kimlik Doğrulama Ayarlarını Güncelle +auths.delete=Bu Kimlik Doğrulama Kaynağını Sil +auths.delete_auth_title=Kimlik Doğrulama Kaynağını Sil +auths.delete_auth_desc=Bu kimlik doğrulama kaynağı silinecek. Devam etmek istediğinize emin misiniz? +auths.still_in_used=Bu kimlik doğrulama kaynağı bir veya daha fazla kullanıcı tarafından hala kullanılıyor. Lütfen öncelikle onları silin veya başka bir giriş kaynağına çevirin. auths.deletion_success=Yetkilendirme başarıyla silindi! +auths.login_source_exist='%s' giriş kaynağı zaten mevcut. config.server_config=Sunucu Yapılandırması config.app_name=Uygulama Adı config.app_ver=Uygulama Sürümü config.app_url=Uygulama Bağlantısı +config.custom_conf=Yapılandırma Dosyası Yolu config.domain=Alan Adı config.offline_mode=Çevrim Dışı Modu config.disable_router_log=Yönlendirici Log'larını Devre Dışı Bırak config.run_user=Çalıştırma Kullanıcısı config.run_mode=Çalıştırma Modu +config.git_version=Git Sürüm config.repo_root_path=Depo Kök Yolu config.static_file_root_path=Sabit Dosya Kök Yolu config.log_file_root_path=Log Dosyası Kök Yolu @@ -802,7 +1353,9 @@ config.reverse_auth_user=Tersine Yetkilendirme Kullanıcısı config.ssh_config=SSH Yapılandırması config.ssh_enabled=Aktif +config.ssh_start_builtin_server=Yerleşik Sunucuyu Başlat config.ssh_domain=Alan Adı +config.ssh_port=Bağlantı Noktası config.ssh_listen_port=Port'u Dinle config.ssh_root_path=Kök Yol config.ssh_key_test_path=Anahtar Test Yolu @@ -823,6 +1376,8 @@ config.db_path_helper=("sqlite3" ve "tidb" için) config.service_config=Servis Yapılandırması config.register_email_confirm=E-posta Onayı Gerekli config.disable_register=Kaydolma Hizmet Dışı +config.enable_openid_signup=OpenID Kanalıyla Kaydolmayı Etkinleştir +config.enable_openid_signin=OpenID ile Oturum Açmayı Etkinleştir config.show_registration_button=Kaydolma Tuşunu Göster config.require_sign_in_view=Oturum Açma Görünümünü İste config.mail_notify=E-posta Bildirimi @@ -833,6 +1388,7 @@ config.active_code_lives=Kod Yaşamlarını Aktifleştir config.webhook_config=Web İstekleri Yapılandırması config.queue_length=Kuyruk Uzunluğu config.deliver_timeout=Dağıtım Zaman Aşımı +config.skip_tls_verify=TLS Doğrulamasını Geç config.mailer_config=Mailer Yapılandırması config.mailer_enabled=Aktif @@ -933,8 +1489,16 @@ invalid_input_type=Bu türdeki dosyaları yükleyemezsiniz. remove_file=Dosya Kaldır [notification] +no_read=Hiç okundu bildiriminiz yok. +pin=Pin bildirimi +mark_as_read=Okundu olarak işaretle +mark_as_unread=Okunmadı olarak işaretle +mark_all_as_read=Tümünü okundu olarak işaretle [gpg] +error.no_gpg_keys_found=Veri tabanında bu imza için bilinen anahtar bulunamadı [units] +error.no_unit_allowed_repo=Bu depoda erişme yetkiniz olan hiçbir birim bulunamıyor +error.unit_not_allowed=Bu depo birimini ziyaret etmenize izin verilmiyor diff --git a/options/locale/locale_zh-CN.ini b/options/locale/locale_zh-CN.ini index 483afb9e7..3afb5f76d 100644 --- a/options/locale/locale_zh-CN.ini +++ b/options/locale/locale_zh-CN.ini @@ -1,4 +1,4 @@ -app_desc=基于 Go 语言的自助 Git 服务 +app_desc=一款极易搭建的自助 Git 服务 home=首页 dashboard=控制面板 @@ -63,6 +63,7 @@ cancel=取消 install=安装页面 title=初始配置 docker_helper=如果您正在使用 Docker 容器运行 Gitea,请务必先仔细阅读 官方文档 后再对本页面进行填写。 +requite_db_desc=Gitea 要求安装 MySQL、MSSQL、PostgreSQL、SQLite3 或 TiDB。 db_title=数据库设置 db_type=数据库类型 host=数据库主机 @@ -269,6 +270,7 @@ openid_been_used=OpenID 地址 '%s' 已被使用。 username_password_incorrect=用户名或密码错误 enterred_invalid_repo_name=请检查您输入的仓库名称是正确。 enterred_invalid_owner_name=请检查您输入的新所有者用户名是否正确。 +enterred_invalid_password=请检查您输入的密码是否正确。 user_not_exist=该用户名不存在 last_org_owner=被移除用户为最后一位管理员。请添加一位新的管理员再进行移除成员操作! cannot_add_org_to_team=组织不能被加入到团队中。 @@ -399,6 +401,8 @@ valid_until=有效期至 valid_forever=永久有效 last_used=上次使用在 no_activity=没有最近活动 +can_read_info=读取 +can_write_info=写入 key_state_desc=7 天内使用过该密钥 token_state_desc=7 天内使用过该密钥 show_openid=在个人信息上显示 @@ -753,7 +757,12 @@ pulls.is_checking=该合并请求正在进行冲突检查,请稍后再刷新 pulls.can_auto_merge_desc=该合并请求可以进行自动合并操作。 pulls.cannot_auto_merge_desc=该合并请求存在冲突,无法进行自动合并操作。 pulls.cannot_auto_merge_helper=请手动拉取代码变更以解决冲突。 +pulls.no_merge_desc=由于未启用合并选项,此合并请求无法被合并。 +pulls.no_merge_helper=要合并该请求,请在仓库设置中开启至少一个合并选项,或者手动合并该请求。 pulls.merge_pull_request=合并请求 +pulls.rebase_merge_pull_request=变基并合并 +pulls.squash_merge_pull_request=压缩提交并合并 +pulls.invalid_merge_option=该合并选项不能被用于此合并请求 pulls.open_unmerged_pull_exists=`由于已经存在来自相同仓库和合并信息的未合并请求(#%d),您无法执行重新开启操作。` milestones.new=新的里程碑 @@ -892,6 +901,10 @@ settings.tracker_url_format_desc=您可以使用 {user} {repo} {index}钉钉 settings.deploy_keys=管理部署密钥 settings.add_deploy_key=添加部署密钥 settings.deploy_key_desc=部署密钥仅具有只读权限,它在功能上和个人用户的公开密钥有本质区别。 +settings.is_writable=允许写入权限 +settings.is_writable_info=此密钥是否可以用于推送到此仓库?部署密钥始终具有”拉取“访问权限。 settings.no_deploy_keys=您还没有添加任何部署密钥。 settings.title=标题 settings.deploy_key_content=密钥文本 @@ -1308,6 +1323,7 @@ auths.attribute_mail=邮箱属性 auths.attributes_in_bind=从 Bind DN 中拉取属性信息 auths.filter=用户过滤规则 auths.admin_filter=管理员过滤规则 +auths.ms_ad_sa=MS AD 搜索属性 auths.smtp_auth=SMTP 认证类型 auths.smtphost=SMTP 主机地址 auths.smtpport=SMTP 主机端口 diff --git a/options/locale/locale_zh-TW.ini b/options/locale/locale_zh-TW.ini index 1a364d3ac..864ae7ece 100644 --- a/options/locale/locale_zh-TW.ini +++ b/options/locale/locale_zh-TW.ini @@ -63,6 +63,7 @@ cancel=取消 install=安裝頁面 title=初始設定 docker_helper=如果您正在使用 Docker 容器運行 Gitea,請務必先仔細閱讀 官方文檔 後再對本頁面進行填寫。 +requite_db_desc=Gitea 需要安裝 MySQL、MSSQL、PostgreSQL、SQLite3 或 TiDB 其中一項。 db_title=資料庫設定 db_type=資料庫類型 host=主機 @@ -269,6 +270,7 @@ openid_been_used=OpenID 位址 '%s' 已被使用。 username_password_incorrect=帳戶名稱或密碼有誤 enterred_invalid_repo_name=請檢查您輸入的儲存庫名稱是否正確。 enterred_invalid_owner_name=請檢查您輸入的擁有者名稱是否正確。 +enterred_invalid_password=請檢查您輸入的密碼是否正確。 user_not_exist=該用戶名不存在 last_org_owner=無法移除群組內唯一的管理員 cannot_add_org_to_team=組織不能被新增為團隊成員。 @@ -398,6 +400,8 @@ valid_until=有效期至 valid_forever=永遠有效 last_used=上次使用在 no_activity=沒有最近活動 +can_read_info=讀取 +can_write_info=寫入 key_state_desc=該金鑰在 7 天內被使用過 token_state_desc=此 token 在過去七天內曾經被使用過 show_openid=在設定檔顯示 @@ -486,6 +490,7 @@ mirror_last_synced=上次同步 watchers=關注者 stargazers=稱讚者 forks=複製儲存庫 +pick_reaction=選擇你的表情反應 form.reach_limit_of_creation=您已經達到了儲存庫 %d 的上限。 form.name_reserved=儲存庫名稱 '%s' 是預留的。 @@ -536,6 +541,7 @@ pulls=合併請求 labels=標籤 milestones=里程碑 commits=提交歷史 +commit=提交 releases=版本發佈 file_raw=原始文件 file_history=歷史記錄 @@ -625,6 +631,8 @@ issues.label_templates.info=沒有任何標籤。你可以點選上面建立一 issues.label_templates.helper=選擇一個標籤集 issues.label_templates.use=使用此標籤集 issues.label_templates.fail_to_load_file=載入標籤範本檔案 '%s' 失敗: %v +issues.add_label_at=加上了
%s
標籤 %s +issues.remove_label_at=刪除了
%s
標籤 %s issues.add_milestone_at=`新增至%s 里程碑 %s` issues.change_milestone_at=`%[3]s 修改了里程碑 %[1]s%[2]s` issues.remove_milestone_at=`從里程碑 %[2]s 刪除 %[1]s` @@ -705,9 +713,23 @@ issues.attachment.open_tab=`在新的標籤頁中查看 '%s'` issues.attachment.download=`點擊下載 '%s'` issues.subscribe=訂閱 issues.unsubscribe=取消訂閱 +issues.tracker=時間追蹤 +issues.start_tracking_short=開始 +issues.start_tracking=開始追蹤時間 +issues.start_tracking_history=`開始工作 %s` +issues.tracking_already_started=`您已經開始時間追蹤這個 問題!` +issues.stop_tracking=停止 +issues.stop_tracking_history=`結束工作 %s` +issues.add_time=手動加入時間 +issues.add_time_short=加入 +issues.add_time_cancel=取消 +issues.add_time_history=`加入了花費時間 %s` issues.add_time_hours=小時 issues.add_time_minutes=分鐘 +issues.add_time_sum_to_small=沒有輸入時間 issues.cancel_tracking=取消 +issues.cancel_tracking_history=`取消時間追蹤 %s` +issues.time_spent_total=總共花費時間 pulls.desc=Pulls 管理你的程式碼審核及程式碼合併要求。 pulls.new=建立合併請求 @@ -788,15 +810,36 @@ wiki.page_already_exists=相同名稱的 Wiki 頁面已經存在。 wiki.pages=所有頁面 wiki.last_updated=最後更新於 %s +activity=活動 +activity.period.filter_label=期間: activity.period.daily=1 天 activity.period.halfweekly=3 天 activity.period.weekly=1 星期 activity.period.monthly=1 個月 activity.overview=概覽 +activity.merged_prs_count_1=合併請求 +activity.merged_prs_count_n=合併請求 +activity.title.user_1=%d 使用者 +activity.title.user_n=%d 使用者 +activity.title.prs_1=%d 合併請求 +activity.title.prs_n=%d 合併請求 +activity.merged_prs_label=已合併 +activity.closed_issues_count_1=已關閉的 Issue +activity.closed_issues_count_n=已關閉的 Issue +activity.title.issues_1=%d Issue +activity.title.issues_n=%d Issues activity.closed_issue_label=已關閉 +activity.new_issues_count_1=建立問題 +activity.new_issues_count_n=建立問題 +activity.unresolved_conv_label=打開 +activity.title.releases_1=%d 版本發佈 +activity.title.releases_n=%d 版本發佈 activity.title.releases_published_by=%s 由 %s 發佈 activity.published_release_label=已發佈 +search=搜尋 +search.search_repo=搜尋儲存庫 +search.results=在 %s 中搜尋 "%s" 的结果 settings=儲存庫設定 settings.desc=設定是您可以管理儲存庫設定的地方 @@ -996,6 +1039,10 @@ release.tag_name_already_exist=已經存在使用相同標籤的發佈版本。 release.tag_name_invalid=標記名稱不是有效的。 release.downloads=下載附件 +branch.name=分支名稱 +branch.search=搜尋分支 +branch.already_exists=分支名稱%s已經存在 +branch.delete_head=刪除 branch.delete=刪除分支 %s branch.delete_html=刪除分支 branch.delete_desc=刪除分支將是永久的。沒有其它方法能復原。 @@ -1463,6 +1510,7 @@ no_read=您沒有任何已讀訊息。 pin=固定通知 mark_as_read=標記為已讀 mark_as_unread=標記為未讀 +mark_all_as_read=標記所有為已讀 [gpg] error.extract_sign=無法提取簽署 From 07b4e47a56cfa4944dac496504679fa8158493ca Mon Sep 17 00:00:00 2001 From: Kazuki Sawada Date: Sat, 27 Jan 2018 11:17:26 +0900 Subject: [PATCH 02/25] Add myself to TRANSLATORS (#3415) --- options/locale/TRANSLATORS | 1 + 1 file changed, 1 insertion(+) diff --git a/options/locale/TRANSLATORS b/options/locale/TRANSLATORS index 96001e96e..404b758e5 100644 --- a/options/locale/TRANSLATORS +++ b/options/locale/TRANSLATORS @@ -38,6 +38,7 @@ Joel da Rosa Joubert RedRat Jonathan Lozada De La Matta Juraj Bubniak +Kazuki Sawada Lafriks Lauri Ojansivu Luc Stepniewski From 9e87fe8c0693bf5554c34c5189be114a631183e4 Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Sat, 27 Jan 2018 02:18:45 +0000 Subject: [PATCH 03/25] [skip ci] Updated translations via Crowdin --- options/locale/locale_id-ID.ini | 106 ++++++++++++++++++++++++++++++++ options/locale/locale_ru-UA.ini | 106 ++++++++++++++++++++++++++++++++ options/locale/locale_zh-TW.ini | 19 ++++++ 3 files changed, 231 insertions(+) create mode 100644 options/locale/locale_id-ID.ini create mode 100644 options/locale/locale_ru-UA.ini diff --git a/options/locale/locale_id-ID.ini b/options/locale/locale_id-ID.ini new file mode 100644 index 000000000..0d9e5f6d5 --- /dev/null +++ b/options/locale/locale_id-ID.ini @@ -0,0 +1,106 @@ + + + + + + + +[install] + + + +[home] + + +[explore] + +[auth] + +[mail] + +[modal] + +[form] + + + + + + + +[user] + + +[settings] + + + + + + + + + + + + +[repo] + + + + + + + + + + + + + + + + + + + + +[org] + + + + + +[admin] + + + + + + + + + + + + + + + + + + + + +[action] + +[tool] + +[dropzone] + +[notification] + +[gpg] + +[units] + diff --git a/options/locale/locale_ru-UA.ini b/options/locale/locale_ru-UA.ini new file mode 100644 index 000000000..0d9e5f6d5 --- /dev/null +++ b/options/locale/locale_ru-UA.ini @@ -0,0 +1,106 @@ + + + + + + + +[install] + + + +[home] + + +[explore] + +[auth] + +[mail] + +[modal] + +[form] + + + + + + + +[user] + + +[settings] + + + + + + + + + + + + +[repo] + + + + + + + + + + + + + + + + + + + + +[org] + + + + + +[admin] + + + + + + + + + + + + + + + + + + + + +[action] + +[tool] + +[dropzone] + +[notification] + +[gpg] + +[units] + diff --git a/options/locale/locale_zh-TW.ini b/options/locale/locale_zh-TW.ini index 864ae7ece..57b694009 100644 --- a/options/locale/locale_zh-TW.ini +++ b/options/locale/locale_zh-TW.ini @@ -828,9 +828,12 @@ activity.closed_issues_count_1=已關閉的 Issue activity.closed_issues_count_n=已關閉的 Issue activity.title.issues_1=%d Issue activity.title.issues_n=%d Issues +activity.title.issues_closed_by=%[2]s 關閉了 %[1]s +activity.title.issues_created_by=%[2]s 建立了 %[1]s activity.closed_issue_label=已關閉 activity.new_issues_count_1=建立問題 activity.new_issues_count_n=建立問題 +activity.new_issue_label=已開啟 activity.unresolved_conv_label=打開 activity.title.releases_1=%d 版本發佈 activity.title.releases_n=%d 版本發佈 @@ -878,6 +881,7 @@ settings.tracker_url_format_desc=您可以使用 {user} {repo} {index}推送到此倉庫?部署金鑰始終具有讀取權限 settings.no_deploy_keys=您還沒有新增任何部署金鑰。 settings.title=標題 settings.deploy_key_content=金鑰文本 @@ -981,11 +987,18 @@ settings.protected_branch=分支保護 settings.protected_branch_can_push=允許推送? settings.protected_branch_can_push_yes=你可以推送 settings.protected_branch_can_push_no=你不能推送 +settings.branch_protection=%s 的分支保護 settings.protect_this_branch=保護此分支 +settings.protect_this_branch_desc=禁止強制推送和刪除分支 +settings.protect_whitelist_committers=允許推送到此分支的白名單 +settings.protect_whitelist_committers_desc=新增用戶到此分支的白名單內,白名單用戶不受到推送限制 +settings.protect_whitelist_users=允許推送到此分支的用戶 settings.protect_whitelist_search_users=搜尋使用者 +settings.protect_whitelist_teams=團隊成員可以推送到此分支 settings.protect_whitelist_search_teams=搜尋團隊 settings.add_protected_branch=啟用保護 settings.delete_protected_branch=停用保護 +settings.update_protect_branch_success=分支 %s 保護設定修改成功 settings.remove_protected_branch_success=%s 解鎖成功 settings.protected_branch_deletion=刪除一個受保護的分支 settings.protected_branch_deletion_desc=任何具有寫入權限的使用者都可以直接推進這個分支,您確定嗎? @@ -1048,12 +1061,15 @@ branch.delete_html=刪除分支 branch.delete_desc=刪除分支將是永久的。沒有其它方法能復原。 branch.delete_notices_1=- 此操作不可以被還原。 branch.delete_notices_2=- 此操作將永久刪除在 %s 分支內的所有內容。 +branch.delete_notices_html=- 此操作會永久刪除 %s 分支所有資料 branch.deletion_success=%s 已被刪除。 branch.deletion_failed=刪除分支 %s 失敗。 branch.delete_branch_has_new_commits=不能刪除 %s,因為合併後已新增了新的提交。 branch.create_branch=建立分支 %s branch.create_success=成功建立 '%s' 分支! branch.branch_already_exists=分支 '%s' 已存在此儲存庫 +branch.deleted_by=刪除人: %s +branch.restore_success=%s 成功恢復 branch.restore_failed=還原分支 %s 失敗 branch.protected_deletion_failed=不可能刪除已受保護的分支 %s。 @@ -1278,6 +1294,7 @@ auths.attribute_mail=電子郵箱屬性 auths.attributes_in_bind=從 Bind DN 中獲取屬性訊息 auths.filter=使用者篩選器 auths.admin_filter=管理者篩選器 +auths.ms_ad_sa=MS AD 搜尋屬性 auths.smtp_auth=SMTP 驗證類型 auths.smtphost=SMTP 主機地址 auths.smtpport=SMTP 主機端口 @@ -1374,6 +1391,8 @@ config.active_code_lives=啟用用戶連結有效期 config.reset_password_code_lives=重設密碼代碼過期時間 config.default_keep_email_private=隱藏郵件地址的預設值 config.default_allow_create_organization=建立組織的預設權限 +config.default_enable_timetracking=預設啟用時間追蹤 +config.default_allow_only_contributors_to_track_time=僅允許貢獻者追蹤時間 config.no_reply_address=不可回復的郵件地址 config.webhook_config=Webhook 設定 From a0c397df08b3e2de0e438a2404dd6f8edf866acb Mon Sep 17 00:00:00 2001 From: Lauris BH Date: Sat, 27 Jan 2018 14:33:32 +0200 Subject: [PATCH 04/25] Recognize more characters in crossreferenced repo name (#3413) --- modules/markup/html.go | 2 +- modules/markup/html_test.go | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/markup/html.go b/modules/markup/html.go index 532533976..d33afd384 100644 --- a/modules/markup/html.go +++ b/modules/markup/html.go @@ -43,7 +43,7 @@ var ( IssueAlphanumericPattern = regexp.MustCompile(`( |^|\()[A-Z]{1,10}-[1-9][0-9]*\b`) // CrossReferenceIssueNumericPattern matches string that references a numeric issue in a different repository // e.g. gogits/gogs#12345 - CrossReferenceIssueNumericPattern = regexp.MustCompile(`( |^)[0-9a-zA-Z]+/[0-9a-zA-Z]+#[0-9]+\b`) + CrossReferenceIssueNumericPattern = regexp.MustCompile(`( |^)[0-9a-zA-Z-_\.]+/[0-9a-zA-Z-_\.]+#[0-9]+\b`) // Sha1CurrentPattern matches string that represents a commit SHA, e.g. d8a994ef243349f321568f9e36d5c3f444b99cae // Although SHA1 hashes are 40 chars long, the regex matches the hash from 7 to 40 chars in length diff --git a/modules/markup/html_test.go b/modules/markup/html_test.go index e3597a4c3..5e783c754 100644 --- a/modules/markup/html_test.go +++ b/modules/markup/html_test.go @@ -285,6 +285,9 @@ func TestRender_CrossReferences(t *testing.T) { test( "gogits/gogs#12345", `

gogits/gogs#12345

`) + test( + "go-gitea/gitea#12345", + `

go-gitea/gitea#12345

`) } func TestRender_FullIssueURLs(t *testing.T) { From 97fe773491ae69531141316a1178d22c8a5d1257 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sat, 27 Jan 2018 09:20:59 -0600 Subject: [PATCH 05/25] fix MSSQL bug on org (#3405) --- .../go-xorm/builder/builder_select.go | 4 + vendor/github.com/go-xorm/builder/cond_and.go | 6 +- vendor/github.com/go-xorm/core/cache.go | 10 +- vendor/github.com/go-xorm/core/circle.yml | 3 +- vendor/github.com/go-xorm/core/column.go | 16 +- vendor/github.com/go-xorm/core/scan.go | 3 + .../github.com/go-xorm/xorm/CONTRIBUTING.md | 9 +- vendor/github.com/go-xorm/xorm/README.md | 155 ++++++++++++-- vendor/github.com/go-xorm/xorm/README_CN.md | 136 +++++++++++- vendor/github.com/go-xorm/xorm/context.go | 26 +++ vendor/github.com/go-xorm/xorm/convert.go | 6 +- .../go-xorm/xorm/dialect_postgres.go | 79 +++---- vendor/github.com/go-xorm/xorm/engine.go | 96 ++++++--- .../github.com/go-xorm/xorm/engine_group.go | 194 ++++++++++++++++++ .../go-xorm/xorm/engine_group_policy.go | 116 +++++++++++ .../github.com/go-xorm/xorm/engine_maxlife.go | 8 + vendor/github.com/go-xorm/xorm/error.go | 2 + vendor/github.com/go-xorm/xorm/interface.go | 103 ++++++++++ vendor/github.com/go-xorm/xorm/session.go | 9 +- .../go-xorm/xorm/session_convert.go | 14 +- .../github.com/go-xorm/xorm/session_exist.go | 13 +- vendor/github.com/go-xorm/xorm/session_get.go | 8 + .../github.com/go-xorm/xorm/session_insert.go | 4 +- .../github.com/go-xorm/xorm/session_query.go | 91 +++++++- vendor/github.com/go-xorm/xorm/session_raw.go | 13 +- .../github.com/go-xorm/xorm/session_update.go | 21 +- vendor/github.com/go-xorm/xorm/statement.go | 12 +- vendor/vendor.json | 18 +- 28 files changed, 1011 insertions(+), 164 deletions(-) create mode 100644 vendor/github.com/go-xorm/xorm/context.go create mode 100644 vendor/github.com/go-xorm/xorm/engine_group.go create mode 100644 vendor/github.com/go-xorm/xorm/engine_group_policy.go create mode 100644 vendor/github.com/go-xorm/xorm/interface.go diff --git a/vendor/github.com/go-xorm/builder/builder_select.go b/vendor/github.com/go-xorm/builder/builder_select.go index 05f116e00..3a3967ccc 100644 --- a/vendor/github.com/go-xorm/builder/builder_select.go +++ b/vendor/github.com/go-xorm/builder/builder_select.go @@ -45,6 +45,10 @@ func (b *Builder) selectWriteTo(w Writer) error { } } + if !b.cond.IsValid() { + return nil + } + if _, err := fmt.Fprint(w, " WHERE "); err != nil { return err } diff --git a/vendor/github.com/go-xorm/builder/cond_and.go b/vendor/github.com/go-xorm/builder/cond_and.go index 9c30e9c2e..e30bd186c 100644 --- a/vendor/github.com/go-xorm/builder/cond_and.go +++ b/vendor/github.com/go-xorm/builder/cond_and.go @@ -25,7 +25,9 @@ func And(conds ...Cond) Cond { func (and condAnd) WriteTo(w Writer) error { for i, cond := range and { _, isOr := cond.(condOr) - if isOr { + _, isExpr := cond.(expr) + wrap := isOr || isExpr + if wrap { fmt.Fprint(w, "(") } @@ -34,7 +36,7 @@ func (and condAnd) WriteTo(w Writer) error { return err } - if isOr { + if wrap { fmt.Fprint(w, ")") } diff --git a/vendor/github.com/go-xorm/core/cache.go b/vendor/github.com/go-xorm/core/cache.go index bf81bd52b..8f9531da9 100644 --- a/vendor/github.com/go-xorm/core/cache.go +++ b/vendor/github.com/go-xorm/core/cache.go @@ -1,11 +1,12 @@ package core import ( - "errors" - "fmt" - "time" "bytes" "encoding/gob" + "errors" + "fmt" + "strings" + "time" ) const ( @@ -55,11 +56,10 @@ func encodeIds(ids []PK) (string, error) { return buf.String(), err } - func decodeIds(s string) ([]PK, error) { pks := make([]PK, 0) - dec := gob.NewDecoder(bytes.NewBufferString(s)) + dec := gob.NewDecoder(strings.NewReader(s)) err := dec.Decode(&pks) return pks, err diff --git a/vendor/github.com/go-xorm/core/circle.yml b/vendor/github.com/go-xorm/core/circle.yml index 006e1230b..e6a05be27 100644 --- a/vendor/github.com/go-xorm/core/circle.yml +++ b/vendor/github.com/go-xorm/core/circle.yml @@ -11,4 +11,5 @@ database: test: override: # './...' is a relative pattern which means all subdirectories - - go test -v -race \ No newline at end of file + - go test -v -race + - go test -v -race --dbtype=sqlite3 diff --git a/vendor/github.com/go-xorm/core/column.go b/vendor/github.com/go-xorm/core/column.go index d9362e985..65370bb5b 100644 --- a/vendor/github.com/go-xorm/core/column.go +++ b/vendor/github.com/go-xorm/core/column.go @@ -79,6 +79,10 @@ func (col *Column) String(d Dialect) string { } } + if col.Default != "" { + sql += "DEFAULT " + col.Default + " " + } + if d.ShowCreateNull() { if col.Nullable { sql += "NULL " @@ -87,10 +91,6 @@ func (col *Column) String(d Dialect) string { } } - if col.Default != "" { - sql += "DEFAULT " + col.Default + " " - } - return sql } @@ -99,6 +99,10 @@ func (col *Column) StringNoPk(d Dialect) string { sql += d.SqlType(col) + " " + if col.Default != "" { + sql += "DEFAULT " + col.Default + " " + } + if d.ShowCreateNull() { if col.Nullable { sql += "NULL " @@ -107,10 +111,6 @@ func (col *Column) StringNoPk(d Dialect) string { } } - if col.Default != "" { - sql += "DEFAULT " + col.Default + " " - } - return sql } diff --git a/vendor/github.com/go-xorm/core/scan.go b/vendor/github.com/go-xorm/core/scan.go index 7da338d86..b7c159b27 100644 --- a/vendor/github.com/go-xorm/core/scan.go +++ b/vendor/github.com/go-xorm/core/scan.go @@ -44,6 +44,9 @@ func convertTime(dest *NullTime, src interface{}) error { } *dest = NullTime(t) return nil + case time.Time: + *dest = NullTime(s) + return nil case nil: default: return fmt.Errorf("unsupported driver -> Scan pair: %T -> %T", src, dest) diff --git a/vendor/github.com/go-xorm/xorm/CONTRIBUTING.md b/vendor/github.com/go-xorm/xorm/CONTRIBUTING.md index e0f6cfcdf..37f4bc5fa 100644 --- a/vendor/github.com/go-xorm/xorm/CONTRIBUTING.md +++ b/vendor/github.com/go-xorm/xorm/CONTRIBUTING.md @@ -32,13 +32,10 @@ proposed functionality. We appreciate any bug reports, but especially ones with self-contained (doesn't depend on code outside of xorm), minimal (can't be simplified further) test cases. It's especially helpful if you can submit a pull -request with just the failing test case (you'll probably want to -pattern it after the tests in -[base.go](https://github.com/go-xorm/tests/blob/master/base.go) AND -[benchmark.go](https://github.com/go-xorm/tests/blob/master/benchmark.go). +request with just the failing test case(you can find some example test file like [session_get_test.go](https://github.com/go-xorm/xorm/blob/master/session_get_test.go)). -If you implements a new database interface, you maybe need to add a _test.go file. -For example, [mysql_test.go](https://github.com/go-xorm/tests/blob/master/mysql/mysql_test.go) +If you implements a new database interface, you maybe need to add a test_.sh file. +For example, [mysql_test.go](https://github.com/go-xorm/xorm/blob/master/test_mysql.sh) ### New functionality diff --git a/vendor/github.com/go-xorm/xorm/README.md b/vendor/github.com/go-xorm/xorm/README.md index c8c43894c..9f6c20cbd 100644 --- a/vendor/github.com/go-xorm/xorm/README.md +++ b/vendor/github.com/go-xorm/xorm/README.md @@ -28,6 +28,8 @@ Xorm is a simple and powerful ORM for Go. * SQL Builder support via [github.com/go-xorm/builder](https://github.com/go-xorm/builder) +* Automatical Read/Write seperatelly + # Drivers Support Drivers for Go's sql package which currently support database/sql includes: @@ -48,6 +50,13 @@ Drivers for Go's sql package which currently support database/sql includes: # Changelog +* **v0.6.4** + * Automatical Read/Write seperatelly + * Query/QueryString/QueryInterface and action with Where/And + * Get support non-struct variables + * BufferSize on Iterate + * fix some other bugs. + * **v0.6.3** * merge tests to main project * add `Exist` function @@ -61,13 +70,6 @@ Drivers for Go's sql package which currently support database/sql includes: * add Scan features to Get * add QueryString method -* **v0.6.0** - * remove support for ql - * add query condition builder support via [github.com/go-xorm/builder](https://github.com/go-xorm/builder), so `Where`, `And`, `Or` -methods can use `builder.Cond` as parameter - * add Sum, SumInt, SumInt64 and NotIn methods - * some bugs fixed - [More changes ...](https://github.com/go-xorm/manual-en-US/tree/master/chapter-16) # Installation @@ -106,15 +108,36 @@ type User struct { err := engine.Sync2(new(User)) ``` -* `Query` runs a SQL string, the returned results is `[]map[string][]byte`, `QueryString` returns `[]map[string]string`. +* Create Engine Group + +```Go +dataSourceNameSlice := []string{masterDataSourceName, slave1DataSourceName, slave2DataSourceName} +engineGroup, err := xorm.NewEngineGroup(driverName, dataSourceNameSlice) +``` + +```Go +masterEngine, err := xorm.NewEngine(driverName, masterDataSourceName) +slave1Engine, err := xorm.NewEngine(driverName, slave1DataSourceName) +slave2Engine, err := xorm.NewEngine(driverName, slave2DataSourceName) +engineGroup, err := xorm.NewEngineGroup(masterEngine, []*Engine{slave1Engine, slave2Engine}) +``` + +Then all place where `engine` you can just use `engineGroup`. + +* `Query` runs a SQL string, the returned results is `[]map[string][]byte`, `QueryString` returns `[]map[string]string`, `QueryInterface` returns `[]map[string]interface{}`. ```Go results, err := engine.Query("select * from user") +results, err := engine.Where("a = 1").Query() results, err := engine.QueryString("select * from user") +results, err := engine.Where("a = 1").QueryString() + +results, err := engine.QueryInterface("select * from user") +results, err := engine.Where("a = 1").QueryInterface() ``` -* `Execute` runs a SQL string, it returns `affected` and `error` +* `Exec` runs a SQL string, it returns `affected` and `error` ```Go affected, err := engine.Exec("update user set age = ? where name = ?", age, name) @@ -125,62 +148,76 @@ affected, err := engine.Exec("update user set age = ? where name = ?", age, name ```Go affected, err := engine.Insert(&user) // INSERT INTO struct () values () + affected, err := engine.Insert(&user1, &user2) // INSERT INTO struct1 () values () // INSERT INTO struct2 () values () + affected, err := engine.Insert(&users) // INSERT INTO struct () values (),(),() + affected, err := engine.Insert(&user1, &users) // INSERT INTO struct1 () values () // INSERT INTO struct2 () values (),(),() ``` -* Query one record from database +* `Get` query one record from database ```Go has, err := engine.Get(&user) // SELECT * FROM user LIMIT 1 + has, err := engine.Where("name = ?", name).Desc("id").Get(&user) // SELECT * FROM user WHERE name = ? ORDER BY id DESC LIMIT 1 + var name string has, err := engine.Where("id = ?", id).Cols("name").Get(&name) // SELECT name FROM user WHERE id = ? + var id int64 has, err := engine.Where("name = ?", name).Cols("id").Get(&id) +has, err := engine.SQL("select id from user").Get(&id) // SELECT id FROM user WHERE name = ? + var valuesMap = make(map[string]string) has, err := engine.Where("id = ?", id).Get(&valuesMap) // SELECT * FROM user WHERE id = ? + var valuesSlice = make([]interface{}, len(cols)) has, err := engine.Where("id = ?", id).Cols(cols...).Get(&valuesSlice) // SELECT col1, col2, col3 FROM user WHERE id = ? ``` -* Check if one record exist on table +* `Exist` check if one record exist on table ```Go has, err := testEngine.Exist(new(RecordExist)) // SELECT * FROM record_exist LIMIT 1 + has, err = testEngine.Exist(&RecordExist{ Name: "test1", }) // SELECT * FROM record_exist WHERE name = ? LIMIT 1 + has, err = testEngine.Where("name = ?", "test1").Exist(&RecordExist{}) // SELECT * FROM record_exist WHERE name = ? LIMIT 1 + has, err = testEngine.SQL("select * from record_exist where name = ?", "test1").Exist() // select * from record_exist where name = ? + has, err = testEngine.Table("record_exist").Exist() // SELECT * FROM record_exist LIMIT 1 + has, err = testEngine.Table("record_exist").Where("name = ?", "test1").Exist() // SELECT * FROM record_exist WHERE name = ? LIMIT 1 ``` -* Query multiple records from database, also you can use join and extends +* `Find` query multiple records from database, also you can use join and extends ```Go var users []User err := engine.Where("name = ?", name).And("age > 10").Limit(10, 0).Find(&users) -// SELECT * FROM user WHERE name = ? AND age > 10 limit 0 offset 10 +// SELECT * FROM user WHERE name = ? AND age > 10 limit 10 offset 0 type Detail struct { Id int64 @@ -193,14 +230,14 @@ type UserDetail struct { } var users []UserDetail -err := engine.Table("user").Select("user.*, detail.*") +err := engine.Table("user").Select("user.*, detail.*"). Join("INNER", "detail", "detail.user_id = user.id"). Where("user.name = ?", name).Limit(10, 0). Find(&users) -// SELECT user.*, detail.* FROM user INNER JOIN detail WHERE user.name = ? limit 0 offset 10 +// SELECT user.*, detail.* FROM user INNER JOIN detail WHERE user.name = ? limit 10 offset 0 ``` -* Query multiple records and record by record handle, there are two methods Iterate and Rows +* `Iterate` and `Rows` query multiple records and record by record handle, there are two methods Iterate and Rows ```Go err := engine.Iterate(&User{Name:name}, func(idx int, bean interface{}) error { @@ -209,6 +246,13 @@ err := engine.Iterate(&User{Name:name}, func(idx int, bean interface{}) error { }) // SELECT * FROM user +err := engine.BufferSize(100).Iterate(&User{Name:name}, func(idx int, bean interface{}) error { + user := bean.(*User) + return nil +}) +// SELECT * FROM user Limit 0, 100 +// SELECT * FROM user Limit 101, 100 + rows, err := engine.Rows(&User{Name:name}) // SELECT * FROM user defer rows.Close() @@ -218,7 +262,7 @@ for rows.Next() { } ``` -* Update one or more records, default will update non-empty and non-zero fields except when you use Cols, AllCols and so on. +* `Update` update one or more records, default will update non-empty and non-zero fields except when you use Cols, AllCols and so on. ```Go affected, err := engine.Id(1).Update(&user) @@ -243,21 +287,39 @@ affected, err := engine.Id(1).AllCols().Update(&user) // UPDATE user SET name=?,age=?,salt=?,passwd=?,updated=? Where id = ? ``` -* Delete one or more records, Delete MUST have condition +* `Delete` delete one or more records, Delete MUST have condition ```Go affected, err := engine.Where(...).Delete(&user) // DELETE FROM user Where ... -affected, err := engine.Id(2).Delete(&user) + +affected, err := engine.ID(2).Delete(&user) +// DELETE FROM user Where id = ? ``` -* Count records +* `Count` count records ```Go counts, err := engine.Count(&user) // SELECT count(*) AS total FROM user ``` +* `Sum` sum functions + +```Go +agesFloat64, err := engine.Sum(&user, "age") +// SELECT sum(age) AS total FROM user + +agesInt64, err := engine.SumInt(&user, "age") +// SELECT sum(age) AS total FROM user + +sumFloat64Slice, err := engine.Sums(&user, "age", "score") +// SELECT sum(age), sum(score) FROM user + +sumInt64Slice, err := engine.SumsInt(&user, "age", "score") +// SELECT sum(age), sum(score) FROM user +``` + * Query conditions builder ```Go @@ -265,6 +327,59 @@ err := engine.Where(builder.NotIn("a", 1, 2).And(builder.In("b", "c", "d", "e")) // SELECT id, name ... FROM user WHERE a NOT IN (?, ?) AND b IN (?, ?, ?) ``` +* Multiple operations in one go routine, no transation here but resue session memory + +```Go +session := engine.NewSession() +defer session.Close() + +user1 := Userinfo{Username: "xiaoxiao", Departname: "dev", Alias: "lunny", Created: time.Now()} +if _, err := session.Insert(&user1); err != nil { + return err +} + +user2 := Userinfo{Username: "yyy"} +if _, err := session.Where("id = ?", 2).Update(&user2); err != nil { + return err +} + +if _, err := session.Exec("delete from userinfo where username = ?", user2.Username); err != nil { + return err +} + +return nil +``` + +* Transation should on one go routine. There is transaction and resue session memory + +```Go +session := engine.NewSession() +defer session.Close() + +// add Begin() before any action +if err := session.Begin(); err != nil { + // if returned then will rollback automatically + return err +} + +user1 := Userinfo{Username: "xiaoxiao", Departname: "dev", Alias: "lunny", Created: time.Now()} +if _, err := session.Insert(&user1); err != nil { + return err +} + +user2 := Userinfo{Username: "yyy"} +if _, err := session.Where("id = ?", 2).Update(&user2); err != nil { + return err +} + +if _, err := session.Exec("delete from userinfo where username = ?", user2.Username); err != nil { + return err +} + +// add Commit() after all actions +return session.Commit() +``` + # Cases * [studygolang](http://studygolang.com/) - [github.com/studygolang/studygolang](https://github.com/studygolang/studygolang) diff --git a/vendor/github.com/go-xorm/xorm/README_CN.md b/vendor/github.com/go-xorm/xorm/README_CN.md index cb2c1799e..b4258d540 100644 --- a/vendor/github.com/go-xorm/xorm/README_CN.md +++ b/vendor/github.com/go-xorm/xorm/README_CN.md @@ -115,12 +115,33 @@ type User struct { err := engine.Sync2(new(User)) ``` -* `Query` 最原始的也支持SQL语句查询,返回的结果类型为 []map[string][]byte。`QueryString` 返回 []map[string]string +* 创建Engine组 + +```Go +dataSourceNameSlice := []string{masterDataSourceName, slave1DataSourceName, slave2DataSourceName} +engineGroup, err := xorm.NewEngineGroup(driverName, dataSourceNameSlice) +``` + +```Go +masterEngine, err := xorm.NewEngine(driverName, masterDataSourceName) +slave1Engine, err := xorm.NewEngine(driverName, slave1DataSourceName) +slave2Engine, err := xorm.NewEngine(driverName, slave2DataSourceName) +engineGroup, err := xorm.NewEngineGroup(masterEngine, []*Engine{slave1Engine, slave2Engine}) +``` + +所有使用 `engine` 都可以简单的用 `engineGroup` 来替换。 + +* `Query` 最原始的也支持SQL语句查询,返回的结果类型为 []map[string][]byte。`QueryString` 返回 []map[string]string, `QueryInterface` 返回 `[]map[string]interface{}`. ```Go results, err := engine.Query("select * from user") +results, err := engine.Where("a = 1").Query() results, err := engine.QueryString("select * from user") +results, err := engine.Where("a = 1").QueryString() + +results, err := engine.QueryInterface("select * from user") +results, err := engine.Where("a = 1").QueryInterface() ``` * `Exec` 执行一个SQL语句 @@ -129,67 +150,81 @@ results, err := engine.QueryString("select * from user") affected, err := engine.Exec("update user set age = ? where name = ?", age, name) ``` -* 插入一条或者多条记录 +* `Insert` 插入一条或者多条记录 ```Go affected, err := engine.Insert(&user) // INSERT INTO struct () values () + affected, err := engine.Insert(&user1, &user2) // INSERT INTO struct1 () values () // INSERT INTO struct2 () values () + affected, err := engine.Insert(&users) // INSERT INTO struct () values (),(),() + affected, err := engine.Insert(&user1, &users) // INSERT INTO struct1 () values () // INSERT INTO struct2 () values (),(),() ``` -* 查询单条记录 +* `Get` 查询单条记录 ```Go has, err := engine.Get(&user) // SELECT * FROM user LIMIT 1 + has, err := engine.Where("name = ?", name).Desc("id").Get(&user) // SELECT * FROM user WHERE name = ? ORDER BY id DESC LIMIT 1 + var name string has, err := engine.Where("id = ?", id).Cols("name").Get(&name) // SELECT name FROM user WHERE id = ? + var id int64 has, err := engine.Where("name = ?", name).Cols("id").Get(&id) +has, err := engine.SQL("select id from user").Get(&id) // SELECT id FROM user WHERE name = ? + var valuesMap = make(map[string]string) has, err := engine.Where("id = ?", id).Get(&valuesMap) // SELECT * FROM user WHERE id = ? + var valuesSlice = make([]interface{}, len(cols)) has, err := engine.Where("id = ?", id).Cols(cols...).Get(&valuesSlice) // SELECT col1, col2, col3 FROM user WHERE id = ? ``` -* 检测记录是否存在 +* `Exist` 检测记录是否存在 ```Go has, err := testEngine.Exist(new(RecordExist)) // SELECT * FROM record_exist LIMIT 1 + has, err = testEngine.Exist(&RecordExist{ Name: "test1", }) // SELECT * FROM record_exist WHERE name = ? LIMIT 1 + has, err = testEngine.Where("name = ?", "test1").Exist(&RecordExist{}) // SELECT * FROM record_exist WHERE name = ? LIMIT 1 + has, err = testEngine.SQL("select * from record_exist where name = ?", "test1").Exist() // select * from record_exist where name = ? + has, err = testEngine.Table("record_exist").Exist() // SELECT * FROM record_exist LIMIT 1 + has, err = testEngine.Table("record_exist").Where("name = ?", "test1").Exist() // SELECT * FROM record_exist WHERE name = ? LIMIT 1 ``` -* 查询多条记录,当然可以使用Join和extends来组合使用 +* `Find` 查询多条记录,当然可以使用Join和extends来组合使用 ```Go var users []User err := engine.Where("name = ?", name).And("age > 10").Limit(10, 0).Find(&users) -// SELECT * FROM user WHERE name = ? AND age > 10 limit 0 offset 10 +// SELECT * FROM user WHERE name = ? AND age > 10 limit 10 offset 0 type Detail struct { Id int64 @@ -206,10 +241,10 @@ err := engine.Table("user").Select("user.*, detail.*") Join("INNER", "detail", "detail.user_id = user.id"). Where("user.name = ?", name).Limit(10, 0). Find(&users) -// SELECT user.*, detail.* FROM user INNER JOIN detail WHERE user.name = ? limit 0 offset 10 +// SELECT user.*, detail.* FROM user INNER JOIN detail WHERE user.name = ? limit 10 offset 0 ``` -* 根据条件遍历数据库,可以有两种方式: Iterate and Rows +* `Iterate` 和 `Rows` 根据条件遍历数据库,可以有两种方式: Iterate and Rows ```Go err := engine.Iterate(&User{Name:name}, func(idx int, bean interface{}) error { @@ -218,6 +253,13 @@ err := engine.Iterate(&User{Name:name}, func(idx int, bean interface{}) error { }) // SELECT * FROM user +err := engine.BufferSize(100).Iterate(&User{Name:name}, func(idx int, bean interface{}) error { + user := bean.(*User) + return nil +}) +// SELECT * FROM user Limit 0, 100 +// SELECT * FROM user Limit 101, 100 + rows, err := engine.Rows(&User{Name:name}) // SELECT * FROM user defer rows.Close() @@ -227,7 +269,7 @@ for rows.Next() { } ``` -* 更新数据,除非使用Cols,AllCols函数指明,默认只更新非空和非0的字段 +* `Update` 更新数据,除非使用Cols,AllCols函数指明,默认只更新非空和非0的字段 ```Go affected, err := engine.Id(1).Update(&user) @@ -252,20 +294,39 @@ affected, err := engine.Id(1).AllCols().Update(&user) // UPDATE user SET name=?,age=?,salt=?,passwd=?,updated=? Where id = ? ``` -* 删除记录,需要注意,删除必须至少有一个条件,否则会报错。要清空数据库可以用EmptyTable +* `Delete` 删除记录,需要注意,删除必须至少有一个条件,否则会报错。要清空数据库可以用EmptyTable ```Go affected, err := engine.Where(...).Delete(&user) // DELETE FROM user Where ... + +affected, err := engine.ID(2).Delete(&user) +// DELETE FROM user Where id = ? ``` -* 获取记录条数 +* `Count` 获取记录条数 ```Go counts, err := engine.Count(&user) // SELECT count(*) AS total FROM user ``` +* `Sum` 求和函数 + +```Go +agesFloat64, err := engine.Sum(&user, "age") +// SELECT sum(age) AS total FROM user + +agesInt64, err := engine.SumInt(&user, "age") +// SELECT sum(age) AS total FROM user + +sumFloat64Slice, err := engine.Sums(&user, "age", "score") +// SELECT sum(age), sum(score) FROM user + +sumInt64Slice, err := engine.SumsInt(&user, "age", "score") +// SELECT sum(age), sum(score) FROM user +``` + * 条件编辑器 ```Go @@ -273,6 +334,59 @@ err := engine.Where(builder.NotIn("a", 1, 2).And(builder.In("b", "c", "d", "e")) // SELECT id, name ... FROM user WHERE a NOT IN (?, ?) AND b IN (?, ?, ?) ``` +* 在一个Go程中多次操作数据库,但没有事务 + +```Go +session := engine.NewSession() +defer session.Close() + +user1 := Userinfo{Username: "xiaoxiao", Departname: "dev", Alias: "lunny", Created: time.Now()} +if _, err := session.Insert(&user1); err != nil { + return err +} + +user2 := Userinfo{Username: "yyy"} +if _, err := session.Where("id = ?", 2).Update(&user2); err != nil { + return err +} + +if _, err := session.Exec("delete from userinfo where username = ?", user2.Username); err != nil { + return err +} + +return nil +``` + +* 在一个Go程中有事务 + +```Go +session := engine.NewSession() +defer session.Close() + +// add Begin() before any action +if err := session.Begin(); err != nil { + // if returned then will rollback automatically + return err +} + +user1 := Userinfo{Username: "xiaoxiao", Departname: "dev", Alias: "lunny", Created: time.Now()} +if _, err := session.Insert(&user1); err != nil { + return err +} + +user2 := Userinfo{Username: "yyy"} +if _, err := session.Where("id = ?", 2).Update(&user2); err != nil { + return err +} + +if _, err := session.Exec("delete from userinfo where username = ?", user2.Username); err != nil { + return err +} + +// add Commit() after all actions +return session.Commit() +``` + # 案例 * [Go语言中文网](http://studygolang.com/) - [github.com/studygolang/studygolang](https://github.com/studygolang/studygolang) diff --git a/vendor/github.com/go-xorm/xorm/context.go b/vendor/github.com/go-xorm/xorm/context.go new file mode 100644 index 000000000..074ba35a8 --- /dev/null +++ b/vendor/github.com/go-xorm/xorm/context.go @@ -0,0 +1,26 @@ +// Copyright 2017 The Xorm Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.8 + +package xorm + +import "context" + +// PingContext tests if database is alive +func (engine *Engine) PingContext(ctx context.Context) error { + session := engine.NewSession() + defer session.Close() + return session.PingContext(ctx) +} + +// PingContext test if database is ok +func (session *Session) PingContext(ctx context.Context) error { + if session.isAutoClose { + defer session.Close() + } + + session.engine.logger.Infof("PING DATABASE %v", session.engine.DriverName()) + return session.DB().PingContext(ctx) +} diff --git a/vendor/github.com/go-xorm/xorm/convert.go b/vendor/github.com/go-xorm/xorm/convert.go index 0504bef15..2316ca0b4 100644 --- a/vendor/github.com/go-xorm/xorm/convert.go +++ b/vendor/github.com/go-xorm/xorm/convert.go @@ -209,10 +209,10 @@ func convertAssign(dest, src interface{}) error { if src == nil { dv.Set(reflect.Zero(dv.Type())) return nil - } else { - dv.Set(reflect.New(dv.Type().Elem())) - return convertAssign(dv.Interface(), src) } + + dv.Set(reflect.New(dv.Type().Elem())) + return convertAssign(dv.Interface(), src) case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: s := asString(src) i64, err := strconv.ParseInt(s, 10, dv.Type().Bits()) diff --git a/vendor/github.com/go-xorm/xorm/dialect_postgres.go b/vendor/github.com/go-xorm/xorm/dialect_postgres.go index 3f5c526f7..d6f71acc1 100644 --- a/vendor/github.com/go-xorm/xorm/dialect_postgres.go +++ b/vendor/github.com/go-xorm/xorm/dialect_postgres.go @@ -8,7 +8,6 @@ import ( "errors" "fmt" "net/url" - "sort" "strconv" "strings" @@ -765,13 +764,18 @@ var ( "YES": true, "ZONE": true, } + + // DefaultPostgresSchema default postgres schema + DefaultPostgresSchema = "public" ) type postgres struct { core.Base + schema string } func (db *postgres) Init(d *core.DB, uri *core.Uri, drivername, dataSourceName string) error { + db.schema = DefaultPostgresSchema return db.Base.Init(d, db, uri, drivername, dataSourceName) } @@ -923,7 +927,7 @@ func (db *postgres) IsColumnExist(tableName, colName string) (bool, error) { func (db *postgres) GetColumns(tableName string) ([]string, map[string]*core.Column, error) { // FIXME: the schema should be replaced by user custom's - args := []interface{}{tableName, "public"} + args := []interface{}{tableName, db.schema} s := `SELECT column_name, column_default, is_nullable, data_type, character_maximum_length, numeric_precision, numeric_precision_radix , CASE WHEN p.contype = 'p' THEN true ELSE false END AS primarykey, CASE WHEN p.contype = 'u' THEN true ELSE false END AS uniquekey @@ -1024,8 +1028,7 @@ WHERE c.relkind = 'r'::char AND c.relname = $1 AND s.table_schema = $2 AND f.att } func (db *postgres) GetTables() ([]*core.Table, error) { - // FIXME: replace public to user customrize schema - args := []interface{}{"public"} + args := []interface{}{db.schema} s := fmt.Sprintf("SELECT tablename FROM pg_tables WHERE schemaname = $1") db.LogSQL(s, args) @@ -1050,8 +1053,7 @@ func (db *postgres) GetTables() ([]*core.Table, error) { } func (db *postgres) GetIndexes(tableName string) (map[string]*core.Index, error) { - // FIXME: replace the public schema to user specify schema - args := []interface{}{"public", tableName} + args := []interface{}{db.schema, tableName} s := fmt.Sprintf("SELECT indexname, indexdef FROM pg_indexes WHERE schemaname=$1 AND tablename=$2") db.LogSQL(s, args) @@ -1117,10 +1119,6 @@ func (vs values) Get(k string) (v string) { return vs[k] } -func errorf(s string, args ...interface{}) { - panic(fmt.Errorf("pq: %s", fmt.Sprintf(s, args...))) -} - func parseURL(connstr string) (string, error) { u, err := url.Parse(connstr) if err != nil { @@ -1131,46 +1129,18 @@ func parseURL(connstr string) (string, error) { return "", fmt.Errorf("invalid connection protocol: %s", u.Scheme) } - var kvs []string escaper := strings.NewReplacer(` `, `\ `, `'`, `\'`, `\`, `\\`) - accrue := func(k, v string) { - if v != "" { - kvs = append(kvs, k+"="+escaper.Replace(v)) - } - } - - if u.User != nil { - v := u.User.Username() - accrue("user", v) - - v, _ = u.User.Password() - accrue("password", v) - } - - i := strings.Index(u.Host, ":") - if i < 0 { - accrue("host", u.Host) - } else { - accrue("host", u.Host[:i]) - accrue("port", u.Host[i+1:]) - } if u.Path != "" { - accrue("dbname", u.Path[1:]) + return escaper.Replace(u.Path[1:]), nil } - q := u.Query() - for k := range q { - accrue(k, q.Get(k)) - } - - sort.Strings(kvs) // Makes testing easier (not a performance concern) - return strings.Join(kvs, " "), nil + return "", nil } -func parseOpts(name string, o values) { +func parseOpts(name string, o values) error { if len(name) == 0 { - return + return fmt.Errorf("invalid options: %s", name) } name = strings.TrimSpace(name) @@ -1179,31 +1149,36 @@ func parseOpts(name string, o values) { for _, p := range ps { kv := strings.Split(p, "=") if len(kv) < 2 { - errorf("invalid option: %q", p) + return fmt.Errorf("invalid option: %q", p) } o.Set(kv[0], kv[1]) } + + return nil } func (p *pqDriver) Parse(driverName, dataSourceName string) (*core.Uri, error) { db := &core.Uri{DbType: core.POSTGRES} - o := make(values) var err error + if strings.HasPrefix(dataSourceName, "postgresql://") || strings.HasPrefix(dataSourceName, "postgres://") { - dataSourceName, err = parseURL(dataSourceName) + db.DbName, err = parseURL(dataSourceName) + if err != nil { + return nil, err + } + } else { + o := make(values) + err = parseOpts(dataSourceName, o) if err != nil { return nil, err } - } - parseOpts(dataSourceName, o) - db.DbName = o.Get("dbname") + db.DbName = o.Get("dbname") + } + if db.DbName == "" { return nil, errors.New("dbname is empty") } - /*db.Schema = o.Get("schema") - if len(db.Schema) == 0 { - db.Schema = "public" - }*/ + return db, nil } diff --git a/vendor/github.com/go-xorm/xorm/engine.go b/vendor/github.com/go-xorm/xorm/engine.go index 15c619d33..444611afb 100644 --- a/vendor/github.com/go-xorm/xorm/engine.go +++ b/vendor/github.com/go-xorm/xorm/engine.go @@ -47,6 +47,23 @@ type Engine struct { disableGlobalCache bool tagHandlers map[string]tagHandler + + engineGroup *EngineGroup +} + +// BufferSize sets buffer size for iterate +func (engine *Engine) BufferSize(size int) *Session { + session := engine.NewSession() + session.isAutoClose = true + return session.BufferSize(size) +} + +// CondDeleted returns the conditions whether a record is soft deleted. +func (engine *Engine) CondDeleted(colName string) builder.Cond { + if engine.dialect.DBType() == core.MSSQL { + return builder.IsNull{colName} + } + return builder.IsNull{colName}.Or(builder.Eq{colName: zeroTime1}) } // ShowSQL show SQL statement or not on logger if log level is great than INFO @@ -79,6 +96,11 @@ func (engine *Engine) SetLogger(logger core.ILogger) { engine.dialect.SetLogger(logger) } +// SetLogLevel sets the logger level +func (engine *Engine) SetLogLevel(level core.LogLevel) { + engine.logger.SetLevel(level) +} + // SetDisableGlobalCache disable global cache or not func (engine *Engine) SetDisableGlobalCache(disable bool) { if engine.disableGlobalCache != disable { @@ -201,6 +223,11 @@ func (engine *Engine) SetDefaultCacher(cacher core.Cacher) { engine.Cacher = cacher } +// GetDefaultCacher returns the default cacher +func (engine *Engine) GetDefaultCacher() core.Cacher { + return engine.Cacher +} + // NoCache If you has set default cacher, and you want temporilly stop use cache, // you can use NoCache() func (engine *Engine) NoCache() *Session { @@ -736,6 +763,13 @@ func (engine *Engine) OrderBy(order string) *Session { return session.OrderBy(order) } +// Prepare enables prepare statement +func (engine *Engine) Prepare() *Session { + session := engine.NewSession() + session.isAutoClose = true + return session.Prepare() +} + // Join the join_operator should be one of INNER, LEFT OUTER, CROSS etc - this will be prepended to JOIN func (engine *Engine) Join(joinOperator string, tablename interface{}, condition string, args ...interface{}) *Session { session := engine.NewSession() @@ -757,7 +791,8 @@ func (engine *Engine) Having(conditions string) *Session { return session.Having(conditions) } -func (engine *Engine) unMapType(t reflect.Type) { +// UnMapType removes the datbase mapper of a type +func (engine *Engine) UnMapType(t reflect.Type) { engine.mutex.Lock() defer engine.mutex.Unlock() delete(engine.Tables, t) @@ -914,7 +949,7 @@ func (engine *Engine) mapType(v reflect.Value) (*core.Table, error) { } if pStart > -1 { if !strings.HasSuffix(k, ")") { - return nil, errors.New("cannot match ) charactor") + return nil, fmt.Errorf("field %s tag %s cannot match ) charactor", col.FieldName, key) } ctx.tagName = k[:pStart] @@ -1341,24 +1376,24 @@ func (engine *Engine) Exec(sql string, args ...interface{}) (sql.Result, error) } // Query a raw sql and return records as []map[string][]byte -func (engine *Engine) Query(sql string, paramStr ...interface{}) (resultsSlice []map[string][]byte, err error) { +func (engine *Engine) Query(sqlorArgs ...interface{}) (resultsSlice []map[string][]byte, err error) { session := engine.NewSession() defer session.Close() - return session.Query(sql, paramStr...) + return session.Query(sqlorArgs...) } // QueryString runs a raw sql and return records as []map[string]string -func (engine *Engine) QueryString(sqlStr string, args ...interface{}) ([]map[string]string, error) { +func (engine *Engine) QueryString(sqlorArgs ...interface{}) ([]map[string]string, error) { session := engine.NewSession() defer session.Close() - return session.QueryString(sqlStr, args...) + return session.QueryString(sqlorArgs...) } // QueryInterface runs a raw sql and return records as []map[string]interface{} -func (engine *Engine) QueryInterface(sqlStr string, args ...interface{}) ([]map[string]interface{}, error) { +func (engine *Engine) QueryInterface(sqlorArgs ...interface{}) ([]map[string]interface{}, error) { session := engine.NewSession() defer session.Close() - return session.QueryInterface(sqlStr, args...) + return session.QueryInterface(sqlorArgs...) } // Insert one or more records @@ -1564,24 +1599,39 @@ func (engine *Engine) formatTime(sqlTypeName string, t time.Time) (v interface{} return } +// GetColumnMapper returns the column name mapper +func (engine *Engine) GetColumnMapper() core.IMapper { + return engine.ColumnMapper +} + +// GetTableMapper returns the table name mapper +func (engine *Engine) GetTableMapper() core.IMapper { + return engine.TableMapper +} + +// GetTZLocation returns time zone of the application +func (engine *Engine) GetTZLocation() *time.Location { + return engine.TZLocation +} + +// SetTZLocation sets time zone of the application +func (engine *Engine) SetTZLocation(tz *time.Location) { + engine.TZLocation = tz +} + +// GetTZDatabase returns time zone of the database +func (engine *Engine) GetTZDatabase() *time.Location { + return engine.DatabaseTZ +} + +// SetTZDatabase sets time zone of the database +func (engine *Engine) SetTZDatabase(tz *time.Location) { + engine.DatabaseTZ = tz +} + // Unscoped always disable struct tag "deleted" func (engine *Engine) Unscoped() *Session { session := engine.NewSession() session.isAutoClose = true return session.Unscoped() } - -// CondDeleted returns the conditions whether a record is soft deleted. -func (engine *Engine) CondDeleted(colName string) builder.Cond { - if engine.dialect.DBType() == core.MSSQL { - return builder.IsNull{colName} - } - return builder.IsNull{colName}.Or(builder.Eq{colName: zeroTime1}) -} - -// BufferSize sets buffer size for iterate -func (engine *Engine) BufferSize(size int) *Session { - session := engine.NewSession() - session.isAutoClose = true - return session.BufferSize(size) -} diff --git a/vendor/github.com/go-xorm/xorm/engine_group.go b/vendor/github.com/go-xorm/xorm/engine_group.go new file mode 100644 index 000000000..1de425f37 --- /dev/null +++ b/vendor/github.com/go-xorm/xorm/engine_group.go @@ -0,0 +1,194 @@ +// Copyright 2017 The Xorm Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package xorm + +import ( + "github.com/go-xorm/core" +) + +// EngineGroup defines an engine group +type EngineGroup struct { + *Engine + slaves []*Engine + policy GroupPolicy +} + +// NewEngineGroup creates a new engine group +func NewEngineGroup(args1 interface{}, args2 interface{}, policies ...GroupPolicy) (*EngineGroup, error) { + var eg EngineGroup + if len(policies) > 0 { + eg.policy = policies[0] + } else { + eg.policy = RoundRobinPolicy() + } + + driverName, ok1 := args1.(string) + conns, ok2 := args2.([]string) + if ok1 && ok2 { + engines := make([]*Engine, len(conns)) + for i, conn := range conns { + engine, err := NewEngine(driverName, conn) + if err != nil { + return nil, err + } + engine.engineGroup = &eg + engines[i] = engine + } + + eg.Engine = engines[0] + eg.slaves = engines[1:] + return &eg, nil + } + + master, ok3 := args1.(*Engine) + slaves, ok4 := args2.([]*Engine) + if ok3 && ok4 { + master.engineGroup = &eg + for i := 0; i < len(slaves); i++ { + slaves[i].engineGroup = &eg + } + eg.Engine = master + eg.slaves = slaves + return &eg, nil + } + return nil, ErrParamsType +} + +// Close the engine +func (eg *EngineGroup) Close() error { + err := eg.Engine.Close() + if err != nil { + return err + } + + for i := 0; i < len(eg.slaves); i++ { + err := eg.slaves[i].Close() + if err != nil { + return err + } + } + return nil +} + +// Master returns the master engine +func (eg *EngineGroup) Master() *Engine { + return eg.Engine +} + +// Ping tests if database is alive +func (eg *EngineGroup) Ping() error { + if err := eg.Engine.Ping(); err != nil { + return err + } + + for _, slave := range eg.slaves { + if err := slave.Ping(); err != nil { + return err + } + } + return nil +} + +// SetColumnMapper set the column name mapping rule +func (eg *EngineGroup) SetColumnMapper(mapper core.IMapper) { + eg.Engine.ColumnMapper = mapper + for i := 0; i < len(eg.slaves); i++ { + eg.slaves[i].ColumnMapper = mapper + } +} + +// SetDefaultCacher set the default cacher +func (eg *EngineGroup) SetDefaultCacher(cacher core.Cacher) { + eg.Engine.SetDefaultCacher(cacher) + for i := 0; i < len(eg.slaves); i++ { + eg.slaves[i].SetDefaultCacher(cacher) + } +} + +// SetLogger set the new logger +func (eg *EngineGroup) SetLogger(logger core.ILogger) { + eg.Engine.SetLogger(logger) + for i := 0; i < len(eg.slaves); i++ { + eg.slaves[i].SetLogger(logger) + } +} + +// SetLogLevel sets the logger level +func (eg *EngineGroup) SetLogLevel(level core.LogLevel) { + eg.Engine.SetLogLevel(level) + for i := 0; i < len(eg.slaves); i++ { + eg.slaves[i].SetLogLevel(level) + } +} + +// SetMapper set the name mapping rules +func (eg *EngineGroup) SetMapper(mapper core.IMapper) { + eg.Engine.SetMapper(mapper) + for i := 0; i < len(eg.slaves); i++ { + eg.slaves[i].SetMapper(mapper) + } +} + +// SetMaxIdleConns set the max idle connections on pool, default is 2 +func (eg *EngineGroup) SetMaxIdleConns(conns int) { + eg.Engine.db.SetMaxIdleConns(conns) + for i := 0; i < len(eg.slaves); i++ { + eg.slaves[i].db.SetMaxIdleConns(conns) + } +} + +// SetMaxOpenConns is only available for go 1.2+ +func (eg *EngineGroup) SetMaxOpenConns(conns int) { + eg.Engine.db.SetMaxOpenConns(conns) + for i := 0; i < len(eg.slaves); i++ { + eg.slaves[i].db.SetMaxOpenConns(conns) + } +} + +// SetPolicy set the group policy +func (eg *EngineGroup) SetPolicy(policy GroupPolicy) *EngineGroup { + eg.policy = policy + return eg +} + +// SetTableMapper set the table name mapping rule +func (eg *EngineGroup) SetTableMapper(mapper core.IMapper) { + eg.Engine.TableMapper = mapper + for i := 0; i < len(eg.slaves); i++ { + eg.slaves[i].TableMapper = mapper + } +} + +// ShowExecTime show SQL statement and execute time or not on logger if log level is great than INFO +func (eg *EngineGroup) ShowExecTime(show ...bool) { + eg.Engine.ShowExecTime(show...) + for i := 0; i < len(eg.slaves); i++ { + eg.slaves[i].ShowExecTime(show...) + } +} + +// ShowSQL show SQL statement or not on logger if log level is great than INFO +func (eg *EngineGroup) ShowSQL(show ...bool) { + eg.Engine.ShowSQL(show...) + for i := 0; i < len(eg.slaves); i++ { + eg.slaves[i].ShowSQL(show...) + } +} + +// Slave returns one of the physical databases which is a slave according the policy +func (eg *EngineGroup) Slave() *Engine { + switch len(eg.slaves) { + case 0: + return eg.Engine + case 1: + return eg.slaves[0] + } + return eg.policy.Slave(eg) +} + +// Slaves returns all the slaves +func (eg *EngineGroup) Slaves() []*Engine { + return eg.slaves +} diff --git a/vendor/github.com/go-xorm/xorm/engine_group_policy.go b/vendor/github.com/go-xorm/xorm/engine_group_policy.go new file mode 100644 index 000000000..5b56e8995 --- /dev/null +++ b/vendor/github.com/go-xorm/xorm/engine_group_policy.go @@ -0,0 +1,116 @@ +// Copyright 2017 The Xorm Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package xorm + +import ( + "math/rand" + "sync" + "time" +) + +// GroupPolicy is be used by chosing the current slave from slaves +type GroupPolicy interface { + Slave(*EngineGroup) *Engine +} + +// GroupPolicyHandler should be used when a function is a GroupPolicy +type GroupPolicyHandler func(*EngineGroup) *Engine + +// Slave implements the chosen of slaves +func (h GroupPolicyHandler) Slave(eg *EngineGroup) *Engine { + return h(eg) +} + +// RandomPolicy implmentes randomly chose the slave of slaves +func RandomPolicy() GroupPolicyHandler { + var r = rand.New(rand.NewSource(time.Now().UnixNano())) + return func(g *EngineGroup) *Engine { + return g.Slaves()[r.Intn(len(g.Slaves()))] + } +} + +// WeightRandomPolicy implmentes randomly chose the slave of slaves +func WeightRandomPolicy(weights []int) GroupPolicyHandler { + var rands = make([]int, 0, len(weights)) + for i := 0; i < len(weights); i++ { + for n := 0; n < weights[i]; n++ { + rands = append(rands, i) + } + } + var r = rand.New(rand.NewSource(time.Now().UnixNano())) + + return func(g *EngineGroup) *Engine { + var slaves = g.Slaves() + idx := rands[r.Intn(len(rands))] + if idx >= len(slaves) { + idx = len(slaves) - 1 + } + return slaves[idx] + } +} + +func RoundRobinPolicy() GroupPolicyHandler { + var pos = -1 + var lock sync.Mutex + return func(g *EngineGroup) *Engine { + var slaves = g.Slaves() + + lock.Lock() + defer lock.Unlock() + pos++ + if pos >= len(slaves) { + pos = 0 + } + + return slaves[pos] + } +} + +func WeightRoundRobinPolicy(weights []int) GroupPolicyHandler { + var rands = make([]int, 0, len(weights)) + for i := 0; i < len(weights); i++ { + for n := 0; n < weights[i]; n++ { + rands = append(rands, i) + } + } + var pos = -1 + var lock sync.Mutex + + return func(g *EngineGroup) *Engine { + var slaves = g.Slaves() + lock.Lock() + defer lock.Unlock() + pos++ + if pos >= len(rands) { + pos = 0 + } + + idx := rands[pos] + if idx >= len(slaves) { + idx = len(slaves) - 1 + } + return slaves[idx] + } +} + +// LeastConnPolicy implements GroupPolicy, every time will get the least connections slave +func LeastConnPolicy() GroupPolicyHandler { + return func(g *EngineGroup) *Engine { + var slaves = g.Slaves() + connections := 0 + idx := 0 + for i := 0; i < len(slaves); i++ { + openConnections := slaves[i].DB().Stats().OpenConnections + if i == 0 { + connections = openConnections + idx = i + } else if openConnections <= connections { + connections = openConnections + idx = i + } + } + return slaves[idx] + } +} diff --git a/vendor/github.com/go-xorm/xorm/engine_maxlife.go b/vendor/github.com/go-xorm/xorm/engine_maxlife.go index 21daeaa1b..22666c5f4 100644 --- a/vendor/github.com/go-xorm/xorm/engine_maxlife.go +++ b/vendor/github.com/go-xorm/xorm/engine_maxlife.go @@ -12,3 +12,11 @@ import "time" func (engine *Engine) SetConnMaxLifetime(d time.Duration) { engine.db.SetConnMaxLifetime(d) } + +// SetConnMaxLifetime sets the maximum amount of time a connection may be reused. +func (eg *EngineGroup) SetConnMaxLifetime(d time.Duration) { + eg.Engine.SetConnMaxLifetime(d) + for i := 0; i < len(eg.slaves); i++ { + eg.slaves[i].SetConnMaxLifetime(d) + } +} diff --git a/vendor/github.com/go-xorm/xorm/error.go b/vendor/github.com/go-xorm/xorm/error.go index 2a334f47c..cfeefc31e 100644 --- a/vendor/github.com/go-xorm/xorm/error.go +++ b/vendor/github.com/go-xorm/xorm/error.go @@ -23,4 +23,6 @@ var ( ErrNeedDeletedCond = errors.New("Delete need at least one condition") // ErrNotImplemented not implemented ErrNotImplemented = errors.New("Not implemented") + // ErrConditionType condition type unsupported + ErrConditionType = errors.New("Unsupported conditon type") ) diff --git a/vendor/github.com/go-xorm/xorm/interface.go b/vendor/github.com/go-xorm/xorm/interface.go new file mode 100644 index 000000000..9a3b6da0b --- /dev/null +++ b/vendor/github.com/go-xorm/xorm/interface.go @@ -0,0 +1,103 @@ +// Copyright 2017 The Xorm Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package xorm + +import ( + "database/sql" + "reflect" + "time" + + "github.com/go-xorm/core" +) + +// Interface defines the interface which Engine, EngineGroup and Session will implementate. +type Interface interface { + AllCols() *Session + Alias(alias string) *Session + Asc(colNames ...string) *Session + BufferSize(size int) *Session + Cols(columns ...string) *Session + Count(...interface{}) (int64, error) + CreateIndexes(bean interface{}) error + CreateUniques(bean interface{}) error + Decr(column string, arg ...interface{}) *Session + Desc(...string) *Session + Delete(interface{}) (int64, error) + Distinct(columns ...string) *Session + DropIndexes(bean interface{}) error + Exec(string, ...interface{}) (sql.Result, error) + Exist(bean ...interface{}) (bool, error) + Find(interface{}, ...interface{}) error + Get(interface{}) (bool, error) + GroupBy(keys string) *Session + ID(interface{}) *Session + In(string, ...interface{}) *Session + Incr(column string, arg ...interface{}) *Session + Insert(...interface{}) (int64, error) + InsertOne(interface{}) (int64, error) + IsTableEmpty(bean interface{}) (bool, error) + IsTableExist(beanOrTableName interface{}) (bool, error) + Iterate(interface{}, IterFunc) error + Limit(int, ...int) *Session + NoAutoCondition(...bool) *Session + NotIn(string, ...interface{}) *Session + Join(joinOperator string, tablename interface{}, condition string, args ...interface{}) *Session + Omit(columns ...string) *Session + OrderBy(order string) *Session + Ping() error + Query(sqlOrAgrs ...interface{}) (resultsSlice []map[string][]byte, err error) + QueryInterface(sqlorArgs ...interface{}) ([]map[string]interface{}, error) + QueryString(sqlorArgs ...interface{}) ([]map[string]string, error) + Rows(bean interface{}) (*Rows, error) + SetExpr(string, string) *Session + SQL(interface{}, ...interface{}) *Session + Sum(bean interface{}, colName string) (float64, error) + SumInt(bean interface{}, colName string) (int64, error) + Sums(bean interface{}, colNames ...string) ([]float64, error) + SumsInt(bean interface{}, colNames ...string) ([]int64, error) + Table(tableNameOrBean interface{}) *Session + Unscoped() *Session + Update(bean interface{}, condiBeans ...interface{}) (int64, error) + UseBool(...string) *Session + Where(interface{}, ...interface{}) *Session +} + +// EngineInterface defines the interface which Engine, EngineGroup will implementate. +type EngineInterface interface { + Interface + + Before(func(interface{})) *Session + Charset(charset string) *Session + CreateTables(...interface{}) error + DBMetas() ([]*core.Table, error) + Dialect() core.Dialect + DropTables(...interface{}) error + DumpAllToFile(fp string, tp ...core.DbType) error + GetColumnMapper() core.IMapper + GetDefaultCacher() core.Cacher + GetTableMapper() core.IMapper + GetTZDatabase() *time.Location + GetTZLocation() *time.Location + NewSession() *Session + NoAutoTime() *Session + Quote(string) string + SetDefaultCacher(core.Cacher) + SetLogLevel(core.LogLevel) + SetMapper(core.IMapper) + SetTZDatabase(tz *time.Location) + SetTZLocation(tz *time.Location) + ShowSQL(show ...bool) + Sync(...interface{}) error + Sync2(...interface{}) error + StoreEngine(storeEngine string) *Session + TableInfo(bean interface{}) *Table + UnMapType(reflect.Type) +} + +var ( + _ Interface = &Session{} + _ EngineInterface = &Engine{} + _ EngineInterface = &EngineGroup{} +) diff --git a/vendor/github.com/go-xorm/xorm/session.go b/vendor/github.com/go-xorm/xorm/session.go index ed2520588..5c6cb5f9d 100644 --- a/vendor/github.com/go-xorm/xorm/session.go +++ b/vendor/github.com/go-xorm/xorm/session.go @@ -76,6 +76,7 @@ func (session *Session) Init() { session.afterDeleteBeans = make(map[interface{}]*[]func(interface{}), 0) session.beforeClosures = make([]func(interface{}), 0) session.afterClosures = make([]func(interface{}), 0) + session.stmtCache = make(map[uint32]*core.Stmt) session.afterProcessors = make([]executedProcessor, 0) @@ -262,13 +263,13 @@ func (session *Session) canCache() bool { return true } -func (session *Session) doPrepare(sqlStr string) (stmt *core.Stmt, err error) { +func (session *Session) doPrepare(db *core.DB, sqlStr string) (stmt *core.Stmt, err error) { crc := crc32.ChecksumIEEE([]byte(sqlStr)) // TODO try hash(sqlStr+len(sqlStr)) var has bool stmt, has = session.stmtCache[crc] if !has { - stmt, err = session.DB().Prepare(sqlStr) + stmt, err = db.Prepare(sqlStr) if err != nil { return nil, err } @@ -461,6 +462,10 @@ func (session *Session) slice2Bean(scanResults []interface{}, fields []string, b hasAssigned = true if len(bs) > 0 { + if fieldType.Kind() == reflect.String { + fieldValue.SetString(string(bs)) + continue + } if fieldValue.CanAddr() { err := json.Unmarshal(bs, fieldValue.Addr().Interface()) if err != nil { diff --git a/vendor/github.com/go-xorm/xorm/session_convert.go b/vendor/github.com/go-xorm/xorm/session_convert.go index f2c949bac..1f9d8aa1b 100644 --- a/vendor/github.com/go-xorm/xorm/session_convert.go +++ b/vendor/github.com/go-xorm/xorm/session_convert.go @@ -34,27 +34,27 @@ func (session *Session) str2Time(col *core.Column, data string) (outTime time.Ti sd, err := strconv.ParseInt(sdata, 10, 64) if err == nil { x = time.Unix(sd, 0) - session.engine.logger.Debugf("time(0) key[%v]: %+v | sdata: [%v]\n", col.FieldName, x, sdata) + //session.engine.logger.Debugf("time(0) key[%v]: %+v | sdata: [%v]\n", col.FieldName, x, sdata) } else { - session.engine.logger.Debugf("time(0) err key[%v]: %+v | sdata: [%v]\n", col.FieldName, x, sdata) + //session.engine.logger.Debugf("time(0) err key[%v]: %+v | sdata: [%v]\n", col.FieldName, x, sdata) } } else if len(sdata) > 19 && strings.Contains(sdata, "-") { x, err = time.ParseInLocation(time.RFC3339Nano, sdata, parseLoc) session.engine.logger.Debugf("time(1) key[%v]: %+v | sdata: [%v]\n", col.FieldName, x, sdata) if err != nil { x, err = time.ParseInLocation("2006-01-02 15:04:05.999999999", sdata, parseLoc) - session.engine.logger.Debugf("time(2) key[%v]: %+v | sdata: [%v]\n", col.FieldName, x, sdata) + //session.engine.logger.Debugf("time(2) key[%v]: %+v | sdata: [%v]\n", col.FieldName, x, sdata) } if err != nil { x, err = time.ParseInLocation("2006-01-02 15:04:05.9999999 Z07:00", sdata, parseLoc) - session.engine.logger.Debugf("time(3) key[%v]: %+v | sdata: [%v]\n", col.FieldName, x, sdata) + //session.engine.logger.Debugf("time(3) key[%v]: %+v | sdata: [%v]\n", col.FieldName, x, sdata) } } else if len(sdata) == 19 && strings.Contains(sdata, "-") { x, err = time.ParseInLocation("2006-01-02 15:04:05", sdata, parseLoc) - session.engine.logger.Debugf("time(4) key[%v]: %+v | sdata: [%v]\n", col.FieldName, x, sdata) + //session.engine.logger.Debugf("time(4) key[%v]: %+v | sdata: [%v]\n", col.FieldName, x, sdata) } else if len(sdata) == 10 && sdata[4] == '-' && sdata[7] == '-' { x, err = time.ParseInLocation("2006-01-02", sdata, parseLoc) - session.engine.logger.Debugf("time(5) key[%v]: %+v | sdata: [%v]\n", col.FieldName, x, sdata) + //session.engine.logger.Debugf("time(5) key[%v]: %+v | sdata: [%v]\n", col.FieldName, x, sdata) } else if col.SQLType.Name == core.Time { if strings.Contains(sdata, " ") { ssd := strings.Split(sdata, " ") @@ -68,7 +68,7 @@ func (session *Session) str2Time(col *core.Column, data string) (outTime time.Ti st := fmt.Sprintf("2006-01-02 %v", sdata) x, err = time.ParseInLocation("2006-01-02 15:04:05", st, parseLoc) - session.engine.logger.Debugf("time(6) key[%v]: %+v | sdata: [%v]\n", col.FieldName, x, sdata) + //session.engine.logger.Debugf("time(6) key[%v]: %+v | sdata: [%v]\n", col.FieldName, x, sdata) } else { outErr = fmt.Errorf("unsupported time format %v", sdata) return diff --git a/vendor/github.com/go-xorm/xorm/session_exist.go b/vendor/github.com/go-xorm/xorm/session_exist.go index 049c1ddff..378a64837 100644 --- a/vendor/github.com/go-xorm/xorm/session_exist.go +++ b/vendor/github.com/go-xorm/xorm/session_exist.go @@ -10,6 +10,7 @@ import ( "reflect" "github.com/go-xorm/builder" + "github.com/go-xorm/core" ) // Exist returns true if the record exist otherwise return false @@ -35,10 +36,18 @@ func (session *Session) Exist(bean ...interface{}) (bool, error) { return false, err } - sqlStr = fmt.Sprintf("SELECT * FROM %s WHERE %s LIMIT 1", tableName, condSQL) + if session.engine.dialect.DBType() == core.MSSQL { + sqlStr = fmt.Sprintf("SELECT top 1 * FROM %s WHERE %s", tableName, condSQL) + } else { + sqlStr = fmt.Sprintf("SELECT * FROM %s WHERE %s LIMIT 1", tableName, condSQL) + } args = condArgs } else { - sqlStr = fmt.Sprintf("SELECT * FROM %s LIMIT 1", tableName) + if session.engine.dialect.DBType() == core.MSSQL { + sqlStr = fmt.Sprintf("SELECT top 1 * FROM %s", tableName) + } else { + sqlStr = fmt.Sprintf("SELECT * FROM %s LIMIT 1", tableName) + } args = []interface{}{} } } else { diff --git a/vendor/github.com/go-xorm/xorm/session_get.go b/vendor/github.com/go-xorm/xorm/session_get.go index 8faf53c02..68b37af7f 100644 --- a/vendor/github.com/go-xorm/xorm/session_get.go +++ b/vendor/github.com/go-xorm/xorm/session_get.go @@ -5,6 +5,7 @@ package xorm import ( + "database/sql" "errors" "reflect" "strconv" @@ -79,6 +80,13 @@ func (session *Session) nocacheGet(beanKind reflect.Kind, table *core.Table, bea return false, nil } + switch bean.(type) { + case sql.NullInt64, sql.NullBool, sql.NullFloat64, sql.NullString: + return true, rows.Scan(&bean) + case *sql.NullInt64, *sql.NullBool, *sql.NullFloat64, *sql.NullString: + return true, rows.Scan(bean) + } + switch beanKind { case reflect.Struct: fields, err := rows.Columns() diff --git a/vendor/github.com/go-xorm/xorm/session_insert.go b/vendor/github.com/go-xorm/xorm/session_insert.go index 478501f0b..129ee2309 100644 --- a/vendor/github.com/go-xorm/xorm/session_insert.go +++ b/vendor/github.com/go-xorm/xorm/session_insert.go @@ -400,7 +400,7 @@ func (session *Session) innerInsert(bean interface{}) (int64, error) { return 0, err } - handleAfterInsertProcessorFunc(bean) + defer handleAfterInsertProcessorFunc(bean) if cacher := session.engine.getCacher2(table); cacher != nil && session.statement.UseCache { session.cacheInsert(table, tableName) @@ -445,7 +445,7 @@ func (session *Session) innerInsert(bean interface{}) (int64, error) { if err != nil { return 0, err } - handleAfterInsertProcessorFunc(bean) + defer handleAfterInsertProcessorFunc(bean) if cacher := session.engine.getCacher2(table); cacher != nil && session.statement.UseCache { session.cacheInsert(table, tableName) diff --git a/vendor/github.com/go-xorm/xorm/session_query.go b/vendor/github.com/go-xorm/xorm/session_query.go index a693bace3..f8098f849 100644 --- a/vendor/github.com/go-xorm/xorm/session_query.go +++ b/vendor/github.com/go-xorm/xorm/session_query.go @@ -8,17 +8,92 @@ import ( "fmt" "reflect" "strconv" + "strings" "time" + "github.com/go-xorm/builder" "github.com/go-xorm/core" ) +func (session *Session) genQuerySQL(sqlorArgs ...interface{}) (string, []interface{}, error) { + if len(sqlorArgs) > 0 { + switch sqlorArgs[0].(type) { + case string: + return sqlorArgs[0].(string), sqlorArgs[1:], nil + case *builder.Builder: + return sqlorArgs[0].(*builder.Builder).ToSQL() + case builder.Builder: + bd := sqlorArgs[0].(builder.Builder) + return bd.ToSQL() + default: + return "", nil, ErrUnSupportedType + } + } + + if session.statement.RawSQL != "" { + return session.statement.RawSQL, session.statement.RawParams, nil + } + + if len(session.statement.TableName()) <= 0 { + return "", nil, ErrTableNotFound + } + + var columnStr = session.statement.ColumnStr + if len(session.statement.selectStr) > 0 { + columnStr = session.statement.selectStr + } else { + if session.statement.JoinStr == "" { + if columnStr == "" { + if session.statement.GroupByStr != "" { + columnStr = session.statement.Engine.Quote(strings.Replace(session.statement.GroupByStr, ",", session.engine.Quote(","), -1)) + } else { + columnStr = session.statement.genColumnStr() + } + } + } else { + if columnStr == "" { + if session.statement.GroupByStr != "" { + columnStr = session.statement.Engine.Quote(strings.Replace(session.statement.GroupByStr, ",", session.engine.Quote(","), -1)) + } else { + columnStr = "*" + } + } + } + if columnStr == "" { + columnStr = "*" + } + } + + condSQL, condArgs, err := builder.ToSQL(session.statement.cond) + if err != nil { + return "", nil, err + } + + args := append(session.statement.joinArgs, condArgs...) + sqlStr, err := session.statement.genSelectSQL(columnStr, condSQL) + if err != nil { + return "", nil, err + } + // for mssql and use limit + qs := strings.Count(sqlStr, "?") + if len(args)*2 == qs { + args = append(args, args...) + } + + return sqlStr, args, nil +} + // Query runs a raw sql and return records as []map[string][]byte -func (session *Session) Query(sqlStr string, args ...interface{}) ([]map[string][]byte, error) { +func (session *Session) Query(sqlorArgs ...interface{}) ([]map[string][]byte, error) { if session.isAutoClose { defer session.Close() } + sqlStr, args, err := session.genQuerySQL(sqlorArgs...) + if err != nil { + return nil, err + } + return session.queryBytes(sqlStr, args...) } @@ -114,11 +189,16 @@ func rows2Strings(rows *core.Rows) (resultsSlice []map[string]string, err error) } // QueryString runs a raw sql and return records as []map[string]string -func (session *Session) QueryString(sqlStr string, args ...interface{}) ([]map[string]string, error) { +func (session *Session) QueryString(sqlorArgs ...interface{}) ([]map[string]string, error) { if session.isAutoClose { defer session.Close() } + sqlStr, args, err := session.genQuerySQL(sqlorArgs...) + if err != nil { + return nil, err + } + rows, err := session.queryRows(sqlStr, args...) if err != nil { return nil, err @@ -162,11 +242,16 @@ func rows2Interfaces(rows *core.Rows) (resultsSlice []map[string]interface{}, er } // QueryInterface runs a raw sql and return records as []map[string]interface{} -func (session *Session) QueryInterface(sqlStr string, args ...interface{}) ([]map[string]interface{}, error) { +func (session *Session) QueryInterface(sqlorArgs ...interface{}) ([]map[string]interface{}, error) { if session.isAutoClose { defer session.Close() } + sqlStr, args, err := session.genQuerySQL(sqlorArgs...) + if err != nil { + return nil, err + } + rows, err := session.queryRows(sqlStr, args...) if err != nil { return nil, err diff --git a/vendor/github.com/go-xorm/xorm/session_raw.go b/vendor/github.com/go-xorm/xorm/session_raw.go index c225598e6..69bf9b3c6 100644 --- a/vendor/github.com/go-xorm/xorm/session_raw.go +++ b/vendor/github.com/go-xorm/xorm/session_raw.go @@ -47,9 +47,16 @@ func (session *Session) queryRows(sqlStr string, args ...interface{}) (*core.Row } if session.isAutoCommit { + var db *core.DB + if session.engine.engineGroup != nil { + db = session.engine.engineGroup.Slave().DB() + } else { + db = session.DB() + } + if session.prepareStmt { // don't clear stmt since session will cache them - stmt, err := session.doPrepare(sqlStr) + stmt, err := session.doPrepare(db, sqlStr) if err != nil { return nil, err } @@ -61,7 +68,7 @@ func (session *Session) queryRows(sqlStr string, args ...interface{}) (*core.Row return rows, nil } - rows, err := session.DB().Query(sqlStr, args...) + rows, err := db.Query(sqlStr, args...) if err != nil { return nil, err } @@ -171,7 +178,7 @@ func (session *Session) exec(sqlStr string, args ...interface{}) (sql.Result, er } if session.prepareStmt { - stmt, err := session.doPrepare(sqlStr) + stmt, err := session.doPrepare(session.DB(), sqlStr) if err != nil { return nil, err } diff --git a/vendor/github.com/go-xorm/xorm/session_update.go b/vendor/github.com/go-xorm/xorm/session_update.go index ca0629812..f55874566 100644 --- a/vendor/github.com/go-xorm/xorm/session_update.go +++ b/vendor/github.com/go-xorm/xorm/session_update.go @@ -242,10 +242,23 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6 var autoCond builder.Cond if !session.statement.noAutoCondition && len(condiBean) > 0 { - var err error - autoCond, err = session.statement.buildConds(session.statement.RefTable, condiBean[0], true, true, false, true, false) - if err != nil { - return 0, err + if c, ok := condiBean[0].(map[string]interface{}); ok { + autoCond = builder.Eq(c) + } else { + ct := reflect.TypeOf(condiBean[0]) + k := ct.Kind() + if k == reflect.Ptr { + k = ct.Elem().Kind() + } + if k == reflect.Struct { + var err error + autoCond, err = session.statement.buildConds(session.statement.RefTable, condiBean[0], true, true, false, true, false) + if err != nil { + return 0, err + } + } else { + return 0, ErrConditionType + } } } diff --git a/vendor/github.com/go-xorm/xorm/statement.go b/vendor/github.com/go-xorm/xorm/statement.go index 23346c710..6400425b2 100644 --- a/vendor/github.com/go-xorm/xorm/statement.go +++ b/vendor/github.com/go-xorm/xorm/statement.go @@ -160,6 +160,9 @@ func (statement *Statement) And(query interface{}, args ...interface{}) *Stateme case string: cond := builder.Expr(query.(string), args...) statement.cond = statement.cond.And(cond) + case map[string]interface{}: + cond := builder.Eq(query.(map[string]interface{})) + statement.cond = statement.cond.And(cond) case builder.Cond: cond := query.(builder.Cond) statement.cond = statement.cond.And(cond) @@ -181,6 +184,9 @@ func (statement *Statement) Or(query interface{}, args ...interface{}) *Statemen case string: cond := builder.Expr(query.(string), args...) statement.cond = statement.cond.Or(cond) + case map[string]interface{}: + cond := builder.Eq(query.(map[string]interface{})) + statement.cond = statement.cond.Or(cond) case builder.Cond: cond := query.(builder.Cond) statement.cond = statement.cond.Or(cond) @@ -901,8 +907,12 @@ func (statement *Statement) genDelIndexSQL() []string { func (statement *Statement) genAddColumnStr(col *core.Column) (string, []interface{}) { quote := statement.Engine.Quote - sql := fmt.Sprintf("ALTER TABLE %v ADD %v;", quote(statement.TableName()), + sql := fmt.Sprintf("ALTER TABLE %v ADD %v", quote(statement.TableName()), col.String(statement.Engine.dialect)) + if statement.Engine.dialect.DBType() == core.MYSQL && len(col.Comment) > 0 { + sql += " COMMENT '" + col.Comment + "'" + } + sql += ";" return sql, []interface{}{} } diff --git a/vendor/vendor.json b/vendor/vendor.json index e00816926..a108bbbab 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -462,16 +462,16 @@ "revisionTime": "2016-11-01T11:13:14Z" }, { - "checksumSHA1": "9SXbj96wb1PgppBZzxMIN0axbFQ=", + "checksumSHA1": "HsUSlgz1VKEEiZdkXY5qdLzexWU=", "path": "github.com/go-xorm/builder", - "revision": "c8871c857d2555fbfbd8524f895be5386d3d8836", - "revisionTime": "2017-05-19T03:21:30Z" + "revision": "488224409dd8aa2ce7a5baf8d10d55764a913738", + "revisionTime": "2018-01-16T06:54:19Z" }, { - "checksumSHA1": "HMavuxvDhKOwmbbFnYt9hfT6jE0=", + "checksumSHA1": "7JjlvSpGfLa49MHElks8NGBUfFA=", "path": "github.com/go-xorm/core", - "revision": "da1adaf7a28ca792961721a34e6e04945200c890", - "revisionTime": "2017-09-09T08:56:53Z" + "revision": "cb1d0ca71f42d3ee1bf4aba7daa16099bc31a7e9", + "revisionTime": "2017-12-21T01:38:49Z" }, { "checksumSHA1": "k52lEKLp8j5M+jFpe+3u+bIFpxQ=", @@ -480,10 +480,10 @@ "revisionTime": "2016-08-11T02:11:45Z" }, { - "checksumSHA1": "+KmPfckyKvrUZPIHBYHylg/7V8o=", + "checksumSHA1": "eGBz6F3I/0naVUclZ6GZWc3EzQo=", "path": "github.com/go-xorm/xorm", - "revision": "29d4a0330a00b9be468b70e3fb0f74109348c358", - "revisionTime": "2017-09-30T01:26:13Z" + "revision": "d4149d1eee0c2c488a74a5863fd9caf13d60fd03", + "revisionTime": "2018-01-22T13:32:35Z" }, { "checksumSHA1": "1ft/4j5MFa7C9dPI9whL03HSUzk=", From 9e842c8a722eb1db50cfbdbe7146b67d3670052f Mon Sep 17 00:00:00 2001 From: Antoine GIRARD Date: Sat, 27 Jan 2018 17:48:15 +0100 Subject: [PATCH 06/25] Fix SSH auth lfs locks (#3152) * Fix SSH auth LFS locks * Activate SSH/lock test * Remove debug * Follow @lunny recommendation for AfterLoad method --- cmd/serv.go | 8 +- integrations/api_repo_lfs_locks_test.go | 8 +- integrations/git_test.go | 4 +- models/error.go | 19 ++-- models/lfs_lock.go | 55 +++++----- modules/lfs/locks.go | 78 +++++++------- modules/lfs/server.go | 133 ++++++++++++------------ 7 files changed, 162 insertions(+), 143 deletions(-) diff --git a/cmd/serv.go b/cmd/serv.go index d7fe6c663..0326656f2 100644 --- a/cmd/serv.go +++ b/cmd/serv.go @@ -259,12 +259,16 @@ func runServ(c *cli.Context) error { url := fmt.Sprintf("%s%s/%s.git/info/lfs", setting.AppURL, username, repo.Name) now := time.Now() - token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{ + claims := jwt.MapClaims{ "repo": repo.ID, "op": lfsVerb, "exp": now.Add(5 * time.Minute).Unix(), "nbf": now.Unix(), - }) + } + if user != nil { + claims["user"] = user.ID + } + token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) // Sign and get the complete encoded token as a string using the secret tokenString, err := token.SignedString(setting.LFS.JWTSecretBytes) diff --git a/integrations/api_repo_lfs_locks_test.go b/integrations/api_repo_lfs_locks_test.go index 61e554634..35b26e45a 100644 --- a/integrations/api_repo_lfs_locks_test.go +++ b/integrations/api_repo_lfs_locks_test.go @@ -41,10 +41,10 @@ func TestAPILFSLocksNotLogin(t *testing.T) { req := NewRequestf(t, "GET", "/%s/%s.git/info/lfs/locks", user.Name, repo.Name) req.Header.Set("Accept", "application/vnd.git-lfs+json") - resp := MakeRequest(t, req, http.StatusForbidden) + resp := MakeRequest(t, req, http.StatusUnauthorized) var lfsLockError api.LFSLockError DecodeJSON(t, resp, &lfsLockError) - assert.Equal(t, "You must have pull access to list locks : User undefined doesn't have rigth to list for lfs lock [rid: 1]", lfsLockError.Message) + assert.Equal(t, "Unauthorized", lfsLockError.Message) } func TestAPILFSLocksLogged(t *testing.T) { @@ -68,8 +68,8 @@ func TestAPILFSLocksLogged(t *testing.T) { {user: user2, repo: repo1, path: "path/test", httpResult: http.StatusConflict}, {user: user2, repo: repo1, path: "Foo/BaR.zip", httpResult: http.StatusConflict}, {user: user2, repo: repo1, path: "Foo/Test/../subFOlder/../Relative/../BaR.zip", httpResult: http.StatusConflict}, - {user: user4, repo: repo1, path: "FoO/BaR.zip", httpResult: http.StatusForbidden}, - {user: user4, repo: repo1, path: "path/test-user4", httpResult: http.StatusForbidden}, + {user: user4, repo: repo1, path: "FoO/BaR.zip", httpResult: http.StatusUnauthorized}, + {user: user4, repo: repo1, path: "path/test-user4", httpResult: http.StatusUnauthorized}, {user: user2, repo: repo1, path: "patH/Test-user4", httpResult: http.StatusCreated, addTime: []int{0}}, {user: user2, repo: repo1, path: "some/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/long/path", httpResult: http.StatusCreated, addTime: []int{0}}, diff --git a/integrations/git_test.go b/integrations/git_test.go index 05b2c366b..1ab558d7b 100644 --- a/integrations/git_test.go +++ b/integrations/git_test.go @@ -214,11 +214,9 @@ func TestGit(t *testing.T) { commitAndPush(t, bigSize, dstPath) }) }) - /* Failed without #3152. TODO activate with fix. t.Run("Locks", func(t *testing.T) { - lockTest(t, u.String(), dstPath) + lockTest(t, u.String(), dstPath) }) - */ }) }) }) diff --git a/models/error.go b/models/error.go index 765b8fa6c..cd96fa925 100644 --- a/models/error.go +++ b/models/error.go @@ -530,21 +530,24 @@ func (err ErrLFSLockNotExist) Error() string { return fmt.Sprintf("lfs lock does not exist [id: %d, rid: %d, path: %s]", err.ID, err.RepoID, err.Path) } -// ErrLFSLockUnauthorizedAction represents a "LFSLockUnauthorizedAction" kind of error. -type ErrLFSLockUnauthorizedAction struct { +// ErrLFSUnauthorizedAction represents a "LFSUnauthorizedAction" kind of error. +type ErrLFSUnauthorizedAction struct { RepoID int64 UserName string - Action string + Mode AccessMode } -// IsErrLFSLockUnauthorizedAction checks if an error is a ErrLFSLockUnauthorizedAction. -func IsErrLFSLockUnauthorizedAction(err error) bool { - _, ok := err.(ErrLFSLockUnauthorizedAction) +// IsErrLFSUnauthorizedAction checks if an error is a ErrLFSUnauthorizedAction. +func IsErrLFSUnauthorizedAction(err error) bool { + _, ok := err.(ErrLFSUnauthorizedAction) return ok } -func (err ErrLFSLockUnauthorizedAction) Error() string { - return fmt.Sprintf("User %s doesn't have rigth to %s for lfs lock [rid: %d]", err.UserName, err.Action, err.RepoID) +func (err ErrLFSUnauthorizedAction) Error() string { + if err.Mode == AccessModeWrite { + return fmt.Sprintf("User %s doesn't have write access for lfs lock [rid: %d]", err.UserName, err.RepoID) + } + return fmt.Sprintf("User %s doesn't have read access for lfs lock [rid: %d]", err.UserName, err.RepoID) } // ErrLFSLockAlreadyExist represents a "LFSLockAlreadyExist" kind of error. diff --git a/models/lfs_lock.go b/models/lfs_lock.go index 9bb87843a..52e877b15 100644 --- a/models/lfs_lock.go +++ b/models/lfs_lock.go @@ -11,28 +11,40 @@ import ( "strings" "time" + "code.gitea.io/gitea/modules/log" api "code.gitea.io/sdk/gitea" + "github.com/go-xorm/xorm" ) // LFSLock represents a git lfs lock of repository. type LFSLock struct { - ID int64 `xorm:"pk autoincr"` - RepoID int64 `xorm:"INDEX NOT NULL"` - Owner *User `xorm:"-"` - OwnerID int64 `xorm:"INDEX NOT NULL"` - Path string `xorm:"TEXT"` - Created time.Time `xorm:"created"` + ID int64 `xorm:"pk autoincr"` + Repo *Repository `xorm:"-"` + RepoID int64 `xorm:"INDEX NOT NULL"` + Owner *User `xorm:"-"` + OwnerID int64 `xorm:"INDEX NOT NULL"` + Path string `xorm:"TEXT"` + Created time.Time `xorm:"created"` } // BeforeInsert is invoked from XORM before inserting an object of this type. func (l *LFSLock) BeforeInsert() { l.OwnerID = l.Owner.ID + l.RepoID = l.Repo.ID l.Path = cleanPath(l.Path) } // AfterLoad is invoked from XORM after setting the values of all fields of this object. -func (l *LFSLock) AfterLoad() { - l.Owner, _ = GetUserByID(l.OwnerID) +func (l *LFSLock) AfterLoad(session *xorm.Session) { + var err error + l.Owner, err = getUserByID(session, l.OwnerID) + if err != nil { + log.Error(2, "LFS lock AfterLoad failed OwnerId[%d] not found: %v", l.OwnerID, err) + } + l.Repo, err = getRepositoryByID(session, l.RepoID) + if err != nil { + log.Error(2, "LFS lock AfterLoad failed RepoId[%d] not found: %v", l.RepoID, err) + } } func cleanPath(p string) string { @@ -53,12 +65,12 @@ func (l *LFSLock) APIFormat() *api.LFSLock { // CreateLFSLock creates a new lock. func CreateLFSLock(lock *LFSLock) (*LFSLock, error) { - err := CheckLFSAccessForRepo(lock.Owner, lock.RepoID, "create") + err := CheckLFSAccessForRepo(lock.Owner, lock.Repo, AccessModeWrite) if err != nil { return nil, err } - l, err := GetLFSLock(lock.RepoID, lock.Path) + l, err := GetLFSLock(lock.Repo, lock.Path) if err == nil { return l, ErrLFSLockAlreadyExist{lock.RepoID, lock.Path} } @@ -71,15 +83,15 @@ func CreateLFSLock(lock *LFSLock) (*LFSLock, error) { } // GetLFSLock returns release by given path. -func GetLFSLock(repoID int64, path string) (*LFSLock, error) { +func GetLFSLock(repo *Repository, path string) (*LFSLock, error) { path = cleanPath(path) - rel := &LFSLock{RepoID: repoID} + rel := &LFSLock{RepoID: repo.ID} has, err := x.Where("lower(path) = ?", strings.ToLower(path)).Get(rel) if err != nil { return nil, err } if !has { - return nil, ErrLFSLockNotExist{0, repoID, path} + return nil, ErrLFSLockNotExist{0, repo.ID, path} } return rel, nil } @@ -109,7 +121,7 @@ func DeleteLFSLockByID(id int64, u *User, force bool) (*LFSLock, error) { return nil, err } - err = CheckLFSAccessForRepo(u, lock.RepoID, "delete") + err = CheckLFSAccessForRepo(u, lock.Repo, AccessModeWrite) if err != nil { return nil, err } @@ -123,24 +135,15 @@ func DeleteLFSLockByID(id int64, u *User, force bool) (*LFSLock, error) { } //CheckLFSAccessForRepo check needed access mode base on action -func CheckLFSAccessForRepo(u *User, repoID int64, action string) error { +func CheckLFSAccessForRepo(u *User, repo *Repository, mode AccessMode) error { if u == nil { - return ErrLFSLockUnauthorizedAction{repoID, "undefined", action} - } - mode := AccessModeRead - if action == "create" || action == "delete" || action == "verify" { - mode = AccessModeWrite - } - - repo, err := GetRepositoryByID(repoID) - if err != nil { - return err + return ErrLFSUnauthorizedAction{repo.ID, "undefined", mode} } has, err := HasAccess(u.ID, repo, mode) if err != nil { return err } else if !has { - return ErrLFSLockUnauthorizedAction{repo.ID, u.DisplayName(), action} + return ErrLFSUnauthorizedAction{repo.ID, u.DisplayName(), mode} } return nil } diff --git a/modules/lfs/locks.go b/modules/lfs/locks.go index 2e776c26a..7a7d3ad42 100644 --- a/modules/lfs/locks.go +++ b/modules/lfs/locks.go @@ -13,24 +13,35 @@ import ( "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/setting" api "code.gitea.io/sdk/gitea" - - "gopkg.in/macaron.v1" ) -func checkRequest(req macaron.Request, post bool) int { +//checkIsValidRequest check if it a valid request in case of bad request it write the response to ctx. +func checkIsValidRequest(ctx *context.Context, post bool) bool { if !setting.LFS.StartServer { - return 404 + writeStatus(ctx, 404) + return false } - if !MetaMatcher(req) { - return 400 + if !MetaMatcher(ctx.Req) { + writeStatus(ctx, 400) + return false + } + if !ctx.IsSigned { + user, _, _, err := parseToken(ctx.Req.Header.Get("Authorization")) + if err != nil { + ctx.Resp.Header().Set("WWW-Authenticate", "Basic realm=gitea-lfs") + writeStatus(ctx, 401) + return false + } + ctx.User = user } if post { - mediaParts := strings.Split(req.Header.Get("Content-Type"), ";") + mediaParts := strings.Split(ctx.Req.Header.Get("Content-Type"), ";") if mediaParts[0] != metaMediaType { - return 400 + writeStatus(ctx, 400) + return false } } - return 200 + return true } func handleLockListOut(ctx *context.Context, lock *models.LFSLock, err error) { @@ -59,17 +70,16 @@ func handleLockListOut(ctx *context.Context, lock *models.LFSLock, err error) { // GetListLockHandler list locks func GetListLockHandler(ctx *context.Context) { - status := checkRequest(ctx.Req, false) - if status != 200 { - writeStatus(ctx, status) + if !checkIsValidRequest(ctx, false) { return } ctx.Resp.Header().Set("Content-Type", metaMediaType) - err := models.CheckLFSAccessForRepo(ctx.User, ctx.Repo.Repository.ID, "list") + err := models.CheckLFSAccessForRepo(ctx.User, ctx.Repo.Repository, models.AccessModeRead) if err != nil { - if models.IsErrLFSLockUnauthorizedAction(err) { - ctx.JSON(403, api.LFSLockError{ + if models.IsErrLFSUnauthorizedAction(err) { + ctx.Resp.Header().Set("WWW-Authenticate", "Basic realm=gitea-lfs") + ctx.JSON(401, api.LFSLockError{ Message: "You must have pull access to list locks : " + err.Error(), }) return @@ -96,7 +106,7 @@ func GetListLockHandler(ctx *context.Context) { path := ctx.Query("path") if path != "" { //Case where we request a specific id - lock, err := models.GetLFSLock(ctx.Repo.Repository.ID, path) + lock, err := models.GetLFSLock(ctx.Repo.Repository, path) handleLockListOut(ctx, lock, err) return } @@ -120,9 +130,7 @@ func GetListLockHandler(ctx *context.Context) { // PostLockHandler create lock func PostLockHandler(ctx *context.Context) { - status := checkRequest(ctx.Req, true) - if status != 200 { - writeStatus(ctx, status) + if !checkIsValidRequest(ctx, false) { return } ctx.Resp.Header().Set("Content-Type", metaMediaType) @@ -136,9 +144,9 @@ func PostLockHandler(ctx *context.Context) { } lock, err := models.CreateLFSLock(&models.LFSLock{ - RepoID: ctx.Repo.Repository.ID, - Path: req.Path, - Owner: ctx.User, + Repo: ctx.Repo.Repository, + Path: req.Path, + Owner: ctx.User, }) if err != nil { if models.IsErrLFSLockAlreadyExist(err) { @@ -148,8 +156,9 @@ func PostLockHandler(ctx *context.Context) { }) return } - if models.IsErrLFSLockUnauthorizedAction(err) { - ctx.JSON(403, api.LFSLockError{ + if models.IsErrLFSUnauthorizedAction(err) { + ctx.Resp.Header().Set("WWW-Authenticate", "Basic realm=gitea-lfs") + ctx.JSON(401, api.LFSLockError{ Message: "You must have push access to create locks : " + err.Error(), }) return @@ -164,18 +173,16 @@ func PostLockHandler(ctx *context.Context) { // VerifyLockHandler list locks for verification func VerifyLockHandler(ctx *context.Context) { - status := checkRequest(ctx.Req, true) - if status != 200 { - writeStatus(ctx, status) + if !checkIsValidRequest(ctx, false) { return } - ctx.Resp.Header().Set("Content-Type", metaMediaType) - err := models.CheckLFSAccessForRepo(ctx.User, ctx.Repo.Repository.ID, "verify") + err := models.CheckLFSAccessForRepo(ctx.User, ctx.Repo.Repository, models.AccessModeWrite) if err != nil { - if models.IsErrLFSLockUnauthorizedAction(err) { - ctx.JSON(403, api.LFSLockError{ + if models.IsErrLFSUnauthorizedAction(err) { + ctx.Resp.Header().Set("WWW-Authenticate", "Basic realm=gitea-lfs") + ctx.JSON(401, api.LFSLockError{ Message: "You must have push access to verify locks : " + err.Error(), }) return @@ -211,9 +218,7 @@ func VerifyLockHandler(ctx *context.Context) { // UnLockHandler delete locks func UnLockHandler(ctx *context.Context) { - status := checkRequest(ctx.Req, true) - if status != 200 { - writeStatus(ctx, status) + if !checkIsValidRequest(ctx, false) { return } ctx.Resp.Header().Set("Content-Type", metaMediaType) @@ -228,8 +233,9 @@ func UnLockHandler(ctx *context.Context) { lock, err := models.DeleteLFSLockByID(ctx.ParamsInt64("lid"), ctx.User, req.Force) if err != nil { - if models.IsErrLFSLockUnauthorizedAction(err) { - ctx.JSON(403, api.LFSLockError{ + if models.IsErrLFSUnauthorizedAction(err) { + ctx.Resp.Header().Set("WWW-Authenticate", "Basic realm=gitea-lfs") + ctx.JSON(401, api.LFSLockError{ Message: "You must have push access to delete locks : " + err.Error(), }) return diff --git a/modules/lfs/server.go b/modules/lfs/server.go index 329d6f00c..a81d8e5c9 100644 --- a/modules/lfs/server.go +++ b/modules/lfs/server.go @@ -473,7 +473,6 @@ func logRequest(r macaron.Request, status int) { // authenticate uses the authorization string to determine whether // or not to proceed. This server assumes an HTTP Basic auth format. func authenticate(ctx *context.Context, repository *models.Repository, authorization string, requireWrite bool) bool { - accessMode := models.AccessModeRead if requireWrite { accessMode = models.AccessModeWrite @@ -482,86 +481,92 @@ func authenticate(ctx *context.Context, repository *models.Repository, authoriza if !repository.IsPrivate && !requireWrite { return true } - if ctx.IsSigned { accessCheck, _ := models.HasAccess(ctx.User.ID, repository, accessMode) return accessCheck } - if authorization == "" { + user, repo, opStr, err := parseToken(authorization) + if err != nil { return false } - - if authenticateToken(repository, authorization, requireWrite) { + ctx.User = user + if opStr == "basic" { + accessCheck, _ := models.HasAccess(ctx.User.ID, repository, accessMode) + return accessCheck + } + if repository.ID == repo.ID { + if requireWrite && opStr != "upload" { + return false + } return true } - - if !strings.HasPrefix(authorization, "Basic ") { - return false - } - - c, err := base64.StdEncoding.DecodeString(strings.TrimPrefix(authorization, "Basic ")) - if err != nil { - return false - } - cs := string(c) - i := strings.IndexByte(cs, ':') - if i < 0 { - return false - } - user, password := cs[:i], cs[i+1:] - - userModel, err := models.GetUserByName(user) - if err != nil { - return false - } - - if !userModel.ValidatePassword(password) { - return false - } - - accessCheck, _ := models.HasAccess(userModel.ID, repository, accessMode) - return accessCheck + return false } -func authenticateToken(repository *models.Repository, authorization string, requireWrite bool) bool { - if !strings.HasPrefix(authorization, "Bearer ") { - return false +func parseToken(authorization string) (*models.User, *models.Repository, string, error) { + if authorization == "" { + return nil, nil, "unknown", fmt.Errorf("No token") } - - token, err := jwt.Parse(authorization[7:], func(t *jwt.Token) (interface{}, error) { - if _, ok := t.Method.(*jwt.SigningMethodHMAC); !ok { - return nil, fmt.Errorf("unexpected signing method: %v", t.Header["alg"]) + if strings.HasPrefix(authorization, "Bearer ") { + token, err := jwt.Parse(authorization[7:], func(t *jwt.Token) (interface{}, error) { + if _, ok := t.Method.(*jwt.SigningMethodHMAC); !ok { + return nil, fmt.Errorf("unexpected signing method: %v", t.Header["alg"]) + } + return setting.LFS.JWTSecretBytes, nil + }) + if err != nil { + return nil, nil, "unknown", err } - return setting.LFS.JWTSecretBytes, nil - }) - if err != nil { - return false - } - claims, claimsOk := token.Claims.(jwt.MapClaims) - if !token.Valid || !claimsOk { - return false + claims, claimsOk := token.Claims.(jwt.MapClaims) + if !token.Valid || !claimsOk { + return nil, nil, "unknown", fmt.Errorf("Token claim invalid") + } + opStr, ok := claims["op"].(string) + if !ok { + return nil, nil, "unknown", fmt.Errorf("Token operation invalid") + } + repoID, ok := claims["repo"].(float64) + if !ok { + return nil, nil, opStr, fmt.Errorf("Token repository id invalid") + } + r, err := models.GetRepositoryByID(int64(repoID)) + if err != nil { + return nil, nil, opStr, err + } + userID, ok := claims["user"].(float64) + if !ok { + return nil, r, opStr, fmt.Errorf("Token user id invalid") + } + u, err := models.GetUserByID(int64(userID)) + if err != nil { + return nil, r, opStr, err + } + return u, r, opStr, nil } - opStr, ok := claims["op"].(string) - if !ok { - return false + if strings.HasPrefix(authorization, "Basic ") { + c, err := base64.StdEncoding.DecodeString(strings.TrimPrefix(authorization, "Basic ")) + if err != nil { + return nil, nil, "basic", err + } + cs := string(c) + i := strings.IndexByte(cs, ':') + if i < 0 { + return nil, nil, "basic", fmt.Errorf("Basic auth invalid") + } + user, password := cs[:i], cs[i+1:] + u, err := models.GetUserByName(user) + if err != nil { + return nil, nil, "basic", err + } + if !u.ValidatePassword(password) { + return nil, nil, "basic", fmt.Errorf("Basic auth failed") + } + return u, nil, "basic", nil } - if requireWrite && opStr != "upload" { - return false - } - - repoID, ok := claims["repo"].(float64) - if !ok { - return false - } - - if repository.ID != int64(repoID) { - return false - } - - return true + return nil, nil, "unknown", fmt.Errorf("Token not found") } func requireAuth(ctx *context.Context) { From b627f1131b59172cf4a9f238fb89cd415cbc38e0 Mon Sep 17 00:00:00 2001 From: Wendell Sun Date: Sun, 28 Jan 2018 01:54:26 +0800 Subject: [PATCH 07/25] Change local copy origin url after repository rename (#3399) Fix #3378 --- models/repo.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/models/repo.go b/models/repo.go index a9e116d6b..59d233678 100644 --- a/models/repo.go +++ b/models/repo.go @@ -1580,10 +1580,19 @@ func ChangeRepositoryName(u *User, oldRepoName, newRepoName string) (err error) } // Change repository directory name. - if err = os.Rename(repo.RepoPath(), RepoPath(u.Name, newRepoName)); err != nil { + newRepoPath := RepoPath(u.Name, newRepoName) + if err = os.Rename(repo.RepoPath(), newRepoPath); err != nil { return fmt.Errorf("rename repository directory: %v", err) } + localPath := repo.LocalCopyPath() + if com.IsExist(localPath) { + _, err := git.NewCommand("remote", "set-url", "origin", newRepoPath).RunInDir(localPath) + if err != nil { + return fmt.Errorf("git remote set-url origin %s: %v", newRepoPath, err) + } + } + wikiPath := repo.WikiPath() if com.IsExist(wikiPath) { if err = os.Rename(wikiPath, WikiPath(u.Name, newRepoName)); err != nil { From bcd7f42529d0d35268b1130afa3d9330b0779d6b Mon Sep 17 00:00:00 2001 From: Timo Schindler Date: Sat, 27 Jan 2018 19:35:49 +0100 Subject: [PATCH 08/25] Added quoting for passwords in sample.app.ini and documentation (#3395) --- custom/conf/app.ini.sample | 3 +++ docs/content/doc/advanced/config-cheat-sheet.en-us.md | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/custom/conf/app.ini.sample b/custom/conf/app.ini.sample index a931ca4ea..9bfa841b7 100644 --- a/custom/conf/app.ini.sample +++ b/custom/conf/app.ini.sample @@ -198,6 +198,7 @@ DB_TYPE = mysql HOST = 127.0.0.1:3306 NAME = gitea USER = root +; Use PASSWD = `your password` for quoting if you use special characters in the password. PASSWD = ; For "postgres" only, either "disable", "require" or "verify-full" SSL_MODE = disable @@ -342,6 +343,7 @@ KEY_FILE = custom/mailer/key.pem FROM = ; Mailer user name and password USER = +; Use PASSWD = `your password` for quoting if you use special characters in the password. PASSWD = ; Send mails as plain text SEND_AS_PLAIN_TEXT = false @@ -464,6 +466,7 @@ SUBJECT = Diagnostic message from server HOST = ; Mailer user name and password USER = +; Use PASSWD = `your password` for quoting if you use special characters in the password. PASSWD = ; Receivers, can be one or more, e.g. 1@example.com,2@example.com RECEIVERS = diff --git a/docs/content/doc/advanced/config-cheat-sheet.en-us.md b/docs/content/doc/advanced/config-cheat-sheet.en-us.md index 941e08a7e..6f3a51c58 100644 --- a/docs/content/doc/advanced/config-cheat-sheet.en-us.md +++ b/docs/content/doc/advanced/config-cheat-sheet.en-us.md @@ -118,7 +118,7 @@ Values containing `#` or `;` must be quoted using `` ` `` or `"""`. - `HOST`: **127.0.0.1:3306**: Database host address and port. - `NAME`: **gitea**: Database name. - `USER`: **root**: Database username. -- `PASSWD`: **\**: Database user password. +- `PASSWD`: **\**: Database user password. Use \`your password\` for quoting if you use special characters in the password. - `SSL_MODE`: **disable**: For PostgreSQL only. - `PATH`: **data/gitea.db**: For SQLite3 only, the database file path. @@ -185,7 +185,7 @@ Values containing `#` or `;` must be quoted using `` ` `` or `"""`. - `FROM`: **\**: Mail from address, RFC 5322. This can be just an email address, or the "Name" \ format. - `USER`: **\**: Username of mailing user (usually the sender's e-mail address). -- `PASSWD`: **\**: Password of mailing user. +- `PASSWD`: **\**: Password of mailing user. Use \`your password\` for quoting if you use special characters in the password. - `SKIP_VERIFY`: **\**: Do not verify the self-signed certificates. - **Note:** Gitea only supports SMTP with STARTTLS. - `USE_SENDMAIL`: **false** Use the operating system's `sendmail` command instead of SMTP. From 36a94da8dab112f47ee1774f2ae9a8fd7ca21a1c Mon Sep 17 00:00:00 2001 From: Antoine GIRARD Date: Sat, 27 Jan 2018 19:52:41 +0100 Subject: [PATCH 09/25] doc: Improve integrations examples (#3416) --- integrations/README.md | 42 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/integrations/README.md b/integrations/README.md index 25028fd2b..64041b546 100644 --- a/integrations/README.md +++ b/integrations/README.md @@ -1,3 +1,5 @@ +# Integrations tests + Integration tests can be run with make commands for the appropriate backends, namely: @@ -5,7 +7,42 @@ appropriate backends, namely: make test-pgsql make test-sqlite -# Running individual tests +Make sure to perform a clean build before running tests: + + make clean build + +## Run all tests via local drone +``` +drone exec --local --build.event "pull_request" +``` + +## Run sqlite integrations tests +Start tests +``` +make test-sqlite +``` + +## Run mysql integrations tests +Setup a mysql database inside docker +``` +docker run -e "MYSQL_DATABASE=test" -e "MYSQL_ALLOW_EMPTY_PASSWORD=yes" --rm --name mysql mysql:5.7 #(just ctrl-c to stop db and clean the container) +``` +Start tests based on the database container +``` +TEST_MYSQL_HOST="$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql):3306" TEST_MYSQL_DBNAME=test TEST_MYSQL_USERNAME=root TEST_MYSQL_PASSWORD='' make test-mysql +``` + +## Run pgsql integrations tests +Setup a pgsql database inside docker +``` +docker run -e "POSTGRES_DB=test" --rm --name pgsql postgres:9.5 #(just ctrl-c to stop db and clean the container) +``` +Start tests based on the database container +``` +TEST_PGSQL_HOST=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' pgsql) TEST_PGSQL_DBNAME=test TEST_PGSQL_USERNAME=postgres TEST_PGSQL_PASSWORD=postgres make test-pgsql +``` + +## Running individual tests Example command to run GPG test with sqlite backend: @@ -17,6 +54,3 @@ go test -c code.gitea.io/gitea/integrations \ -test.v -test.run GPG ``` -Make sure to perform a clean build before running tests: - - make clean build From c55a027da3fd71359bc6b622652a22fdeb280a80 Mon Sep 17 00:00:00 2001 From: Ethan Koenig Date: Sun, 28 Jan 2018 04:27:42 -0700 Subject: [PATCH 10/25] Fix empty checkout bug (#3419) --- models/repo.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/models/repo.go b/models/repo.go index 59d233678..421419856 100644 --- a/models/repo.go +++ b/models/repo.go @@ -774,17 +774,17 @@ func UpdateLocalCopyBranch(repoPath, localPath, branch string) error { return fmt.Errorf("git clone %s: %v", branch, err) } } else { - if err := git.Checkout(localPath, git.CheckoutOptions{ - Branch: branch, - }); err != nil { - return fmt.Errorf("git checkout %s: %v", branch, err) - } - _, err := git.NewCommand("fetch", "origin").RunInDir(localPath) if err != nil { return fmt.Errorf("git fetch origin: %v", err) } if len(branch) > 0 { + if err := git.Checkout(localPath, git.CheckoutOptions{ + Branch: branch, + }); err != nil { + return fmt.Errorf("git checkout %s: %v", branch, err) + } + if err := git.ResetHEAD(localPath, true, "origin/"+branch); err != nil { return fmt.Errorf("git reset --hard origin/%s: %v", branch, err) } From bac6ac033aee695b70971293d972c47efe425b3e Mon Sep 17 00:00:00 2001 From: Ethan Koenig Date: Sun, 28 Jan 2018 05:24:59 -0700 Subject: [PATCH 11/25] Fix race condition in repo renaming (#3418) --- models/repo.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/models/repo.go b/models/repo.go index 421419856..ba5b7b36a 100644 --- a/models/repo.go +++ b/models/repo.go @@ -1579,7 +1579,12 @@ func ChangeRepositoryName(u *User, oldRepoName, newRepoName string) (err error) return fmt.Errorf("GetRepositoryByName: %v", err) } - // Change repository directory name. + // Change repository directory name. We must lock the local copy of the + // repo so that we can atomically rename the repo path and updates the + // local copy's origin accordingly. + repoWorkingPool.CheckIn(com.ToStr(repo.ID)) + defer repoWorkingPool.CheckOut(com.ToStr(repo.ID)) + newRepoPath := RepoPath(u.Name, newRepoName) if err = os.Rename(repo.RepoPath(), newRepoPath); err != nil { return fmt.Errorf("rename repository directory: %v", err) From 7fd2d8e392d312c6bd65190eb9d9e0ed35bdfdc0 Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Sun, 28 Jan 2018 12:25:26 +0000 Subject: [PATCH 12/25] [skip ci] Updated translations via Crowdin --- options/locale/locale_ru-RU.ini | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/options/locale/locale_ru-RU.ini b/options/locale/locale_ru-RU.ini index 1b3c165a4..39a59fd5c 100644 --- a/options/locale/locale_ru-RU.ini +++ b/options/locale/locale_ru-RU.ini @@ -8,7 +8,7 @@ sign_in=Вход sign_in_with=Войдите с помощью sign_out=Выход sign_up=Регистрация -link_account=Привязать Аккаунт +link_account=Привязать аккаунт link_account_signin_or_signup=Войдите с уже существующими учётными данными или зарегистрируйтесь для связи с этим аккаунтом register=Регистрация website=Веб-сайт @@ -76,7 +76,7 @@ path=Путь sqlite_helper=Путь к файлу базы данных SQLite3 или TiDB.
Укажите абсолютный путь при запуске в качестве службы. err_empty_db_path=Путь к базе данных SQLite3 или TiDB не может быть пустым. err_invalid_tidb_name=Имя базы данных TiDB не может содержать символы "." и "-". -no_admin_and_disable_registration=Вы не можете отключить регистрацию до создания учетной записи администратора. +no_admin_and_disable_registration=Вы не можете отключить регистрацию до создания учётной записи администратора. err_empty_admin_password=Пароль администратора не может быть пустым. general_title=Общие параметры приложения @@ -102,7 +102,7 @@ log_root_path_helper=Каталог для записи файлов журна optional_title=Расширенные настройки email_title=Настройки службы электронной почты smtp_host=Узел SMTP -smtp_from=Из +smtp_from=От smtp_from_helper=Почта от адреса, RFC 5322. Это может быть email адрес или формат "Имя" . mailer_user=Отправитель mailer_password=Пароль отправителя @@ -125,7 +125,7 @@ enable_captcha=Включить капчу enable_captcha_popup=Запрашивать капчу при регистрации пользователя. require_sign_in_view=Разрешить требовать авторизацию для просмотра страниц require_sign_in_view_popup=Только пользователи Gitea могут просматривать страницы, прочие посетители смогут увидеть только ссылку на авторизацию вверху страницы. -admin_setting_desc=Вы не должны создать учетную запись администратора прямо сейчас, первый пользователь получит доступ с правами администратора автоматически. +admin_setting_desc=Вы не обязаны создавать учётную запись администратора прямо сейчас, первый пользователь получит доступ с правами администратора автоматически. admin_title=Настройки учётной записи администратора admin_name=Имя пользователя admin_password=Пароль From e189b06baa2d6fb0f536452c7e597ad67daa7e85 Mon Sep 17 00:00:00 2001 From: Lauris BH Date: Sun, 28 Jan 2018 19:16:28 +0200 Subject: [PATCH 13/25] Add mising `LOCAL_WIKI_PATH` documentation (#3420) --- custom/conf/app.ini.sample | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/custom/conf/app.ini.sample b/custom/conf/app.ini.sample index 9bfa841b7..57fa5ec3d 100644 --- a/custom/conf/app.ini.sample +++ b/custom/conf/app.ini.sample @@ -41,8 +41,10 @@ LINE_WRAP_EXTENSIONS = .txt,.md,.markdown,.mdown,.mkd, PREVIEWABLE_FILE_MODES = markdown [repository.local] -; Path for uploads. Defaults to `tmp/local-repo` +; Path for local repository copy. Defaults to `tmp/local-repo` LOCAL_COPY_PATH = tmp/local-repo +; Path for local wiki copy. Defaults to `tmp/local-wiki` +LOCAL_WIKI_PATH = tmp/local-wiki [repository.upload] ; Whether repository file uploads are enabled. Defaults to `true` From 3968c1149ea84506552a0c343f3be8eab2fcfc18 Mon Sep 17 00:00:00 2001 From: Ethan Koenig Date: Sun, 28 Jan 2018 17:26:01 -0700 Subject: [PATCH 14/25] Fix SQL type error for webhooks (#3424) --- models/webhook.go | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/models/webhook.go b/models/webhook.go index 3e3f5fc3f..b18b9e35a 100644 --- a/models/webhook.go +++ b/models/webhook.go @@ -20,6 +20,7 @@ import ( "code.gitea.io/gitea/modules/util" api "code.gitea.io/sdk/gitea" + "github.com/Unknwon/com" gouuid "github.com/satori/go.uuid" ) @@ -677,9 +678,15 @@ func DeliverHooks() { } // Start listening on new hook requests. - for repoID := range HookQueue.Queue() { - log.Trace("DeliverHooks [repo_id: %v]", repoID) - HookQueue.Remove(repoID) + for repoIDStr := range HookQueue.Queue() { + log.Trace("DeliverHooks [repo_id: %v]", repoIDStr) + HookQueue.Remove(repoIDStr) + + repoID, err := com.StrTo(repoIDStr).Int64() + if err != nil { + log.Error(4, "Invalid repo ID: %s", repoIDStr) + continue + } tasks = make([]*HookTask, 0, 5) if err := x.Where("repo_id=? AND is_delivered=?", repoID, false).Find(&tasks); err != nil { From 28b81899d03301bdc9f7a9b453b7d467ee18ff8e Mon Sep 17 00:00:00 2001 From: Lauris BH Date: Mon, 29 Jan 2018 03:12:04 +0200 Subject: [PATCH 15/25] Add doctype to go-get=1 reponse (#3423) --- modules/context/context.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/context/context.go b/modules/context/context.go index e69094863..77128b878 100644 --- a/modules/context/context.go +++ b/modules/context/context.go @@ -189,7 +189,7 @@ func Contexter() macaron.Handler { branchName = repo.DefaultBranch } prefix := setting.AppURL + path.Join(ownerName, repoName, "src", "branch", branchName) - c.PlainText(http.StatusOK, []byte(com.Expand(` + c.PlainText(http.StatusOK, []byte(com.Expand(` From 46c7fe371d09ecb2f9d6043286bbb33f124ecceb Mon Sep 17 00:00:00 2001 From: Ethan Koenig Date: Mon, 29 Jan 2018 03:18:20 -0700 Subject: [PATCH 16/25] Fix PR merge error (#3421) --- models/pull.go | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/models/pull.go b/models/pull.go index 45fe852e9..15b3a4fe1 100644 --- a/models/pull.go +++ b/models/pull.go @@ -298,10 +298,6 @@ func (pr *PullRequest) Merge(doer *User, baseGitRepo *git.Repository, mergeStyle }() headRepoPath := RepoPath(pr.HeadUserName, pr.HeadRepo.Name) - headGitRepo, err := git.OpenRepository(headRepoPath) - if err != nil { - return fmt.Errorf("OpenRepository: %v", err) - } // Clone base repo. tmpBasePath := path.Join(LocalCopyPath(), "merge-"+com.ToStr(time.Now().Nanosecond())+".git") @@ -441,7 +437,7 @@ func (pr *PullRequest) Merge(doer *User, baseGitRepo *git.Repository, mergeStyle return nil } - l, err := headGitRepo.CommitsBetweenIDs(pr.MergedCommitID, pr.MergeBase) + l, err := baseGitRepo.CommitsBetweenIDs(pr.MergedCommitID, pr.MergeBase) if err != nil { log.Error(4, "CommitsBetweenIDs: %v", err) return nil From 7af81973cbfee15861afb14ca2fb813944489949 Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Mon, 29 Jan 2018 11:15:41 +0000 Subject: [PATCH 17/25] [skip ci] Updated translations via Crowdin --- options/locale/locale_id-ID.ini | 996 +++++++++++++++++++++++++++++++- options/locale/locale_lt-LT.ini | 1 + options/locale/locale_nl-NL.ini | 43 ++ options/locale/locale_uk-UA.ini | 106 ++++ 4 files changed, 1136 insertions(+), 10 deletions(-) create mode 100644 options/locale/locale_uk-UA.ini diff --git a/options/locale/locale_id-ID.ini b/options/locale/locale_id-ID.ini index 0d9e5f6d5..46605b0c4 100644 --- a/options/locale/locale_id-ID.ini +++ b/options/locale/locale_id-ID.ini @@ -1,106 +1,1082 @@ +app_desc=Sebuah layanan host Git sendiri yang tidak sulit +home=Beranda +dashboard=Dasbor +explore=Jelajahi +help=Bantuan +sign_in=Masuk +sign_in_with=Masuk dengan +sign_out=Keluar +sign_up=Daftar +link_account=Tautan Akun +link_account_signin_or_signup=Masuk dengan kredensial yang ada untuk menautkan akun anda yang ada ke akun ini. Atau, daftar untuk akun yang baru +register=Daftar +website=Situs Web +version=Versi +page=Halaman +template=Contoh +language=Bahasa +notifications=Notifikasi +create_new=Buat... +user_profile_and_more=Profil pengguna dan lainnya +signed_in_as=Masuk sebagai +enable_javascript=Situs web ini bekerja lebih baik dengan JavaScript +username=Nama Pengguna +email=Surel +password=Kata Sandi +re_type=Ketik Ulang +captcha=Captcha +twofa=Otentikasi dua-faktor +twofa_scratch=Kode coretan dua-faktor +passcode=Kode Akses +repository=Repositori +organization=Organisasi +mirror=Duplikat +new_repo=Repositori Baru +new_migrate=Migrasi Baru +new_mirror=Duplikat Baru +new_fork=Fork Repositori Baru +new_org=Organisasi Baru +manage_org=Mengelola Organisasi +admin_panel=Panel Admin +account_settings=Pengaturan Akun +settings=Pengaturan +your_profile=Profile Anda +your_starred=Starred Anda +your_settings=Pengaturan Anda +all=Semua +sources=Sumber +mirrors=Duplikat +collaborative=Kolaboratif +forks=Garpu +activities=Aktivitas +pull_requests=Tarik Permintaan +issues=Masalah +cancel=Batal [install] +install=Pemasangan +title=Konfigurasi awal +docker_helper=Jika anda sedang menjalankan Gitea di dalam Docker, silakan baca pedoman dengan saksama sebelum mengubah apapun pada halaman ini. +requite_db_desc=Gitea memerlukan MySQL, MSSQL, PostgreSQL, SQLite3, atau TiDB. +db_title=Pengaturan Basis Data +db_type=Tipe Basis Data +host=Host +user=Pengguna +password=Kata Sandi +db_name=Nama Basis Data +db_helper=Silakan gunakan engine INNODB dengan utf8_general_ci charset untuk MySQL. +ssl_mode=Modus SSL +path=Jalur +sqlite_helper=Path berkas ke basis data SQLite3 atau TiDB.
Tolong gunakan path yang absolut saat anda memulainya sebagai layanan. +err_empty_db_path=Path basis data SQLite3 atau TiDB tidak boleh kosong. +err_invalid_tidb_name=Nama basis data TiDB tidak mengizinkan karakter "." dan "-". +no_admin_and_disable_registration=Anda tidak dapat menonaktifkan pendaftaran tanpa membuat sebuah akun admin. +err_empty_admin_password=Kata sandi admin tidak boleh kosong. +general_title=Pengaturan Umum Aplikasi +app_name=Nama Aplikasi +app_name_helper=Anda dapat menempatkan nama organisasi anda di sini. +repo_path=Path Root Repositori +repo_path_helper=Semua tanda repositori Git akan disimpan ke direktori ini. +lfs_path=Path Root LFS +lfs_path_helper=Berkas yang tersimpan dengan Git LFS akan disimpan ke direktori ini. Biarkan kosong untuk menonaktifkan LFS. +run_user=Jalankan Pengguna +run_user_helper=Pengguna harus memiliki akses ke Repository Root Path dan menjalankan Gitea. +domain=Domain +domain_helper=Ini mempengaruhi klon URL SSH. +ssh_port=Port SSH +ssh_port_helper=Nomor port yang server SSH anda sedang gunakan. Biarkan kosong untuk menonaktifkan. +http_port=Port HTTP +http_port_helper=Nomor port yang aplikasinya akan dengarkan. +app_url=URL Aplikasi +app_url_helper=Ini mempengaruhi klon URL HTTP/HTTPS dan beberapa notifikasi surel. +log_root_path=Path Log +log_root_path_helper=Direktori untuk menulis log berkas. +optional_title=Pengaturan Opsional +email_title=Pengaturan Layanan Surel +smtp_host=Host SMTP +smtp_from=Dari +smtp_from_helper=Surat dari alamat, RFC 5322. Hanya dapat menjadi alamat surel, atau format "Name" saja. +mailer_user=User Pengirim +mailer_password=Kata Sandi Pengirim +register_confirm=Aktifkan Konfirmasi Pendaftaran +mail_notify=Mengaktifkan Notifikasi Surat +server_service_title=Server dan Pengaturan Layanan Lainnya +offline_mode=Aktifkan Mode Offline +offline_mode_popup=Menonaktifkan CDN sehingga semua sumber daya berkas akan disajikan secara lokal. +disable_gravatar=Menonaktifkan Layanan Gravatar +disable_gravatar_popup=Menonaktifkan Gravatar dan sumber kustom. Semua avatar harus diunggah oleh pengguna atau avatar bawaan yang akan digunakan. +federated_avatar_lookup=Aktifkan Pencarian Avatar +federated_avatar_lookup_popup=Mengaktifkan pencarian avatar federasi menggunakan Libravatar. +disable_registration=Nonaktifkan Pendaftaran +disable_registration_popup=Menonaktifkan pendaftaran sendiri; hanya admin yang dapat membuat akun. +openid_signin=Aktifkan Login OpenID +openid_signin_popup=Bolehkan user login lewat openID +openid_signup=Aktifkan pendaftaran OpenID +openid_signup_popup=Aktifkan pendaftaran berbasis OpenID +enable_captcha=Mengaktifkan Captcha +enable_captcha_popup=Membutukan CAPTCHA untuk pendaftaran. +require_sign_in_view=Harus login untuk melihat halaman +require_sign_in_view_popup=Hanya pengguna yang masuk yang dapat melihat halaman; pengunjung hanya dapat melihat halaman masuk dan pendaftaran. +admin_setting_desc=Anda tidak memerlukan untuk membuat akun admin sekarang. Pengguna pertama yang terdaftar pada situs akan memperoleh akses admin secara otomatis. +admin_title=Pengaturan Akun Admin +admin_name=Nama pengguna +admin_password=Kata sandi +confirm_password=Konfirmasi Kata Sandi +admin_email=Surel Admin +install_btn_confirm=Memasang Gitea +test_git_failed=Tidak dapat menguji perintah 'git': %v +sqlite3_not_available=Versi anda saat ini tidak mendukung SQLite3, silahkan unduh versi binari resmi dari %s, BUKAN versi gobuild. +invalid_db_setting=Pengaturan basis data tidak valid: %v +invalid_repo_path=Path root repositori tidak valid: %v +run_user_not_match=User yang menjalankan program bukan user saat iniL %s -> %s +save_config_failed=Gagal menyimpan konfigurasi: %v +invalid_admin_setting=Pengaturan akun admin tidak valid: %v +install_success=Selamat datang! Terimakasih telah memilih Gitea. Selamat bersenang-senang, Dan, hati-hati! +invalid_log_root_path=Path root log tidak valid: %v +default_keep_email_private=Nilai Bawaan untuk Menyimpan Surel Pribadi +default_keep_email_private_popup=Ini adalah nilai bawaan untuk visibilitas dari alamat surel pengguna. Jika diatur ke true alamat surel dari semua pengguna akan disembunyikan hingga pengguna mengubah pengaturannya. +default_allow_create_organization=Nilai izin bawaan pengguna baru untuk membuat organisasi +default_allow_create_organization_popup=Ini adalah nilai izin bawaan yang akan ditetapkan untuk pengguna baru. Jika diatur ke true pengguna-pengguna baru akan diizinkan untuk membuat Organisasi. +default_enable_timetracking=Aktifkan pelacakan waktu secara bawaan +default_enable_timetracking_popup=Repositori akan memiliki pelacakan waktu yang diaktifkan secara bawaan tergantung pada pengaturan ini +no_reply_address=Alamat tidak-balas +no_reply_address_helper=Domain untuk alamat surel pengguna di log git jika pengguna menyimpan alamat surelnya secara pribadi. Misalnya pengguna 'joe' dan 'noreply.example.org' akan menjadi 'joe@noreply.example.org' [home] +uname_holder=Nama pengguna atau surel +password_holder=Kata Sandi +switch_dashboard_context=Alihkan Dasbor Konteks +my_repos=Repositori Saya +show_more_repos=Tampilkan repositori lainnya ... +collaborative_repos=Repositori Kolaboratif +my_orgs=Organisasi Saya +my_mirrors=Duplikat Saya +view_home=Lihat %s +search_repos=Cari sebuah repositori ... +issues.in_your_repos=Dalam repositori anda [explore] +repos=Repositori +users=Pengguna +organizations=Organisasi +search=Cari +repo_no_results=Tidak ada repositori yang cocok ditemukan. +user_no_results=Tidak ada pengguna yang cocok ditemukan. +org_no_results=Tidak ada organisasi yang cocok ditemukan. [auth] +create_new_account=Buat Akun +register_helper_msg=Sudah memiliki akun? Masuk sekarang! +social_register_helper_msg=Sudah memiliki akun? Gabung sekarang! +disable_register_prompt=Maaf, pendaftaran telah dinonaktifkan. Silakan hubungi administrator situs. +disable_register_mail=Maaf, Konfirmasi Surat Pendaftaran telah dinonaktifkan. +remember_me=Ingat Saya +forgot_password_title=Lupa Kata Sandi +forgot_password=Lupa kata sandi? +sign_up_now=Butuh akun? Daftar sekarang. +confirmation_mail_sent_prompt=Surel konfirmasi baru telah dikirim ke %s. Silakan periksa kotak masuk anda dalam %s ke depan untuk menyelesaikan proses pendaftaran. +reset_password_mail_sent_prompt=Surel konfirmasi telah dikirim ke %s. Silakan periksa kotak masuk anda dalam %s ke depan untuk menyelesaikan proses pengaturan ulang kata sandi. +active_your_account=Aktifkan Akun Anda +prohibit_login=Dilarang Masuk +prohibit_login_desc=Akun anda dilarang masuk, silakan hubungi administrator situs. +resent_limit_prompt=Maaf, anda telah meminta sebuah aktivasi surel beberapa saat lalu. Silakan tunggu 3 menit untuk mencoba lagi. +has_unconfirmed_mail=Hai %s, anda memiliki sebuah alamat surel yang belum dikonfirmasi (%s). Jika anda belum menerima surel konfirmasi atau perlu untuk mengirim ulang yang baru, silakan klik pada tombol di bawah. +resend_mail=Klik di sini untuk mengirim ulang surel aktivasi anda +email_not_associate=Alamat surel tidak terhubung dengan akun apapun. +send_reset_mail=Klik di sini untuk mengirim ulang surel pengaturan ulang kata sandi +reset_password=Atur Ulang Kata Sandi Anda +invalid_code=Maaf, kode konfirmasi anda telah kedaluwarsa atau tidak valid. +reset_password_helper=Klik di sini untuk mengatur ulang kata sandi anda +password_too_short=Panjang kata sandi tidak boleh kurang dari %d. +non_local_account=Akun non-lokal tidak dapat mengubah kata sandi melalui web antarmuka Gitea. +verify=Verifikasi +scratch_code=Kode coretan +use_scratch_code=Gunakan kode coretan +twofa_scratch_used=Anda telah menggunakan kode coretan anda. Anda telah dialihkan ke halaman pengaturan dua-faktor jadi anda boleh menghapus pendaftaran perangkat anda atau menghasilkan kode coretan yang baru. +twofa_passcode_incorrect=Kode akses anda tidak tepat. Jika anda salah menaruh perangkat anda, gunakanlah kode coretan untuk masuk. +twofa_scratch_token_incorrect=Kode coretan anda tidak tepat. +login_userpass=User / Password +login_openid=OpenID +openid_connect_submit=Sambungkan +openid_connect_title=Sambungkan ke akun yang sudah ada +openid_connect_desc=URI OpenID yang dimasukkan tidak dikenal sistem, anda bisa menggabungkan ke akun yang sudah ada. +openid_register_title=Buat akun baru +openid_register_desc=URI OpenID yang dimasukkann tidak dikenal sistem, anda bisa mengasosiasikan dengan akun baru di sini. +openid_signin_desc=Contoh URI: https://anne.me, bob.openid.org, gnusocial.net/cary +disable_forgot_password_mail=Maaf, pengaturan ulang kata sandi telah dinonaktifkan. Silakan hubungi administrator situs. [mail] +activate_account=Silakan aktifkan akun anda +activate_email=Verifikasi alamat surel anda +reset_password=Atur ulang kata sandi anda +register_success=Pendaftaran berhasil +register_notify=Selamat Datang di Gitea [modal] +yes=Ya +no=Tidak +modify=Ubah [form] +UserName=Nama Pengguna +RepoName=Nama repositori +Email=Alamat surel +Password=Kata Sandi +Retype=Ketik ulang kata sandi +SSHTitle=Nama kunci SSH +TeamName=Nama tim +AuthName=Nama otorisasi +AdminEmail=Surel admin +NewBranchName=Nama cabang baru +CommitSummary=Ringkasan Commit +CommitMessage=Pesan Commit +CommitChoice=Pilihan Commit +TreeName=Jalur berkas +Content=Konten +require_error=` tidak boleh kosong.` +alpha_dash_error=` harus berupa alfanumerik yang valid atau karakter tanda garis(-_).` +alpha_dash_dot_error=` harus berupa alfanumerik yang valid, karakter tanda garis(-_) atau titik.` +git_ref_name_error=` harus berupa nama referensi git yang terbentuk dengan baik.` +size_error=` harus berukuran %s.` +min_size_error=` harus berisi karakter %s setidaknya.` +max_size_error=` harus mengandung paling banyak %s karakter.` +email_error=` bukan alamat surel yang valid. ` +url_error=` bukan URL yang valid.` +include_error=` harus mengandung substring '%s'.` +unknown_error=Kesalahan yang tidak diketahui: +captcha_incorrect=Tanggapan CAPTCHA salah. +password_not_match=Kata sandi pilihan anda tidak cocok. +username_been_taken=Nama pengguna telah diambil. +repo_name_been_taken=Nama repositori telah digunakan. +org_name_been_taken=Nama organisasi telah diambil. +team_name_been_taken=Nama tim telah diambil. +team_no_units_error=Tim harus memiliki setidaknya 1 unit yang diaktifkan. +email_been_used=Surel telah digunakan. +openid_been_used=Alamat OpenID '%s' telah digunakan. +username_password_incorrect=Nama pengguna atau kata sandi salah. +enterred_invalid_repo_name=Harap pastikan bahwa nama repositori yang anda masukkan benar. +enterred_invalid_owner_name=Harap pastikan bahwa pemilik nama yang anda masukkan benar. +enterred_invalid_password=Harap pastikan bahwa kata sandi yang anda masukkan benar. +user_not_exist=Pengguna tidak ada. +last_org_owner=Menghapus pengguna terakhir dari tim pemilik tidak diizinkan karena harus selalu ada setidaknya satu pemilik pada organisasi tertentu. +cannot_add_org_to_team=Organisasi tidak dapat ditambahkan sebagai anggota tim. +invalid_ssh_key=Maaf, kami tidak dapat memverifikasi kunci SSH anda: %s +invalid_gpg_key=Maaf, kami tidak dapat memverifikasi kunci GPG anda: %s +unable_verify_ssh_key=Kunci ssh tidak dapat diverifikasi; silahkan periksa-kembali untuk setiap kesalahannya. +auth_failed=Otentikasi gagal: %v +still_own_repo=Akun anda masih memiliki kepemilikan setidaknya satu repositori; anda perlu menghapus atau mentransfernya terlebih dahulu. +still_has_org=Akun anda masih merupakan anggota setidaknya satu organisasi; anda harus meninggalkannya terlebih dahulu. +org_still_own_repo=Organisasi ini masih memiliki repositori; anda harus menghapus atau mentransfernya terlebih dahulu. +target_branch_not_exist=Target cabang tidak ada. [user] +change_avatar=Ubah avatar anda +join_on=Telah bergabung di +repositories=Repositori +activity=Aktivitas Publik +followers=Pengikut +starred=Membintangi repositori +following=Mengikuti +follow=Ikuti +unfollow=Berhenti Mengikuti +form.name_reserved=Nama pengguna '%s' dicadangkan. +form.name_pattern_not_allowed=Pola nama pengguna '%s' tidak diizinkan. [settings] +profile=Profil +password=Kata Sandi +security=Keamanan +avatar=Avatar +ssh_gpg_keys=Kunci SSH / GPG +social=Akun Sosial +applications=Aplikasi +orgs=Organisasi +repos=Repositori +delete=Hapus Akun +twofa=Otentikasi Dua-Faktor +account_link=Akun Eksternal +organization=Organisasi +public_profile=Profil Publik +profile_desc=Alamat surel anda publik dan akan digunakan untuk akun apapun yang terkait notifikasi dan operasi yang dibuat berdasarkan web melalui antarmuka web. +password_username_disabled=Pengguna non-lokal tidak diizinkan untuk mengubah nama pengguna mereka. Silakan kontak administrator sistem anda untuk lebih rinci. +full_name=Nama Lengkap +website=Situs Web +location=Lokasi +update_profile=Perbarui Profil +update_profile_success=Profil anda telah diperbarui. +change_username=Nama Pengguna Diubah +change_username_prompt=Perubahan ini akan mengubah tautan ke akun anda. +continue=Lanjutkan +cancel=Batalkan +lookup_avatar_by_mail=Mencari Avatar melalui surat +enable_custom_avatar=Gunakan Avatar Pilihan +choose_new_avatar=Pilih avatar baru +update_avatar=Perbarui Pengaturan Avatar +delete_current_avatar=Hapus Avatar Saat Ini +uploaded_avatar_not_a_image=Berkas yang diunggah bukanlah gambar. +update_avatar_success=Pengaturan avatar anda telah diperbarui. +change_password=Ganti Kata Sandi +old_password=Kata Sandi Saat Ini +new_password=Kata Sandi Baru +retype_new_password=Ketik Ulang Kata Sandi Baru +password_incorrect=Kata sandi saat ini tidak tepat. +change_password_success=Kata sandi anda telah berhasil diubah. Anda sekarang dapat masuk dengan menggunakan kata sandi baru anda. +password_change_disabled=Pengguna non-lokal tidak diizinkan untuk mengubah kata sandi melalui antarmuka web. +emails=Alamat Surel +manage_emails=Kelola alamat surel +manage_openid=Kelola alamat OpenID +email_desc=Alamat surel utama anda akan digunakan untuk notifikasi dan operasi lainnya. +primary=Utama +primary_email=Atur sebagai utama +delete_email=Hapus +email_deletion=Hapus Surel +email_deletion_desc=Menghapus alamat surel ini akan menghapus semua informasi terkait dari akun anda. Commit Git yang menggunakan surel ini akan tetap tidak berubah. Apakah anda ingin melanjutkan? +email_deletion_success=Surel telah berhasil dihapus! +openid_deletion=Penghapusan OpenID +openid_deletion_desc=Menghapus alamat OpenID ini dari akun anda akan mencegah anda masuk dengan OpenID. Apakah anda yakin ingin melanjutkan? +openid_deletion_success=OpenID telah berhasil dihapus! +add_new_email=Tambahkan alamat surel baru +add_new_openid=Tambahkan OpenID URI baru +add_email=Tambah surel +add_email_confirmation_sent=Sebuah surel konfirmasi baru telah dikirimkan ke '%s'. Tolong periksa kotak masuk anda dalam %s kedepan untuk mengkonfirmasi surel anda. +add_email_success=Alamat surel baru anda telah berhasil ditambahkan. +add_openid_success=Alamat OpenID baru anda telah berhasil ditambahkan. +keep_email_private=Jaga Alamat Surel Tersendiri +keep_email_private_popup=Alamat surel anda akan disembunyikan dari pengguna lainnya jika opsi ini ditetapkan. +openid_desc=Alamat OpenID anda akan membiarkan anda membagikan otentikasi ke pilihan penyedia anda +manage_ssh_keys=Mengelola Kunci SSH +manage_gpg_keys=Mengelola Kunci GPG +add_key=Tambahkan Kunci +ssh_desc=Ini adalah kunci SSH yang terkait dengan akun anda. Karena kunci ini mengizinkan siapapun menggunakan mereka untuk memperoleh akses ke gudang penyimpanan anda, itu sangat penting untuk anda memastikan bahwa anda mengenali mereka. +gpg_desc=Ini adalah kunci GPG yang terkait dengan akun anda. Karena kunci ini mengizinkan commit untuk diverifikasi, itu sangat penting bahwa anda menjaga kunci pribadi yang sesuai aman. +ssh_helper=Butuh bantuan? Lihatlah pada petunjuk GitHub untuk menciptakan kunci SSH anda sendiri atau pecahkan permasalahan umum yang mungkin anda hadapi menggunakan SSH. +gpg_helper=Butuh bantuan? Lihatlah pada petunjuk GitHub tentang GPG. +add_new_key=Tambahkan Kunci SSH +add_new_gpg_key=Tambahkan Kunci GPG +ssh_key_been_used=Kunci publik ini telah dipergunakan. +ssh_key_name_used=Sebuah kunci publik dengan nama yang sama sudah ada. +gpg_key_id_used=Sebuah kunci publik GPG dengan id yang sama sudah ada. +gpg_no_key_email_found=Tidak ada surel apapun yang dilampirkan ke kunci GPG dapat ditemukan. +key_id=ID Kunci +key_name=Nama Kunci +key_content=Konten +add_key_success=Kunci SSH anda '%s' telah ditambahkan. +add_gpg_key_success=Kunci GPG anda '%s' telah ditambahkan. +delete_key=Hapus +ssh_key_deletion=Penghapusan Kunci SSH +gpg_key_deletion=Penghapusan Kunci GPG +ssh_key_deletion_desc=Menghapus kunci SSH ini akan mencabut semua akses yang menggunakan kunci SSH ini untuk akun anda. Apakah anda ingin melanjutkan? +gpg_key_deletion_desc=Menghapus kunci GPG ini akan menghapus verifikasi semua commit yang ditandai dengan kunci GPG ini. Apakah anda yakin untuk melanjutkan? +ssh_key_deletion_success=Kunci SSH telah dihapus. +gpg_key_deletion_success=Kunci GPG telah dihapus. +add_on=Menambahkan +valid_until=Valid sampai +valid_forever=Valid selamanya +last_used=Terakhir digunakan pada +no_activity=Tidak ada aktivitas terbaru +can_read_info=Baca +can_write_info=Tulis +key_state_desc=Kunci ini telah digunakan 7 hari yang lalu +token_state_desc=Token ini telah digunakan dalam 7 hari terakhir +show_openid=Tampilkan pada profil +hide_openid=Sembunyikan dari profil +ssh_disabled=SSH dinonaktifkan +manage_social=Kelola Akun Sosial Yang Terhubung +social_desc=Ini adalah daftar akun sosial yang terhubung. Untuk alasan keamanan, silakan pastikan anda mengenali semua entri ini, karena dapat digunakan untuk masuk ke akun anda. +unbind=Lepas ikatan +unbind_success=Akun sosial telah diputus ikatannya dari akun anda. +manage_access_token=Kelola Akses Token Pribadi +generate_new_token=Hasilkan Token Baru +tokens_desc=Token yang telah anda hasilkan dapat digunakan untuk mengakses API Gitea. +new_token_desc=Masing-masing token akan memiliki akses penuh ke akun anda. +token_name=Nama Token +generate_token=Hasilkan Token +generate_token_success=Akses token anda telah berhasil dihasilkan! Pastikan untuk menyalinnya sekarang, karena anda tidak dapat melihatnya lagi nanti! +delete_token=Hapus +access_token_deletion=Penghapusan Akses Token Pribadi +access_token_deletion_desc=Menghapus akses token pribadi ini akan mencabut akses untuk aplikasi apapun yang menggunakan token ini. Apakah anda ingin melanjutkan? +delete_token_success=Akses Token Pribadi telah dihapus. Jangan lupa untuk memperbarui aplikasi apapun menggunakan token ini. +twofa_desc=Gitea mendukung otentikasi dua-faktor untuk meningkatkan keamanan akun anda. +twofa_is_enrolled=Akun anda saat ini terdaftar dalam otentikasi dua-faktor. +twofa_not_enrolled=Akun anda saat ini tidak terdaftar dalam otentikasi dua-faktor. +twofa_disable=Menonaktifkan otentikasi dua-faktor +twofa_scratch_token_regenerate=Memperbarui scratch token +twofa_scratch_token_regenerated=Scratch token anda sudah diperbarui. Itu sekarang %s. Simpan itu ditempat yang aman. +twofa_enroll=Mendaftar ke otentikasi dua-faktor +twofa_disable_note=Jika diperlukan, anda dapat menonaktifkan otentikasi dua-faktor. +twofa_disable_desc=Menonaktifkan otentikasi dua-faktor akan membuat akun anda kurang aman. Apakah anda yakin anda ingin melanjutkan? +regenerate_scratch_token_desc=Jika anda kehilangan token coretan anda, atau telah menggunakannya untuk masuk, anda dapat meresetnya disini. +twofa_disabled=Otentikasi dua-faktor telah dinonaktifkan. +scan_this_image=Pindai gambar ini dengan aplikasi otentikasi: +or_enter_secret=Atau masukkan rahasia: %s +then_enter_passcode=Dan masukkan kode sandi yang aplikasi berikan kepada anda: +passcode_invalid=Kode sandi tidak sah, Coba lagi. +twofa_enrolled=Akun anda sekarang telah didaftarkan didalam dua-faktor otentikasi. Pastikan untuk menyimpan scratch token anda (%s), karena itu hanya akan ditunjukkan satu kali! +manage_account_links=Mengatur tautan akun +manage_account_links_desc=Akun eksternal tertaut ke akun ini +account_links_not_available=Saat ini tidak ada akun eksternal yang tertaut ke akun ini +remove_account_link=Hapus akun yang tertaut +remove_account_link_desc=Menghapus akun yang tertaut akan mencabut semua akses terkait menggunakan akun ini. Apakah anda ingin melanjutkan? +remove_account_link_success=Tautan akun telah berhasil dihapus! +orgs_none=Anda bukan anggota dari organisasi apapun. +repos_none=Anda tidak memiliki repositori apapun +delete_account=Hapus Akun Anda +delete_prompt=Operasi ini akan menghapus akun anda secara permanen. Dan, ini TIDAK DAPAT dibatalkan! +confirm_delete_account=Konfirmasi Penghapusan +delete_account_title=Penghapusan Akun +delete_account_desc=Apakah anda yakin ingin menghapus secara permanen akun ini? [repo] +owner=Pemilik +repo_name=Nama Repositori +repo_name_helper=Nama repositori yang baik terdiri dari kata kunci yang pendek, mudah diingat, dan unik. +visibility=Jarak pandang +visiblity_helper=Gudang penyimpanan ini adalah Pribadi +visiblity_helper_forced=Sistem administrator anda telah memaksa semua gudang penyimpanan baru untuk menjadi Pribadi +visiblity_fork_helper=(Perubahan pada nilai ini akan mempengaruhi semua percabangan) +clone_helper=Butuh bantuan untuk menggandakan? Kunjungi Bantuan! +fork_repo=Cabang Gudang penyimpanan +fork_from=Cabang Dari +fork_visiblity_helper=Anda tidak dapat mengubah visibilitas dari gudang penyimpanan yang bercabang. +repo_desc=Deskripsi +repo_lang=Bahasa +repo_gitignore_helper=Pilih pola .gitignore +license=Lisensi +license_helper=Pilih sebuah berkas lisensi +readme_helper=Pilih template readme +auto_init=Tetapkan gudang penyimpanan ini dengan berkas yang dipilih dan pola +create_repo=Buat Gudang penyimpanan +mirror_prune_desc=Menghapus setiap jarak jauh-melacak referensi yang tidak lagi ada di remote +mirror_interval=Interval duplikat (waktu unit yang valid "h", "m", "s") +mirror_interval_invalid=Interval duplikat tidak valid +mirror_address=Alamat Duplikat +mirror_address_desc=Silakan sertakan kredensial pengguna yang diperlukan di dalam alamat. +mirror_last_synced=Terakhir Disinkronkan +watchers=Pengamat +forks=Garpu +pick_reaction=Pilih reaksimu +reactions_more=dan %d lainnya +form.reach_limit_of_creation=Anda telah mencapai batas dari repositori %d. +form.name_reserved=Nama repositori '%s' dicadangkan. +form.name_pattern_not_allowed=Nama pola repositori '%s' tidak diizinkan. +need_auth=Perlu Otorisasi +migrate_type=Tipe Migrasi +migrate_type_helper=Repositori ini akan menjadi sebuah duplikat +migrate_repo=Migrasi Repositori +migrate.clone_address=Alamat Klon +migrate.clone_address_desc=Ini dapat menjadi URL HTTP/HTTPS/GIT +migrate.clone_local_path=atau path local server +migrate.permission_denied=Anda tidak diizinkan untuk mengimpor repositori lokal. +migrate.invalid_local_path=Path lokal tidak valid; tidak ada atau bukan merupakan direktori. +migrate.failed=Migrasi gagal: %v +migrate.lfs_mirror_unsupported=Menduplikasi objek LFS tidak didukung - gunakan 'git lfs fetch --all' dan 'git lfs push --all' sebagai gantinya. +mirror_from=duplikat dari +forked_from=fork dari +fork_from_self=Anda tidak dapat fork repositori yang anda miliki! +copy_link=Salin +copy_link_success=Disalin! +copy_link_error=Tekan ⌘-C atau Ctrl-C untuk menyalin +copied=Disalin OK +star=Bintang +fork=Garpu +download_archive=Unduh repositori ini +no_desc=Tidak ada Deskripsi +quick_guide=Panduan Cepat +clone_this_repo=Klon repositori ini +create_new_repo_command=Membuat repositori baru pada baris perintah +bare_message=Repositori ini tidak berisi konten apapun. +code=Kode +code.desc=Code adalah dimana kode disimpan +branch=Cabang +tree=Pohon +filter_branch_and_tag=Filter cabang atau tag +branches=Cabang +issues=Masalah +pulls=Tarik Permintaan +labels=Label +milestones=Tonggak +commits=Melakukan +releases=Rilis +file_history=Riwayat +file_view_raw=Lihat Mentah +file_too_large=Berkas ini terlalu besar untuk ditampilkan +video_not_supported_in_browser=Peramban anda tidak mendukung video tag HTML5. +stored_lfs=Tersimpan dengan GIT LFS +editor.new_file=Berkas baru +editor.upload_file=Unggah berkas +editor.edit_file=Menyunting berkas +editor.preview_changes=Tinjau Perubahan +editor.cannot_edit_non_text_files=Tidak dapat menyunting berkas binari dari antarmuka web +editor.edit_this_file=Menyunting berkas ini +editor.must_be_on_a_branch=Anda harus berada pada sebuah cabang untuk membuat atau mengusulkan perubahan ke berkas ini +editor.fork_before_edit=Anda harus fork repositori ini sebelum mengubah berkasnya +editor.delete_this_file=Hapus berkas ini +editor.must_have_write_access=Anda harus memiliki akses menulis untuk membuat atau mengusulkan perubahan ke berkas ini +editor.file_delete_success=File '%s' telah berhasil dihapus! +editor.name_your_file=Nama file anda... +editor.filename_help=Untuk menambahkan direktori, ketik saja itu dan tekan /. Untuk menghilangkan direktori, pergi ke permulaan dari bidang dan tekan backspace. +editor.commit_message_desc=Tambahkan sebuah deskripsi opsional yang diperpanjang... +editor.filename_cannot_be_empty=Nama file tidak boleh kosong. +editor.file_is_a_symlink=File '%s' adalah sebuah symlink yang tidak dapat dimodifikasi dari editor web +editor.filename_is_a_directory=Nama file '%s' adalah sebuah direktori yang sudah ada di repositori ini. +editor.file_editing_no_longer_exists=File '%s' yang sedang anda edit tidak lagi ada di repositori. +editor.file_already_exists=Sebuah berkas dengan nama '%s' sudah ada didalam gudang penyimpanan. +editor.no_changes_to_show=Tidak ada perubahan untuk ditampilkan. +editor.fail_to_update_file=Gagal untuk memperbarui/buat berkas '%s' dengan kesalahan: %v +editor.unable_to_upload_files=Gagal untuk mengunggah berkas ke '%s' dengan kesalahan: %v +editor.upload_files_to_dir=Unggah berkas ke '%s' +editor.cannot_commit_to_protected_branch=Tidak dapat berkomitmen padang cabang yang dilindungi '%s'. +commits.desc=Commits menunjukkan riwayat perubahan kode +commits.commits=Melakukan +commits.search=Cari commits +commits.find=Telusuri +commits.search_all=Semua cabang +commits.author=Penulis +commits.message=Pesan +commits.date=Tanggal +commits.older=Lebih lama +commits.newer=Terbaru +commits.signed_by=Ditandai oleh +commits.gpg_key_id=ID kunci GPG +ext_issues=Masalah Eks +ext_issues.desc=Masalah Eks menautkan ke sebuah halaman pengelola masalah eksternal +issues.desc=Masalahnya adalah tempat untuk mengelola tugas dan kerusakan +issues.new=Masalah Baru +issues.new.labels=Label +issues.new.no_label=Tidak ada Label +issues.new.clear_labels=Label yang jelas +issues.new.milestone=Tolak ukur waktu +issues.new.no_milestone=Tidak Ada Milestone +issues.new.clear_milestone=Bersihkan milestone +issues.new.open_milestone=Buka Milestone +issues.new.closed_milestone=Tutup Milestone +issues.new.clear_assignee=Jelas menerima +issues.new.no_assignee=Tidak ada penerima +issues.no_ref=Tidak Ada Cabang/Tag Ditentukan +issues.create=Buat Masalah +issues.new_label=Label Baru +issues.new_label_placeholder=Nama label... +issues.create_label=Buat Label +issues.label_templates.title=Muat sebuah label yang telah ditentukan +issues.label_templates.info=Belum ada label apapun. Anda dapat mengklik tombol "New Label" di atas untuk membuat atau menggunakan yang telah ditentukan di bawah. +issues.label_templates.helper=Pilih set label +issues.label_templates.use=Gunakan set label ini +issues.label_templates.fail_to_load_file=Gagal untuk memuat berkas contoh label '%s': %v +issues.add_label_at=menambahkan
%s
label %s +issues.remove_label_at=menghapus
%s
label %s +issues.add_milestone_at=`telah menambahkan ini ke %s milestone %s` +issues.change_milestone_at=`telah mengubah milestone dari %s ke %s %s` +issues.remove_milestone_at=`telah menghapus ini dari %s milestone %s` +issues.deleted_milestone=`(dihapus)` +issues.add_assignee_at=`telah ditugaskan oleh %s %s` +issues.remove_assignee_at=`hapus tugas mereka %s` +issues.change_title_at=`telah mengubah judul dari %s ke %s %s` +issues.delete_branch_at=`telah dihapus cabang %s %s` +issues.open_tab=%d Terbuka +issues.close_tab=%d Tertutup +issues.filter_label=Label +issues.filter_label_no_select=Tidak ada label yang dipilih +issues.filter_milestone_no_select=Tidak ada milestone yang dipilih +issues.filter_assginee_no_select=Tidak ada Penerima yang dipilih +issues.filter_type=Tipe +issues.filter_type.all_issues=Semua masalah +issues.filter_type.assigned_to_you=Ditugaskan kepada anda +issues.filter_type.created_by_you=Dibuat oleh anda +issues.filter_type.mentioning_you=Menyebutkan anda +issues.filter_sort=Sortir +issues.filter_sort.latest=Terbaru +issues.filter_sort.oldest=Terlama +issues.filter_sort.recentupdate=Baru saja diperbarui +issues.filter_sort.leastupdate=Baru diperbarui +issues.filter_sort.mostcomment=Komentar terbanyak +issues.filter_sort.leastcomment=Komentar paling sedikit +issues.action_open=Buka +issues.action_close=Tutup +issues.action_label=Label +issues.previous=Sebelumnya +issues.next=Selanjutnya +issues.open_title=Buka +issues.closed_title=Tertutup +issues.num_comments=%d komentar +issues.delete_comment_confirm=Apakah anda yakin anda ingin menghapus komentar ini? +issues.no_content=Belum ada konten. +issues.close_issue=Tutup +issues.close_comment_issue=Komentar dan tutup +issues.reopen_issue=Buka kembali +issues.reopen_comment_issue=Komentar dan buka kembali +issues.create_comment=Komentar +issues.sign_in_require_desc=Masuk untuk bergabung dengan percakapan ini. +issues.edit=Sunting +issues.cancel=Batal +issues.save=Simpan +issues.label_title=Nama label +issues.label_color=Warna label +issues.label_count=%d label +issues.label_open_issues=%d masalah terbuka +issues.label_edit=Sunting +issues.label_delete=Hapus +issues.label_modify=Modifikasi Label +issues.label_deletion=Penghapusan Label +issues.label_deletion_desc=Menghapus label ini akan menghapusnya dari semua masalah. Apakah anda yakin anda ingin melanjutkan? +issues.label_deletion_success=Label telah berhasil dihapus! +issues.label.filter_sort.by_size=Ukuran +issues.attachment.open_tab=`Klik untuk melihat "%s" di tab baru` +issues.attachment.download=`Klik untuk mengunduh "%s"` +issues.subscribe=Berlangganan +issues.unsubscribe=Berhenti berlangganan +issues.tracker=Pelacak waktu +issues.start_tracking_short=Mulai +issues.start_tracking=Mulai melacak waktu +issues.start_tracking_history=`mulai bekerja %s` +issues.tracking_already_started=`Anda telah memulai pelacakan waktu pada masalah ini!` +issues.stop_tracking=Berhenti +issues.add_time=Menambahkan waktu secara manual +issues.add_time_sum_to_small=Tidak ada waktu yang masuk +issues.cancel_tracking_history=`batalkan pelacakan waktu %s` +issues.time_spent_total=Total waktu yang disisihkan +pulls.desc=Tarik pengelolaan kode tinjauan anda dan gabungkan permintaan +pulls.new=Permintaan Tarik Baru +pulls.compare_changes=Bandingkan Perubahan +pulls.compare_changes_desc=Bandingkan dua cabang dan buatlah permintaan tarik untuk perubahan. +pulls.compare_base=dasar +pulls.compare_compare=bandingkan +pulls.filter_branch=Penyaringan cabang +pulls.no_results=Hasil tidak ditemukan. +pulls.nothing_to_compare=Tidak ada yang dibandingkan karena dasar dan kepala cabang impas. +pulls.has_pull_request=`Sudah ada permintaan tarik di antara dua target: %[2]s#%[3]d` +pulls.create=Buat Permintaan Tarik +pulls.title_desc=ingin menggabungkan commit %[1]d dari %[2]s menjadi %[3]s +pulls.merged_title_desc=commit %[1]d telah digabungkan dari %[2]s menjadi %[3]s %[4]s +pulls.tab_conversation=Percakapan +pulls.tab_files=Berkas diubah +pulls.reopen_to_merge=Tolong buka kembali permintaan tarik ini untuk melaksanakan penggabungan. +pulls.merged=Menggabungkan +pulls.has_merged=Permintaan tarik ini telah berhasil digabung. +pulls.data_broken=Data dari permintaan tarik telah rusak karena penghapusan informasi fork. +pulls.is_checking=Pemeriksaan konflik masih berlangsung; harap segarkan halaman dalam beberapa saat. +pulls.can_auto_merge_desc=Permintaan tarik ini dapat digabung secara otomatis. +pulls.cannot_auto_merge_desc=Permintaan tarik ini tidak dapat digabung secara otomatis karena ada konflik. +pulls.cannot_auto_merge_helper=Harap menggabungkan secara manual untuk menyelesaikan konflik. +pulls.no_merge_desc=Permintaan tarik ini tidak dapat digabung karena tidak ada opsi penggabungan yang diaktifkan. +pulls.no_merge_helper=Untuk menggabungkan permintaan tarik ini aktifkan setidaknya opsi penggabungan di pengaturan repositori atau gabungkan permintaan tarik secara manual. +pulls.merge_pull_request=Gabungkan Permintaan Tarik +pulls.rebase_merge_pull_request=Membuat Ulang Dasar dan Menggabungkan +pulls.squash_merge_pull_request=Tindih dan Gabungkan +pulls.invalid_merge_option=Anda tidak dapat menggunakan opsi penggabungan ini untuk permintaan tarik ini +pulls.open_unmerged_pull_exists=`Anda tidak dapat melaksanakan operasi yang dibuka kembali karena sudah ada permintaan tarik yang dibuka (#%d) dari repositori yang sama dengan informasi penggabungan yang sama dan sedang menunggu untuk penggabungan.` +milestones.new=Milestone Baru +milestones.open_tab=%d Terbuka +milestones.close_tab=%d Tertutup +milestones.closed=Tertutup %s +milestones.no_due_date=Tidak ada jatuh tempo +milestones.open=Buka +milestones.close=Tutup +milestones.new_subheader=Buat milestone untuk mengatur masalah anda. +milestones.create=Buat Milestone +milestones.title=Judul +milestones.desc=Deskripsi +milestones.due_date=Jatuh Tempo (opsional) +milestones.clear=Bersihkan +milestones.invalid_due_date_format=Format jatuh tempo tidak valid; harus berupa 'yyyy-mm-dd'. +milestones.create_success=Milestone '%s' telah berhasil dibuat! +milestones.edit=Ubah Milestone +milestones.edit_subheader=Gunakan keterangan yang bagus untuk milestone sehingga orang-orang tidak akan bingung. +milestones.cancel=Batal +milestones.modify=Ubah Milestone +milestones.edit_success=Perubahan dari milestone '%s' telah berhasil disimpan! +milestones.deletion=Penghapusan Milestone +milestones.deletion_desc=Menghapus milestone ini akan menghapusnya dari semua masalah terkait. Apakah anda ingin melanjutkan? +milestones.deletion_success=Milestone telah berhasil dihapus! +milestones.filter_sort.closest_due_date=Jatuh tempo terdekat +milestones.filter_sort.furthest_due_date=Jatuh tempo terjauh +milestones.filter_sort.least_complete=Paling tidak lengkap +milestones.filter_sort.most_complete=Paling lengkap +milestones.filter_sort.most_issues=Paling banyak masalah +milestones.filter_sort.least_issues=Paling sedikit masalah +ext_wiki=Eks Wiki +ext_wiki.desc=Eks Wiki menautkan ke sistem eksternal wiki +wiki.welcome_desc=Wiki memungkinkan anda dan rekan kerja anda dengan mudah membuat dokumen proyek anda. +wiki.desc=Wiki adalah tempat untuk menyimpan dokumentasi +wiki.create_first_page=Membuat halaman pertama +wiki.page=Halaman +wiki.new_page=Membuat Halaman Baru +wiki.default_commit_message=Tulis catatan mengenai pembaruan halaman ini (opsional). +wiki.save_page=Simpan Halaman +wiki.edit_page_button=Menyunting +wiki.new_page_button=Halaman Baru +wiki.delete_page_button=Hapus Halaman +wiki.delete_page_notice_1=Ini akan menghapus halaman "%s". Mohon pastikan anda ingin menghapus halaman ini. +wiki.page_already_exists=Halaman wiki dengan nama yang sama telah ada. +wiki.reserved_page=Nama halaman wiki %s dicadangkan, silahkan pilih nama yang berbeda. +wiki.last_updated=Pembaruan terakhir %s +activity=Kegiatan +activity.period.filter_label=Periode: +activity.period.daily=1 hari +activity.period.halfweekly=3 hari +activity.period.weekly=1 minggu +activity.period.monthly=1 bulan +activity.overview=Tinjauan +activity.title.user_1=%d pengguna +activity.title.prs_opened_by=%s Dikemukakan oleh %s +activity.merged_prs_label=Bergabung +activity.opened_prs_label=Dikemukakan +activity.active_issues_count_1=%d Masalah Aktif +activity.closed_issues_count_1=Masalah tertutup +activity.title.issues_1=%d Masalah +activity.title.issues_closed_by=%s ditutup oleh %s +activity.title.issues_created_by=%s dibuat oleh %s +activity.closed_issue_label=Tertutup +activity.new_issues_count_1=Masalah Baru +activity.new_issue_label=Terbuka +activity.title.unresolved_conv_1=%d percakapan yang belum diselesaikan +activity.unresolved_conv_desc=Daftar dari semua masalah yang lama dan pull request yang telah diubah baru-baru ini tapi belum diselesaikan. +activity.unresolved_conv_label=Buka +activity.title.releases_1=%d Rilis +activity.title.releases_n=%d Rilis +activity.title.releases_published_by=%s dikeluarkan oleh %s +activity.published_release_label=Dikeluarkan +search=Cari +search.search_repo=Cari repositori +search.results=Cari hasil untuk "%s" dalam %s +settings=Pengaturan +settings.desc=Pengaturan dimana anda dapat mengelola pengaturan untuk repositori +settings.options=Opsi +settings.collaboration=Kolaborasi +settings.collaboration.write=Tulis +settings.collaboration.read=Baca +settings.collaboration.undefined=Tidak terdefinisi +settings.basic_settings=Pengaturan Dasar +settings.mirror_settings=Pengaturan Duplikat +settings.sync_mirror=Sinkronkan Sekarang +settings.mirror_sync_in_progress=Sinkronisasi duplikat sedang berlangsung. Silakan segarkan kembali halaman untuk memeriksa kembali dalam satu menit. +settings.site=Situs Resmi +settings.update_settings=Perbarui Pengaturan +settings.advanced_settings=Pengaturan Lanjutan +settings.wiki_desc=Aktifkan sistem wiki +settings.use_internal_wiki=Gunakan wiki yang terpasang +settings.use_external_wiki=Gunakan wiki eksternal +settings.external_wiki_url=URL Eksternal Wiki +settings.external_wiki_url_error=URL Eksternal Wiki tidak valid +settings.external_wiki_url_desc=Pengunjung akan diarahkan ke URL yang ditentukan ketika mereka mengklik pada tab. +settings.issues_desc=Aktifkan pelacak masalah +settings.use_internal_issue_tracker=Gunakan pelacak masalah builtin +settings.use_external_issue_tracker=Gunakan pelacak masalah eksternal +settings.external_tracker_url=URL Pelacak Masalah Eksternal +settings.external_tracker_url_error=URL Pelacak Masalah Eksternal Tidak berlaku +settings.external_tracker_url_desc=Pengunjung akan diarahkan ke URL yang ditentukan ketika mereka mengklik pada tab. +settings.enable_timetracker=Mengaktifkan pelacak waktu +settings.allow_only_contributors_to_track_time=Izinkan hanya kontributor untuk melacak waktu +settings.pulls_desc=Mengaktifkan permintaan menarik untuk menerima sumbangan publik +settings.pulls.ignore_whitespace=Mengabaikan perubahan spasi ketika memeriksa konflik +settings.pulls.allow_merge_commits=Izinkan penggabungan melakukan +settings.pulls.allow_squash_commits=Biarkan labu sebelum melakukan penggabungan +settings.danger_zone=Zona Bahaya +settings.new_owner_has_same_repo=Pemilik baru sudah memiliki repositori dengan nama yang sama. Silakan pilih nama lain. +settings.convert_desc=Anda dapat mengubah cermin ini menjadi repositori biasa. Ini tidak dapat dibatalkan. +settings.convert_notices_1=- Operasi ini akan mengubah repositori ini cermin biasa repositori dan tidak dapat dibatalkan. +settings.convert_confirm=Konfirmasi Konversi +settings.convert_succeed=Repositori telah dikonversi ke repositori biasa. +settings.transfer=Transfer Kepemilikan +settings.transfer_desc=Transfer repositori ini ke pengguna lain atau ke sebuah organisasi di mana anda memiliki hak admin. +settings.transfer_notices_1=- Anda akan kehilangan akses jika pemilik baru adalah individu pengguna. +settings.transfer_notices_2=- Anda akan mempertahankan akses jika pemilik baru suatu organisasi dan jika anda salah satu dari pemilik. +settings.transfer_form_title=Silakan masukkan informasi berikut untuk mengkonfirmasi operasi anda: +settings.wiki_delete_notices_1=- Ini akan menghapus dan menonaktifkan wiki untuk %s +settings.wiki_deletion_success=Repositori wiki data telah terhapus. +settings.delete=Menghapus Repositori Ini +settings.delete_desc=Setelah Anda menghapus repositori, tidak akan kembali. Harap tertentu. +settings.delete_notices_2=- Operasi ini akan secara permanen menghapus semua yang ada didalam %s gudang penyimpanan, termasuk kode, masalah, komentar, wiki, dan asosiasi kolaborator. +settings.delete_notices_fork_1=- Semua cabang akan menjadi gudang penyimpanan yang bebas setelah penghapusan. +settings.deletion_success=Gudang penyimpanan telah dihapus. +settings.update_settings_success=Opsi gudang penyimpanan telah diperbarui. +settings.transfer_owner=Pemilik Baru +settings.make_transfer=Membuat Pengiriman +settings.transfer_succeed=Kepemilikan gudang penyimpanan telah dikirim. +settings.confirm_delete=Konfirmasi Penghapusan +settings.add_collaborator=Tambahkan Kolaborator Baru +settings.add_collaborator_success=Kolaborator Baru telah ditambahkan. +settings.delete_collaborator=Hapus +settings.collaborator_deletion=Penghapusan Kolaborator +settings.collaborator_deletion_desc=Pengguna ini tidak akan lagi memiliki akses kolaborasi untuk gudang penyimpanan ini setelah penghapusan. Apakah anda ingin melanjutkan? +settings.remove_collaborator_success=Kolaborator telah dihapus. +settings.search_user_placeholder=Telusuri pengguna... +settings.org_not_allowed_to_be_collaborator=Organisasi tidak diizinkan untuk ditambahkan sebagai kolaborator. +settings.user_is_org_member=Pengguna adalah anggota organisasi yang tidak bisa ditambahkan sebagai kolaborator. +settings.add_webhook=Tambahkan Webhook +settings.hooks_desc=Webhook mirip seperti pemicu event HTTP POST dasar. Kapanpun sesuatu terjadi didalam Gitea, kami akan mengirimkan notifikasi ke host target. Pelajari lebih lanjut di petunjuk webhooks. +settings.webhook_deletion=Hapus Webhook +settings.webhook_deletion_desc=Menghapus webhook ini akan menghilangkan informasinya dan semua riwayat pengiriman. Apakah anda yakin untuk melanjutkan? +settings.webhook_deletion_success=Webhook telah berhasil dihapus! +settings.webhook.test_delivery=Percobaan Pengiriman +settings.webhook.test_delivery_desc=Kirim sebuah pengiriman event push palsu untuk menguji pengaturan webhook anda +settings.webhook.test_delivery_success=Percobaan webhook telah ditambahkan kedalam antrian pengiriman. Itu mungkin memakan waktu beberapa detik sebelum ditampilkan didalam riwayat pengiriman. +settings.webhook.request=Permintaan +settings.webhook.response=Tanggapan +settings.webhook.headers=Tajuk +settings.webhook.payload=Muatan +settings.webhook.body=Tubuh +settings.githooks_desc=Git Hook didukung oleh Git sendiri. Anda bisa mengedit berkas dari hook yang didukung didalam daftar dibawah ini untuk melakukan operasi buatan. +settings.githook_edit_desc=Jika hook tidak aktif, konten sampel akan dipaparkan. Meninggalkan konten dengan nilai kosong akan menonaktifkan hook ini. +settings.githook_name=Nama Hook +settings.githook_content=Konten Hook +settings.update_githook=Perbarui Hook +settings.add_webhook_desc=Gitea akan mengirimkan sebuah permintaan POST ke URL yang anda tetapkan, bersama dengan informasi tentang event yang terjadi. Anda juga bisa menentukan format data apa yang ingin anda terima selama memicu hook tersebut (JSON, x-www-form-urlencoded, XML, dll). Informasi lebih lanjut bisa ditemukan didalam petunjuk webhooks kami. +settings.content_type=Tipe Konten +settings.secret=Rahasia +settings.slack_username=Nama pengguna +settings.discord_username=Nama pengguna +settings.slack_color=Warna +settings.event_desc=Kapan seharusnya webhook ini dipicu? +settings.event_push_only=Hanya event push. +settings.event_send_everything=Saya butuh semuanya. +settings.event_choose=Biarkan saya memilih apa yang saya butuhkan. +settings.event_create=Menciptakan +settings.event_create_desc=Cabang, atau tag yang dibuat +settings.event_pull_request=Tarik permintaan +settings.event_pull_request_desc=Permintaan tarik dibuka, ditutup, kembali dibuka, diedit, diberi, belum ditetapkan, label diperbarui, label dibersihkan, atau disinkronkan. +settings.event_push=Dorong +settings.event_push_desc=Git mendorong ke repositori +settings.event_repository_desc=Repositori dibuat atau dihapus +settings.active=Aktif +settings.active_helper=Informasi tentang peristiwa yang dipicu hook akan dikirim juga. +settings.add_hook_success=Webhook baru telah ditambahkan. +settings.update_webhook=Perbarui Webhook +settings.update_hook_success=Webhook telah diperbarui. +settings.delete_webhook=Menghapus Webhook +settings.recent_deliveries=Pengiriman Terakhir +settings.protected_branch_deletion_desc=Siapa pun dengan izin menulis akan mampu mendorong langsung ke cabang ini. Apakah anda yakin? +settings.default_branch_desc=Cabang default dianggap sebagai "dasar" cabang di repositori anda terhadap semua permintaan tarik dan kode berkomitmen secara otomatis, kecuali jika anda menentukan cabang berbeda. +settings.choose_branch=Memilih cabang... +settings.no_protected_branch=Tidak ada cabang yang dilindungi +diff.browse_source=Telusuri Sumber +diff.parent=orang tua +diff.commit=melakukan +diff.data_not_available=Konten Diff Tidak Tersedia +diff.show_diff_stats=Menunjukkan Perbedaan Statistik +diff.show_split_view=Tampilan split +diff.show_unified_view=Pandangan Terpadu +diff.view_file=Melihat File +diff.file_suppressed=File diff ditekan karena terlalu besar +diff.too_many_files=Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam hal ini di diff +releases.desc=Rilis adalah tempat untuk mengelola versi dari proyek anda +release.releases=Rilis +release.new_release=Baru Rilis +release.draft=Rancangan +release.stable=Stabil +release.edit=edit +release.source_code=Sumber kode +release.new_subheader=Mempublikasikan rilis untuk melacak versi proyek. +release.edit_subheader=Rinci changelog dapat membantu pengguna memahami apa yang telah berubah. +release.tag_name=Tag nama +release.target=Target +release.tag_helper=Memilih tag yang sudah ada, atau membuat tag baru. +release.title=Judul +release.content=Konten +release.write=Menulis +release.preview=Pratinjau +release.loading=Pemuatan... +release.prerelease_desc=Ini adalah pra-rilis +release.prerelease_helper=Kami akan menunjukkan bahwa rilis ini tidak siap-diproduksi. +release.cancel=Membatalkan +release.publish=Mempublikasikan Rilis +release.save_draft=Simpan Draft +release.edit_release=Edit Rilis +release.delete_release=Hapus Rilis ini +release.deletion=Penghapusan Rilis +release.deletion_desc=Menghapus rilis ini akan menghapus sesuai Git tag. Anda tidak akan kehilangan setiap kode. Apakah anda ingin melanjutkan? +release.deletion_success=Rilis ini telah dihapus. [org] +team_permission_desc=Izin apa yang harus dimiliki tim ini? +team_unit_desc=Unit mana yang harus dimiliki tim ini? +form.name_reserved=Organisasi nama '%s' dilindungi undang-undang. +form.name_pattern_not_allowed=Nama organisasi pola '%s' tidak diperbolehkan. +form.create_org_not_allowed=Pengguna ini tidak diperbolehkan untuk membuat sebuah organisasi. +settings=Pengaturan +settings.options=Pilihan +settings.full_name=Nama Lengkap +settings.website=Situs web +settings.location=Lokasi +settings.update_settings=Perbarui Setelan +settings.update_setting_success=Pengaturan organisasi telah diperbarui. +settings.change_orgname_prompt=Perubahan ini akan mengubah link ke organisasi. +settings.update_avatar_success=Organisasi avatar telah diperbarui. +settings.delete=Menghapus Organisasi +settings.delete_account=Menghapus Organisasi Ini +settings.confirm_delete_account=Konfirmasi Penghapusan +settings.delete_org_title=Penghapusan organisasi +settings.delete_org_desc=Organisasi ini akan dihapus secara permanen, apakah anda yakin anda ingin melanjutkan? +settings.hooks_desc=Tambahkan webhooks yang akan dipicu untuk semua repositori di bawah organisasi ini. +members.membership_visibility=Visibilitas Keanggotaan: +members.public=Publik +members.private=Pribadi +members.member_role=Peran Anggota: +members.owner=Pemilik +members.member=Anggota +members.remove=Menghapus +members.leave=Meninggalkan +members.invite_now=Mengundang Sekarang +teams.join=Ikut +teams.leave=Meninggalkan +teams.read_access_helper=Tim ini akan dapat melihat dan mengkloning repositorinya. +teams.write_access_helper=Tim ini akan mampu untuk membaca dan mendorong ke repository. +teams.admin_access_helper=Tim ini akan mampu mendorong dan tarik ke repositori, serta menambahkan kolaborator lain untuk mereka. +teams.no_desc=Tim ini tidak memiliki keterangan +teams.settings=Pengaturan +teams.delete_team_desc=Karena tim ini akan dihapus, anggota tim ini mungkin kehilangan akses ke beberapa repositori. Apakah anda ingin melanjutkan? [admin] +dashboard.resync_all_sshkeys_success=Semua kunci publik dikendalikan oleh Gitea telah ditulis ulang. +dashboard.reinit_missing_repos_success=Semua repositori Git yang hilang yang catatannya dan telah diinisialisasi ulang. +dashboard.sync_external_users=Sinkronkan data pengguna eksternal +dashboard.sync_external_users_started=Pengguna eksternal sinkronisasi dimulai +dashboard.profiling_bucket_hash_table_obtained=Profil Meja Bucket Hash Yang Diperoleh +dashboard.other_system_allocation_obtained=Alokasi Sistem Lainnya Yang Diperoleh + +users.user_manage_panel=Manajemen Pengolahan Pengguna +users.new_account=Buat Akun Baru +users.name=Nama +users.activated=Diaktifkan +users.send_register_notify=Kirim Pendaftaran Pemberitahuan Kepada Pengguna +users.auth_source=Sumber Otentikasi +users.allow_create_organization=Diperbolehkan untuk membuat organisasi +users.update_profile=Memperbarui Akun Profil +users.delete_account=Menghapus Akun +users.still_own_repo=Pengguna ini masih memiliki salah satu atau lebih repositori. Repositori ini perlu dihapus atau ditransfer terlebih dahulu. +users.still_has_org=Pengguna ini masih merupakan anggota dari satu organisasi atau lebih. Pengguna ini perlu untuk meninggalkan atau menghapus mereka terlebih dahulu. +users.deletion_success=Akun berhasil dihapus. + +orgs.org_manage_panel=Manajemen Organisasi +orgs.name=Nama +orgs.new_orga=Membuat Organisasi + +repos.repo_manage_panel=Manajemen Repositori + +auths.auth_manage_panel=Manajemen Otentikasi +auths.syncenabled=Mengaktifkan sinkronisasi pengguna +auths.bind_password_helper=Peringatan: password Ini disimpan dalam bentuk teks biasa. Hal ini sangat dianjurkan untuk menggunakan akun hanya dibaca. +auths.tip.facebook=Daftarkan sebuah aplikasi baru di https://developers.facebook.com/apps dan tambakan produk "Facebook Masuk +auths.edit=Mengedit Pengaturan Otentikasi +auths.activated=Otentikasi ini diaktifkan +auths.update_success=Pengaturan otentikasi telah diperbarui. +auths.update=Memperbarui Pengaturan Otentikasi +auths.delete=Hapus Sumber Otentikasi ini +auths.delete_auth_title=Menghapus Otentikasi Sumber +auths.delete_auth_desc=Sumber autentikasi ini akan dihapus. Apakah anda yakin ingin melanjutkan? +auths.still_in_used=Sumber otentikasi ini masih digunakan oleh satu atau beberapa pengguna, silahkan hapus atau konversikan ke sumber login yang lain dulu. +auths.deletion_success=Otentikasi telah berhasil dihapus. + +config.server_config=Pengaturan Server +config.app_name=Nama Aplikasi +config.app_ver=Versi Aplikasi +config.app_url=URL Aplikasi + + + +config.default_allow_only_contributors_to_track_time=Memungkinkan hanya kontributor untuk melacak waktu secara default + + +config.send_test_mail=Kirim Surel Percobaan +config.test_mail_failed=Gagal untuk mengirimkan surel percobaan ke '%s': %v +config.test_mail_sent=Surel percobaan telah dikirim ke '%s'. +config.git_migrate_timeout=Batas Waktu Migrasi - - - - - - - - - - +notices.desc=Deskripsi +notices.delete_success=Laporan sistem telah dihapus. [action] +rename_repo=ganti nama gudang penyimpanan dari %[1]s ke %[3]s [tool] +now=sekarang +future=masa depan +1s=1 detik +1m=1 menit +1h=1 jam +1d=1 hari +1w=1 minggu +1mon=1 bulan +1y=1 tahun [dropzone] +default_message=Jatuhkan berkas atau klik untuk mengunggah. +invalid_input_type=Anda tidak bisa mengunggah berkas jenis ini. +remove_file=Hilangkan berkas [notification] +notifications=Notifikasi +unread=Belum dibaca +read=Dibaca +no_unread=Anda tidak punya notifikasi yang belum dibaca apapun. +no_read=Anda tidak punya notifikasi yang dibaca apapun. +mark_as_unread=Tandai sebagai belum dibaca +mark_all_as_read=Tandai semua sudah dibaca [gpg] +error.generate_hash=Gagal untuk menghasilkan hash komit +error.no_committer_account=Tidak ada akun yang terhubung ke email komersil +error.no_gpg_keys_found=Tidak diketahui kunci yang ditemukan di database signature +error.failed_retrieval_gpg_keys=Gagal mengambil kunci apapun yang terpasang pada akun [units] +error.no_unit_allowed_repo=Tidak dapat menemukan unit pada repositori yang anda diperbolehkan untuk mengakses +error.unit_not_allowed=Anda tidak diizinkan untuk mengunjungi unit repositori ini diff --git a/options/locale/locale_lt-LT.ini b/options/locale/locale_lt-LT.ini index 3eb22f0f1..c2a6efbd2 100644 --- a/options/locale/locale_lt-LT.ini +++ b/options/locale/locale_lt-LT.ini @@ -23,6 +23,7 @@ password=Slaptažodis re_type=Iš naujo įveskite captcha=Saugos kodas twofa=Dviejų-žingsnių atpažinimas +passcode=PIN kodas repository=Saugykla organization=Organizacija diff --git a/options/locale/locale_nl-NL.ini b/options/locale/locale_nl-NL.ini index 5e6788d48..9b56e11f5 100644 --- a/options/locale/locale_nl-NL.ini +++ b/options/locale/locale_nl-NL.ini @@ -63,6 +63,7 @@ cancel=Annuleren install=Installatie title=Initiële configuratie docker_helper=Als u gebruik maakt van Gitea in Docker, lees dan de richtlijnen voordat u iets verandert op deze pagina. +requite_db_desc=Gitea vereist MySQL, MSSQL, PostgreSQL, SQLite3 of TiDB. db_title=Database-instellingen db_type=Database-type host=Server @@ -116,6 +117,10 @@ federated_avatar_lookup=Federated Avatars zoekopdracht inschakelen federated_avatar_lookup_popup=Enable federated avatars lookup to use federated open source service based on libravatar. disable_registration=Schakel zelfregistratie uit disable_registration_popup=Schakel zelfregistratie uit, alleen admins kunnen accounts maken. +openid_signin=OpenID-inloggen inschakelen +openid_signin_popup=Gebruikerslogin via OpenID inschakelen +openid_signup=OpenID registratie inschakelen +openid_signup_popup=OpenID registratie inschakelen enable_captcha=Inschakelen Captcha enable_captcha_popup=Vereis captcha validatie voor zelf-registratie van gebruiker. require_sign_in_view=Schakel vereiste aanmelding om pagina's te zien in @@ -140,6 +145,8 @@ default_keep_email_private=Standaardwaarde voor "Houdt Emailadressen Privé default_keep_email_private_popup=Dit is de standaardwaarde voor de zichtbaarheid van het e-mailadres van gebruikers. Als dit is ingesteld op true zal voor alle nieuwe gebruikers het e-mailadres worden verborgen tot de gebruiker zijn voorkeur aanpast. default_allow_create_organization=Standaardwaarde voor de machtiging om nieuwe gebruikers organisaties te laten aanmaken default_allow_create_organization_popup=Dit is de standaardwaarde voor een machtiging die zal worden toegewezen voor nieuwe gebruikers. Als deze is ingesteld op true zullen nieuwe gebruikers de machtiging krijgen om organisaties aan te maken. +default_enable_timetracking=Time tracking standaard inschakelen +default_enable_timetracking_popup=Afhankelijk van deze instelling wordt time tracking automatisch ingeschakeld voor repositories no_reply_address=No-reply emailadres no_reply_address_helper=Domein voor het emailadres van gebruikers in git logboeken als hij zijn emailadres privé houdt. Bijvoorbeeld zal gebruiker 'joe' en 'noreply.example.org' worden samengevoegd tot 'joe@noreply.example.org' @@ -257,11 +264,13 @@ username_been_taken=Gebruikersnaam is al in gebruik. repo_name_been_taken=Repository naam reeds gebruikt. org_name_been_taken=Organisatienaam is al in gebruik. team_name_been_taken=Teamnaam is al in gebruik. +team_no_units_error=Een team moet tenminste één eenheid ingeschakeld hebben. email_been_used=Emailadres is reeds gebruikt. openid_been_used=OpenID adres '%s' reeds gebruikt. username_password_incorrect=Onjuiste gebruikersnaam en/of wachtwoord. enterred_invalid_repo_name=U heeft een onjuiste repository naam ingevoerd. enterred_invalid_owner_name=U heeft een onjuiste eigenaar ingevoerd. +enterred_invalid_password=U heeft een onjuist wachtwoord ingevoerd. user_not_exist=De gebruiker bestaat niet. last_org_owner=De gebruiker die u probeert te verwijderen is het enige lid (eigenaar) van dit team. U moet eerst een nieuw lid (eigenaar) aanstellen. cannot_add_org_to_team=Organisatie kan niet worden toegevoegd als een teamlid. @@ -272,6 +281,8 @@ unable_verify_ssh_key=De ssh sleutel niet kon worden geverifieerd, Controleer he auth_failed=Verificatie mislukt: %v still_own_repo=Uw account heeft nog een eigendom op een repository. U moet deze eerst verwijderen of overdragen. +still_has_org=Je account is nog steeds lid van ten minste één organisatie, deze zul je eerst moeten verlaten. +org_still_own_repo=De organisatie is nog eigenaar van een repository. Je moet deze eerst verwijderen of overdragen. target_branch_not_exist=Doel branch bestaat niet @@ -363,12 +374,16 @@ manage_ssh_keys=Beheer SSH sleutels manage_gpg_keys=Beheer GPG sleutels add_key=Sleutel toevoegen ssh_desc=Dit is een lijst van alle SSH sleutels die gekoppeld zijn aan uw account. Verwijder alle sleutels die u niet herkent. +gpg_desc=Dit zijn de GPG keys gekoppeld aan je account. Omdat deze sleutels toestaan commits te verifiëren is het belangrijk de bijbehorende private keys veilig te bewaren. ssh_helper=Weet u niet hoe? Lees dan onze handleiding voor het genereren van SSH sleutels of voor algemene SSH problemen. +gpg_helper=Hulp nodig? Neem een kijkje op de GitHub handleiding over GPG. add_new_key=SSH sleutel toevoegen add_new_gpg_key=GPG sleutel toevoegen ssh_key_been_used=Deze public key wordt al gebruikt. ssh_key_name_used=Een publieke sleutel met dezelfde naam bestaat al. gpg_key_id_used=Een publieke GPG-sleutel met dezelfde naam bestaat al. +subkeys=Subkeys +key_id=Key-ID key_name=Sleutel naam key_content=Inhoud add_key_success=Uw SSH-sleutel '%s' is toegevoegd. @@ -377,6 +392,7 @@ delete_key=Verwijder ssh_key_deletion=SSH sleutel verwijderen gpg_key_deletion=GPG-sleutel verwijderen ssh_key_deletion_desc=Het verwijderen van deze SSH sleutel zal alle verwante toegang tot uw account verwijderen. Wilt u doorgaan? +gpg_key_deletion_desc=Het verwijderen van deze GPG-key zal ervoor zorgen dat alle commits ondertekend met deze key niet meer geverifiëerd zijn. Weet je zeker dat je door wil gaan? ssh_key_deletion_success=De SSH-sleutel is verwijderd. gpg_key_deletion_success=De GPG-sleutel is verwijderd. add_on=Toegevoegd op @@ -384,6 +400,8 @@ valid_until=Geldig tot en met valid_forever=Voor altijd geldig last_used=Laatst gebruikt op no_activity=Geen recente activiteiten +can_read_info=Lezen +can_write_info=Schrijven key_state_desc=Deze sleutel werd gebruikt in de laatste 7 dagen token_state_desc=Dit token werd gebruikt in de laatste 7 dagen show_openid=Tonen op profiel @@ -391,19 +409,44 @@ hide_openid=Verbergen van profiel ssh_disabled=SSH is uitgeschakeld manage_social=Beheer gekoppelde sociale accounts +social_desc=Dit is een lijst van gekoppelde social accounts. Controleer of alle accounts bekend voorkomen gezien deze kunnen worden gebruikt om in te loggen op je account. unbind=Loskoppelen +unbind_success=Social account is ontkoppeld van je account. manage_access_token=Persoonlijke toegangstokens beheren generate_new_token=Nieuw Token genereren +tokens_desc=Tokens die je hebt gegenereerd om toegang tot de Gitea APIs te verkrijgen. new_token_desc=Alle tokens hebben volledig toegang tot uw account. token_name=Symbolische naam generate_token=Token genereren +generate_token_success=Nieuw toegangstoken is met succes gegenereerd! Kopieer je toegangstoken nu. Dit is de enige keer dat je dit toegangstoken te zien krijgt! delete_token=Verwijderen access_token_deletion=Persoonlijke toegangstoken verwijderen +access_token_deletion_desc=Het verwijderen van dit toegangstoken zal de toegang van iedere applicatie gebruik makende van dit token intrekken. Weet je zeker dat je door wil gaan? +delete_token_success=Het toegangstoken is verwijderd. Vergeet niet om enige applicaties gebruik makende van dit token aan te passen. +twofa_desc=Gitea ondersteunt two-factor authenticatie om de beveiliging van je account te verbeteren. +twofa_is_enrolled=Je account is momenteel ingeschreven voor two-factor authenticatie. +twofa_not_enrolled=Je account is momenteel niet ingeschreven voor two-factor authenticatie. +twofa_disable=Two-factor authenticatie uitschakelen +twofa_scratch_token_regenerate=Genereer een nieuwe herstelcode +twofa_scratch_token_regenerated=Je herstelcode is opnieuw gegenereerd. Deze is nu %s. Bewaar deze op een veilige plek. +twofa_enroll=Two-factor authenticatie inschakelen +twofa_disable_note=Indien nodig kan two-factor authenticatie worden uitgeschakeld. +twofa_disable_desc=Het uitschakelen van two-factor authenticatie verminderd de beveiliging van je account. Weet je zeker dat je door wil gaan? +regenerate_scratch_token_desc=Als je je herstelcode bent verloren, of als je deze al hebt gebruikt om in te loggen, kun je deze hier opnieuw instellen. +twofa_disabled=Two-factor authenticatie is uitgeschakeld. +scan_this_image=Scan deze afbeelding met je authenticatie applicatie: +or_enter_secret=Of voer deze geheime code in: %s +then_enter_passcode=En voer de code in die je authenticatie applicatie geeft: +passcode_invalid=De code is niet correct. Probeer het nogmaals. +twofa_enrolled=Je account is nu ingeschreven voor two-factor authenticatie. Bewaar je eenmalige herstelcode (%s) goed, dit is de enige keer dat deze getoond wordt! manage_account_links=Onderhoud account koppelingen +manage_account_links_desc=Externe accounts gekoppeld aan dit account +account_links_not_available=Er zijn momenteel geen externe accounts gekoppeld aan dit account remove_account_link=Gekoppeld account verwijderen +remove_account_link_desc=Het verwijderen van dit gekoppelde account zal alle toegang van dit account intrekken. Weet je zeker dat je door wil gaan? remove_account_link_success=Account koppeling is succesvol verwijderd! orgs_none=U bent geen lid van een organisatie. diff --git a/options/locale/locale_uk-UA.ini b/options/locale/locale_uk-UA.ini new file mode 100644 index 000000000..0d9e5f6d5 --- /dev/null +++ b/options/locale/locale_uk-UA.ini @@ -0,0 +1,106 @@ + + + + + + + +[install] + + + +[home] + + +[explore] + +[auth] + +[mail] + +[modal] + +[form] + + + + + + + +[user] + + +[settings] + + + + + + + + + + + + +[repo] + + + + + + + + + + + + + + + + + + + + +[org] + + + + + +[admin] + + + + + + + + + + + + + + + + + + + + +[action] + +[tool] + +[dropzone] + +[notification] + +[gpg] + +[units] + From aef30071c9cc76fff3baa92e4a92833d252cd0e6 Mon Sep 17 00:00:00 2001 From: Lauris BH Date: Mon, 29 Jan 2018 19:50:04 +0200 Subject: [PATCH 18/25] Fix go-get content type (#3426) --- modules/context/context.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/context/context.go b/modules/context/context.go index 77128b878..311186e64 100644 --- a/modules/context/context.go +++ b/modules/context/context.go @@ -189,7 +189,9 @@ func Contexter() macaron.Handler { branchName = repo.DefaultBranch } prefix := setting.AppURL + path.Join(ownerName, repoName, "src", "branch", branchName) - c.PlainText(http.StatusOK, []byte(com.Expand(` + c.Header().Set("Content-Type", "text/html") + c.WriteHeader(http.StatusOK) + c.Write([]byte(com.Expand(` From 5911f98392e1b7a04fcd570092a8089d1caff91d Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Mon, 29 Jan 2018 17:50:28 +0000 Subject: [PATCH 19/25] [skip ci] Updated translations via Crowdin --- options/locale/locale_id-ID.ini | 1 - options/locale/locale_lt-LT.ini | 6 ++++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/options/locale/locale_id-ID.ini b/options/locale/locale_id-ID.ini index 46605b0c4..90b3b1fdc 100644 --- a/options/locale/locale_id-ID.ini +++ b/options/locale/locale_id-ID.ini @@ -811,7 +811,6 @@ settings.enable_timetracker=Mengaktifkan pelacak waktu settings.allow_only_contributors_to_track_time=Izinkan hanya kontributor untuk melacak waktu settings.pulls_desc=Mengaktifkan permintaan menarik untuk menerima sumbangan publik settings.pulls.ignore_whitespace=Mengabaikan perubahan spasi ketika memeriksa konflik -settings.pulls.allow_merge_commits=Izinkan penggabungan melakukan settings.pulls.allow_squash_commits=Biarkan labu sebelum melakukan penggabungan settings.danger_zone=Zona Bahaya settings.new_owner_has_same_repo=Pemilik baru sudah memiliki repositori dengan nama yang sama. Silakan pilih nama lain. diff --git a/options/locale/locale_lt-LT.ini b/options/locale/locale_lt-LT.ini index c2a6efbd2..d1e347f8c 100644 --- a/options/locale/locale_lt-LT.ini +++ b/options/locale/locale_lt-LT.ini @@ -32,11 +32,14 @@ new_repo=Nauja saugykla new_mirror=Naujas veidrodis new_org=Nauja organizacija manage_org=Valdyti organizacijas +admin_panel=Administravimo skydelis account_settings=Paskyros nustatymai settings=Nustatymai your_profile=Jūsų profilis your_settings=Jūsų parametrai +all=Visi +mirrors=Veidrodžiai activities=Veiklos issues=Problemos @@ -65,6 +68,7 @@ run_user=Paleisti vartotoju domain=Domenas ssh_port=SSH prievadas http_port=HTTP prievadas +app_url=Programos URL log_root_path=Žurnalo kelias optional_title=Pasirenkami nustatymai @@ -74,6 +78,7 @@ mailer_password=Siuntėjo slaptažodis admin_name=Vartotojo vardas admin_password=Slaptažodis confirm_password=Patvirtinkite slaptažodį +admin_email=Administratoriaus el. paštas [home] uname_holder=Naudotojo vardas ar el. paštas @@ -159,6 +164,7 @@ delete=Panaikinti paskyrą twofa=Dviejų faktorių atpažinimas uid=Uid +public_profile=Viešasis profilis update_profile=Atnaujinti profilį continue=Tęsti cancel=Atšaukti From ca4f5c37e640a64fe512a316786033778c27b201 Mon Sep 17 00:00:00 2001 From: Lauris BH Date: Tue, 30 Jan 2018 14:29:39 +0200 Subject: [PATCH 20/25] Fix branch deletion for squash or rebase merged pull requests (#3425) --- routers/repo/pull.go | 46 +++++++++++++++----------------------------- 1 file changed, 15 insertions(+), 31 deletions(-) diff --git a/routers/repo/pull.go b/routers/repo/pull.go index 1db1e6327..a852cee1f 100644 --- a/routers/repo/pull.go +++ b/routers/repo/pull.go @@ -957,37 +957,21 @@ func CleanUpPullRequest(ctx *context.Context) { } // Check if branch has no new commits - if len(pr.MergedCommitID) > 0 { - branchCommitID, err := gitRepo.GetBranchCommitID(pr.HeadBranch) - if err != nil { - log.Error(4, "GetBranchCommitID: %v", err) - ctx.Flash.Error(ctx.Tr("repo.branch.deletion_failed", fullBranchName)) - return - } - - commit, err := gitBaseRepo.GetCommit(pr.MergedCommitID) - if err != nil { - log.Error(4, "GetCommit: %v", err) - ctx.Flash.Error(ctx.Tr("repo.branch.deletion_failed", fullBranchName)) - return - } - - isParent := false - for i := 0; i < commit.ParentCount(); i++ { - if parent, err := commit.Parent(i); err != nil { - log.Error(4, "Parent: %v", err) - ctx.Flash.Error(ctx.Tr("repo.branch.deletion_failed", fullBranchName)) - return - } else if parent.ID.String() == branchCommitID { - isParent = true - break - } - } - - if !isParent { - ctx.Flash.Error(ctx.Tr("repo.branch.delete_branch_has_new_commits", fullBranchName)) - return - } + headCommitID, err := gitBaseRepo.GetRefCommitID(pr.GetGitRefName()) + if err != nil { + log.Error(4, "GetRefCommitID: %v", err) + ctx.Flash.Error(ctx.Tr("repo.branch.deletion_failed", fullBranchName)) + return + } + branchCommitID, err := gitRepo.GetBranchCommitID(pr.HeadBranch) + if err != nil { + log.Error(4, "GetBranchCommitID: %v", err) + ctx.Flash.Error(ctx.Tr("repo.branch.deletion_failed", fullBranchName)) + return + } + if headCommitID != branchCommitID { + ctx.Flash.Error(ctx.Tr("repo.branch.delete_branch_has_new_commits", fullBranchName)) + return } if err := gitRepo.DeleteBranch(pr.HeadBranch, git.DeleteBranchOptions{ From d09704e9032606654d07b03e1700474ca4d550e0 Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Tue, 30 Jan 2018 12:30:54 +0000 Subject: [PATCH 21/25] [skip ci] Updated translations via Crowdin --- options/locale/locale_fr-FR.ini | 2 ++ options/locale/locale_id-ID.ini | 2 -- options/locale/locale_zh-TW.ini | 25 ++++++++++++++----------- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/options/locale/locale_fr-FR.ini b/options/locale/locale_fr-FR.ini index 488cd3989..9e0906d7c 100644 --- a/options/locale/locale_fr-FR.ini +++ b/options/locale/locale_fr-FR.ini @@ -901,8 +901,10 @@ settings.tracker_url_format_desc=Vous pouvez utiliser l'espace réservé { settings.enable_timetracker=Activer le traqueur de temps settings.allow_only_contributors_to_track_time=N'autoriser que les contributeurs à suivre le temps settings.pulls_desc=Activer les pull requests pour accepter les contributions publiques +settings.pulls.ignore_whitespace=Ignorer les modifications des espaces lors de la vérification des conflits settings.pulls.allow_merge_commits=Autoriser les commits de fusion settings.pulls.allow_rebase_merge=Autoriser le rebase pour les commits de fusion +settings.pulls.allow_squash_commits=Autoriser de squash les commits avant de fusionner settings.danger_zone=Zone de danger settings.new_owner_has_same_repo=Le nouveau propriétaire a déjà un dépôt nommé ainsi. settings.convert=Convertir en dépôt ordinaire diff --git a/options/locale/locale_id-ID.ini b/options/locale/locale_id-ID.ini index 90b3b1fdc..103c40475 100644 --- a/options/locale/locale_id-ID.ini +++ b/options/locale/locale_id-ID.ini @@ -473,7 +473,6 @@ license_helper=Pilih sebuah berkas lisensi readme_helper=Pilih template readme auto_init=Tetapkan gudang penyimpanan ini dengan berkas yang dipilih dan pola create_repo=Buat Gudang penyimpanan -mirror_prune_desc=Menghapus setiap jarak jauh-melacak referensi yang tidak lagi ada di remote mirror_interval=Interval duplikat (waktu unit yang valid "h", "m", "s") mirror_interval_invalid=Interval duplikat tidak valid mirror_address=Alamat Duplikat @@ -1076,6 +1075,5 @@ error.no_gpg_keys_found=Tidak diketahui kunci yang ditemukan di database signatu error.failed_retrieval_gpg_keys=Gagal mengambil kunci apapun yang terpasang pada akun [units] -error.no_unit_allowed_repo=Tidak dapat menemukan unit pada repositori yang anda diperbolehkan untuk mengakses error.unit_not_allowed=Anda tidak diizinkan untuk mengunjungi unit repositori ini diff --git a/options/locale/locale_zh-TW.ini b/options/locale/locale_zh-TW.ini index 57b694009..438b5e8c0 100644 --- a/options/locale/locale_zh-TW.ini +++ b/options/locale/locale_zh-TW.ini @@ -62,7 +62,7 @@ cancel=取消 [install] install=安裝頁面 title=初始設定 -docker_helper=如果您正在使用 Docker 容器運行 Gitea,請務必先仔細閱讀 官方文檔 後再對本頁面進行填寫。 +docker_helper=如果您正在使用 Docker 容器運行 Gitea,請務必先仔細閱讀官方文件後再對本頁面進行填寫。 requite_db_desc=Gitea 需要安裝 MySQL、MSSQL、PostgreSQL、SQLite3 或 TiDB 其中一項。 db_title=資料庫設定 db_type=資料庫類型 @@ -463,7 +463,7 @@ owner=擁有者 repo_name=儲存庫名稱 repo_name_helper=好的儲存庫名稱通常是簡短的、好記的、且獨特的。 visibility=可見度 -visiblity_helper=該儲存庫為 私有的 +visiblity_helper=該儲存庫為私有的 visiblity_helper_forced=網站管理員已強制要求所有新建儲存庫必須為 私有儲存庫 visiblity_fork_helper=(修改該值將會影響到所有複製儲存庫) clone_helper=不知道如何操作?訪問 帮助説明 ! @@ -482,11 +482,11 @@ create_repo=建立儲存庫 default_branch=默認分支 mirror_prune=裁減 mirror_prune_desc=刪除任何已不存在於遠端資料庫的遠端追蹤引用 -mirror_interval=鏡像間隔 (有效時間單位為"h", "m","s") +mirror_interval=鏡像間隔 (有效時間單位為 "h", "m", "s") mirror_interval_invalid=鏡像周期無效 mirror_address=鏡像地址 mirror_address_desc=請在此位址中引入任何必要使用者憑證。 -mirror_last_synced=上次同步 +mirror_last_synced=上次同步時間 watchers=關注者 stargazers=稱讚者 forks=複製儲存庫 @@ -498,7 +498,7 @@ form.name_pattern_not_allowed=儲存庫名稱格式不允許為'%s'。 need_auth=需要授權驗證 migrate_type=遷移類型 -migrate_type_helper=該儲存庫將是一個 鏡像 +migrate_type_helper=該儲存庫將是一個鏡像 migrate_repo=遷移儲存庫 migrate.clone_address=複製地址 migrate.clone_address_desc=該地址可以是 HTTP/HTTPS/GIT URL 或本地伺服器路徑。 @@ -707,7 +707,7 @@ issues.label_deletion_success=此標籤已成功刪除。 issues.label.filter_sort.alphabetically=按字母顺序排序 issues.label.filter_sort.reverse_alphabetically=按字母反向排序 issues.label.filter_sort.by_size=大小 -issues.label.filter_sort.reverse_by_size=從大到小 +issues.label.filter_sort.reverse_by_size=由大到小 issues.num_participants=%d 參與者 issues.attachment.open_tab=`在新的標籤頁中查看 '%s'` issues.attachment.download=`點擊下載 '%s'` @@ -746,7 +746,7 @@ pulls.title_desc=請求將 %[1]d 次程式碼提交從 %[2]s 合併 pulls.merged_title_desc=於 %[4]s 將 %[1]d 次代碼提交從 %[2]s合併至 %[3]s pulls.tab_conversation=對話內容 pulls.tab_commits=程式碼提交 -pulls.tab_files=文件變動 +pulls.tab_files=檔案變動 pulls.reopen_to_merge=請重新開啟合併請求來完成合併操作。 pulls.merged=已合併 pulls.has_merged=此合併請求已成功合併。 @@ -756,6 +756,8 @@ pulls.can_auto_merge_desc=這個拉請求可以自動合併。 pulls.cannot_auto_merge_desc=此合併請求無法自動合併因發生衝突。 pulls.cannot_auto_merge_helper=請手動合併來解決衝突。 pulls.merge_pull_request=合併請求 +pulls.rebase_merge_pull_request=Rebase 合併 +pulls.squash_merge_pull_request=Squash 合併 pulls.open_unmerged_pull_exists=`您無法執行重新開啟的操作因為已有來自同儲存庫的未合併請求(#%d),該請求具相同資訊且等待合併中。` milestones.new=新的里程碑 @@ -793,7 +795,7 @@ ext_wiki.desc=外部 Wiki 的連結 wiki=Wiki wiki.welcome=歡迎來到專案 Wiki 頁面 -wiki.welcome_desc=Wiki 是用於共同協作文檔的地方,清晰的文檔可以幫助其他人深入了解您的項目。 +wiki.welcome_desc=Wiki 是用於共同協作文件的地方,清晰的文件可以幫助其他人深入了解您的項目。 wiki.desc=Wiki 是存放文件的地方 wiki.create_first_page=建立第一個頁面 wiki.page=頁面 @@ -819,6 +821,7 @@ activity.period.monthly=1 個月 activity.overview=概覽 activity.merged_prs_count_1=合併請求 activity.merged_prs_count_n=合併請求 +activity.opened_prs_count_1=建立合併請求 activity.title.user_1=%d 使用者 activity.title.user_n=%d 使用者 activity.title.prs_1=%d 合併請求 @@ -918,7 +921,7 @@ settings.search_user_placeholder=搜尋用戶... settings.org_not_allowed_to_be_collaborator=組織不允許被加為協同者。 settings.user_is_org_member=被操作的用戶是組織成員,因此無法新增為協作者! settings.add_webhook=建立 Webhook -settings.hooks_desc=Webhook 允許您設定在 Gitea 上發生指定事件時對指定 URL 發送 POST 通知。查看 Webhooks 文檔 獲取更多訊息。 +settings.hooks_desc=Webhook 允許您設定在 Gitea 上發生指定事件時對指定 URL 發送 POST 通知。查看Webhooks 文件獲取更多訊息。 settings.webhook_deletion=刪除 Webhook settings.webhook_deletion_desc=刪除該 Webhook 將會刪除與其有關的訊息和推送歷史。是否繼續? settings.webhook_deletion_success=Webhook 刪除成功! @@ -1013,7 +1016,7 @@ diff.data_not_available=沒有內容比較可以使用 diff.show_diff_stats=顯示文件統計 diff.show_split_view=分割檢視 diff.show_unified_view=統一視圖 -diff.stats_desc=共有 %d 個文件被更改,包括 %d 次插入%d 次删除 +diff.stats_desc=共有 %d 個檔案被更改,包括 %d 行新增%d 行删除 diff.bin=二進制 diff.view_file=查看文件 diff.file_suppressed=文件差異過大導致無法顯示 @@ -1266,7 +1269,7 @@ repos.private=私有庫 repos.watches=關註數 repos.stars=讚好數 repos.issues=問題數 -repos.size=大小 +repos.size=由小到大 auths.auth_manage_panel=認證管理 auths.new=新增認證來源 From b3fd94c13d00f368dbd0f9414e699077ee4a6887 Mon Sep 17 00:00:00 2001 From: Antoine GIRARD Date: Tue, 30 Jan 2018 23:09:16 +0100 Subject: [PATCH 22/25] Add sensitive headers (#3429) * Add HeaderWithSensitiveCase methods to respect casing * Update webhook.go --- models/webhook.go | 4 ++-- modules/httplib/httplib.go | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/models/webhook.go b/models/webhook.go index b18b9e35a..62db84f86 100644 --- a/models/webhook.go +++ b/models/webhook.go @@ -588,8 +588,8 @@ func (t *HookTask) deliver() { Header("X-Gitea-Event", string(t.EventType)). Header("X-Gogs-Delivery", t.UUID). Header("X-Gogs-Event", string(t.EventType)). - Header("X-GitHub-Delivery", t.UUID). - Header("X-GitHub-Event", string(t.EventType)). + HeaderWithSensitiveCase("X-GitHub-Delivery", t.UUID). + HeaderWithSensitiveCase("X-GitHub-Event", string(t.EventType)). SetTLSClientConfig(&tls.Config{InsecureSkipVerify: setting.Webhook.SkipTLSVerify}) switch t.ContentType { diff --git a/modules/httplib/httplib.go b/modules/httplib/httplib.go index 88190704b..c96e04c35 100644 --- a/modules/httplib/httplib.go +++ b/modules/httplib/httplib.go @@ -164,6 +164,12 @@ func (r *Request) Header(key, value string) *Request { return r } +// HeaderWithSensitiveCase add header item in request and keep the case of the header key. +func (r *Request) HeaderWithSensitiveCase(key, value string) *Request { + r.req.Header[key] = []string{value} + return r +} + // Headers returns headers in request. func (r *Request) Headers() http.Header { return r.req.Header From f9a5cc4d8ebc62e04a1cf4bfa955fc452e7fa269 Mon Sep 17 00:00:00 2001 From: Lauris BH Date: Wed, 31 Jan 2018 00:31:06 +0200 Subject: [PATCH 23/25] Use correct transaltion key for delete email button (#3422) --- templates/user/settings/email.tmpl | 40 +++++++++++++++--------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/templates/user/settings/email.tmpl b/templates/user/settings/email.tmpl index fa6797076..62dc1d5e5 100644 --- a/templates/user/settings/email.tmpl +++ b/templates/user/settings/email.tmpl @@ -13,27 +13,27 @@ {{range .Emails}}
- {{if not .IsPrimary}} -
- -
- {{if .IsActivated}} -
-
- {{$.CsrfTokenHtml}} - - - -
-
- {{end}} - {{end}} -
- {{.Email}} - {{if .IsPrimary}}{{$.i18n.Tr "settings.primary"}}{{end}} + {{if not .IsPrimary}} +
+
+ {{if .IsActivated}} +
+
+ {{$.CsrfTokenHtml}} + + + +
+
+ {{end}} + {{end}} +
+ {{.Email}} + {{if .IsPrimary}}{{$.i18n.Tr "settings.primary"}}{{end}} +
{{end}}
From 10171b7e2f18d46bc65ae5f235782443dc963f54 Mon Sep 17 00:00:00 2001 From: Morgan Bazalgette Date: Wed, 31 Jan 2018 16:40:57 +0100 Subject: [PATCH 24/25] add changelog for 1.4.0 (#3435) * add changelog for 1.4.0 * remove docs * Remove some more noise * Small reorganization, removed bugfixes that were not present in last stable version * Move LFS lock to features, add just merged bugfix info --- CHANGELOG.md | 108 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c62b1e3e..a28e6130c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,113 @@ # Changelog +This changelog goes through all the changes that have been made in each release +without substantial changes to our git log; to see the highlights of what has +been added to each release, please refer to the [blog](https://blog.gitea.io). + +## [1.4.0-rc1](https://github.com/go-gitea/gitea/releases/tag/v1.4.0-rc1) - 2018-01-31 +* BREAKING + * Drop deprecated GOGS\_WORK\_DIR use (#2946) + * Fix API status code for hook creation (#2814) +* SECURITY + * Sanitize logs for mirror sync (#3057) +* FEATURE + * Serve .patch and .diff for pull requests (#3305, #3293) + * Add repo-sync-releases admin command (#3254) + * Support default private when creating or migrating repository (#3239) + * Writable deploy keys (closes #671) (#3225) + * Add Pull Request merge options - Ignore white-space for conflict checking, Rebase, Squash merge (#3188) + * Added progressbar for issues with checkboxes (#1146). (#3171) + * Mention completion for issue editor. (#3136) + * Add 'mark all read' option to notifications (#3097) + * Git LFS lock api (#2938) + * Add reactions to issues/PR and comments (#2856) + * Add dingtalk webhook (#2777) + * Responsive view (#2750) +* BUGFIXES + * Fix webhook X-GitHub-* headers casing for better compatibility (#3429) + * Add content type and doctype to requests made with go-get (#3426, #3423) + * Fix SQL type error for webhooks (#3424) + * Fix PR merge error (#3421) + * Recognize more characters in crossreferenced repo name (#3413) + * Fix MSSQL bug on org (#3405) + * HTML escape all lines of the search result (#3402) + * Change local copy origin url after repository rename (#3399) + * Force-push to base repo's ref/pull/#/head (#3393) + * Fix bug when a user delete but assigned on issue (#3318) + * Use issue number/index instead of id for API URL. Fix #3297 (#3298) + * Fix repo-transfer-and-team-repo-count bug (#3241) + * Fix always-on SSL Mode checkbox in admin page (#3208) + * Fix source download link when no code unit allowed (#3166) + * Fix org owner cannot be removed if he is not in owner team (#3164) + * Fix run web with -p push failed (#3154) + * Fix gpg tmpl (#3153) + * Fix SSH auth lfs locks (#3152) + * Improvements for supporting UI Location (#3146) + * Fix new pull request link (#3133) + * Fix missing branch in release bug (#3108) + * Allow adding collaborators with (fullname) (#3103) + * Fix repo links (#3093) + * fix lfs url refs + keep path upper/lowercase in db. (#3092) + * Fix redis session failed (#3086) + * Fix bugs in issue dashboard stats (#3073) + * Fix avatar URLs (#3069) + * Fix ref parsing in commit messages (#3067) + * Fix issue list branch link broken (#3061) + * sendmail: correct option to set envelope-sender (#3044) + * Fix missing password length check when change password (#3039) + * Fix git lfs path (#3016) + * Fix API-Endpoint release (#3005) (#3012) + * Set OpenID support on by default when installing new instance (#3010) + * Various wiki bug fixes (#2996) + * Fix go-get, src and raw urls to new scheme (#2978) + * Fix error when add user has full name to team (#2973) + * Fix memcache support when value is returned as string always (#2924) +* ENHANCEMENT + * Use GiteaServer as the user agent for http requests (#3404) + * Delete indexer DB entries when (re)creating index (#3385) + * Change how merged PR commit info are prepared (#3368) + * Asynchronously populate the repo indexer (#3366) + * Make the default action for the gitea executable that of running the webserver (#3331) + * Templates for extra links in top navbar and repo tool tabs. (#3308) + * Fixed asterisk based tasklist items #3295 (#3296) + * Add more additional template snippets (#3286) + * Open external tracker in blank window, consistently with wiki (#3227) + * Fix repo links on user profile (#3197) + * Enable emoji for wiki view (#3158) + * Small improve on deleting attachements (#3145) + * Reduce overhead of upgrades for users with custom stylesheets/JS (#3051) + * Default log level to Info without hardcoding it in installer (#3041) + * Memory usage improvements (#3013) + * Add fingerprint to ssh key endpoints. (#3009) + * Improve memory usage when reaching diff limits (#2990) + * Expandable commit bodies (#2980) + * Update gitgraph.js to fix blurry commit graph on HiDPI screens (#2957) + * Fix language names (#2955) + * Remove render issue link (#2954) + * Page parameter for repo search API (#2915) + * Apply LANDING\_PAGE config options for logged in users (#2894) + * Enable admin to search by email (#2888) + * Hide add key button if SSH is disabled (#2873) + * Fix comment API paths (#2813) + * Add an option to allow redirect of http port 80 to https. (#1928) +* MISC + * Fix organization profile on mobile devices (#3332) + * Fix guide link for webhooks in repository settings (#3291) (#3292) + * Enable Libravatar by default in new installations (#3287) + * Improve suppressed diff boxes (#3193) + * fix button heights on commits page (#3091) + * Minor copy changes (#3074) + * Sort repos in issues dashboard sidebar (#3072) + * Remove box-shadow from UI, fix dashboard issue (#3065) + * Adjust branch button size (#3063) + * Fix misalignment issue in repo header (#3062) + * Delete a user's public key via admin api (closes #3014) (#3059) + * Dashboard: Fix line height problem in issue titles (#3054) + * Remove duplicate "Max Diff Lines" from config view (#2987) + * Drop unmaintained gogs migration script (#2947) + * App restarts to quickly if it fails to start. (#2945) + * Add owner to delete repo message (#2886) + ## [1.3.1](https://github.com/go-gitea/gitea/releases/tag/v1.3.1) - 2017-12-08 * BUGFIXES * Sanitize logs for mirror sync (#3057, #3082) (#3078) From b62ce2e24655e2d9316770d4eb342b823111fe0e Mon Sep 17 00:00:00 2001 From: GiteaBot Date: Wed, 31 Jan 2018 15:41:59 +0000 Subject: [PATCH 25/25] [skip ci] Updated translations via Crowdin --- options/locale/locale_id-ID.ini | 485 ++++++++++++++++++++++++++++++++ options/locale/locale_sv-SE.ini | 78 +++++ options/locale/locale_tr-TR.ini | 3 + options/locale/locale_uk-UA.ini | 441 +++++++++++++++++++++++++++-- 4 files changed, 990 insertions(+), 17 deletions(-) diff --git a/options/locale/locale_id-ID.ini b/options/locale/locale_id-ID.ini index 103c40475..92305d8f4 100644 --- a/options/locale/locale_id-ID.ini +++ b/options/locale/locale_id-ID.ini @@ -233,6 +233,8 @@ Email=Alamat surel Password=Kata Sandi Retype=Ketik ulang kata sandi SSHTitle=Nama kunci SSH +HttpsUrl=HTTPS URL +PayloadUrl=Muatan URL TeamName=Nama tim AuthName=Nama otorisasi AdminEmail=Surel admin @@ -312,6 +314,7 @@ delete=Hapus Akun twofa=Otentikasi Dua-Faktor account_link=Akun Eksternal organization=Organisasi +uid=Uid public_profile=Profil Publik profile_desc=Alamat surel anda publik dan akan digunakan untuk akun apapun yang terkait notifikasi dan operasi yang dibuat berdasarkan web melalui antarmuka web. @@ -327,6 +330,7 @@ continue=Lanjutkan cancel=Batalkan lookup_avatar_by_mail=Mencari Avatar melalui surat +federated_avatar_lookup=Aktifkan Pencarian Avatar Representasi enable_custom_avatar=Gunakan Avatar Pilihan choose_new_avatar=Pilih avatar baru update_avatar=Perbarui Pengaturan Avatar @@ -358,6 +362,7 @@ openid_deletion_success=OpenID telah berhasil dihapus! add_new_email=Tambahkan alamat surel baru add_new_openid=Tambahkan OpenID URI baru add_email=Tambah surel +add_openid=Tambahkan bukaID URI baru add_email_confirmation_sent=Sebuah surel konfirmasi baru telah dikirimkan ke '%s'. Tolong periksa kotak masuk anda dalam %s kedepan untuk mengkonfirmasi surel anda. add_email_success=Alamat surel baru anda telah berhasil ditambahkan. add_openid_success=Alamat OpenID baru anda telah berhasil ditambahkan. @@ -378,6 +383,7 @@ ssh_key_been_used=Kunci publik ini telah dipergunakan. ssh_key_name_used=Sebuah kunci publik dengan nama yang sama sudah ada. gpg_key_id_used=Sebuah kunci publik GPG dengan id yang sama sudah ada. gpg_no_key_email_found=Tidak ada surel apapun yang dilampirkan ke kunci GPG dapat ditemukan. +subkeys=Subkunci key_id=ID Kunci key_name=Nama Kunci key_content=Konten @@ -470,15 +476,20 @@ repo_lang=Bahasa repo_gitignore_helper=Pilih pola .gitignore license=Lisensi license_helper=Pilih sebuah berkas lisensi +readme=Baca saya readme_helper=Pilih template readme auto_init=Tetapkan gudang penyimpanan ini dengan berkas yang dipilih dan pola create_repo=Buat Gudang penyimpanan +default_branch=Cabang Default +mirror_prune=Memangkas +mirror_prune_desc=Menghapus setiap referensi remote-tracking yang tidak tersedia lagi pada remote mirror_interval=Interval duplikat (waktu unit yang valid "h", "m", "s") mirror_interval_invalid=Interval duplikat tidak valid mirror_address=Alamat Duplikat mirror_address_desc=Silakan sertakan kredensial pengguna yang diperlukan di dalam alamat. mirror_last_synced=Terakhir Disinkronkan watchers=Pengamat +stargazers=Penikmat forks=Garpu pick_reaction=Pilih reaksimu reactions_more=dan %d lainnya @@ -506,6 +517,9 @@ copy_link=Salin copy_link_success=Disalin! copy_link_error=Tekan ⌘-C atau Ctrl-C untuk menyalin copied=Disalin OK +unwatch=Unwatch +watch=Menonton +unstar=Hapus Bintang star=Bintang fork=Garpu download_archive=Unduh repositori ini @@ -514,6 +528,7 @@ no_desc=Tidak ada Deskripsi quick_guide=Panduan Cepat clone_this_repo=Klon repositori ini create_new_repo_command=Membuat repositori baru pada baris perintah +push_exist_repo=Mendorong sebuah repositori yang ada di baris perintah bare_message=Repositori ini tidak berisi konten apapun. code=Kode @@ -522,17 +537,22 @@ branch=Cabang tree=Pohon filter_branch_and_tag=Filter cabang atau tag branches=Cabang +tags=Tag issues=Masalah pulls=Tarik Permintaan labels=Label milestones=Tonggak commits=Melakukan +commit=Memperbuat releases=Rilis +file_raw=Mentah file_history=Riwayat file_view_raw=Lihat Mentah +file_permalink=Permalink file_too_large=Berkas ini terlalu besar untuk ditampilkan video_not_supported_in_browser=Peramban anda tidak mendukung video tag HTML5. stored_lfs=Tersimpan dengan GIT LFS +commit_graph=Melakukan grafik editor.new_file=Berkas baru editor.upload_file=Unggah berkas @@ -547,14 +567,29 @@ editor.must_have_write_access=Anda harus memiliki akses menulis untuk membuat at editor.file_delete_success=File '%s' telah berhasil dihapus! editor.name_your_file=Nama file anda... editor.filename_help=Untuk menambahkan direktori, ketik saja itu dan tekan /. Untuk menghilangkan direktori, pergi ke permulaan dari bidang dan tekan backspace. +editor.or=atau +editor.cancel_lower=batalkan +editor.commit_changes=Perubahan komitmen +editor.add_tmpl=Tambah '%s/' +editor.add=Menambah '%s' +editor.update=Memperbarui '%s' +editor.delete=Menghapus '%s' editor.commit_message_desc=Tambahkan sebuah deskripsi opsional yang diperpanjang... +editor.commit_directly_to_this_branch=Komitmen langsung ke %s cabang. +editor.create_new_branch=Membuat new branch untuk tarik komit ini mulai permintaan. +editor.new_branch_name_desc=Nama cabang terbaru... +editor.cancel=Membatalkan editor.filename_cannot_be_empty=Nama file tidak boleh kosong. +editor.branch_already_exists=Cabang '%s' sudah ada di repositori ini. +editor.directory_is_a_file=Masuk '%s' di jalur induk adalah sebuah file bukan direktori dalam repositori ini. editor.file_is_a_symlink=File '%s' adalah sebuah symlink yang tidak dapat dimodifikasi dari editor web editor.filename_is_a_directory=Nama file '%s' adalah sebuah direktori yang sudah ada di repositori ini. editor.file_editing_no_longer_exists=File '%s' yang sedang anda edit tidak lagi ada di repositori. +editor.file_changed_while_editing=Konten file ini sudah berubah semenjak anda mulai mengedit. Tekan di sini untuk melihat sesuatu yang telah di ubah atau tekan komit lagi untuk menimpa perubahan tersebut. editor.file_already_exists=Sebuah berkas dengan nama '%s' sudah ada didalam gudang penyimpanan. editor.no_changes_to_show=Tidak ada perubahan untuk ditampilkan. editor.fail_to_update_file=Gagal untuk memperbarui/buat berkas '%s' dengan kesalahan: %v +editor.add_subdir=Menambah subdirektori... editor.unable_to_upload_files=Gagal untuk mengunggah berkas ke '%s' dengan kesalahan: %v editor.upload_files_to_dir=Unggah berkas ke '%s' editor.cannot_commit_to_protected_branch=Tidak dapat berkomitmen padang cabang yang dilindungi '%s'. @@ -585,6 +620,7 @@ issues.new.no_milestone=Tidak Ada Milestone issues.new.clear_milestone=Bersihkan milestone issues.new.open_milestone=Buka Milestone issues.new.closed_milestone=Tutup Milestone +issues.new.assignee=Menerima issues.new.clear_assignee=Jelas menerima issues.new.no_assignee=Tidak ada penerima issues.no_ref=Tidak Ada Cabang/Tag Ditentukan @@ -603,6 +639,7 @@ issues.add_milestone_at=`telah menambahkan ini ke %s milestone %s` issues.change_milestone_at=`telah mengubah milestone dari %s ke %s %s` issues.remove_milestone_at=`telah menghapus ini dari %s milestone %s` issues.deleted_milestone=`(dihapus)` +issues.self_assign_at=`menugaskan diri %s` issues.add_assignee_at=`telah ditugaskan oleh %s %s` issues.remove_assignee_at=`hapus tugas mereka %s` issues.change_title_at=`telah mengubah judul dari %s ke %s %s` @@ -611,7 +648,9 @@ issues.open_tab=%d Terbuka issues.close_tab=%d Tertutup issues.filter_label=Label issues.filter_label_no_select=Tidak ada label yang dipilih +issues.filter_milestone=Tonggak issues.filter_milestone_no_select=Tidak ada milestone yang dipilih +issues.filter_assignee=Menerima issues.filter_assginee_no_select=Tidak ada Penerima yang dipilih issues.filter_type=Tipe issues.filter_type.all_issues=Semua masalah @@ -628,11 +667,18 @@ issues.filter_sort.leastcomment=Komentar paling sedikit issues.action_open=Buka issues.action_close=Tutup issues.action_label=Label +issues.action_milestone=Tonggak +issues.action_milestone_no_select=Tidak ada tonggak +issues.action_assignee=Menerima +issues.action_assignee_no_select=Tidak ada yang menerima +issues.opened_by=di buka %[1]s oleh %[3]s +issues.opened_by_fake=di buka %[1]s oleh %[2]s issues.previous=Sebelumnya issues.next=Selanjutnya issues.open_title=Buka issues.closed_title=Tertutup issues.num_comments=%d komentar +issues.commented_at=`komentar %s` issues.delete_comment_confirm=Apakah anda yakin anda ingin menghapus komentar ini? issues.no_content=Belum ada konten. issues.close_issue=Tutup @@ -640,6 +686,12 @@ issues.close_comment_issue=Komentar dan tutup issues.reopen_issue=Buka kembali issues.reopen_comment_issue=Komentar dan buka kembali issues.create_comment=Komentar +issues.closed_at=`tertutup%[2]s` +issues.reopened_at=`membuka kembali %[2]s` +issues.commit_ref_at=`merujuk masalah dari komit %[2]s` +issues.poster=Poster +issues.collaborator=Kalaborator +issues.owner=Pemilik issues.sign_in_require_desc=Masuk untuk bergabung dengan percakapan ini. issues.edit=Sunting issues.cancel=Batal @@ -654,7 +706,11 @@ issues.label_modify=Modifikasi Label issues.label_deletion=Penghapusan Label issues.label_deletion_desc=Menghapus label ini akan menghapusnya dari semua masalah. Apakah anda yakin anda ingin melanjutkan? issues.label_deletion_success=Label telah berhasil dihapus! +issues.label.filter_sort.alphabetically=Urutan abjad +issues.label.filter_sort.reverse_alphabetically=Membalikkan menurut abjad issues.label.filter_sort.by_size=Ukuran +issues.label.filter_sort.reverse_by_size=Membalikkan ukuran +issues.num_participants=%d peserta issues.attachment.open_tab=`Klik untuk melihat "%s" di tab baru` issues.attachment.download=`Klik untuk mengunduh "%s"` issues.subscribe=Berlangganan @@ -665,8 +721,15 @@ issues.start_tracking=Mulai melacak waktu issues.start_tracking_history=`mulai bekerja %s` issues.tracking_already_started=`Anda telah memulai pelacakan waktu pada masalah ini!` issues.stop_tracking=Berhenti +issues.stop_tracking_history=`berhenti bekerja %s` issues.add_time=Menambahkan waktu secara manual +issues.add_time_short=Tambah +issues.add_time_cancel=Batalkan +issues.add_time_history=`tambah menghabiskan waktu %s` +issues.add_time_hours=Jam +issues.add_time_minutes=Menit issues.add_time_sum_to_small=Tidak ada waktu yang masuk +issues.cancel_tracking=Batal issues.cancel_tracking_history=`batalkan pelacakan waktu %s` issues.time_spent_total=Total waktu yang disisihkan @@ -684,6 +747,7 @@ pulls.create=Buat Permintaan Tarik pulls.title_desc=ingin menggabungkan commit %[1]d dari %[2]s menjadi %[3]s pulls.merged_title_desc=commit %[1]d telah digabungkan dari %[2]s menjadi %[3]s %[4]s pulls.tab_conversation=Percakapan +pulls.tab_commits=Melakukan pulls.tab_files=Berkas diubah pulls.reopen_to_merge=Tolong buka kembali permintaan tarik ini untuk melaksanakan penggabungan. pulls.merged=Menggabungkan @@ -734,19 +798,24 @@ milestones.filter_sort.least_issues=Paling sedikit masalah ext_wiki=Eks Wiki ext_wiki.desc=Eks Wiki menautkan ke sistem eksternal wiki +wiki=Wiki +wiki.welcome=Selamat datang di proyek wiki wiki.welcome_desc=Wiki memungkinkan anda dan rekan kerja anda dengan mudah membuat dokumen proyek anda. wiki.desc=Wiki adalah tempat untuk menyimpan dokumentasi wiki.create_first_page=Membuat halaman pertama wiki.page=Halaman +wiki.filter_page=Halaman Penyaring wiki.new_page=Membuat Halaman Baru wiki.default_commit_message=Tulis catatan mengenai pembaruan halaman ini (opsional). wiki.save_page=Simpan Halaman +wiki.last_commit_info=%s halaman ini diedit %s wiki.edit_page_button=Menyunting wiki.new_page_button=Halaman Baru wiki.delete_page_button=Hapus Halaman wiki.delete_page_notice_1=Ini akan menghapus halaman "%s". Mohon pastikan anda ingin menghapus halaman ini. wiki.page_already_exists=Halaman wiki dengan nama yang sama telah ada. wiki.reserved_page=Nama halaman wiki %s dicadangkan, silahkan pilih nama yang berbeda. +wiki.pages=Halaman wiki.last_updated=Pembaruan terakhir %s activity=Kegiatan @@ -756,19 +825,34 @@ activity.period.halfweekly=3 hari activity.period.weekly=1 minggu activity.period.monthly=1 bulan activity.overview=Tinjauan +activity.active_prs_count_1=%d Tarik permintaan aktif +activity.active_prs_count_n=%d Tarik permintaan aktif +activity.merged_prs_count_1=Mengabungkan Permintaan Tarik +activity.merged_prs_count_n=Menggabungkan permintaan tarik +activity.opened_prs_count_1=Meminta tarik usulan +activity.opened_prs_count_n=Meminta di tarik usulan activity.title.user_1=%d pengguna +activity.title.user_n=%d pengguna +activity.title.prs_1=%d Tarik permintaan +activity.title.prs_n=%d Tarik permintaan +activity.title.prs_merged_by=%s dibuat oleh %s activity.title.prs_opened_by=%s Dikemukakan oleh %s activity.merged_prs_label=Bergabung activity.opened_prs_label=Dikemukakan activity.active_issues_count_1=%d Masalah Aktif +activity.active_issues_count_n=%d Masalah aktif activity.closed_issues_count_1=Masalah tertutup +activity.closed_issues_count_n=Masalah tertutup activity.title.issues_1=%d Masalah +activity.title.issues_n=%d Masalah activity.title.issues_closed_by=%s ditutup oleh %s activity.title.issues_created_by=%s dibuat oleh %s activity.closed_issue_label=Tertutup activity.new_issues_count_1=Masalah Baru +activity.new_issues_count_n=Masala baru activity.new_issue_label=Terbuka activity.title.unresolved_conv_1=%d percakapan yang belum diselesaikan +activity.title.unresolved_conv_n=%d percakapan yang belum selesai activity.unresolved_conv_desc=Daftar dari semua masalah yang lama dan pull request yang telah diubah baru-baru ini tapi belum diselesaikan. activity.unresolved_conv_label=Buka activity.title.releases_1=%d Rilis @@ -784,9 +868,12 @@ settings=Pengaturan settings.desc=Pengaturan dimana anda dapat mengelola pengaturan untuk repositori settings.options=Opsi settings.collaboration=Kolaborasi +settings.collaboration.admin=Pengelola settings.collaboration.write=Tulis settings.collaboration.read=Baca settings.collaboration.undefined=Tidak terdefinisi +settings.hooks=Webhooks +settings.githooks=Git kait settings.basic_settings=Pengaturan Dasar settings.mirror_settings=Pengaturan Duplikat settings.sync_mirror=Sinkronkan Sekarang @@ -806,13 +893,21 @@ settings.use_external_issue_tracker=Gunakan pelacak masalah eksternal settings.external_tracker_url=URL Pelacak Masalah Eksternal settings.external_tracker_url_error=URL Pelacak Masalah Eksternal Tidak berlaku settings.external_tracker_url_desc=Pengunjung akan diarahkan ke URL yang ditentukan ketika mereka mengklik pada tab. +settings.tracker_url_format=Format URL pelacak edisi Eksternal +settings.tracker_issue_style=Isu Penamaan Tracker Isu Eksternal: +settings.tracker_issue_style.numeric=Numerik +settings.tracker_issue_style.alphanumeric=Alfhanumerik +settings.tracker_url_format_desc=Anda dapat menggunakan placeholder {user} {repo} {index} untuk nama pengguna, nama repositori dan indeks masalah. settings.enable_timetracker=Mengaktifkan pelacak waktu settings.allow_only_contributors_to_track_time=Izinkan hanya kontributor untuk melacak waktu settings.pulls_desc=Mengaktifkan permintaan menarik untuk menerima sumbangan publik settings.pulls.ignore_whitespace=Mengabaikan perubahan spasi ketika memeriksa konflik +settings.pulls.allow_merge_commits=Izinkan penggabungan dilakukan +settings.pulls.allow_rebase_merge=Izinkan menggunakan rebase untuk menggabungkan komit settings.pulls.allow_squash_commits=Biarkan labu sebelum melakukan penggabungan settings.danger_zone=Zona Bahaya settings.new_owner_has_same_repo=Pemilik baru sudah memiliki repositori dengan nama yang sama. Silakan pilih nama lain. +settings.convert=Mengkonversi Ke Reguler Repositori settings.convert_desc=Anda dapat mengubah cermin ini menjadi repositori biasa. Ini tidak dapat dibatalkan. settings.convert_notices_1=- Operasi ini akan mengubah repositori ini cermin biasa repositori dan tidak dapat dibatalkan. settings.convert_confirm=Konfirmasi Konversi @@ -822,10 +917,13 @@ settings.transfer_desc=Transfer repositori ini ke pengguna lain atau ke sebuah o settings.transfer_notices_1=- Anda akan kehilangan akses jika pemilik baru adalah individu pengguna. settings.transfer_notices_2=- Anda akan mempertahankan akses jika pemilik baru suatu organisasi dan jika anda salah satu dari pemilik. settings.transfer_form_title=Silakan masukkan informasi berikut untuk mengkonfirmasi operasi anda: +settings.wiki_delete=Menghapus Data Wiki +settings.wiki_delete_desc=Data wiki yang telah anda hapus tidak dapat dikembalikan. Tolong dipastikan. settings.wiki_delete_notices_1=- Ini akan menghapus dan menonaktifkan wiki untuk %s settings.wiki_deletion_success=Repositori wiki data telah terhapus. settings.delete=Menghapus Repositori Ini settings.delete_desc=Setelah Anda menghapus repositori, tidak akan kembali. Harap tertentu. +settings.delete_notices_1=- Operasi ini TIDAK BISA dibatalkan. settings.delete_notices_2=- Operasi ini akan secara permanen menghapus semua yang ada didalam %s gudang penyimpanan, termasuk kode, masalah, komentar, wiki, dan asosiasi kolaborator. settings.delete_notices_fork_1=- Semua cabang akan menjadi gudang penyimpanan yang bebas setelah penghapusan. settings.deletion_success=Gudang penyimpanan telah dihapus. @@ -862,10 +960,13 @@ settings.githook_name=Nama Hook settings.githook_content=Konten Hook settings.update_githook=Perbarui Hook settings.add_webhook_desc=Gitea akan mengirimkan sebuah permintaan POST ke URL yang anda tetapkan, bersama dengan informasi tentang event yang terjadi. Anda juga bisa menentukan format data apa yang ingin anda terima selama memicu hook tersebut (JSON, x-www-form-urlencoded, XML, dll). Informasi lebih lanjut bisa ditemukan didalam petunjuk webhooks kami. +settings.payload_url=Muatan URL settings.content_type=Tipe Konten settings.secret=Rahasia settings.slack_username=Nama pengguna +settings.slack_icon_url=Ikon URL settings.discord_username=Nama pengguna +settings.discord_icon_url=URL ikon settings.slack_color=Warna settings.event_desc=Kapan seharusnya webhook ini dipicu? settings.event_push_only=Hanya event push. @@ -877,6 +978,7 @@ settings.event_pull_request=Tarik permintaan settings.event_pull_request_desc=Permintaan tarik dibuka, ditutup, kembali dibuka, diedit, diberi, belum ditetapkan, label diperbarui, label dibersihkan, atau disinkronkan. settings.event_push=Dorong settings.event_push_desc=Git mendorong ke repositori +settings.event_repository=Repositori settings.event_repository_desc=Repositori dibuat atau dihapus settings.active=Aktif settings.active_helper=Informasi tentang peristiwa yang dipicu hook akan dikirim juga. @@ -885,6 +987,46 @@ settings.update_webhook=Perbarui Webhook settings.update_hook_success=Webhook telah diperbarui. settings.delete_webhook=Menghapus Webhook settings.recent_deliveries=Pengiriman Terakhir +settings.hook_type=Jenis Hook +settings.add_slack_hook_desc=Tambah Slack integrasi ke repositori anda. +settings.slack_token=Token +settings.slack_domain=Domain +settings.slack_channel=Saluran +settings.add_discord_hook_desc=Tambah Discord integrasi ke repositori anda. +settings.add_dingtalk_hook_desc=Tambah Dingtalk integrasi ke repositori anda. +settings.deploy_keys=Kunci Deploy +settings.add_deploy_key=Tambahkan Kunci Deploy +settings.deploy_key_desc=Penempatan kunci hanya memiliki akses baca-saja. Mereka tidak sama dengan kunci SSH akun pribadi. +settings.is_writable=Memberikan izin akses tulis +settings.is_writable_info=Tombol ini dapat di gunakan untuk mendorong ke repositori ini? Menyebarkan kunci selalu memiliki akses tarik. +settings.no_deploy_keys=Kamu belum menambahkan kunci deploy apapun. +settings.title=Judul +settings.deploy_key_content=Konten +settings.key_been_used=Konten kunci deploy telah digunakan. +settings.key_name_used=Penempatan kunci deploy dengan nama yang sama sudah ada. +settings.add_key_success=Kunci penerapan baru '%s' telah berhasil di tambahkan! +settings.deploy_key_deletion=Hapus kunci Deploy +settings.deploy_key_deletion_desc=Menghapus penyebaran kunci deploy ini akan mencegah repositori tidak diakses. Apakah kamu ingin melanjutkan? +settings.deploy_key_deletion_success=Kunci deploy telah berhasil di hapus! +settings.branches=Cabang +settings.protected_branch=Perlindungan cabang +settings.protected_branch_can_push=Mengizinkan mendorong? +settings.protected_branch_can_push_yes=Anda dapat mendorong +settings.protected_branch_can_push_no=Anda tidak dapat mendorong +settings.branch_protection=Untuk cabang perlindungan %s +settings.protect_this_branch=Melindungi cabang ini +settings.protect_this_branch_desc=Nonaktifkan pendorong dan mencegah dari penghapusan. +settings.protect_whitelist_committers=Daftar putih yang bisa mendorong ke cabang ini +settings.protect_whitelist_committers_desc=Tambahkan pengguna atau tim ke cabang daftar putih ini. Pengguna masuk daftar putih bypass mendorong batasan tipikal. +settings.protect_whitelist_users=Pengguna yang bisa mendorong masuk ke cabang ini +settings.protect_whitelist_search_users=Mencari pengguna +settings.protect_whitelist_teams=Tim yang anggotanya bisa mendorong ke cabang ini. +settings.protect_whitelist_search_teams=Pencarian tim +settings.add_protected_branch=Aktifkan perlindungan +settings.delete_protected_branch=Nonaktifkan perlindungan +settings.update_protect_branch_success=Cabang %s melindungi pilihan yang berhasil di ubah. +settings.remove_protected_branch_success=Cabang %s melindungi pilihan yang telah berhasil di ubah +settings.protected_branch_deletion=Menghapus cabang yang di lindungi settings.protected_branch_deletion_desc=Siapa pun dengan izin menulis akan mampu mendorong langsung ke cabang ini. Apakah anda yakin? settings.default_branch_desc=Cabang default dianggap sebagai "dasar" cabang di repositori anda terhadap semua permintaan tarik dan kode berkomitmen secara otomatis, kecuali jika anda menentukan cabang berbeda. settings.choose_branch=Memilih cabang... @@ -897,6 +1039,8 @@ diff.data_not_available=Konten Diff Tidak Tersedia diff.show_diff_stats=Menunjukkan Perbedaan Statistik diff.show_split_view=Tampilan split diff.show_unified_view=Pandangan Terpadu +diff.stats_desc= %d mengubah file dengan %d tambahan dan %d penghapusan +diff.bin=TEMPAT SAMPAH diff.view_file=Melihat File diff.file_suppressed=File diff ditekan karena terlalu besar diff.too_many_files=Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam hal ini di diff @@ -905,8 +1049,10 @@ releases.desc=Rilis adalah tempat untuk mengelola versi dari proyek anda release.releases=Rilis release.new_release=Baru Rilis release.draft=Rancangan +release.prerelease=Pra-Rilis release.stable=Stabil release.edit=edit +release.ahead=%d melakukan %s sejak rilis ini release.source_code=Sumber kode release.new_subheader=Mempublikasikan rilis untuk melacak versi proyek. release.edit_subheader=Rinci changelog dapat membantu pengguna memahami apa yang telah berubah. @@ -928,9 +1074,50 @@ release.delete_release=Hapus Rilis ini release.deletion=Penghapusan Rilis release.deletion_desc=Menghapus rilis ini akan menghapus sesuai Git tag. Anda tidak akan kehilangan setiap kode. Apakah anda ingin melanjutkan? release.deletion_success=Rilis ini telah dihapus. +release.tag_name_already_exist=Nama tag dengan rilis ini sudah ada. +release.tag_name_invalid=Tanda nama ini tidak benar. +release.downloads=Unduhan +branch.name=Nama cabang +branch.search=Cari cabang +branch.already_exists=Cabang bernama %s yang sudah ada. +branch.delete_head=Hapus +branch.delete=Menghapus cabang %s +branch.delete_html=Hapus cabang +branch.delete_desc=Menghapus cabang secara permanen. Tidak ada cara untuk membatalkan itu. +branch.delete_notices_1=- Operasi ini TIDAK BISA dibatalkan. +branch.delete_notices_2=- Operasi ini akan menghapus segala sesuatu yang ada di cabang %s. +branch.delete_notices_html=- Operasi ini akan menghapus segala sesuatu yang ada di cabang +branch.deletion_success=%s Sudah terhapus. +branch.deletion_failed=Gagal menghapus cabang %s. +branch.delete_branch_has_new_commits=%s tidak dapat dihapus karena komit baru telah ditambahkan setelah penggabungan. +branch.create_branch=Membuat cabang %s +branch.create_from=dari '%s' +branch.create_success=Cabang '%s' telah berhasil di buat! +branch.branch_already_exists=Cabang '%s' sudah ada di repositori ini. +branch.branch_name_conflict=Nama cabang '%s' konflik dengan cabang yang sudah ada '%s'. +branch.tag_collision=Cabang '%s' tidak dapat dibuat sebagai tag dengan nama yang sama sudah ada di repositori ini. +branch.deleted_by=Dihapus oleh %s +branch.restore_success=%s berhasil dipulihkan +branch.restore_failed=Gagal mengembalikan cabang %s. +branch.protected_deletion_failed=Tidak mungkin menghapus cabang yang dilindungi %s. [org] +org_name_holder=Nama Organisasi +org_full_name_holder=Organisasi Nama Lengkap +org_name_helper=Nama organisasi besar pendek dan mudah diingat. +create_org=Buat Organisasi +repo_updated=Diperbarui +people=Orang +teams=Tim +lower_members=anggota +lower_repositories=repositori +create_new_team=Buat Tim Baru +org_desc=Deskripsi +team_name=Nama tim +team_desc=Deskripsi +team_name_helper=Anda akan menggunakan nama ini untuk menyebut tim ini dalam percakapan. +team_desc_helper=Untuk apa tim ini? team_permission_desc=Izin apa yang harus dimiliki tim ini? team_unit_desc=Unit mana yang harus dimiliki tim ini? @@ -949,6 +1136,7 @@ settings.change_orgname_prompt=Perubahan ini akan mengubah link ke organisasi. settings.update_avatar_success=Organisasi avatar telah diperbarui. settings.delete=Menghapus Organisasi settings.delete_account=Menghapus Organisasi Ini +settings.delete_prompt=Organisasi akan dihapus secara permanen. Dan, ini TIDAK BISA dibatalkan! settings.confirm_delete_account=Konfirmasi Penghapusan settings.delete_org_title=Penghapusan organisasi settings.delete_org_desc=Organisasi ini akan dihapus secara permanen, apakah anda yakin anda ingin melanjutkan? @@ -956,38 +1144,134 @@ settings.hooks_desc=Tambahkan webhooks yang akan dipicu untuk semua repo members.membership_visibility=Visibilitas Keanggotaan: members.public=Publik +members.public_helper=menjadikan pribadi members.private=Pribadi +members.private_helper=menjadikan publik members.member_role=Peran Anggota: members.owner=Pemilik members.member=Anggota members.remove=Menghapus members.leave=Meninggalkan +members.invite_desc=Tambahkan anggota baru ke %s: members.invite_now=Mengundang Sekarang teams.join=Ikut teams.leave=Meninggalkan +teams.read_access=Akses Baca teams.read_access_helper=Tim ini akan dapat melihat dan mengkloning repositorinya. +teams.write_access=Akses Menulis teams.write_access_helper=Tim ini akan mampu untuk membaca dan mendorong ke repository. +teams.admin_access=Akses Admin teams.admin_access_helper=Tim ini akan mampu mendorong dan tarik ke repositori, serta menambahkan kolaborator lain untuk mereka. teams.no_desc=Tim ini tidak memiliki keterangan teams.settings=Pengaturan +teams.owners_permission_desc=Pemilik memiliki akses penuh ke semua repositori dan memiliki hak pengelola ke sebuah organisasi. +teams.members=Anggota tim +teams.update_settings=Memperbarui pengaturan +teams.delete_team=Hapus Tim Ini +teams.add_team_member=Tambahkan Anggota Tim +teams.delete_team_title=Penghapusan Tim teams.delete_team_desc=Karena tim ini akan dihapus, anggota tim ini mungkin kehilangan akses ke beberapa repositori. Apakah anda ingin melanjutkan? +teams.delete_team_success=Tim sudah di hapus. +teams.read_permission_desc=Bantuan tim Baca mengakses: anggota dapat melihat dan mengkloning repositori tim. +teams.write_permission_desc=Bantuan tim ini Tulis mengakses: anggota dapat membaca dan mendorong kepada repositori tim. +teams.admin_permission_desc=Bantuan tim ini Pengelola mengakses: anggota dapat membaca, mendorong, dan menambahkan kolaburator ke repositori tim. +teams.repositories=Tim repositori +teams.search_repo_placeholder=Cari repositori... +teams.add_team_repository=Tambahkan Tim Repositori +teams.remove_repo=Menghapus +teams.add_nonexistent_repo=Repositori yang ingin Anda tambahkan tidak ada; Silahkan buat terlebih dahulu. [admin] +dashboard=Dasbor +users=Pengguna +organizations=Organisasi +repositories=Repositori +authentication=Otentikasi +config=Konfigurasi +notices=Pemberitahuan Sistem +monitor=Memantau +first_page=Pertama +last_page=Terakhir +total=Total: %d +dashboard.statistic=Statistik +dashboard.operations=Operasi +dashboard.system_status=Status sistem monitor +dashboard.statistic_info=Memiliki Database Gitea %d pengguna, %d organisasi, %d kunci publik, %d repositori, %d jam tangan, %d bintang, %d tindakan, %d akses, %d masalah, %d komentar, %d akun sosial, %d berikut, %d cermin, %d rilis, %d sumber login, %d webhooks, %d tonggak sejarah, %d label, %d tugas hook, %d tim, %d perbarui tugas, %d lampiran. +dashboard.operation_name=Nama operasi +dashboard.operation_switch=Beralih +dashboard.operation_run=Lari +dashboard.clean_unbind_oauth=Bersihkan koneksi OAuth yang tidak terikat +dashboard.clean_unbind_oauth_success=Semua koneksi OAuth yang tidak terikat telah dihapus. +dashboard.delete_inactivate_accounts=Hapus semua akun yang tidak aktif +dashboard.delete_inactivate_accounts_success=Semua akun yang tidak aktif telah dihapus. +dashboard.delete_repo_archives=Hapus semua arsip repositori +dashboard.delete_repo_archives_success=Semua arsip repositori telah dihapus. +dashboard.delete_missing_repos=Hapus semua catatan repositori yang kehilangan file Git mereka +dashboard.delete_missing_repos_success=Semua catatan repositori yang kehilangan file Git mereka telah dihapus. +dashboard.git_gc_repos=Lakukan pengumpulan sampah di semua repositori +dashboard.git_gc_repos_success=Semua repositori sudah selesai melakukan pengumpulan sampah. +dashboard.resync_all_sshkeys=Menulis ulang '.ssh/authorized_keys' berkas (untuk kunci Gitea SSH). Tidak perlu melakukan ini jika anda menggunakan built server SSH. dashboard.resync_all_sshkeys_success=Semua kunci publik dikendalikan oleh Gitea telah ditulis ulang. +dashboard.resync_all_hooks=Menerima sinkronkan kembali, memperbarui dan menerima kait setelah menerima semua repositori. +dashboard.resync_all_hooks_success=Menerima semua repositori, memperbarui dan menerima kait telah disinkronkan. +dashboard.reinit_missing_repos=Menginstal kembali semua repositori Git yang hilang dimana ada catatan dashboard.reinit_missing_repos_success=Semua repositori Git yang hilang yang catatannya dan telah diinisialisasi ulang. dashboard.sync_external_users=Sinkronkan data pengguna eksternal dashboard.sync_external_users_started=Pengguna eksternal sinkronisasi dimulai +dashboard.server_uptime=Waktu tambahan server +dashboard.current_goroutine=Goroutin saat ini +dashboard.current_memory_usage=Penggunaan memori saat ini +dashboard.total_memory_allocated=Total memori dialokasikan +dashboard.memory_obtained=Memori yang didapat +dashboard.pointer_lookup_times=Menunjukkan waktu pencarian +dashboard.memory_allocate_times=Waktu mengalokasikan memori +dashboard.memory_free_times=Waktu bebas memori +dashboard.current_heap_usage=Penggunaan tumpukan saat ini +dashboard.heap_memory_obtained=Tumpukan memori yang didapat +dashboard.heap_memory_idle=Tumpukan memori yang menganggur +dashboard.heap_memory_in_use=Tumpukan memori yang digunakan +dashboard.heap_memory_released=Tumpukan memori dirilis +dashboard.heap_objects=Benda tumpukan +dashboard.mspan_structures_usage=Penggunaan struktur MSpan +dashboard.mspan_structures_obtained=Struktur MSpan didapatkan +dashboard.mcache_structures_usage=Penggunaan struktur MCache +dashboard.mcache_structures_obtained=Struktur MCache didapatkan dashboard.profiling_bucket_hash_table_obtained=Profil Meja Bucket Hash Yang Diperoleh +dashboard.gc_metadata_obtained=Metadata GC didapatkan dashboard.other_system_allocation_obtained=Alokasi Sistem Lainnya Yang Diperoleh +dashboard.next_gc_recycle=Selanjutnya GC Recycle +dashboard.last_gc_time=Sejak waktu GC terakhir +dashboard.total_gc_time=Total GC di jeda +dashboard.total_gc_pause=Total GC di jeda +dashboard.last_gc_pause=GC di jeda terakhir +dashboard.gc_times=Waktu GC users.user_manage_panel=Manajemen Pengolahan Pengguna users.new_account=Buat Akun Baru users.name=Nama users.activated=Diaktifkan +users.admin=Pengelola +users.created=Dibuat +users.last_login=Terakhir masuk +users.never_login=Tidak pernah masuk users.send_register_notify=Kirim Pendaftaran Pemberitahuan Kepada Pengguna +users.new_success=Akun '%s' telah dibuat. +users.edit=Edit users.auth_source=Sumber Otentikasi +users.local=Lokal +users.auth_login_name=Nama login otentikasi +users.password_helper=Biarkan kosong agar tetap tidak berubah. +users.update_profile_success=Akun profil telah diperbarui. +users.edit_account=Edit akun +users.max_repo_creation=Batas maksimum penyusunan repositori +users.max_repo_creation_desc=(Set -1 untuk menggunakan batas standar global) +users.is_activated=Akun diaktifkan +users.prohibit_login=Masuk dinonaktifkan +users.is_admin=Izin administrator +users.allow_git_hook=Diizinkan untuk membuat kait git +users.allow_import_local=Memungkinkan untuk mengimpor repositori lokal users.allow_create_organization=Diperbolehkan untuk membuat organisasi users.update_profile=Memperbarui Akun Profil users.delete_account=Menghapus Akun @@ -997,16 +1281,79 @@ users.deletion_success=Akun berhasil dihapus. orgs.org_manage_panel=Manajemen Organisasi orgs.name=Nama +orgs.teams=Tim +orgs.members=Anggota orgs.new_orga=Membuat Organisasi repos.repo_manage_panel=Manajemen Repositori +repos.owner=Pemilik +repos.name=Nama +repos.private=Pribadi +repos.watches=Jam tangan +repos.stars=Bintang +repos.issues=Masalah +repos.size=Ukuran auths.auth_manage_panel=Manajemen Otentikasi +auths.new=Tambahkan sumber baru +auths.name=Nama +auths.type=Jenis +auths.enabled=Aktif auths.syncenabled=Mengaktifkan sinkronisasi pengguna +auths.updated=Diperbarui +auths.auth_type=Jenis otentikasi +auths.auth_name=Nama otentikasi +auths.security_protocol=Protokol keamanan +auths.domain=Domain +auths.host=Host +auths.port=Port +auths.bind_dn=Mengikat DN +auths.bind_password=Mengikat kata sandi auths.bind_password_helper=Peringatan: password Ini disimpan dalam bentuk teks biasa. Hal ini sangat dianjurkan untuk menggunakan akun hanya dibaca. +auths.user_base=Basis pencarian pengguna +auths.user_dn=Pengguna DN +auths.attribute_username=Atribut nama pengguna +auths.attribute_username_placeholder=Biarkan kosong untuk menggunakan nilai bidang formulir untuk masuk sebagai nama pengguna. +auths.attribute_name=Atribut nama depan +auths.attribute_surname=Atribut nama keluarga +auths.attribute_mail=Atribut email +auths.attributes_in_bind=Ambil atribut dalam konteks mengikat DN +auths.filter=Menyaring pengguna +auths.admin_filter=Menyaring admin +auths.ms_ad_sa=Pencarian atribut MS AD +auths.smtp_auth=Jenis otentikasi SMTP +auths.smtphost=Host SMTP +auths.smtpport=Port SMTP +auths.allowed_domains=Domain yang diizinkan +auths.allowed_domains_helper=Biarkan kosong untuk mengizinkan semua domain. Beberapa domain harus dipisahkan dengan koma ','. +auths.enable_tls=Aktifkan enkripsi TLS +auths.skip_tls_verify=Lewati verifikasi TLS +auths.pam_service_name=Nama layanan PAM +auths.oauth2_provider=Penyediaan OAuth2 +auths.oauth2_clientID=ID klien (kunci) +auths.oauth2_clientSecret=Rahasia klien +auths.openIdConnectAutoDiscoveryURL=Buka ID yang terhubung langsung dengan jelajah otomatis URL +auths.oauth2_use_custom_url=Gunakan URLs khusus sebagai ganti dari URLs bawaan +auths.oauth2_tokenURL=Token URL +auths.oauth2_authURL=Mengizinkan URL +auths.oauth2_profileURL=Profil URL +auths.oauth2_emailURL=Email URL +auths.enable_auto_register=Mengaktifkan pendaftaran otomatis +auths.tips=Cara +auths.tips.oauth2.general=Otentikasi OAuth2 +auths.tips.oauth2.general.tip=Saat mendaftarkan otentikasi OAuth2 yang baru, URL menelepon kembali/mengahlihkan jurusan harus menjadi: /user/oauth2//callback +auths.tip.oauth2_provider=Penyediaan OAuth2 +auths.tip.bitbucket=Daftarkan konsumen OAuth yang baru di https://bitbucket.org/account/user//oauth-consumers/new dan tambahkan "Akun"-"Baca +auths.tip.dropbox=Membuat aplikasi baru di https://www.dropbox.com/developers/apps auths.tip.facebook=Daftarkan sebuah aplikasi baru di https://developers.facebook.com/apps dan tambakan produk "Facebook Masuk +auths.tip.github=Mendaftar aplikasi OAuth baru di https://github.com/settings/applications/new +auths.tip.gitlab=Mendaftar aplikasi baru di https://gitlab.com/profile/applications +auths.tip.google_plus=Dapatkan surat kepercayaan klien OAuth2 dari konsol Google API (https://console.developers.google.com/) +auths.tip.openid_connect=Gunakan membuka ID yang terhubung ke jelajah URL (/.well-known/openid-configuration) untuk menentukan titik akhir +auths.tip.twitter=Buka https://dev.twitter.com/apps , buat aplikasi dan pastikan opsi "Izinkan aplikasi ini digunakan untuk masuk kedalam Twitter" diaktifkan. auths.edit=Mengedit Pengaturan Otentikasi auths.activated=Otentikasi ini diaktifkan +auths.new_success=Otentikasi '%s' telah ditambahkan. auths.update_success=Pengaturan otentikasi telah diperbarui. auths.update=Memperbarui Pengaturan Otentikasi auths.delete=Hapus Sumber Otentikasi ini @@ -1014,36 +1361,159 @@ auths.delete_auth_title=Menghapus Otentikasi Sumber auths.delete_auth_desc=Sumber autentikasi ini akan dihapus. Apakah anda yakin ingin melanjutkan? auths.still_in_used=Sumber otentikasi ini masih digunakan oleh satu atau beberapa pengguna, silahkan hapus atau konversikan ke sumber login yang lain dulu. auths.deletion_success=Otentikasi telah berhasil dihapus. +auths.login_source_exist=Sumber masuk '%s' sudah tersedia. config.server_config=Pengaturan Server config.app_name=Nama Aplikasi config.app_ver=Versi Aplikasi config.app_url=URL Aplikasi +config.custom_conf=Jalur berkas konfigurasi +config.domain=Domain +config.offline_mode=Mode tidak aktif +config.disable_router_log=Menonaktifkan router log +config.run_user=Jalankan pengguna +config.run_mode=Jalankan mode +config.git_version=Versi Git +config.repo_root_path=Jalur akar repositori +config.static_file_root_path=Jalur akar berkas statis +config.script_type=Jenis skrip +config.reverse_auth_user=Mengembalikan pengguna otentikasi +config.ssh_config=Konfigurasi SSH +config.ssh_enabled=Aktif +config.ssh_start_builtin_server=Jalankan program dalam server +config.ssh_domain=Domain +config.ssh_minimum_key_size_check=Periksa ukuran kunci minimum +config.ssh_minimum_key_sizes=Ukuran kunci minimum +config.db_config=Konfigurasi basis data +config.db_name=Nama +config.db_user=Pengguna +config.db_ssl_mode=Mode SSL +config.db_ssl_mode_helper=(untuk "postgres" saja) +config.db_path=Jalur +config.db_path_helper=(untuk "sqlite3 dan "tidb") +config.service_config=Konfigurasi layanan +config.register_email_confirm=Perlu konfirmasi email +config.disable_register=Nonaktifkan pendaftaran +config.enable_openid_signup=Mengaktifkan pendaftaran melalui OpenID +config.enable_openid_signin=Mengaktifkan OpenID masuk +config.show_registration_button=Tampilkan tombol mendaftar +config.require_sign_in_view=Membutuhkan tampilan masuk +config.mail_notify=Pemberitahuan surat +config.disable_key_size_check=Menonaktifkan memeriksa ukuran kunci minimum +config.enable_captcha=Mengaktifkan captcha +config.active_code_lives=Kode aktif hidup +config.reset_password_code_lives=Reset kode kata sandi waktu kedaluwarsa +config.default_keep_email_private=Nilai bawaan untuk menyimpan email pribadi +config.default_allow_create_organization=Izin bawaan untuk membuat organisasi +config.default_enable_timetracking=Aktifkan pelacakan waktu secara bawaan config.default_allow_only_contributors_to_track_time=Memungkinkan hanya kontributor untuk melacak waktu secara default +config.no_reply_address=Alamat tidak-balas +config.webhook_config=Konfigurasi Webhook +config.queue_length=Panjang antrian +config.deliver_timeout=Berikan waktu habis +config.skip_tls_verify=Melewatkan verifikasi TLS +config.mailer_config=Konfigurasi pengirim surat +config.mailer_enabled=Diaktifkan +config.mailer_disable_helo=Nonaktifkan HELO +config.mailer_name=Nama +config.mailer_host=Host +config.mailer_user=Pengguna +config.mailer_use_sendmail=Menggunakan Sendmail +config.mailer_sendmail_path=Jalur Sendmail +config.mailer_sendmail_args=Argumen tambahan Sendmail config.send_test_mail=Kirim Surel Percobaan config.test_mail_failed=Gagal untuk mengirimkan surel percobaan ke '%s': %v config.test_mail_sent=Surel percobaan telah dikirim ke '%s'. +config.oauth_config=Konfigurasi OAuth +config.oauth_enabled=Diaktifkan +config.cache_config=Konfigurasi cache +config.cache_adapter=Adaptor cache +config.cache_interval=Interval cache +config.cache_conn=Koneksi cache +config.session_config=Sesi konfigurasi +config.session_provider=Sesi penyedia +config.provider_config=Konfigurasi penyedia +config.cookie_name=Nama cookie +config.enable_set_cookie=Pengatur cookie diaktifkan +config.gc_interval_time=Waktu interval GC +config.session_life_time=Sesi jangka waktu +config.https_only=Hanya HTTPS +config.cookie_life_time=Jangka waktu cookie +config.picture_config=Konfigurasi gambar +config.picture_service=Gambar layanan +config.disable_gravatar=Menonaktifkan Gravatar +config.enable_federated_avatar=Aktifkan pencarian avatar +config.git_config=Konfigurasi Git +config.git_disable_diff_highlight=Menonaktifkan Diff Syntax utama +config.git_max_diff_lines=Garis Max Diff (untuk berkas tunggal) +config.git_max_diff_line_characters=Karakter Max Diff (untuk garis tunggal) +config.git_max_diff_files=Berkas Max Diff (untuk ditampilkan) +config.git_gc_args=Argumen GC config.git_migrate_timeout=Batas Waktu Migrasi +config.git_mirror_timeout=Waktu habis untuk memperbarui cermin +config.git_clone_timeout=Waktu habis operasi klon +config.git_pull_timeout=Waktu habis tarik operasi +config.git_gc_timeout=Waktu habis operasi GC +config.log_config=Catat konfigurasi +config.log_mode=Mode catat +monitor.cron=Tugas Cron +monitor.name=Nama +monitor.schedule=Jadwal +monitor.next=Waktu selanjutnya +monitor.previous=Waktu sebelumnya +monitor.execute_times=Jalankan waktu +monitor.process=Menjalankan proses +monitor.desc=Deskripsi +monitor.start=Waktu mulai +monitor.execute_time=Waktu pelaksanaan +notices.system_notice_list=Pemberitahuan sistem +notices.view_detail_header=Lihat rincian pemberitahuan +notices.actions=Tindakan +notices.select_all=Pilih semua +notices.deselect_all=Tidak pilih semua +notices.inverse_selection=Seleksi terbalik +notices.delete_selected=Hapus yang dipilih +notices.delete_all=Menghapus semua pemberitahuan +notices.type=Jenis +notices.type_1=Repositori notices.desc=Deskripsi +notices.op=Op. notices.delete_success=Laporan sistem telah dihapus. [action] +create_repo=repositori dibuat %s rename_repo=ganti nama gudang penyimpanan dari %[1]s ke %[3]s +commit_repo=di dorong ke %[3]sat%[4]s +create_issue=`masalah dibuka %s#%[2]s` +close_issue=`masalah ditutup %s#%[2]s` +reopen_issue=`masalah dibuka kembali %s#%[2]s` +create_pull_request=`dibuat permintaan tarik %s#%[2]s` +close_pull_request=`ditutup permintaan tarik %s#%[2]s` +reopen_pull_request=`dibuka kembali permintaan tarik %s#%[2]s` +comment_issue=`mengomentari masalah %s#%[2]s` +merge_pull_request=`permintaan tarik gabung %s#%[2]s` +transfer_repo=ditransfer repositori %s ke %s +push_tag=tag didorong %[2]s ke %[3]s +delete_tag=tag dihapus %[2]s dari %[3]s +delete_branch=cabang dihapus %[2]s dari %[3]s +compare_commits=Bandingkan %d melakukan [tool] +ago=%s yang lalu +from_now=%s mulai sekarang now=sekarang future=masa depan 1s=1 detik @@ -1053,10 +1523,20 @@ future=masa depan 1w=1 minggu 1mon=1 bulan 1y=1 tahun +seconds=%d detik +minutes=%d menit +hours=%d jam +days=%d hari +weeks=%d minggu +months=%d bulan +years=%d tahun +raw_seconds=detik +raw_minutes=menit [dropzone] default_message=Jatuhkan berkas atau klik untuk mengunggah. invalid_input_type=Anda tidak bisa mengunggah berkas jenis ini. +file_too_big=Ukuran berkas ({{filesize}} MB) melebihi ukuran maksimum ({{maxFilesize}} MB). remove_file=Hilangkan berkas [notification] @@ -1065,15 +1545,20 @@ unread=Belum dibaca read=Dibaca no_unread=Anda tidak punya notifikasi yang belum dibaca apapun. no_read=Anda tidak punya notifikasi yang dibaca apapun. +pin=Pemberitahuan Pin +mark_as_read=Tandai sebagai membaca mark_as_unread=Tandai sebagai belum dibaca mark_all_as_read=Tandai semua sudah dibaca [gpg] +error.extract_sign=Gagal untuk mengambil tanda tangan error.generate_hash=Gagal untuk menghasilkan hash komit error.no_committer_account=Tidak ada akun yang terhubung ke email komersil error.no_gpg_keys_found=Tidak diketahui kunci yang ditemukan di database signature +error.not_signed_commit=Bukan melakukan yang ditandatangani error.failed_retrieval_gpg_keys=Gagal mengambil kunci apapun yang terpasang pada akun [units] +error.no_unit_allowed_repo=Tidak dapat menemukan unit pada repositori ini yang memperoleh akses untuk anda error.unit_not_allowed=Anda tidak diizinkan untuk mengunjungi unit repositori ini diff --git a/options/locale/locale_sv-SE.ini b/options/locale/locale_sv-SE.ini index 1005208e5..56e2c4184 100644 --- a/options/locale/locale_sv-SE.ini +++ b/options/locale/locale_sv-SE.ini @@ -20,6 +20,7 @@ notifications=Notiser create_new=Skapa... user_profile_and_more=Användarprofil med mera signed_in_as=Inloggad som +enable_javascript=Denna hemsida fungerar bättre med JavaScript username=Användarnamn email=E-post @@ -46,6 +47,11 @@ your_profile=Din profil your_starred=Dina Stjärnmärkta your_settings=Dina inställningar +all=Alla +sources=Källor +mirrors=Speglar +collaborative=Kollaborativa +forks=Forks activities=Aktiviteter pull_requests=Pull förfrågningar @@ -57,6 +63,7 @@ cancel=Avbryt install=Installation title=Inledande konfiguration docker_helper=Om du kör Gitea inuti Docker, vänligen läs riktninjerna noggrant innan du ändrar någonting på denna sida. +requite_db_desc=Gitea kräver MySQL, MSSQL, PostgreSQL, SQLite3 eller TiDB. db_title=Databasinställningar db_type=Databastyp host=Server @@ -110,6 +117,10 @@ federated_avatar_lookup=Aktivera förenad uppslagning av avatarer federated_avatar_lookup_popup=Använd libravatar vid förenad uppslagning av avatarer. disable_registration=Stäng av självregistrering disable_registration_popup=Stäng av självregistrering av användare, endast administratören kan skapa konton. +openid_signin=Aktivera OpenID-inloggning +openid_signin_popup=Aktivera användarinloggning via OpenID +openid_signup=Aktivera OpenID självregistrering +openid_signup_popup=Aktivera OpenID-baserad självregistrering enable_captcha=Aktivera Captcha enable_captcha_popup=Kräv captcha för användarregistrering. require_sign_in_view=Kräv inloggning för att visa sidor @@ -235,6 +246,8 @@ Content=Innehåll require_error=får inte vara tomt alpha_dash_error=` får bara innehålla bokstäver, nummer och bindestreck (-_).` +alpha_dash_dot_error=` får bara innehålla bokstäver, nummer, bindestreck (-_) och punkt` +git_ref_name_error='måste vara ett för git välformaterat referensnamn.' size_error=` måste vara av storleken %s` min_size_error=` måste innehålla minst %s tecken.` max_size_error=` får inte innehålla mer än %s tecken.` @@ -246,20 +259,26 @@ captcha_incorrect=Captcha stämmer inte överens. password_not_match=Dina valda lösenord matchar inte. username_been_taken=Användarnamnet är upptaget. +repo_name_been_taken=Utvecklingskatalogsnamnet är upptaget. org_name_been_taken=Organisationsnamnet är upptaget. team_name_been_taken=Gruppnamnet är upptaget. +team_no_units_error=Laget måste ha minst en enhet aktiverad. email_been_used=E-postadress används redan. openid_been_used=OpenID-adressen '%s' används redan. username_password_incorrect=Felaktigt användarnamn eller lösenord. +enterred_invalid_repo_name=Se till att utvecklingskatalogsnamet du angav är rätt. enterred_invalid_owner_name=Kontrollera att ägarnamnet som du angav är rätt. +enterred_invalid_password=Kontrollera att lösenordet du angav är rätt. user_not_exist=Användaren finns inte. last_org_owner=Att ta bort den sista användaren i ägare-teamet är inte tillåtet då det måste finnas minst en användare i ägare-teamet. cannot_add_org_to_team=En organisation kan inte läggas till som en gruppmedlem. invalid_ssh_key=Tyvärr, din SSH-nyckel: %s kan inte verifieras invalid_gpg_key=Tyvärr, din GPG-nyckel: %s kan inte verifieras +unable_verify_ssh_key=SSH-nyckeln kunde ej verifieras; Vänligen dubbelkolla om du gjort något misstag. auth_failed=Autentisering misslyckades: %v +still_own_repo=Ditt konto har fortfarande ägandeskap över minst en utvecklingskatalog. Du måste ta bort eller överföra dem först. still_has_org=Ditt konto fortfarande är fortfarande medlem i minst en organisation, du måste lämna dem först. org_still_own_repo=Denna organisation har fortfarande ägandeskap över en eller flera utvecklingskataloger, du måste ta bort eller överföra dem först. @@ -282,11 +301,13 @@ form.name_pattern_not_allowed=Användarnamnet '%s' är inte tillåtet. [settings] profile=Profil password=Lösenord +security=Säkerhet avatar=Visningsbild ssh_gpg_keys=SSH / GPG-nycklar social=Sociala konton applications=Applikationer orgs=Organisationer +repos=Utvecklingskataloger delete=Radera konto twofa=Tvåfaktorsautentisering account_link=Externa konton @@ -302,6 +323,7 @@ location=Plats update_profile=Uppdatera profil update_profile_success=Din profil har uppdaterats. change_username=Användarnamn ändrat +change_username_prompt=Denna ändring kommer att ändra länkarna till ditt konto. continue=Fortsätt cancel=Avbryt @@ -320,6 +342,7 @@ new_password=Nytt lösenord retype_new_password=Skriv ditt nya lösenord igen password_incorrect=Nuvarande lösenord är felaktigt. change_password_success=Ditt lösenord har ändrats. Du kan nu logga in med ditt nya lösenord. +password_change_disabled=Icke-lokala användare kan inte ändra sitt lösenord via webbgränssnittet. emails=E-postadresser manage_emails=Hantera e-postadresser @@ -329,19 +352,25 @@ primary=Primär primary_email=Ställ in som primär delete_email=Radera email_deletion=Ta bort e-post +email_deletion_desc=Radering av denna epost-adress kommer ta bort all relaterad information från ditt konto. Git commits som använder denna epost-adress förblir oförändrade. Vill du fortsätta? email_deletion_success=Epostaddressen har tagits bort! +openid_deletion_desc=Igenom att ta bort denna OpenID-adress från ditt konto kommer du inte kunna logga in med det i framtiden. Är du säker på att du vill fortsätta? openid_deletion_success=OpenID har tagits bort! add_new_email=Lägg till ny e-postadress add_new_openid=Lägg till ny OpenID URI add_email=Lägga till e-post add_openid=Lägg till OpenID URI +add_email_confirmation_sent=Ett nytt bekräftelsemail har skickats till '%s', kontrollera vänligen din inkorg inom dom närmsta %d timmarna för att slutföra bekräftelsen. add_email_success=Din nya epostaddress har lagts till. +add_openid_success=Din nya OpenID-adress har lagts till. keep_email_private=Håll Epostadressen Gömd keep_email_private_popup=Om denna inställningar är påslagen kommer din epostaddress att hållas gömd från andra användare. +openid_desc=Med OpenID-adresser kan du delegera autentisering mot en leverantör av ditt eget val manage_ssh_keys=Hantera SSH-nycklar manage_gpg_keys=Hantera GPG-nycklar add_key=Lägg till nyckel +ssh_desc=Detta är de SSH-nycklar som associerats med ditt konto. Eftersom dessa nycklar tillåter brukaren att få tillgång till din utvecklingskatalog, är det mycket viktigt att kontrollera att dom är dina. gpg_desc=Dessa GPG-nycklar är associerade med ditt konto. Eftersom dessa nycklar tillåter revisioner att verifieras är det mycket viktigt att du håller den motsvarande privata nyckeln säker. ssh_helper=Behöver du hjälp? Kolla in Github's guide för att skapa din egen SSH-nycklar eller lösa vanliga problem som kan uppstå med SSH. gpg_helper=Behöver du hjälp? Ta en titt på Github's guide om GPG. @@ -350,6 +379,7 @@ add_new_gpg_key=Lägg till GPG-nyckel ssh_key_been_used=Denna offentliga nyckel används redan. ssh_key_name_used=En offentlig nyckel med samma namn existerar redan. gpg_key_id_used=En offentlig GPG-nyckel med samma id existerar redan. +gpg_no_key_email_found=Ingen av de epostadresser kopplade till GPG-nyckeln kunde hittas. subkeys=Undernycklar key_id=Nyckel-ID key_name=Nyckelnamn @@ -365,12 +395,16 @@ ssh_key_deletion_success=SSH-nyckeln har tagits bort. gpg_key_deletion_success=GPG-nyckeln har tagits bort. add_on=Tillagd valid_until=Giltig t.om. +valid_forever=Giltig för alltid last_used=Användes senast no_activity=Ingen nylig aktivitet +can_read_info=Läs +can_write_info=Skriv key_state_desc=Denna nyckel har använts inom dom senaste 7 dagarna token_state_desc=Denna token har används inom dom senaste 7 dagarna show_openid=Synlig på min profil hide_openid=Dold från min profil +ssh_disabled=SSH är inaktiverat manage_social=Hantera länkade sociala konton social_desc=Detta är en lista över associerade sociala konton. Av säkerhetsskäl, vänligen verifiera att du igen alla dessa konton, eftersom de kan användas för att logga in på ditt konto. @@ -414,6 +448,7 @@ remove_account_link_desc=Borttagning av det länkade kontot kommer att återkall remove_account_link_success=Kontolänk borttagen! orgs_none=Du är inte en medlem i någon organisation. +repos_none=Du har inga utvecklingskataloger associerade med ditt konto delete_account=Radera ditt konto delete_prompt=Åtgärden kommer at ta bort ditt konto permanent, och kan INTE ångras! @@ -453,8 +488,12 @@ mirror_last_synced=Senast synkad watchers=Observerare stargazers=Stjärnmärkare forks=Förgreningar +pick_reaction=Välj din reaktion +reactions_more=och %d flera form.reach_limit_of_creation=Du har redan nått gränsen av %d repos. +form.name_reserved=Utvecklingskatalogsnamnet '%s' är reserverat. +form.name_pattern_not_allowed=Utvecklingskatalogsnamnet '%s' är inte tillåtet. need_auth=Tillstånd Krävs migrate_type=Migreringstyp @@ -466,9 +505,11 @@ migrate.clone_local_path=eller sökvägen på den lokala servern migrate.permission_denied=Du får inte importera lokala repon. migrate.invalid_local_path=Ogiltig lokal sökväg, den finns inte eller är inte en katalog. migrate.failed=Migrering misslyckades: %v +migrate.lfs_mirror_unsupported=Att spegla LFS objekt stöds ej - Använd ' git lfs fetch --all ' och 'git lfs push --all' istället. mirror_from=spegling av forked_from=forkad från +fork_from_self=Du kan inte forka en utvecklingskatalog som du redan äger! copy_link=Kopiera copy_link_success=Kopierad! copy_link_error=Tryck på ⌘-C eller Ctrl-C för att kopiera @@ -483,8 +524,12 @@ download_archive=Ladda ned utvecklingskatalogen no_desc=Ingen beskrivning quick_guide=Snabbguide clone_this_repo=Klona detta repo +create_new_repo_command=Skapa en ny utvecklingskatalog på kommandoraden +push_exist_repo=Pusha en existerande utvecklingskatalog från kommandoraden +bare_message=Denna utvecklingskatalog är tom. code=Kod +code.desc=Kod är där koden lagras branch=Gren tree=Träd filter_branch_and_tag=Filtrera gren eller tagg @@ -495,6 +540,7 @@ pulls=Pull-förfrågningar labels=Etiketter milestones=Milstenar commits=Incheckningar +commit=Commit releases=Släpp file_raw=Rå file_history=Historik @@ -503,6 +549,7 @@ file_permalink=Permalänk file_too_large=Denna fil är för stor för att visas video_not_supported_in_browser=Min webbläsare stödjer inte HTML5 video-tagg. stored_lfs=Sparad med Git LFS +commit_graph=Commit-graf editor.new_file=Ny fil editor.upload_file=Ladda upp fil @@ -650,6 +697,10 @@ issues.attachment.open_tab=`Klicka för att se "%s" i en ny flik` issues.attachment.download=`Klicka för att hämta "%s"` issues.subscribe=Prenumerera issues.unsubscribe=Avsluta prenumerationen +issues.add_time_hours=Timmar +issues.add_time_minutes=Minuter +issues.add_time_sum_to_small=Ingen tid har angetts +issues.time_spent_total=Total tid spenderad pulls.new=Ny Pull-Förfrågan pulls.compare_changes=Jämför Ändringar @@ -723,6 +774,24 @@ wiki.page_already_exists=Wiki-sida med samma namn finns redan. wiki.pages=Sidor wiki.last_updated=Senast uppdaterad %s +activity.period.filter_label=Period: +activity.period.daily=1 dag +activity.period.halfweekly=3 dagar +activity.period.weekly=1 vecka +activity.period.monthly=1 månad +activity.overview=Översikt +activity.title.user_1=%d användare +activity.title.user_n=%d användare +activity.active_issues_count_1=%d Aktivt ärende +activity.active_issues_count_n=%d Aktiva ärenden +activity.closed_issues_count_1=Stängt ärende +activity.closed_issues_count_n=Stängda ärenden +activity.title.issues_1=%d ärende +activity.title.issues_n=%d Ärenden +activity.title.issues_closed_by=%s stängd av %s +activity.title.issues_created_by=%s skapad av %s +activity.closed_issue_label=Stängd +activity.new_issues_count_1=Nytt ärende settings=Inställningar @@ -776,8 +845,12 @@ settings.wiki_deletion_success=Repots wikidata har tagits bort. settings.delete=Ta Bort Detta Repo settings.delete_desc=När du har tagit bort ett repo så finns det ingen återvändo. Var säker på vad du gör. settings.delete_notices_1=- Denna åtgärd kan INTE ångras. +settings.delete_notices_fork_1=- Alla forkar kommer bli oberoende efter borttagning. +settings.deletion_success=Utvecklingskatalogen har tagits bort. +settings.update_settings_success=Utvecklingskatalogens inställningar har uppdaterats. settings.transfer_owner=Ny Ägare settings.make_transfer=Överför +settings.transfer_succeed=Ägarskapet för utvecklingskatalogen har överförts. settings.confirm_delete=Bekräfta Borttagelsen settings.add_collaborator=Lätt Till Ny Kollaboratör settings.add_collaborator_success=Ny kollaboratör har blivit tillagd. @@ -790,6 +863,7 @@ settings.org_not_allowed_to_be_collaborator=Organisationen kan inte läggas till settings.user_is_org_member=Änvändaren är en organisationsmedlem som inte kan bli tillagd som deltagare. settings.add_webhook=Lägg Till Webbhook settings.webhook_deletion=Ta Bort Webbhook +settings.webhook_deletion_desc=Borttagning av denna webbhook kommer att ta bort all dess information och all leveranshistorik. Är du säker på att du vill fortsätta? settings.webhook_deletion_success=Webbhook har tagits bort! settings.webhook.test_delivery=Testa Leverans settings.webhook.test_delivery_desc=Skicka en falsk pushhändelse för att testa dina webbhook-inställningar @@ -808,6 +882,8 @@ settings.content_type=Typ av innehåll settings.secret=Hemlighet settings.slack_username=Användarnamn settings.slack_icon_url=URL för ikon +settings.discord_username=Användarnamn +settings.discord_icon_url=URL för ikon settings.slack_color=Färg settings.event_desc=När ska Webhooken köras? settings.event_push_only=Endast push-eventet. @@ -819,6 +895,8 @@ settings.event_pull_request=Hämtningsbegäran settings.event_pull_request_desc=Hämtningsbegäran öppnad, stängd, återöppnad, redigerad, tilldelad, otilldelad, etikett uppdaterad, etikett rensad eller synkroniserad. settings.event_push=Pusha settings.event_push_desc=Uppladdning till ett förråd +settings.event_repository=Utvecklingskatalog +settings.event_repository_desc=Utvecklingskatalogen skapad eller borttagen settings.active=Aktiv settings.add_hook_success=Ny webbkrok har lagts till. settings.update_webhook=Uppdatera Webhook diff --git a/options/locale/locale_tr-TR.ini b/options/locale/locale_tr-TR.ini index 7bdbf283a..e489c44df 100644 --- a/options/locale/locale_tr-TR.ini +++ b/options/locale/locale_tr-TR.ini @@ -270,6 +270,7 @@ openid_been_used=OpenID adresi '%s' zaten kullanımda. username_password_incorrect=Geçersiz kullanıcı adı veya şifre. enterred_invalid_repo_name=Lütfen girdiğiniz depo adının doğru olduğundan emin olun. enterred_invalid_owner_name=Lütfen girdiğiniz depo sahibi isminin doğru olduğuna emin olun. +enterred_invalid_password=Lütfen girdiğiniz şifrenin doğru olduğundan emin olun. user_not_exist=Böyle bir kullanıcı yok. last_org_owner=Bir takım içerisinde ki son kullanıcıyı silmenize müsade edilmiyor çünkü herhangi bir organizasyon en azından bir yönetici bulunmak zorunda. cannot_add_org_to_team=Organizasyon, takım üyesi olarak eklenemez. @@ -893,6 +894,7 @@ settings.tracker_url_format_desc=Kullanıcı adı, depo ismi ve hata indeksi iç settings.enable_timetracker=Zaman izleyiciyi etkinleştir settings.allow_only_contributors_to_track_time=Zamanı izlemek için sadece katkıda bulunanlara izin ver settings.pulls_desc=Herkese açık katkıları kabul etmek için değişiklik isteklerini etkinleştirin +settings.pulls.allow_merge_commits=Birleştirme işlemlerine izin ver settings.danger_zone=Tehlike Alanı settings.new_owner_has_same_repo=Yeni sahibin aynı isimde başka bir deposu var. Lütfen farklı bir isim seçin. settings.convert=Düzenli Depoya Dönüştür @@ -1421,6 +1423,7 @@ config.picture_config=Resim Yapılandırması config.picture_service=Resim Servisi config.disable_gravatar=Gravatar Hizmet Dışı +config.git_config=Git Yapılandırması config.log_config=Log Yapılandırması config.log_mode=Log Modu diff --git a/options/locale/locale_uk-UA.ini b/options/locale/locale_uk-UA.ini index 0d9e5f6d5..2723d4634 100644 --- a/options/locale/locale_uk-UA.ini +++ b/options/locale/locale_uk-UA.ini @@ -1,68 +1,474 @@ +app_desc=Зручний сервіс власного Git хостінгу, написаний на Go +home=Головна +dashboard=Панель інструментів +explore=Огляд +help=Довідка +sign_in=Увійти +sign_in_with=Увійти через +sign_out=Вийти +sign_up=Зареєструватися +register=Реєстрація +website=Web-сайт +version=Версія +page=Сторінка +template=Шаблон +language=Мова +notifications=Сповіщення +create_new=Створити... +user_profile_and_more=Профіль користувача та інше +signed_in_as=Увійшов як +enable_javascript=Цей веб-сайт працює краще з JavaScript +username=Ім'я кристувача +email=Електронна пошта +password=Пароль +re_type=Повторіть +captcha=Captcha +twofa=Двофакторна авторизація +passcode=Код доступу +repository=Репозиторій +organization=Організація +mirror=Дзеркало +new_repo=Новий репозиторій +new_migrate=Нова міграція +new_mirror=Нове дзеркало +new_fork=Новий репозиторій - копія +new_org=Нова організація +manage_org=Керування організаціями +admin_panel=Панель адміністратора +account_settings=Параметри облікового запису +settings=Параметри +your_profile=Ваш профіль +your_starred=Ваші улюблені +your_settings=Ваші налаштування +all=Усі +sources=Джерела +mirrors=Дзеркала +collaborative=Співпраця +forks=Відгалуження +pull_requests=Запити до злиття +issues=Питання +cancel=Відміна [install] +install=Встановлення +user=Користувач +password=Пароль +db_name=Ім'я бази даних +db_helper=Будь ласка, використовуйте MySQL як INNODB з таблицею символів utf8_general_ci. +ssl_mode=Режим SSL +path=Шлях +err_invalid_tidb_name=Ім'я бази даних TiDB не може містити символів "." і "-". +no_admin_and_disable_registration=Ви не можете заборонити реєстрацію без створення облікового запису адміністратора. +err_empty_admin_password=Пароль адміністратора не може бути пустим. +general_title=Основні налаштування програми +app_name=Назва програми +repo_path=Кореневий шлях репозиторія +domain=Домен +ssh_port=SSH порт +http_port=Порт HTTP +app_url=URL адреса програми +optional_title=Додаткові налаштування +smtp_host=SMTP хост +smtp_from=Від +mailer_password=Відправник паролю +register_confirm=Увімкнути підтвердження реєстрації +mail_notify=Увімкнути сповіщення електронною поштою +server_service_title=Налаштування сервера та інших сервісів +offline_mode=Увімкнути автономний режим +offline_mode_popup=Відключити CDN, так що всі файли ресурсів розміщуються локально. +disable_gravatar=Вимкнути сервіс Gravatar +disable_gravatar_popup=Виключити Gravatar та інші зовнішні джерела, всі аватари або завантажуються користувачами або використовується аватар за замовчанням. +federated_avatar_lookup=Увімкнути зовнішні аватари +federated_avatar_lookup_popup=Увімкнути зовнішний Аватар за допомогою Libravatar. +disable_registration=Вимкнути самостійну реєстрацію +disable_registration_popup=Вимкнути самостійну реєстрацію користувачів, тільки адміністратор може створювати облікові записи. +openid_signin=Увімкнути реєстрацію за допомогою OpenID +openid_signin_popup=Увімкнути вхід за допомогою OpenID +openid_signup=Увімкнути самостійну реєстрацію за допомогою OpenID +openid_signup_popup=Увімкнути самостійну реєстрацію за допомогою OpenID +enable_captcha=Увімкнути Captcha +enable_captcha_popup=Вимагати перевірку CAPTCHA при самостійній реєстрації користувача. +require_sign_in_view=Увімкнути вимогу авторизації для перегляду сторінок +require_sign_in_view_popup=Тільки авторизовані користувачі можуть переглядати сторінки, гості зможуть бачити тільки сторінку авторизації. +admin_setting_desc=Ви не мусите створювати обліковий запис адміністратора прямо зараз, користувач з Id=1 отримає доступ адміністратора автоматично. +admin_title=Налаштування облікового запису адміністратора +admin_name=Ім'я кристувача +admin_password=Пароль +confirm_password=Підтвердження пароля +admin_email=Email адміністратора +install_btn_confirm=Встановлення Gitea +test_git_failed=Не в змозі перевірити 'git' команду: %v +sqlite3_not_available=Ваша версія не підтримує SQLite3, будь ласка завантажте офіційну бінарну версію з %s, не gobuild версію. +invalid_db_setting=Помилкова настройка бази даних: %v +invalid_repo_path=Неприпустимий шлях до сховища репозиторіїв: %v +run_user_not_match=Користувач, що здійснює запуск, не відповідає поточному: %s -> %s +save_config_failed=Не в змозі зберегти конфігурацію: %v +invalid_admin_setting=Неприпустимі налаштування облікового запису адміністратора: %v +install_success=Прошу! Дякуємо вам за вибір Gitea. Розважайтеся. І будьте обережні! +default_allow_create_organization=Значення за замовчуванням для нових користувачів при створенні організації +default_enable_timetracking=Увімкнути відстеження часу за замовчуванням [home] +uname_holder=Ім'я користувача або електронна пошта +password_holder=Пароль +switch_dashboard_context=Змінити дошку +my_repos=Мої репозиторії +show_more_repos=Показати більше репозиторіїв... +collaborative_repos=Спільні репозиторії +my_orgs=Мої організації +my_mirrors=Мої дзеркала +view_home=Переглянути %s +issues.in_your_repos=В ваших репозиторіях [explore] +repos=Репозиторії +users=Користувачі +organizations=Організації +search=Пошук [auth] +create_new_account=Створити обліковий запис +register_helper_msg=Вже зареєстровані? Увійдіть зараз! +social_register_helper_msg=Вже зареєстровані? Увійдіть зараз! +disable_register_prompt=Вибачте, реєстрація відключена. Будь ласка, зв'яжіться з адміністратором сайту. +disable_register_mail=На жаль, підтвердження реєстрації на електрону пошту було відключено. +remember_me=Запам'ятати мене +forgot_password_title=Забув пароль +forgot_password=Забули пароль? +sign_up_now=Потрібен обліковий запис? Зареєструватися зараз. +active_your_account=Активувати обліковий запис +prohibit_login=Вхід заборонений +reset_password=Скинути пароль +invalid_code=На жаль, код підтвердження, закінчився або помилковий. +reset_password_helper=Натисніть тут для скидання пароля +password_too_short=Довжина пароля не може бути меншою за %d. +verify=Підтвердити +login_userpass=Користувач / Пароль +login_openid=OpenID +openid_connect_submit=Під’єднатися +openid_connect_title=Підключитися до існуючого облікового запису +openid_register_title=Створити новий обліковий запис +disable_forgot_password_mail=Вибачте, скидання паролю відключене. Будь ласка, зв'яжіться з адміністратором сайту. [mail] +activate_account=Будь ласка, активуйте ваш обліковий запис +activate_email=Підтвердить вашу адресу електронної пошти +reset_password=Відновити ваш пароль +register_success=Реєстрація успішна +register_notify=Ласкаво просимо у Gitea [modal] +yes=Так +no=Ні +modify=Змінити [form] +UserName=Ім’я користувача +RepoName=Назва репозиторію +Email=Адреса електронної пошти +Password=Пароль +Retype=Введіть пароль ще раз +SSHTitle=Iм'я SSH ключа +HttpsUrl=Адреса HTTPS +TeamName=Назва команди +AuthName=Назва авторизації +AdminEmail=Email адміністратора +NewBranchName=Ім'я нової гілки +CommitSummary=Резюме коміту +CommitMessage=Повідомлення коміту +TreeName=Шлях до файлу +Content=Зміст +require_error=` не може бути пустим.` +alpha_dash_error=` має складатись з буков, цифр, або рисок(-_).` +alpha_dash_dot_error=` має складатись з буков, цифр, рисок(-_), або крапок.` +unknown_error=Невідома помилка: +username_been_taken=Ім'я користувача вже використовується. +repo_name_been_taken=Назва репозіторію вже використовується. +org_name_been_taken=Назва організації вже використовується. +team_name_been_taken=Назва команди вже використовується. +user_not_exist=Даний користувач не існує. [user] +change_avatar=Змінити свій аватар +join_on=Приєднався +repositories=Репозиторії +activity=Публічна активність +followers=Підписники +starred=Позначені зірочками репозиторії +following=Слідкувати +follow=Підписатися +unfollow=Відписатися +form.name_reserved=Ім'я користувача "%s" зарезервовано. [settings] +profile=Профіль +password=Пароль +security=Безпека +avatar=Аватар +social=Соціальні акаунти +applications=Програми +orgs=Організації +repos=Репозиторії +delete=Видалити обліковий запис +twofa=Двофакторна авторизація +organization=Організація +uid=Ідентифікатор Uid + +public_profile=Загальнодоступний профіль +full_name=Повне ім'я +website=Web-сайт +location=Місцезнаходження +update_profile=Оновити профіль +update_profile_success=Профіль успішно оновлено. +change_username=Ім'я користувача змінено +continue=Продовжити +cancel=Відміна + +lookup_avatar_by_mail=Знайти аватар за адресою ел. пошти + +change_password=Змінити пароль +old_password=Поточний пароль +new_password=Новий пароль +retype_new_password=Введіть новий пароль іще раз +password_incorrect=Поточний пароль помилковий. + +emails=Адреса електронної пошти +manage_emails=Управління адресами електронної пошти +primary=Основний +primary_email=Встановити головним +delete_email=Видалити +email_deletion=Видалити Email +add_new_email=Додати нову адресу електронної пошти + +add_key=Додати ключ +key_content=Зміст +delete_key=Видалити +add_on=Додано +last_used=Останнє використання +no_activity=Жодної діяльності +can_read_info=Читати +can_write_info=Написати +key_state_desc=Цей ключ використовувався в останні 7 днів +token_state_desc=Цей токен використовувався в останні 7 днів +show_openid=Показати у профілю +hide_openid=Не показувати у профілі + + +delete_token=Видалити - - - - - - - +delete_account=Видалити ваш обліковий запис +confirm_delete_account=Підтвердження видалення +delete_account_title=Видалення облікового запису [repo] +owner=Власник +repo_name=Назва репозиторію +repo_name_helper=Гарна назва репозиторія зазвичай складається з коротких та унікальних ключових слів, які легко запам'ятати. +visibility=Видимість +fork_repo=Відгалужити репозиторій +fork_from=Відгалужена з +repo_desc=Опис +repo_lang=Мова +license=Ліцензія +create_repo=Створити репозиторій +default_branch=Головна гілка +migrate_type=Тип міграції +migrate_repo=Перенесення репозиторія + +forked_from=відгалужено від +copy_link=Копіювати +copy_link_success=Скопійовано! +copied=Скопійовано +unwatch=Не стежити +watch=Слідкувати +unstar=Зняти зірку +star=Зірка +fork=Відгалуження +download_archive=Скачати цей репозиторій + +no_desc=Без опису +quick_guide=Короткий посібник +clone_this_repo=Кнонувати цей репозиторій +create_new_repo_command=Створити новий репозиторій з командного рядка +push_exist_repo=Опублікувати існуючий репозиторій з командного рядка + +code=Код +branch=Гілка +tree=Дерево +filter_branch_and_tag=Фільтрувати гілку або тег +branches=Гілки +tags=Теги +issues=Питання +pulls=Запити до злиття +labels=Мітки +milestones=Етап +commits=Зміни +commit=Змина +releases=Релізи +file_raw=Raw +file_history=Історія +file_view_raw=Перегляд Raw +file_permalink=Постійне посилання + +editor.new_file=Новий файл +editor.upload_file=Завантажити файл +editor.edit_file=Редагування файла +editor.preview_changes=Попередній перегляд змін +editor.edit_this_file=Редагувати цей файл +editor.delete_this_file=Видалити цей файл +editor.name_your_file=Дайте назву файлу... +editor.or=або +editor.cancel_lower=відміна +editor.commit_changes=Зафіксувати зміни +editor.cancel=Відміна + +commits.commits=Зміни +commits.search=Знайти зміни +commits.find=Пошук +commits.search_all=Усі гілки +commits.author=Автор +commits.message=Повідомлення +commits.date=Дата +commits.older=Давніше +commits.newer=Новіше +issues.new=Нове обговорення +issues.new.labels=Мітки +issues.new.no_label=Без Мітки +issues.new.clear_labels=Очистити мітки +issues.new.milestone=Етап +issues.new.no_milestone=Етап відсутній +issues.new.clear_milestone=Очистити етап +issues.new.open_milestone=Активні етапи +issues.new.closed_milestone=Закриті етапи +issues.new.assignee=Призначено +issues.new.clear_assignee=Прибрати відповідального +issues.new.no_assignee=Немає відповідального +issues.new_label=Нова мітка +issues.new_label_placeholder=Назва мітки... +issues.create_label=Створити мітку +issues.label_templates.helper=Оберіть набір міток +issues.label_templates.use=Використовуйте набір міток +issues.previous=Попередній +issues.next=Далі +issues.open_title=Відкрити +issues.closed_title=Закриті +issues.close_issue=Закрити +issues.close_comment_issue=Прокоментувати і закрити +issues.reopen_issue=Відкрити знову +issues.reopen_comment_issue=Прокоментувати та відкрити знову +issues.create_comment=Коментар +issues.collaborator=Співавтор +issues.owner=Власник +issues.edit=Редагувати +issues.cancel=Відміна +issues.save=Зберегти +issues.label_title=Назва мітки +issues.label_color=Колір мітки +issues.label_count=%d міток +issues.label_open_issues=%d відкритих питань +issues.label_edit=Редагувати +issues.label_delete=Видалити +issues.label.filter_sort.alphabetically=За абеткою +issues.label.filter_sort.reverse_alphabetically=Зворотною абеткою +issues.label.filter_sort.by_size=Розмір +issues.label.filter_sort.reverse_by_size=Зворотний розмір +issues.subscribe=Підписатися +issues.unsubscribe=Відписатися +issues.start_tracking_short=Запустити +issues.start_tracking=Почати відстеження часу +issues.stop_tracking=Стоп +issues.add_time_cancel=Відміна +issues.cancel_tracking=Відміна + +pulls.new=Новий запит на злиття +pulls.create=Створити запит на злиття +pulls.merge_pull_request=Об'єднати запит на злиття + +milestones.new=Новий етап +milestones.open=Відкрити +milestones.close=Закрити +milestones.new_subheader=Створити етап для організації обговорень. +milestones.create=Створити етап +milestones.title=Заголовок +milestones.desc=Опис +milestones.due_date=Дата завершення (опціонально) +milestones.clear=Очистити +milestones.edit=Редагувати етап +milestones.cancel=Відміна +milestones.modify=Змінити етап +milestones.deletion=Видалення етапу +wiki=Wiki +wiki.page=Сторінка +wiki.filter_page=Фільтр сторінок +wiki.new_page=Створити нову сторінку + +activity.merged_prs_count_1=Об'єднати запит на злиття +activity.merged_prs_count_n=Об'єднати запити на злиття +activity.closed_issue_label=Закриті +activity.new_issues_count_1=Нове обговорення +activity.new_issues_count_n=Нове обговорення +activity.new_issue_label=Відкриті +activity.unresolved_conv_label=Відкрити +activity.published_release_label=Опубліковано + +search=Пошук +search.search_repo=Пошук репозиторію + +settings=Параметри +settings.options=Параметри +settings.collaboration=Співпраця +settings.collaboration.admin=Адміністратор +settings.collaboration.write=Написати +settings.collaboration.read=Читати +settings.basic_settings=Базові налаштування +settings.mirror_settings=Налаштування дзеркала +settings.tracker_issue_style.numeric=Цифровий +settings.tracker_issue_style.alphanumeric=Буквено-цифровий +settings.danger_zone=Небезпечна зона +settings.transfer_owner=Новий власник +settings.confirm_delete=Підтвердження видалення +settings.add_collaborator=Додати нового співавтора +settings.delete_collaborator=Видалити +settings.collaborator_deletion=Видалення співавтора +settings.search_user_placeholder=Пошук користувача... +settings.org_not_allowed_to_be_collaborator=Організації не можуть бути додані як співавтори. +settings.user_is_org_member=Користувач входить в організацію, член якої не може бути доданий як співавтор. +settings.slack_color=Колір +settings.event_create=Створити +settings.event_create_desc=Гілку або тег створено +settings.event_pull_request=Запити до злиття +settings.event_pull_request_desc=Запит до злиття відкрито, закрито, перевідкрито, змінено, призначено, знято, мітку оновлено, мітку прибрано або синхронізовано. +settings.event_repository=Репозиторій +settings.event_repository_desc=Репозиторій створений або видалено +settings.active=Активний - - - - - - - - - - +release.cancel=Відміна [org] @@ -70,6 +476,7 @@ +teams.add_team_repository=Додати репозиторій команди [admin]