diff --git a/modules/avatar/avatar.go b/modules/avatar/avatar.go index 106215ec0b2b8..bab5e63a08944 100644 --- a/modules/avatar/avatar.go +++ b/modules/avatar/avatar.go @@ -11,19 +11,18 @@ import ( "image/color" "image/png" - _ "image/gif" // for processing gif images - _ "image/jpeg" // for processing jpeg images + _ "image/gif" // for image format registration + _ "image/jpeg" // for image format registration "code.gitea.io/gitea/modules/avatar/identicon" "code.gitea.io/gitea/modules/setting" "golang.org/x/image/draw" - _ "golang.org/x/image/webp" // for processing webp images + _ "golang.org/x/image/webp" // for image format registration ) // DefaultAvatarSize is the target CSS pixel size for avatar generation. It is -// multiplied by setting.Avatar.RenderedSizeFactor and the resulting size is the // usual size of avatar image saved on server, unless the original file is smaller // than the size after resizing. const DefaultAvatarSize = 256 @@ -31,8 +30,8 @@ const DefaultAvatarSize = 256 // RandomImageSize generates and returns a random avatar image unique to input data // in custom size (height and width). func RandomImageSize(size int, data []byte) (image.Image, error) { - // we use white as background, and use dark colors to draw blocks - imgMaker, err := identicon.New(size, color.White, identicon.DarkColors...) + // Use transparent background instead of white + imgMaker, err := identicon.New(size, color.Transparent, identicon.DarkColors...) if err != nil { return nil, fmt.Errorf("identicon.New: %w", err) } @@ -66,11 +65,14 @@ func processAvatarImage(data []byte, maxOriginSize int64) ([]byte, error) { return nil, fmt.Errorf("image height is too large: %d > %d", imgCfg.Height, setting.Avatar.MaxHeight) } - // If the origin is small enough, just use it, then APNG could be supported, - // otherwise, if the image is processed later, APNG loses animation. - // And one more thing, webp is not fully supported, for animated webp, image.DecodeConfig works but Decode fails. - // So for animated webp, if the uploaded file is smaller than maxOriginSize, it will be used, if it's larger, there will be an error. - if len(data) < int(maxOriginSize) { + // Check max origin size if specified (for animated images) + if maxOriginSize > 0 && len(data) < int(maxOriginSize) { + return data, nil + } + + // If the origin is small enough (both dimensions <= target size), just use it + targetSize := DefaultAvatarSize * setting.Avatar.RenderedSizeFactor + if imgCfg.Width <= targetSize && imgCfg.Height <= targetSize { return data, nil } @@ -82,21 +84,24 @@ func processAvatarImage(data []byte, maxOriginSize int64) ([]byte, error) { // try to crop and resize the origin image if necessary img = cropSquare(img) - targetSize := DefaultAvatarSize * setting.Avatar.RenderedSizeFactor + if setting.Avatar.RenderedSizeFactor > 0 { + targetSize = DefaultAvatarSize * setting.Avatar.RenderedSizeFactor + } img = scale(img, targetSize, targetSize, draw.BiLinear) - // try to encode the cropped/resized image to png + // Create a new RGBA image to preserve transparency + dst := image.NewRGBA(image.Rect(0, 0, img.Bounds().Dx(), img.Bounds().Dy())) + draw.Draw(dst, dst.Bounds(), image.Transparent, image.Point{}, draw.Src) + draw.Draw(dst, img.Bounds(), img, img.Bounds().Min, draw.Over) + + // Encode the image to PNG with transparency bs := bytes.Buffer{} - if err = png.Encode(&bs, img); err != nil { + if err = png.Encode(&bs, dst); err != nil { return nil, err } resized := bs.Bytes() - // usually the png compression is not good enough, use the original image (no cropping/resizing) if the origin is smaller - if len(data) <= len(resized) { - return data, nil - } - + // Always use the processed image to ensure transparency return resized, nil } diff --git a/modules/avatar/identicon/colors.go b/modules/avatar/identicon/colors.go index 09a98bd0e9eba..201e3c1e51bb2 100644 --- a/modules/avatar/identicon/colors.go +++ b/modules/avatar/identicon/colors.go @@ -7,128 +7,128 @@ import "image/color" // DarkColors are dark colors for avatar blocks, they come from image/color/palette.WebSafe, and light colors (0xff) are removed var DarkColors = []color.Color{ - color.RGBA{0x00, 0x00, 0x33, 0xff}, - color.RGBA{0x00, 0x00, 0x66, 0xff}, - color.RGBA{0x00, 0x00, 0x99, 0xff}, - color.RGBA{0x00, 0x00, 0xcc, 0xff}, - color.RGBA{0x00, 0x33, 0x00, 0xff}, - color.RGBA{0x00, 0x33, 0x33, 0xff}, - color.RGBA{0x00, 0x33, 0x66, 0xff}, - color.RGBA{0x00, 0x33, 0x99, 0xff}, - color.RGBA{0x00, 0x33, 0xcc, 0xff}, - color.RGBA{0x00, 0x66, 0x00, 0xff}, - color.RGBA{0x00, 0x66, 0x33, 0xff}, - color.RGBA{0x00, 0x66, 0x66, 0xff}, - color.RGBA{0x00, 0x66, 0x99, 0xff}, - color.RGBA{0x00, 0x66, 0xcc, 0xff}, - color.RGBA{0x00, 0x99, 0x00, 0xff}, - color.RGBA{0x00, 0x99, 0x33, 0xff}, - color.RGBA{0x00, 0x99, 0x66, 0xff}, - color.RGBA{0x00, 0x99, 0x99, 0xff}, - color.RGBA{0x00, 0x99, 0xcc, 0xff}, - color.RGBA{0x00, 0xcc, 0x00, 0xff}, - color.RGBA{0x00, 0xcc, 0x33, 0xff}, - color.RGBA{0x00, 0xcc, 0x66, 0xff}, - color.RGBA{0x00, 0xcc, 0x99, 0xff}, - color.RGBA{0x00, 0xcc, 0xcc, 0xff}, - color.RGBA{0x33, 0x00, 0x00, 0xff}, - color.RGBA{0x33, 0x00, 0x33, 0xff}, - color.RGBA{0x33, 0x00, 0x66, 0xff}, - color.RGBA{0x33, 0x00, 0x99, 0xff}, - color.RGBA{0x33, 0x00, 0xcc, 0xff}, - color.RGBA{0x33, 0x33, 0x00, 0xff}, - color.RGBA{0x33, 0x33, 0x33, 0xff}, - color.RGBA{0x33, 0x33, 0x66, 0xff}, - color.RGBA{0x33, 0x33, 0x99, 0xff}, - color.RGBA{0x33, 0x33, 0xcc, 0xff}, - color.RGBA{0x33, 0x66, 0x00, 0xff}, - color.RGBA{0x33, 0x66, 0x33, 0xff}, - color.RGBA{0x33, 0x66, 0x66, 0xff}, - color.RGBA{0x33, 0x66, 0x99, 0xff}, - color.RGBA{0x33, 0x66, 0xcc, 0xff}, - color.RGBA{0x33, 0x99, 0x00, 0xff}, - color.RGBA{0x33, 0x99, 0x33, 0xff}, - color.RGBA{0x33, 0x99, 0x66, 0xff}, - color.RGBA{0x33, 0x99, 0x99, 0xff}, - color.RGBA{0x33, 0x99, 0xcc, 0xff}, - color.RGBA{0x33, 0xcc, 0x00, 0xff}, - color.RGBA{0x33, 0xcc, 0x33, 0xff}, - color.RGBA{0x33, 0xcc, 0x66, 0xff}, - color.RGBA{0x33, 0xcc, 0x99, 0xff}, - color.RGBA{0x33, 0xcc, 0xcc, 0xff}, - color.RGBA{0x66, 0x00, 0x00, 0xff}, - color.RGBA{0x66, 0x00, 0x33, 0xff}, - color.RGBA{0x66, 0x00, 0x66, 0xff}, - color.RGBA{0x66, 0x00, 0x99, 0xff}, - color.RGBA{0x66, 0x00, 0xcc, 0xff}, - color.RGBA{0x66, 0x33, 0x00, 0xff}, - color.RGBA{0x66, 0x33, 0x33, 0xff}, - color.RGBA{0x66, 0x33, 0x66, 0xff}, - color.RGBA{0x66, 0x33, 0x99, 0xff}, - color.RGBA{0x66, 0x33, 0xcc, 0xff}, - color.RGBA{0x66, 0x66, 0x00, 0xff}, - color.RGBA{0x66, 0x66, 0x33, 0xff}, - color.RGBA{0x66, 0x66, 0x66, 0xff}, - color.RGBA{0x66, 0x66, 0x99, 0xff}, - color.RGBA{0x66, 0x66, 0xcc, 0xff}, - color.RGBA{0x66, 0x99, 0x00, 0xff}, - color.RGBA{0x66, 0x99, 0x33, 0xff}, - color.RGBA{0x66, 0x99, 0x66, 0xff}, - color.RGBA{0x66, 0x99, 0x99, 0xff}, - color.RGBA{0x66, 0x99, 0xcc, 0xff}, - color.RGBA{0x66, 0xcc, 0x00, 0xff}, - color.RGBA{0x66, 0xcc, 0x33, 0xff}, - color.RGBA{0x66, 0xcc, 0x66, 0xff}, - color.RGBA{0x66, 0xcc, 0x99, 0xff}, - color.RGBA{0x66, 0xcc, 0xcc, 0xff}, - color.RGBA{0x99, 0x00, 0x00, 0xff}, - color.RGBA{0x99, 0x00, 0x33, 0xff}, - color.RGBA{0x99, 0x00, 0x66, 0xff}, - color.RGBA{0x99, 0x00, 0x99, 0xff}, - color.RGBA{0x99, 0x00, 0xcc, 0xff}, - color.RGBA{0x99, 0x33, 0x00, 0xff}, - color.RGBA{0x99, 0x33, 0x33, 0xff}, - color.RGBA{0x99, 0x33, 0x66, 0xff}, - color.RGBA{0x99, 0x33, 0x99, 0xff}, - color.RGBA{0x99, 0x33, 0xcc, 0xff}, - color.RGBA{0x99, 0x66, 0x00, 0xff}, - color.RGBA{0x99, 0x66, 0x33, 0xff}, - color.RGBA{0x99, 0x66, 0x66, 0xff}, - color.RGBA{0x99, 0x66, 0x99, 0xff}, - color.RGBA{0x99, 0x66, 0xcc, 0xff}, - color.RGBA{0x99, 0x99, 0x00, 0xff}, - color.RGBA{0x99, 0x99, 0x33, 0xff}, - color.RGBA{0x99, 0x99, 0x66, 0xff}, - color.RGBA{0x99, 0x99, 0x99, 0xff}, - color.RGBA{0x99, 0x99, 0xcc, 0xff}, - color.RGBA{0x99, 0xcc, 0x00, 0xff}, - color.RGBA{0x99, 0xcc, 0x33, 0xff}, - color.RGBA{0x99, 0xcc, 0x66, 0xff}, - color.RGBA{0x99, 0xcc, 0x99, 0xff}, - color.RGBA{0x99, 0xcc, 0xcc, 0xff}, - color.RGBA{0xcc, 0x00, 0x00, 0xff}, - color.RGBA{0xcc, 0x00, 0x33, 0xff}, - color.RGBA{0xcc, 0x00, 0x66, 0xff}, - color.RGBA{0xcc, 0x00, 0x99, 0xff}, - color.RGBA{0xcc, 0x00, 0xcc, 0xff}, - color.RGBA{0xcc, 0x33, 0x00, 0xff}, - color.RGBA{0xcc, 0x33, 0x33, 0xff}, - color.RGBA{0xcc, 0x33, 0x66, 0xff}, - color.RGBA{0xcc, 0x33, 0x99, 0xff}, - color.RGBA{0xcc, 0x33, 0xcc, 0xff}, - color.RGBA{0xcc, 0x66, 0x00, 0xff}, - color.RGBA{0xcc, 0x66, 0x33, 0xff}, - color.RGBA{0xcc, 0x66, 0x66, 0xff}, - color.RGBA{0xcc, 0x66, 0x99, 0xff}, - color.RGBA{0xcc, 0x66, 0xcc, 0xff}, - color.RGBA{0xcc, 0x99, 0x00, 0xff}, - color.RGBA{0xcc, 0x99, 0x33, 0xff}, - color.RGBA{0xcc, 0x99, 0x66, 0xff}, - color.RGBA{0xcc, 0x99, 0x99, 0xff}, - color.RGBA{0xcc, 0x99, 0xcc, 0xff}, - color.RGBA{0xcc, 0xcc, 0x00, 0xff}, - color.RGBA{0xcc, 0xcc, 0x33, 0xff}, - color.RGBA{0xcc, 0xcc, 0x66, 0xff}, - color.RGBA{0xcc, 0xcc, 0x99, 0xff}, - color.RGBA{0xcc, 0xcc, 0xcc, 0xff}, + // color.RGBA{0x00, 0x00, 0x33, 0xff}, // #000033 - Dark Blue + // color.RGBA{0x00, 0x00, 0x66, 0xff}, // #000066 - Deep Blue + // color.RGBA{0x00, 0x00, 0x99, 0xff}, // #000099 - Medium Blue + color.RGBA{0x00, 0x00, 0xcc, 0xff}, // #0000CC - Bright Blue + // color.RGBA{0x00, 0x33, 0x00, 0xff}, // #003300 - Dark Green + // color.RGBA{0x00, 0x33, 0x33, 0xff}, // #003333 - Greenish Blue + // color.RGBA{0x00, 0x33, 0x66, 0xff}, // #003366 - Dark Teal + color.RGBA{0x00, 0x33, 0x99, 0xff}, // #003399 - Teal + color.RGBA{0x00, 0x33, 0xcc, 0xff}, // #0033CC - Bright Teal + color.RGBA{0x00, 0x66, 0x00, 0xff}, // #006600 - Darker Green + color.RGBA{0x00, 0x66, 0x33, 0xff}, // #006633 - Greenish + color.RGBA{0x00, 0x66, 0x66, 0xff}, // #006666 - Soft Teal + color.RGBA{0x00, 0x66, 0x99, 0xff}, // #006699 - Light Teal + color.RGBA{0x00, 0x66, 0xcc, 0xff}, // #0066CC - Cyan + color.RGBA{0x00, 0x99, 0x00, 0xff}, // #009900 - Medium Green + color.RGBA{0x00, 0x99, 0x33, 0xff}, // #009933 - Bright Green + color.RGBA{0x00, 0x99, 0x66, 0xff}, // #009966 - Sea Green + color.RGBA{0x00, 0x99, 0x99, 0xff}, // #009999 - Dark Cyan + color.RGBA{0x00, 0x99, 0xcc, 0xff}, // #0099CC - Bright Cyan + color.RGBA{0x00, 0xcc, 0x00, 0xff}, // #00CC00 - Vivid Green + color.RGBA{0x00, 0xcc, 0x33, 0xff}, // #00CC33 - Bright Turquoise + color.RGBA{0x00, 0xcc, 0x66, 0xff}, // #00CC66 - Light Teal + color.RGBA{0x00, 0xcc, 0x99, 0xff}, // #00CC99 - Soft Cyan + color.RGBA{0x00, 0xcc, 0xcc, 0xff}, // #00CCCC - Cyan + // color.RGBA{0x33, 0x00, 0x00, 0xff}, // #330000 - Dark Red + // color.RGBA{0x33, 0x00, 0x33, 0xff}, // #330033 - Dark Purple + // color.RGBA{0x33, 0x00, 0x66, 0xff}, // #330066 - Purple + color.RGBA{0x33, 0x00, 0x99, 0xff}, // #330099 - Violet + color.RGBA{0x33, 0x00, 0xcc, 0xff}, // #3300CC - Bright Purple + // color.RGBA{0x33, 0x33, 0x00, 0xff}, // #333300 - Dark Yellow + // color.RGBA{0x33, 0x33, 0x33, 0xff}, // #333333 - Dark Gray + // color.RGBA{0x33, 0x33, 0x66, 0xff}, // #333366 - Blue Gray + color.RGBA{0x33, 0x33, 0x99, 0xff}, // #333399 - Slate Blue + color.RGBA{0x33, 0x33, 0xcc, 0xff}, // #3333CC - Light Slate Blue + color.RGBA{0x33, 0x66, 0x00, 0xff}, // #336600 - Olive Green + color.RGBA{0x33, 0x66, 0x33, 0xff}, // #336633 - Forest Green + color.RGBA{0x33, 0x66, 0x66, 0xff}, // #336666 - Teal + color.RGBA{0x33, 0x66, 0x99, 0xff}, // #336699 - Dark Aqua + color.RGBA{0x33, 0x66, 0xcc, 0xff}, // #3366CC - Aqua + color.RGBA{0x33, 0x99, 0x00, 0xff}, // #339900 - Bright Green + color.RGBA{0x33, 0x99, 0x33, 0xff}, // #339933 - Lime Green + color.RGBA{0x33, 0x99, 0x66, 0xff}, // #339966 - Light Lime + color.RGBA{0x33, 0x99, 0x99, 0xff}, // #339999 - Light Aqua + color.RGBA{0x33, 0x99, 0xcc, 0xff}, // #3399CC - Bright Aqua + color.RGBA{0x33, 0xcc, 0x00, 0xff}, // #33CC00 - Spring Green + color.RGBA{0x33, 0xcc, 0x33, 0xff}, // #33CC33 - Bright Olive + color.RGBA{0x33, 0xcc, 0x66, 0xff}, // #33CC66 - Pale Green + color.RGBA{0x33, 0xcc, 0x99, 0xff}, // #33CC99 - Light Spring Green + color.RGBA{0x33, 0xcc, 0xcc, 0xff}, // #33CCCC - Aqua + color.RGBA{0x66, 0x00, 0x00, 0xff}, // #660000 - Dark Maroon + color.RGBA{0x66, 0x00, 0x33, 0xff}, // #660033 - Dark Burgundy + color.RGBA{0x66, 0x00, 0x66, 0xff}, // #660066 - Deep Purple + color.RGBA{0x66, 0x00, 0x99, 0xff}, // #660099 - Indigo + color.RGBA{0x66, 0x00, 0xcc, 0xff}, // #6600CC - Bright Indigo + color.RGBA{0x66, 0x33, 0x00, 0xff}, // #663300 - Dark Brown + color.RGBA{0x66, 0x33, 0x33, 0xff}, // #663333 - Brownish + color.RGBA{0x66, 0x33, 0x66, 0xff}, // #663366 - Dark Violet + color.RGBA{0x66, 0x33, 0x99, 0xff}, // #663399 - Dark Lavender + color.RGBA{0x66, 0x33, 0xcc, 0xff}, // #6633CC - Bright Lavender + // color.RGBA{0x66, 0x66, 0x00, 0xff}, // #666600 - Olive + // color.RGBA{0x66, 0x66, 0x33, 0xff}, // #666633 - Khaki + color.RGBA{0x66, 0x66, 0x66, 0xff}, // #666666 - Gray + color.RGBA{0x66, 0x66, 0x99, 0xff}, // #666699 - Grayish Blue + color.RGBA{0x66, 0x66, 0xcc, 0xff}, // #6666CC - Light Blue Gray + color.RGBA{0x66, 0x99, 0x00, 0xff}, // #669900 - Yellow Green + color.RGBA{0x66, 0x99, 0x33, 0xff}, // #669933 - Medium Olive + color.RGBA{0x66, 0x99, 0x66, 0xff}, // #669966 - Olive Drab + color.RGBA{0x66, 0x99, 0x99, 0xff}, // #669999 - Dark Sea Green + color.RGBA{0x66, 0x99, 0xcc, 0xff}, // #6699CC - Soft Aqua + color.RGBA{0x66, 0xcc, 0x00, 0xff}, // #66CC00 - Bright Greeny Yellow + color.RGBA{0x66, 0xcc, 0x33, 0xff}, // #66CC33 - Light Frog Green + color.RGBA{0x66, 0xcc, 0x66, 0xff}, // #66CC66 - Light Olive Green + color.RGBA{0x66, 0xcc, 0x99, 0xff}, // #66CC99 - Light Sage + color.RGBA{0x66, 0xcc, 0xcc, 0xff}, // #66CCCC - Light Cyan + color.RGBA{0x99, 0x00, 0x00, 0xff}, // #990000 - Dark Crimson + color.RGBA{0x99, 0x00, 0x33, 0xff}, // #990033 - Purple Red + color.RGBA{0x99, 0x00, 0x66, 0xff}, // #990066 - Dark Fuchsia + color.RGBA{0x99, 0x00, 0x99, 0xff}, // #990099 - Dark Magenta + color.RGBA{0x99, 0x00, 0xcc, 0xff}, // #9900CC - Deep Magenta + color.RGBA{0x99, 0x33, 0x00, 0xff}, // #993300 - Dark Rust + color.RGBA{0x99, 0x33, 0x33, 0xff}, // #993333 - Reddish Brown + color.RGBA{0x99, 0x33, 0x66, 0xff}, // #993366 - Maroon + color.RGBA{0x99, 0x33, 0x99, 0xff}, // #993399 - Dark Pink + color.RGBA{0x99, 0x33, 0xcc, 0xff}, // #9933CC - Bright Magenta + // color.RGBA{0x99, 0x66, 0x00, 0xff}, // #996600 - Olive Brown + // color.RGBA{0x99, 0x66, 0x33, 0xff}, // #996633 - Dark Khaki + color.RGBA{0x99, 0x66, 0x66, 0xff}, // #996666 - Brown Gray + color.RGBA{0x99, 0x66, 0x99, 0xff}, // #996699 - Dusty Pink + color.RGBA{0x99, 0x66, 0xcc, 0xff}, // #9966CC - Lavender Gray + // color.RGBA{0x99, 0x99, 0x00, 0xff}, // #999900 - Olive Drab Green + // color.RGBA{0x99, 0x99, 0x33, 0xff}, // #999933 - Medium Olive Green + // color.RGBA{0x99, 0x99, 0x66, 0xff}, // #999966 - Pale Olive + color.RGBA{0x99, 0x99, 0x99, 0xff}, // #999999 - Light Gray + color.RGBA{0x99, 0x99, 0xcc, 0xff}, // #9999CC - Light Steel Blue + color.RGBA{0x99, 0xcc, 0x00, 0xff}, // #99CC00 - Chartreuse + color.RGBA{0x99, 0xcc, 0x33, 0xff}, // #99CC33 - Light Lime Green + color.RGBA{0x99, 0xcc, 0x66, 0xff}, // #99CC66 - Soft Lime + color.RGBA{0x99, 0xcc, 0x99, 0xff}, // #99CC99 - Light Seafoam + color.RGBA{0x99, 0xcc, 0xcc, 0xff}, // #99CCCC - Pale Cyan + color.RGBA{0xcc, 0x00, 0x00, 0xff}, // #CC0000 - Bright Red + color.RGBA{0xcc, 0x00, 0x33, 0xff}, // #CC0033 - Ruby Red + color.RGBA{0xcc, 0x00, 0x66, 0xff}, // #CC0066 - Deep Pink + color.RGBA{0xcc, 0x00, 0x99, 0xff}, // #CC0099 - Fuchsia + color.RGBA{0xcc, 0x00, 0xcc, 0xff}, // #CC00CC - Magenta + color.RGBA{0xcc, 0x33, 0x00, 0xff}, // #CC3300 - Dark Tomato + color.RGBA{0xcc, 0x33, 0x33, 0xff}, // #CC3333 - Crimson + color.RGBA{0xcc, 0x33, 0x66, 0xff}, // #CC3366 - Dark Salmon + color.RGBA{0xcc, 0x33, 0x99, 0xff}, // #CC3399 - Hot Pink + color.RGBA{0xcc, 0x33, 0xcc, 0xff}, // #CC33CC - Bright Orchid + color.RGBA{0xcc, 0x66, 0x00, 0xff}, // #CC6600 - Burnt Orange + color.RGBA{0xcc, 0x66, 0x33, 0xff}, // #CC6633 - Orange + color.RGBA{0xcc, 0x66, 0x66, 0xff}, // #CC6666 - Light Coral + color.RGBA{0xcc, 0x66, 0x99, 0xff}, // #CC6699 - Light Pink + color.RGBA{0xcc, 0x66, 0xcc, 0xff}, // #CC66CC - Medium Violet Red + // color.RGBA{0xcc, 0x99, 0x00, 0xff}, // #CC9900 - Goldenrod + // color.RGBA{0xcc, 0x99, 0x33, 0xff}, // #CC9933 - Wheat + // color.RGBA{0xcc, 0x99, 0x66, 0xff}, // #CC9966 - Khaki + color.RGBA{0xcc, 0x99, 0x99, 0xff}, // #CC9999 - Rosy Brown + color.RGBA{0xcc, 0x99, 0xcc, 0xff}, // #CC99CC - Thistle + color.RGBA{0xcc, 0xcc, 0x00, 0xff}, // #CCCC00 - Olive + color.RGBA{0xcc, 0xcc, 0x33, 0xff}, // #CCCC33 - Pale Olive + color.RGBA{0xcc, 0xcc, 0x66, 0xff}, // #CCCC66 - Pale Goldenrod + color.RGBA{0xcc, 0xcc, 0x99, 0xff}, // #CCCC99 - Light Khaki + color.RGBA{0xcc, 0xcc, 0xcc, 0xff}, // #CCCCCC - Light Gray } diff --git a/options/locale/locale_ru-RU.ini b/options/locale/locale_ru-RU.ini index 6da0eea91ce76..99c71072b3a27 100644 --- a/options/locale/locale_ru-RU.ini +++ b/options/locale/locale_ru-RU.ini @@ -17,20 +17,22 @@ template=Шаблон language=Язык notifications=Уведомления active_stopwatch=Трекер рабочего времени +tracked_time_summary=Результат отслеживаемого времени на основе фильтров списка задач create_new=Создать… user_profile_and_more=Профиль и настройки... signed_in_as=Вы вошли как enable_javascript=Для этого сайта требуется поддержка JavaScript. toc=Содержание licenses=Лицензии -return_to_gitea=Вернуться к Gitea +return_to_gitea=Вернуться в Gitea +more_items=Ещё username=Имя пользователя email=Адрес электронной почты password=Пароль access_token=Токен доступа re_type=Подтвердить пароль -captcha=CAPTCHA +captcha=КАПЧА twofa=Двухфакторная аутентификация twofa_scratch=Двухфакторный scratch-код passcode=Код @@ -42,6 +44,7 @@ webauthn_use_twofa=Используйте двухфакторный код с webauthn_error=Не удалось прочитать ваш ключ безопасности. webauthn_unsupported_browser=Ваш браузер в настоящее время не поддерживает WebAuthn. webauthn_error_unknown=Произошла неизвестная ошибка. Повторите попытку. +webauthn_error_insecure=WebAuthn поддерживает только защищенные соединения. Для тестирования по HTTP можно использовать origin "localhost" или "127.0.0.1". webauthn_error_unable_to_process=Сервер не смог обработать ваш запрос. webauthn_error_duplicated=Данный ключ безопасности не разрешен для этого запроса. Пожалуйста, убедитесь, что ключ не регистрировался ранее. webauthn_error_empty=Необходимо задать имя для этого ключа. @@ -90,9 +93,11 @@ remove=Удалить remove_all=Удалить все remove_label_str=Удалить элемент «%s» edit=Изменить +view=Просмотр +test=Проверить enabled=Включено -disabled=Отключен +disabled=Отключено locked=Заблокировано copy=Скопировать @@ -100,17 +105,23 @@ copy_url=Скопировать URL copy_hash=Копировать хеш copy_content=Скопировать содержимое copy_branch=Скопировать имя ветки +copy_path=Скопировать путь copy_success=Скопировано! copy_error=Ошибка при копировании copy_type_unsupported=Невозможно скопировать файл этого типа +copy_filename=Скопировать имя файла write=Редактирование preview=Предпросмотр loading=Загрузка… +files=Файлы error=Ошибка error404=Либо страница, которую вы пытаетесь открыть, не существует, либо у вас недостаточно прав для ее просмотра. +error503=Сервер не смог обработать ваш запрос. Пожалуйста, попробуйте позже. go_back=Назад +invalid_data=Неверные данные: %v +nothing_has_been_changed=Ничего не изменилось. never=Никогда unknown=Неизвестно @@ -121,8 +132,10 @@ pin=Закрепить unpin=Открепить artifacts=Артефакты +expired=Истек срок действия +confirm_delete_artifact=Вы уверены, что хотите удалить артефакт '%s' ? -archived=Архивировано +archived=Заархивировано concept_system_global=Глобально concept_user_individual=Индивидуально @@ -138,15 +151,53 @@ confirm_delete_selected=Вы уверены, что хотите удалить name=Название value=Значение +readme=Readme filter=Фильтр -filter.is_archived=Архивировано +filter.clear=Очистить фильтр +filter.is_archived=Заархивировано +filter.not_archived=Не заархивировано +filter.is_fork=Ответвление +filter.not_fork=Нет ответвлений +filter.is_mirror=Зазеркалировано +filter.not_mirror=Без зеркал filter.is_template=Шаблон +filter.not_template=Не шаблон filter.public=Публичный -filter.private=Личный +filter.private=Приватный +no_results_found=Результатов не найдено. +internal_error_skipped=Произошла внутренняя ошибка, но она была пропущена: %s [search] +search=Поиск... +type_tooltip=Тип поиска +fuzzy=Плавное +fuzzy_tooltip=Включать результаты, которые не полностью соответствуют поисковому запросу +words=Слова +words_tooltip=Включает только результаты, содержащие все слова из поискового запроса +regexp=Регулярное выражение +regexp_tooltip=Ищет по шаблону регулярного выражения +exact=Точное +exact_tooltip=Ищет точное совпадение с поисковым запросом, включая все символы и пробелы +repo_kind=Поиск репозитория... +user_kind=Поиск пользователей... +org_kind=Поиск организаций… +team_kind=Поиск команд... +code_kind=Поиск кода… +code_search_unavailable=Поиск по коду сейчас недоступен. Пожалуйста, свяжитесь с администратором сайта. +code_search_by_git_grep=Текущие результаты получены через "git grep". Если администратор сайта включит индексацию репозитория, результаты могут быть точнее. +package_kind=Поиск пакетов… +project_kind=Поиск проектов… +branch_kind=Поиск веток… +tag_kind=Поиск тегов… +tag_tooltip=Поиск по совпадающим тегам. Используйте «%» для сопоставления с любой последовательностью чисел. +commit_kind=Поиск коммитов… +runner_kind=Поиск сборщиков… +no_results=Нет совпадающих результатов. +issue_kind=Поиск задач… +pull_kind=Поиск запросов на слияние… +keyword_search_unavailable=Поиск по ключевым словам в настоящее время недоступен. Пожалуйста, свяжитесь с администратором сайта. [aria] navbar=Панель навигации @@ -170,7 +221,10 @@ buttons.link.tooltip=Добавить ссылку buttons.list.unordered.tooltip=Добавить маркированный список buttons.list.ordered.tooltip=Добавить нумерованный список buttons.list.task.tooltip=Добавить список заданий +buttons.table.add.tooltip=Добавить таблицу buttons.table.add.insert=Добавить +buttons.table.rows=Строки +buttons.table.cols=Колонки buttons.mention.tooltip=Упомянуть пользователя или команду buttons.ref.tooltip=Сослаться на задачу или запрос на слияние buttons.switch_to_legacy.tooltip=Использовать старый редактор @@ -178,24 +232,31 @@ buttons.enable_monospace_font=Включить моноширинный шриф buttons.disable_monospace_font=Выключить моноширинный шрифт [filter] +string.asc=А–Я +string.desc=Я–А [error] occurred=Произошла ошибка +report_message="Если вы считаете, что это ошибка Gitea, пожалуйста, поищите проблему на GitHub или создайте новую при необходимости." not_found=Цель не найдена. network_error=Ошибка сети [startpage] app_desc=Удобный сервис собственного хостинга репозиториев Git install=Простой в установке +install_desc="Просто запустите исполняемый файл для вашей платформы, разверните через Docker, или установите с помощью менеджера пакетов." platform=Кроссплатформенный +platform_desc="Gitea работает на любой платформе, поддерживаемой Go: Windows, macOS, Linux, ARM и т. д. Выбирайте, что вам больше нравится!" lightweight=Легковесный lightweight_desc=Gitea имеет низкие системные требования и может работать на недорогом Raspberry Pi. Экономьте энергию вашей машины! license=Открытый исходный код +license_desc="Получите %[2]s! Присоединяйтесь к нам, внося свой вклад в развитие проекта. Не стесняйтесь стать контрибьютором!" [install] install=Установка +installing_desc=Идёт установка, подождите… title=Начальная конфигурация -docker_helper=Если вы запускаете Gitea внутри Docker, пожалуйста внимательно прочтите документацию перед тем, как изменить любые настройки. +docker_helper="Если вы запускаете Gitea внутри Docker, пожалуйста внимательно прочтите документацию перед тем, как изменить любые настройки." require_db_desc=Gitea требует MySQL, PostgreSQL, MSSQL, SQLite3 или TiDB (через протокол MySQL). db_title=Настройки базы данных db_type=Тип базы данных @@ -210,10 +271,16 @@ path=Путь sqlite_helper=Путь к файлу базы данных SQLite3.
Введите абсолютный путь, если вы запускаете Gitea как службу. reinstall_error=Вы пытаетесь произвести установку в уже существующую базу данных Gitea reinstall_confirm_message=Переустановка в уже существующую базу данных Gitea может вызвать несколько проблем. В большинстве случаев вы должны использовать существующий "app.ini" для запуска Gitea. Если вы понимаете, что вы делаете, подтвердите: +reinstall_confirm_check_1=Данные, зашифрованные ключом SECRET_KEY в app.ini, могут быть потеряны: пользователи могут не иметь возможности войти с помощью 2FA/OTP и зеркала могут не работать корректно. Проверив это поле, вы подтверждаете, что текущий файл app.ini содержит правильный SECRET_KEY. +reinstall_confirm_check_2=Репозитории и настройки могут нуждаться в повторной синхронизации. Отметьте этот флажок, если вы синхронизируете хуки репозиториев и authorized_keys вручную. Вы подтверждаете, что настройки репозиториев и зеркал верны. reinstall_confirm_check_3=Вы подтверждаете, что полностью уверены, что этот Gitea запущен при коренном расположении app.ini и вы уверены, что вам нужна переустановка. Вы подтверждаете, что соглашаетесь с указанными выше рисками. err_empty_db_path=Путь к базе данных SQLite3 не может быть пустым. no_admin_and_disable_registration=Вы не можете отключить регистрацию до создания учётной записи администратора. err_empty_admin_password=Пароль администратора не может быть пустым. +err_empty_admin_email=Адрес электронной почты администратора не может быть пустым. +err_admin_name_is_reserved=Имя администратора недействительно. Имя зарезервировано. +err_admin_name_pattern_not_allowed=Неверное имя администратора, имя попадает под зарезервированный шаблон. +err_admin_name_is_invalid=Имя администратора недействительно general_title=Основные настройки app_name=Название сайта @@ -229,6 +296,7 @@ domain_helper=Домен или адрес хоста для сервера. ssh_port=Порт SSH сервера ssh_port_helper=Номер порта, который использует SSH сервер. Оставьте пустым, чтобы отключить SSH. http_port=Gitea HTTP порт +http_port_helper=Порт, на котором будет работать веб-сервер Gitea. app_url=Базовый URL Gitea app_url_helper=Этот параметр влияет на URL для клонирования по HTTP/HTTPS и на некоторые уведомления по электронной почте. log_root_path=Путь к журналу @@ -236,9 +304,10 @@ log_root_path_helper=Файлы журнала будут записыватьс optional_title=Расширенные настройки email_title=Настройки электронной почты -smtp_addr=Узел SMTP -smtp_port=SMTP-порт -smtp_from=Отправить эл. почту как +smtp_addr=Хост SMTP +smtp_port=Порт SMTP +smtp_from=Отправить электронную почту как +smtp_from_invalid=Недопустимый адрес отправителя сообщения smtp_from_helper=Адрес электронной почты, который будет использоваться Gitea. Введите обычный адрес электронной почты или используйте формат "Имя" . mailer_user=SMTP логин mailer_password=SMTP пароль @@ -258,7 +327,7 @@ openid_signin=Включить вход через OpenID openid_signin_popup=Включить вход через OpenID. openid_signup=Включить регистрацию через OpenID openid_signup_popup=Включить саморегистрацию OpenID. -enable_captcha=Включить CAPTCHA при регистрации +enable_captcha=Включить КАПЧУ при регистрации enable_captcha_popup=Запрашивать капчу при регистрации пользователя. require_sign_in_view=Требовать авторизации для просмотра страниц require_sign_in_view_popup=Ограничить доступ к странице только вошедшими пользователями. Посетители увидят лишь страницы входа и регистрации. @@ -267,7 +336,7 @@ admin_title=Настройки учётной записи администра admin_name=Логин администратора admin_password=Пароль confirm_password=Подтвердить пароль -admin_email=Адрес эл. почты +admin_email=Адрес электронной почты install_btn_confirm=Установить Gitea test_git_failed=Не удалось проверить 'git' команду: %v sqlite3_not_available=Эта версия Gitea не поддерживает SQLite3. Пожалуйста, загрузите официальную бинарную версию из %s (не 'go build' версия). @@ -291,13 +360,16 @@ no_reply_address=Скрытый почтовый домен no_reply_address_helper=Доменное имя для пользователей со скрытым адресом электронной почты. Например, имя пользователя 'joe' будет зарегистрировано в Git как 'joe@noreply.example.org' если скрытый домен электронной почты установлен как 'noreply.example.org'. password_algorithm=Алгоритм хеширования пароля invalid_password_algorithm=Некорректный алгоритм хеширования пароля +password_algorithm_helper=Задайте алгоритм хеширования паролей. Алгоритмы имеют различные требования и стойкость. Алгоритм argon2 довольно безопасен, но он использует много памяти и может не подходить для слабых систем. enable_update_checker=Включить проверку обновлений enable_update_checker_helper=Периодически проверяет наличие новых версий, подключаясь к gitea.io. env_config_keys=Настройка окружения env_config_keys_prompt=Следующие переменные окружения также будут применены к вашему конфигурационному файлу: +config_write_file_prompt=Эти параметры конфигурации будут записаны в: %s [home] -uname_holder=Имя пользователя / Адрес эл. почты +nav_menu=Меню навигации +uname_holder=Имя пользователя / Адрес электронной почты password_holder=Пароль switch_dashboard_context=Переключить контекст панели управления my_repos=Репозитории @@ -310,9 +382,9 @@ filter=Другие фильтры filter_by_team_repositories=Фильтровать по репозиториям команды feed_of=Лента «%s» -show_archived=Архивировано -show_both_archived_unarchived=Показаны архивированные и разархивированные -show_only_archived=Показаны только архивированные +show_archived=Заархивировано +show_both_archived_unarchived=Показаны заархивированные и разархивированные +show_only_archived=Показаны только заархивированные show_only_unarchived=Показаны только разархивированные show_private=Приватный @@ -322,6 +394,12 @@ show_only_public=Показаны только публичные issues.in_your_repos=В ваших репозиториях +guide_title=Активность отсутствует +guide_desc=В настоящее время вы не подписаны ни на репозитории ни на пользователей, поэтому контента для отображения нет. Возможно вас заинтересуют репозитории или пользователи из приведенных ниже ссылок. +explore_repos=Обзор репозиториев +explore_users=Обзор пользователей +empty_org=У вас пока нет организаций. +empty_repo=У вас пока нет репозиториев. [explore] repos=Репозитории @@ -331,10 +409,12 @@ go_to=Перейти к code=Код code_last_indexed_at=Последний проиндексированный %s relevant_repositories_tooltip=Репозитории, являющиеся ответвлениями или не имеющие ни темы, ни значка, ни описания, скрыты. -relevant_repositories=Показаны только релевантные репозитории, показать результаты без фильтрации. +relevant_repositories="Показаны только релевантные репозитории, показать результаты без фильтрации." [auth] create_new_account=Регистрация аккаунта +already_have_account=Уже есть аккаунт? +sign_in_now=Войти сейчас! disable_register_prompt=Извините, возможность регистрации отключена. Пожалуйста, свяжитесь с администратором сайта. disable_register_mail=Подтверждение регистрации по электронной почте отключено. manual_activation_only=Обратитесь к администратору сайта для завершения активации. @@ -342,20 +422,27 @@ remember_me=Запомнить это устройство remember_me.compromised=Токен входа более не действителен, что может указывать на компрометацию учётной записи. Пожалуйста, проверьте свою учётную запись на необычные действия. forgot_password_title=Восстановить пароль forgot_password=Забыли пароль? +need_account=Нужен аккаунт? +sign_up_tip=Вы регистрируете первый аккаунт в системе, который будет обладать правами администратора. Пожалуйста, обязательно запомните ваше имя пользователя и пароль. Если вы забудете имя пользователя или пароль, обратитесь к документации Gitea для восстановления доступа. +sign_up_now=Зарегистрироваться sign_up_successful=Учётная запись успешно создана. Добро пожаловать! +confirmation_mail_sent_prompt_ex=Новое письмо с подтверждением было отправлено на адрес %s. Пожалуйста, проверьте вашу почту в течение %s, чтобы завершить процесс регистрации. Если адрес электронной почты для регистрации указан неверно, вы можете войти и изменить его. must_change_password=Обновить пароль allow_password_change=Требовать смену пароля пользователем (рекомендуется) reset_password_mail_sent_prompt=Письмо с подтверждением отправлено на %s. Пожалуйста, проверьте входящую почту в течение %s, чтобы завершить процесс восстановления аккаунта. active_your_account=Активируйте свой аккаунт account_activated=Учётная запись активирована +prohibit_login=Вход запрещён +prohibit_login_desc=Вашему аккаунту запрещен вход в систему. Пожалуйста, свяжитесь с администратором сайта. resent_limit_prompt=Извините, вы уже запросили активацию по электронной почте недавно. Пожалуйста, подождите 3 минуты, а затем повторите попытку. has_unconfirmed_mail=Здравствуйте, %s! У вас есть неподтвержденный адрес электронной почты (%s). Если вам не приходило письмо с подтверждением или нужно выслать новое письмо, нажмите на кнопку ниже. +change_unconfirmed_mail_address=Если адрес электронной почты для регистрации указан неверно, вы можете изменить его здесь и отправить новое письмо с подтверждением. resend_mail=Нажмите здесь, чтобы переотправить активационное письмо email_not_associate=Этот адрес электронной почты не связан ни с одной учётной записью. send_reset_mail=Отправить письмо для восстановления аккаунта reset_password=Восстановление аккаунта invalid_code=Код подтверждения недействителен или истёк. -invalid_code_forgot_password=Ваш код подтверждения недействителен или истек. Нажмите здесь для начала новой сессии. +invalid_code_forgot_password="Ваш код подтверждения недействителен или истек. Нажмите здесь для начала новой сессии." invalid_password=Ваш пароль не совпадает с паролем, который был использован для создания учётной записи. reset_password_helper=Восстановить аккаунт reset_password_wrong_user=Вы вошли как %s, но ссылка для восстановления учётной записи предназначена для %s @@ -367,6 +454,7 @@ use_scratch_code=Использовать scratch-код twofa_scratch_used=Вы использовали scratch-код. Вы были перенаправлены на страницу настроек для генерации нового кода или отключения двуфакторной аутентификации. twofa_passcode_incorrect=Ваш пароль неверен. Если вы потеряли устройство, используйте ваш scratch-код. twofa_scratch_token_incorrect=Неверный scratch-код. +twofa_required=Для доступа к репозиториям необходимо настроить двухфакторную аутентификацию или попробуйте войти снова. login_userpass=Вход login_openid=OpenID oauth_signup_tab=Зарегистрировать новый аккаунт @@ -375,22 +463,33 @@ oauth_signup_submit=Полная учётная запись oauth_signin_tab=Ссылка на существующую учётную запись oauth_signin_title=Войдите, чтобы авторизовать связанную учётную запись oauth_signin_submit=Привязать учётную запись +oauth.signin.error.general=Произошла ошибка при обработке запроса авторизации: %s. Если ошибка повторяется, пожалуйста, свяжитесь с администратором сайта. oauth.signin.error.access_denied=Запрос на авторизацию был отклонен. oauth.signin.error.temporarily_unavailable=Произошла ошибка авторизации, так как сервер аутентификации временно недоступен. Пожалуйста, повторите попытку позже. +oauth_callback_unable_auto_reg=Автоматическая регистрация включена, но OAuth2-провайдер %[1]s вернул отсутствующие поля: %[2]s, невозможно создать аккаунт автоматически. Пожалуйста, создайте или свяжите аккаунт вручную или свяжитесь с администратором сайта. openid_connect_submit=Подключить openid_connect_title=Подключение к существующей учётной записи openid_connect_desc=Выбранный OpenID URI неизвестен. Свяжите с новой учётной записью здесь. openid_register_title=Создать новый аккаунт openid_register_desc=Выбранный OpenID URI неизвестен. Свяжите с новой учётной записью здесь. openid_signin_desc=Введите ваш OpenID URI. Например: alice.openid.example.org или https://openid.example.org/alice. +disable_forgot_password_mail=Восстановление аккаунта отключено, так как не настроен адрес электронной почты. Пожалуйста, свяжитесь с администратором сайта. +disable_forgot_password_mail_admin=Восстановление аккаунта доступно только при наличии настроенного адреса электронной почты. email_domain_blacklisted=С данным адресом электронной почты регистрация невозможна. authorize_application=Авторизация приложения authorize_redirect_notice=Вы будете перенаправлены на %s, если вы авторизуете это приложение. authorize_application_created_by=Это приложение было создано %s. +authorize_application_description=Если вы предоставите доступ, приложение сможет читать и изменять всю информацию вашего аккаунта, включая приватные репозитории и организации. +authorize_application_with_scopes=С областью видимости: %s authorize_title=Разрешить «%s» доступ к вашей учётной записи? authorization_failed=Ошибка авторизации +authorization_failed_desc=Авторизация не удалась из-за недопустимого запроса. Пожалуйста, свяжитесь с разработчиком приложения, которое вы пытались авторизовать. sspi_auth_failed=Аутентификация SSPI не удалась +password_pwned="Выбранный вами пароль находится в списке скомпрометированных паролей, ранее раскрытых в утечках данных. Пожалуйста, попробуйте другой пароль и рассмотрите возможность его замены и в других сервисах." password_pwned_err=Не удалось завершить запрос к HaveIBeenPwned +last_admin=Вы не можете удалить последнего администратора. Должен быть хотя бы один администратор. +signin_passkey=Войти с помощью ключа доступа +back_to_sign_in=Вернуться на страницу входа [mail] view_it_on=Посмотреть на %s @@ -407,8 +506,11 @@ activate_email=Подтвердите адрес своей электронно activate_email.title=%s, пожалуйста, подтвердите ваш адрес электронной почты activate_email.text=Пожалуйста, перейдите по ссылке, чтобы подтвердить ваш адрес электронной почты в течение %s: +register_notify=Добро пожаловать в %s register_notify.title=%[1]s, добро пожаловать в %[2]s -register_notify.text_3=Если эта учётная запись была создана для вас, пожалуйста, сначала установите пароль. +register_notify.text_1=Это письмо подтверждения вашей регистрации в %s! +register_notify.text_2=Теперь вы можете войти, используя имя пользователя: %s. +register_notify.text_3="Если эта учётная запись была создана для вас, пожалуйста, сначала установите пароль." reset_password=Восстановить учётную запись reset_password.title=%s, вы запросили восстановление вашей учётной записи @@ -423,15 +525,15 @@ issue.x_mentioned_you=@%s упомянул(а) вас: issue.action.force_push=%[1]s форсировал(а) отправку в %[2]s изменений %[4]s вместо %[3]s. issue.action.push_1=@%[1]s отправил(а) %[3]d изменение в %[2]s issue.action.push_n=@%[1]s отправил(а) %[3]d изменений в %[2]s -issue.action.close=@%[1]s закрыл(а) #%[2]d. -issue.action.reopen=@%[1]s переоткрыл(а) #%[2]d. -issue.action.merge=@%[1]s слил(а) #%[2]d в %[3]s. +issue.action.close="@%[1]s закрыл(а) #%[2]d." +issue.action.reopen="@%[1]s переоткрыл(а) #%[2]d." +issue.action.merge="@%[1]s слил(а) #%[2]d в %[3]s." issue.action.approve=@%[1]s одобрил(а) этот запрос на слияние. issue.action.reject=@%[1]s запросил(а) изменения в этом запросе на слияние. issue.action.review=@%[1]s прокомментировал(а) этот запрос на слияние. issue.action.review_dismissed=@%[1]s отклонил(а) последний отзыв с %[2]s для этого запроса на слияние. issue.action.ready_for_review=@%[1]s отметил(а) этот запрос на слияние как готовый к рассмотрению. -issue.action.new=@%[1]s создал(а) #%[2]d. +issue.action.new="@%[1]s создал(а) #%[2]d." issue.in_tree_path=В %s: release.new.subject=%s в %s выпущено @@ -445,10 +547,18 @@ release.download.targz=Исходный код (TAR.GZ) repo.transfer.subject_to=%s хочет передать «%s» в %s repo.transfer.subject_to_you=%s хочет передать «%s» вам repo.transfer.to_you=вам +repo.transfer.body=Для принятия или отклонения перейдите по ссылке %s или просто проигнорируйте это сообщение. repo.collaborator.added.subject=%s добавил(а) вас в %s repo.collaborator.added.text=Вы были добавлены в качестве соавтора репозитория: +repo.actions.run.failed=Ошибка выполнения +repo.actions.run.succeeded=Выполнено успешно +repo.actions.run.cancelled=Выполнение отменено +repo.actions.jobs.all_succeeded=Все задания успешно выполнены +repo.actions.jobs.all_failed=Все задания завершились неудачно +repo.actions.jobs.some_not_successful=Некоторые задания завершились неудачно +repo.actions.jobs.all_cancelled=Все задания отменены team_invite.subject=%[1]s приглашает вас присоединиться к организации %[2]s team_invite.text_1=%[1]s приглашает вас присоединиться к команде %[2]s в организации %[3]s. @@ -465,7 +575,7 @@ modify=Изменить [form] UserName=Пользователь RepoName=Название репозитория -Email=Адрес эл. почты +Email=Адрес электронной почты Password=Пароль Retype=Подтвердить пароль SSHTitle=Имя ключа SSH @@ -497,6 +607,7 @@ url_error=`«%s» не является валидным URL.` include_error=` должно содержать подстроку «%s».` glob_pattern_error=` неверный glob шаблон: %s.` regex_pattern_error=` Неверный шаблон регулярного выражения: %s.` +username_error=` может содержать только латинские алфавитно-цифровые символы ('0-9','a-z','A-Z'), тире ('-'), подчеркивание ('_') и точку ('.'). Не должно начинаться или заканчиваться на не алфавитно-цифровые символы, и последовательные не алфавитно-цифровые символы также запрещены.` invalid_group_team_map_error=` сопоставление недопустимо: %s` unknown_error=Неизвестная ошибка: captcha_incorrect=Капча не пройдена. @@ -505,18 +616,23 @@ lang_select_error=Выберите язык из списка. username_been_taken=Имя пользователя уже занято. username_change_not_local_user=Нелокальным пользователям запрещено изменять их имя пользователя. +change_username_disabled=Изменение имени пользователя отключено. +change_full_name_disabled=Изменение полного имени отключено. username_has_not_been_changed=Имя пользователя не было изменено repo_name_been_taken=Название репозитория уже используется. repository_force_private=Включена принудительная приватность: приватные репозитории не могут быть сделаны публичными. repository_files_already_exist=Файлы уже существуют для этого репозитория. Обратитесь к системному администратору. +repository_files_already_exist.adopt=Файлы уже существуют для этого репозитория и могут быть только приняты. repository_files_already_exist.delete=Файлы уже существуют для этого репозитория. Вы должны удалить их. repository_files_already_exist.adopt_or_delete=Файлы уже существуют для этого репозитория. Или принять их или удалить их. visit_rate_limit=Удалённый вход отклонён в связи с ограничением количества попыток в секунду. +2fa_auth_required=Для удаленного доступа требуется двухфакторная аутентификация. org_name_been_taken=Название организации уже занято. team_name_been_taken=Название команды уже занято. team_no_units_error=Разрешите доступ хотя бы к одному разделу репозитория. email_been_used=Этот адрес электронной почты уже используется. email_invalid=Недопустимый адрес электронной почты. +email_domain_is_not_allowed=Домен электронной почты пользователя %s конфликтует с EMAIL_DOMAIN_ALLOWLIST или EMAIL_DOMAIN_BLOCKLIST. Пожалуйста, убедитесь, что ваша операция корректна. openid_been_used=Адрес OpenID «%s» уже используется. username_password_incorrect=Неверное имя пользователя или пароль. password_complexity=Пароль не удовлетворяет требованиям к сложности: @@ -528,6 +644,8 @@ enterred_invalid_repo_name=Введённое вами название репо enterred_invalid_org_name=Введённое вам название организации некорректно. enterred_invalid_owner_name=Имя нового владельца некорректно. enterred_invalid_password=Введённый пароль неверен. +unset_password=Вошедший пользователь не установил пароль. +unsupported_login_type=Тип входа на сервер не поддерживается для удаления учетной записи. user_not_exist=Пользователь не существует. team_not_exist=Команда не существует. last_org_owner=Вы не можете удалить последнего пользователя из команды 'Владельцы'. Для организации должен быть хотя бы один владелец. @@ -539,11 +657,19 @@ invalid_ssh_key=Не удается проверить ключ SSH: %s invalid_gpg_key=Не удается проверить ключ GPG: %s invalid_ssh_principal=Неверный принципал: %s must_use_public_key=Ключ, который вы предоставили, является закрытым. Пожалуйста, не отправляйте свой закрытый ключ куда бы то ни было. Используйте для этих целей открытый ключ. +unable_verify_ssh_key="Не удалось проверить SSH-ключ. Проверьте его на наличие ошибок." auth_failed=Ошибка аутентификации: %v +still_own_repo="На ваш аккаунт зарегистрирован один или несколько репозиториев, сначала удалите или передайте их." +still_has_org="Ваш аккаунт является участником одной или нескольких организаций. Сначала покиньте их." +still_own_packages="Ваш аккаунт владеет одним или несколькими пакетами. Сначала удалите их." +org_still_own_repo="Эта организация все еще владеет одним или несколькими репозиториями. Удалите или передайте их." +org_still_own_packages="Эта организация все еще владеет одним или несколькими пакетами. Сначала удалите их." target_branch_not_exist=Целевая ветка не существует. +target_ref_not_exist=Целевая ссылка не существует %s +admin_cannot_delete_self=Вы не можете удалить себя, когда вы являетесь администратором. Пожалуйста, сначала удалите ваши права администратора. [user] change_avatar=Изменить свой аватар… @@ -569,7 +695,31 @@ settings=Параметры пользователя form.name_reserved=Имя пользователя «%s» зарезервировано. form.name_pattern_not_allowed=Шаблон «%s» не допускается в имени пользователя. - +form.name_chars_not_allowed=Имя пользователя "%s" содержит недопустимые символы. + +block.block=Заблокировать +block.block.user=Заблокировать пользователя +block.block.org=Заблокировать пользователя в организации +block.block.failure=Не удалось заблокировать пользователя: %s +block.unblock=Разблокировать +block.unblock.failure=Не удалось разблокировать пользователя: %s +block.blocked=Вы заблокировали этого пользователя. +block.title=Заблокировать пользователя +block.info=Блокировка пользователя предотвращает его взаимодействие с репозиториями, такими как открытие или комментирование задач и запросов на слияние. Подробнее о блокировке пользователя. +block.info_1=Блокировка пользователя предотвращает следующие действия с вашим аккаунтом и репозиториями: +block.info_2=ваши подписчики +block.info_3=отправку вам уведомлений через упоминание вашего имени пользователя +block.info_4=вас пригласили в качестве соавтора в репозиторий +block.info_5=проставление оценок, ответвления или просмотр репозиториев +block.info_6=открытие и комментирование задач или запросов на слияние +block.info_7=реакции на ваши комментарии в задачах или запросах на слияние +block.user_to_block=Заблокировать пользователя +block.note=Заметка +block.note.title=Необязательное примечание: +block.note.info=Заметка не видна заблокированному пользователю. +block.note.edit=Редактировать заметку +block.list=Заблокированные пользователи +block.list.none=Вы не заблокировали ни одного пользователя. [settings] profile=Профиль @@ -584,13 +734,18 @@ applications=Приложения orgs=Управление организациями repos=Репозитории delete=Удалить аккаунт +twofa=Двухфакторная аутентификация account_link=Привязанные аккаунты organization=Организации uid=UID +webauthn=Двухфакторная аутентификация (Ключи безопасности) public_profile=Открытый профиль biography_placeholder=Расскажите немного о себе! (Можно использовать Markdown) location_placeholder=Поделитесь своим приблизительным местоположением с другими +profile_desc=Управление тем, как ваш профиль отображается для других пользователей. Ваш основной адрес электронной почты будет использоваться для уведомлений, восстановления пароля и операций с Git. +password_username_disabled=Вы не можете изменить свое имя пользователя. Пожалуйста, свяжитесь с администратором сайта для получения дополнительной информации. +password_full_name_disabled=Вы не можете изменить свое полное имя. Пожалуйста, свяжитесь с администратором сайта для получения дополнительной информации. full_name=Имя и фамилия website=Веб-сайт location=Местоположение @@ -608,6 +763,7 @@ cancel=Отмена language=Язык ui=Тема hidden_comment_types=Скрытые типы комментариев +hidden_comment_types_description=Типы комментариев, отмеченные здесь, не будут отображаться на страницах задач. Отметка "Метка", например, удаляет все комментарии "{user} добавил/удалил {метка}". hidden_comment_types.ref_tooltip=Комментарии об упоминании задачи в другой задаче/коммите/… hidden_comment_types.issue_ref_tooltip=Комментарии об изменении ветки/тега, связанных с этой задачей comment_type_group_reference=Упоминания @@ -629,7 +785,7 @@ privacy=Приватность keep_activity_private=Скрыть активность со страницы профиля keep_activity_private_popup=Делает активность видимой только для вас и администраторов -lookup_avatar_by_mail=Найти аватар по адресу эл. почты +lookup_avatar_by_mail=Найти аватар по адресу электронной почты federated_avatar_lookup=Найти внешний аватар enable_custom_avatar=Включить собственный аватар choose_new_avatar=Выбрать новый аватар @@ -639,6 +795,7 @@ uploaded_avatar_not_a_image=Загружаемый файл не являетс uploaded_avatar_is_too_big=Размер загружаемого файла (%d КиБ) превышает максимальный размер (%d КиБ). update_avatar_success=Ваш аватар был изменен. update_user_avatar_success=Аватар пользователя обновлён. +cropper_prompt=Вы можете редактировать изображение перед сохранением. Отредактированное изображение будет сохранено как PNG. change_password=Обновить пароль old_password=Текущий пароль @@ -654,14 +811,18 @@ manage_themes=Выберите тему по умолчанию manage_openid=Управление OpenID email_desc=Ваш основной адрес электронной почты будет использоваться для уведомлений, восстановления пароля и, если он не скрыт, для действий с Git в веб-интерфейсе. theme_desc=Это будет темой по умолчанию для всего сайта. +theme_colorblindness_help=Цветовая поддержка темы +theme_colorblindness_prompt=Gitea выпустила несколько тем с базовой поддержкой дальтонизма, в которых определено всего несколько цветов. Работа еще продолжается. Дополнительные улучшения могут быть сделаны, определив больше цветов в CSS-файлах темы. primary=Основной activated=Активирован requires_activation=Требуется активация primary_email=Сделать основным activate_email=Отправить активацию activations_pending=Ожидает активации +can_not_add_email_activations_pending=Ожидается активация. Если хотите добавить новый адрес электронной почты, попробуйте снова через несколько минут. delete_email=Удалить email_deletion=Удалить адрес электронной почты +email_deletion_desc=Адрес электронной почты и вся связанная с ним информация будет удалена из вашего аккаунта. Коммиты, сделанные от имени этого адреса электронной почты, не будут изменены. Продолжить? email_deletion_success=Ваш адрес электронной почты был удалён. theme_update_success=Тема была изменена. theme_update_error=Выбранная тема не существует. @@ -677,6 +838,7 @@ add_email_success=Добавлен новый адрес электронной email_preference_set_success=Настройки электронной почты успешно установлены. add_openid_success=Добавлен новый адрес OpenID. keep_email_private=Скрыть адрес электронной почты +keep_email_private_popup=Это скроет ваш адрес электронной почты в вашем профиле, а также при создании запроса на слияние или редактирование файла с помощью веб-интерфейса. Запушенные коммиты не будут изменены. Используйте %s в коммите для ассоциации его с вашим аккаунтом. openid_desc=OpenID позволяет делегировать аутентификацию внешнему поставщику. manage_ssh_keys=Управление ключами SSH @@ -686,8 +848,8 @@ add_key=Добавить ключ ssh_desc=Эти открытые ключи SSH связаны с вашей учётной записью. Соответствующие закрытые ключи обеспечивают полный доступ к вашим хранилищам. principal_desc=Эти принципалы сертификатов SSH привязаны к вашей учётной записи и разрешают полный доступ к вашим хранилищам. gpg_desc=Эти открытые GPG ключи связаны с вашей учётной записью. Храните закрытые ключи в безопасности, так как они позволяют проверять подлинности коммитов. -ssh_helper=Нужна помощь? Ознакомьтесь с руководством GitHub по созданию ключей SSH или решению возникающих проблем при использовании SSH. -gpg_helper=Нужна помощь? Взгляните на руководство GitHub по GPG. +ssh_helper="Нужна помощь? Ознакомьтесь с руководством GitHub по созданию ключей SSH или решению возникающих проблем при использовании SSH." +gpg_helper="Нужна помощь? Взгляните на руководство GitHub по GPG." add_new_key=Добавить ключ SSH add_new_gpg_key=Добавить ключ GPG key_content_ssh_placeholder=Начинается с 'ssh-ed25519', 'ssh-rsa', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com', или 'sk-ssh-ed25519@openssh.com' @@ -703,6 +865,7 @@ gpg_key_matched_identities_long=Встроенные в этот ключ иде gpg_key_verified=Проверенный ключ gpg_key_verified_long=Ключ был проверен токеном и может быть использован для проверки коммитов, соответствующих любым активным адресом электронной почты этого пользователя в дополнение к любым соответствующим идентификаторам этого ключа. gpg_key_verify=Проверить +gpg_invalid_token_signature=Предоставленный GPG ключ, подпись и токен не совпадают, или токен устарел. gpg_token_required=Вы должны предоставить подпись для токена ниже gpg_token=Токен gpg_token_help=Вы можете сгенерировать подпись с помощью: @@ -712,6 +875,7 @@ verify_gpg_key_success=Ключ GPG «%s» верифицирован. ssh_key_verified=Проверенный ключ ssh_key_verified_long=Ключ был проверен токеном и может быть использован для проверки коммитов, соответствующих любым активным адресом электронной почты этого пользователя. ssh_key_verify=Проверить +ssh_invalid_token_signature=Предоставленный SSH ключ, подпись или токен не совпадают, или токен устарел. ssh_token_required=Вы должны предоставить подпись для токена ниже ssh_token=Токен ssh_token_help=Вы можете сгенерировать подпись с помощью: @@ -732,6 +896,7 @@ gpg_key_deletion=Удалить ключ GPG ssh_principal_deletion=Удалить принципала сертификата SSH ssh_key_deletion_desc=Удаление ключа SSH аннулирует его доступ к вашей учётной записи. Продолжить? gpg_key_deletion_desc=Удаление ключа GPG отменяет проверку подписанных им коммитов. Продолжить? +ssh_principal_deletion_desc=Удаление SSH-сертификата отзывает доступ к вашему аккаунту. Продолжить? ssh_key_deletion_success=Ключ SSH удален. gpg_key_deletion_success=Ключ GPG удалён. ssh_principal_deletion_success=Принципал удалён. @@ -771,9 +936,13 @@ delete_token_success=Токен удалён. Приложения, исполь repo_and_org_access=Доступ к репозиторию и организации permissions_public_only=Только публичные permissions_access_all=Все (публичные, приватные и ограниченные) +permission_not_set=Не установлено permission_no_access=Нет доступа -permission_read=Прочитанные +permission_read=Читать permission_write=Чтение и запись +permission_anonymous_read=Анонимный чтение +permission_everyone_read=Чтение всем +permission_everyone_write=Запись всем access_token_desc=Выбранные области действия токена ограничивают авторизацию только соответствующими маршрутами API. Читайте документацию для получения дополнительной информации. at_least_one_permission=Необходимо выбрать хотя бы одно разрешение для создания токена permissions_list=Разрешения: @@ -789,6 +958,8 @@ create_oauth2_application_button=Создать приложение create_oauth2_application_success=Вы успешно создали новое приложение OAuth2. update_oauth2_application_success=Изменения настроек приложения OAuth2 успешно применены. oauth2_application_name=Имя приложения +oauth2_confidential_client=Конфиденциальный клиент. Выберите для приложений, которые сохраняют конфиденциальные данные, например, для веб-приложений. Не выбирайте для нативных приложений, включая настольные и мобильные приложения. +oauth2_skip_secondary_authorization=Пропустить повторную авторизацию для публичных клиентов после однократного предоставления доступа. Может создать угрозу безопасности. oauth2_redirect_uris=URI для перенаправления. Используйте новую строку для каждого URI. save_application=Сохранить oauth2_client_id=ID клиента @@ -799,37 +970,51 @@ oauth2_client_secret_hint=Пожалуйста, сохраните секрет, oauth2_application_edit=Изменить oauth2_application_create_description=Приложения OAuth2 предоставляет стороннему приложению доступ к учётным записям пользователей данного сервиса. oauth2_application_remove_description=Удаление приложения OAuth2 приведёт к отмене его доступа к авторизованным учётным записям пользователей в данном экземпляре. Продолжить? +oauth2_application_locked=Gitea заранее регистрирует некоторые приложения OAuth2 при запуске, если это есть в конфигурации. Чтобы предотвратить неожиданное поведение, эти приложения не могут быть изменены или удалены. Пожалуйста, обратитесь к документации OAuth2 для получения дополнительной информации. authorized_oauth2_applications=Авторизованные приложения OAuth2 +authorized_oauth2_applications_description=Вы предоставили доступ к вашему личному аккаунту Gitea этим сторонним приложениям. Отзовите доступ для приложений, которые вам больше не нужны. revoke_key=Отозвать revoke_oauth2_grant=Отозвать доступ +revoke_oauth2_grant_description=Отзыв доступа для этого приложения заблокирует доступ приложения к вашим данным. Вы уверены? revoke_oauth2_grant_success=Доступ был успешно отозван. +twofa_desc=Чтобы защитить свою учетную запись от кражи пароля, вы можете использовать смартфон или другое устройство для получения временных одноразовых паролей ("TOTP"). twofa_recovery_tip=В случае утраты устройства можно использовать одноразовый ключ восстановления для получения доступа к учётной записи. twofa_is_enrolled=Ваша учётная запись в настоящее время использует двухфакторную аутентификацию. twofa_not_enrolled=Ваша учётная запись в настоящее время не использует двухфакторную аутентификацию. twofa_disable=Отключить двухфакторную аутентификацию +twofa_scratch_token_regenerate=Пересоздать одноразовый ключ восстановления +twofa_scratch_token_regenerated=Ваш одноразовый ключ восстановления теперь %s. Храните его в безопасном месте, так как он не будет показан снова. +twofa_enroll=Включить двухфакторную аутентификацию twofa_disable_note=При необходимости можно отключить двухфакторную аутентификацию. twofa_disable_desc=Отключение двухфакторной аутентификации сделает ваш аккаунт менее безопасным. Продолжить? +regenerate_scratch_token_desc=Если вы потеряли свой ключ восстановления или уже использовали его для входа, вы можете сбросить его здесь. twofa_disabled=Двухфакторная аутентификация выключена. scan_this_image=Отсканируйте это изображение вашим приложением для двухфакторной аутентификации: or_enter_secret=Или введите кодовое слово: %s then_enter_passcode=И введите пароль, показанный в приложении: passcode_invalid=Неверный пароль. попробуйте снова. +twofa_enrolled=Ваша учетная запись успешно активирована. Храните одноразовый ключ восстановления (%s) в безопасном месте, так как он больше не будет показан. twofa_failed_get_secret=Не удалось получить ключ. +webauthn_desc="Ключи безопасности — это аппаратные устройства, содержащие криптографические ключи. Они могут использоваться для двухфакторной аутентификации. Ключи безопасности должны поддерживать стандарт WebAuthn Authenticator." webauthn_register_key=Добавить ключ безопасности webauthn_nickname=Имя пользователя webauthn_delete_key=Удалить ключ безопасности +webauthn_delete_key_desc=Если вы удалите ключ безопасности, вы больше не сможете войти с помощью него. Продолжить? webauthn_key_loss_warning=В случае утраты ключей безопасности вы потеряете доступ к учётной записи. +webauthn_alternative_tip=Вы можете настроить дополнительный метод аутентификации. manage_account_links=Управление привязанными аккаунтами manage_account_links_desc=Эти внешние аккаунты привязаны к вашему аккаунту Gitea. +account_links_not_available=Нет внешних аккаунтов, связанных с вашим аккаунтом Gitea. link_account=Привязать аккаунт remove_account_link=Удалить привязанный аккаунт remove_account_link_desc=Удаление привязанной учётной записи отменит её доступ к вашей учётной записи Gitea. Продолжить? remove_account_link_success=Привязанная учётная запись удалена. +hooks.desc=Добавить веб-хуки, которые будут работать для всех ваших репозиториев. orgs_none=Вы не состоите ни в одной организации. repos_none=Вы не владеете ни одним репозиторием. @@ -842,10 +1027,12 @@ delete_account_title=Удалить аккаунт delete_account_desc=Вы уверены, что хотите навсегда удалить этот аккаунт? email_notifications.enable=Включить почтовые уведомления -email_notifications.onmention=Посылать письмо на эл. почту только при упоминании +email_notifications.onmention=Отправить письмо на электронную почту только при упоминании email_notifications.disable=Отключить почтовые уведомления email_notifications.submit=Установить настройки электронной почты email_notifications.andyourown=И ваши собственные уведомления +email_notifications.actions.desc="Уведомления для запусков рабочих процессов на репозиториях, настроенных с помощью Gitea Actions." +email_notifications.actions.failure_only=Уведомлять только при неуспешных запусках рабочих процессов visibility=Видимость пользователя visibility.public=Публичный @@ -856,9 +1043,13 @@ visibility.private=Приватный visibility.private_tooltip=Виден только членам организаций, к которым вы присоединились [repo] +new_repo_helper="Репозиторий содержит все файлы проекта, включая историю изменений. Уже есть репозиторий в другом месте? Перенести репозиторий." owner=Владелец owner_helper=Некоторые организации могут не отображаться в раскрывающемся списке из-за максимального ограничения количества репозиториев. repo_name=Название репозитория +repo_name_profile_public_hint=.profile — это специальный репозиторий, который можно использовать для добавления README.md в публичный профиль организации, видимый всем. Убедитесь, что он публичный, и инициализируйте его с README в директории профиля, чтобы начать. +repo_name_profile_private_hint=.profile-private — это специальный репозиторий, который можно использовать для добавления README.md в профиль участника организации, видимый только участникам организации. Убедитесь, что он приватный, и инициализируйте его с README в директории профиля, чтобы начать. +repo_name_helper=Хорошие имена репозиториев используют короткие, запоминающиеся и уникальные ключевые слова. Репозиторий с именем ".profile" или ".profile-private" можно использовать для добавления README.md в профиль пользователя/организации. repo_size=Размер репозитория template=Шаблон template_select=Выбрать шаблон. @@ -869,7 +1060,7 @@ visibility_description=Только владелец или члены орга visibility_helper=Сделать репозиторий приватным visibility_helper_forced=Администратор сайта настроил параметр видимости новых репозиториев. Репозиторий приватный по умолчанию. visibility_fork_helper=(Изменение этого повлияет на все форки.) -clone_helper=Нужна помощь в клонировании? Посетите страницу помощи. +clone_helper="Нужна помощь в клонировании? Посетите страницу помощи." fork_repo=Форкнуть репозиторий fork_from=Форк от already_forked=Вы уже форкнули %s @@ -877,7 +1068,12 @@ fork_to_different_account=Ответвление для другой учётн fork_visibility_helper=Видимость форкнутого репозитория изменить нельзя. fork_branch=Ветка для клонирования в форк all_branches=Все ветки +view_all_branches=Посмотреть все ветви +view_all_tags=Посмотреть все теги +fork_no_valid_owners=Нельзя сделать ответвление от этого репозитория, потому что нет допустимых владельцев. +fork.blocked_user=Не удалось создать ответвление репозитория, потому что вы заблокированы владельцем репозитория. use_template=Использовать этот шаблон +open_with_editor=Открыть с помощью %s download_zip=Скачать ZIP download_tar=Скачать TAR.GZ download_bundle=Скачать BUNDLE @@ -885,13 +1081,18 @@ generate_repo=Создать репозиторий generate_from=Создать из repo_desc=Описание repo_desc_helper=Добавьте краткое описание (необязательно) +repo_no_desc=Описание отсутствует +repo_lang=Языки repo_gitignore_helper=Выберите шаблон .gitignore. repo_gitignore_helper_desc=Выберите из списка шаблонов для популярных языков , какие файлы не надо отслеживать. По умолчанию в .gitignore включены типичные артефакты, создаваемые инструментами сборки каждого языка. issue_labels=Метки задач issue_labels_helper=Выберите набор ярлыков задачи. license=Лицензия license_helper=Выберите файл лицензии. -license_helper_desc=Лицензия определяет, что другие люди могут, а что не могут делать с вашим кодом. Не уверены, какая лицензия подходит для вашего проекта? Смотрите Выберите лицензию. +license_helper_desc="Лицензия определяет, что другие люди могут, а что не могут делать с вашим кодом. Не уверены, какая лицензия подходит для вашего проекта? Смотрите Выберите лицензию." +multiple_licenses=Несколько лицензий +object_format=Формат объекта +object_format_helper=Формат объекта репозитория. Невозможно изменить позже. SHA1 совместим. readme=README readme_helper=Выберите шаблон README. readme_helper_desc=Это место, где вы можете написать подробное описание вашего проекта. @@ -909,23 +1110,29 @@ mirror_prune=Очистить mirror_prune_desc=Удаление устаревших отслеживаемых ссылок mirror_interval=Интервал зеркалирования (допустимы единицы времени 'h', 'm', 's'). Значение 0 отключает периодическую синхронизацию. (Минимальный интервал: %s) mirror_interval_invalid=Недопустимый интервал зеркалирования. +mirror_sync=синхронизировано mirror_sync_on_commit=Синхронизировать при отправке коммитов mirror_address=Клонировать по URL mirror_address_desc=Поместите необходимые учётные данные в секцию авторизации. +mirror_address_url_invalid=Указан неверный URL. Убедитесь, что все компоненты URL правильно экранированы. +mirror_address_protocol_invalid=Указанный URL неправильный. Только адреса http(s):// или git:// могут использоваться для создания зеркала. mirror_lfs=Хранилище больших файлов (LFS) mirror_lfs_desc=Активировать зеркалирование данных LFS. mirror_lfs_endpoint=LFS Endpoint +mirror_lfs_endpoint_desc="Синхронизация попытается использовать URL клонирования для определения LFS-сервера. Вы также можете указать пользовательскую конечную точку, если данные LFS репозитория хранятся в другом месте." mirror_last_synced=Последняя синхронизация mirror_password_placeholder=(Неизменный) mirror_password_blank_placeholder=(Отменено) mirror_password_help=Смените имя пользователя для удаления пароля. watchers=Наблюдатели -stargazers=Звездочеты +stargazers=Добавили в избранное stars_remove_warning=Данное действие удалит все звёзды из этого репозитория. forks=Форки +stars=В избранном reactions_more=и ещё %d unit_disabled=Администратор сайта отключил этот раздел репозитория. language_other=Разное +adopt_search=Введите имя пользователя для поиска непринятых репозиториев… (оставьте пустым для поиска всех) adopt_preexisting_label=Принятые файлы adopt_preexisting=Принять уже существующие файлы adopt_preexisting_content=Создать репозиторий из %s @@ -935,16 +1142,26 @@ delete_preexisting=Удалить уже существующие файлы delete_preexisting_content=Удалить файлы из %s delete_preexisting_success=Удалены непринятые файлы в %s blame_prior=Показать авторство предшествующих изменений +blame.ignore_revs="Изменения в .git-blame-ignore-revs игнорируются. Нажмите сюда для перехода к обычному просмотру авторства изменений." +blame.ignore_revs.failed="Не удалось проигнорировать изменения в .git-blame-ignore-revs." +user_search_tooltip=Показывает не более 30 пользователей +tree_path_not_found=Путь %[1]s не существует в %[2]s transfer.accept=Принять трансфер +transfer.accept_desc=Переместить в "%s" transfer.reject=Отказаться от перемещения +transfer.reject_desc=Отменить перемещение в "%s" +transfer.no_permission_to_accept=У вас нет прав для подтверждения этой передачи. +transfer.no_permission_to_reject=У вас нет прав для отклонения этой передачи. desc.private=Приватный desc.public=Публичный +desc.public_access=Публичный доступ desc.template=Шаблон desc.internal=Внутренний desc.archived=Архивировано +desc.sha256=SHA256 template.items=Элементы шаблона template.git_content=Содержимое Git (ветвь по умолчанию) @@ -957,6 +1174,8 @@ template.issue_labels=Метки задач template.one_item=Необходимо выбрать хотя бы один элемент шаблона template.invalid=Необходимо выбрать хранилище шаблонов +archive.title=Это репозиторий заархивирован. Вы можете просматривать файлы и клонировать его, но не можете вносить в него изменения и открывать задачи или запросы на слияние. +archive.title_date=Этот репозиторий был заархивирован на %s. Вы можете просматривать файлы или клонировать его, но не можете отправлять изменения, открывать задачи или создавать запросы на слияние. archive.issue.nocomment=Этот репозиторий в архиве. Вы не можете комментировать задачи. archive.pull.nocomment=Это репозиторий в архиве. Вы не можете комментировать запросы на слияние. @@ -971,8 +1190,9 @@ migrate_service=Сервис миграции migrate_options_mirror_helper=Этот репозиторий будет зеркалом migrate_options_lfs=Перенос LFS файлов migrate_options_lfs_endpoint.label=LFS Endpoint -migrate_options_lfs_endpoint.description=Миграция попытается использовать ваш Git удаленно, чтобы определить сервер LFS. Вы также можете указать пользовательскую конечную точку, если данные хранятся в другом месте. +migrate_options_lfs_endpoint.description="Миграция попытается использовать ваш Git удаленно, чтобы определить сервер LFS. Вы также можете указать пользовательскую конечную точку, если данные хранятся в другом месте." migrate_options_lfs_endpoint.description.local=Также поддерживается путь на локальном сервере. +migrate_options_lfs_endpoint.placeholder=Если оставить это поле пустым, конечная точка будет получена из клона URL-адреса. migrate_items=Элементы миграции migrate_items_wiki=Вики migrate_items_milestones=Этапы @@ -984,15 +1204,18 @@ migrate_items_releases=Релизы migrate_repo=Перенос репозитория migrate.clone_address=Перенос / Клонирование по URL migrate.clone_address_desc=Это может быть HTTP/HTTPS/GIT адрес или локальный путь существующего репозитория на сервере. +migrate.github_token_desc=Вы можете указать здесь один или несколько токенов, разделенных запятыми, чтобы ускорить миграцию, обойдя ограничение частоты запросов API GitHub. ВНИМАНИЕ: Злоупотребление этой функцией может нарушить политику поставщика услуг и привести к блокировке вашей учетной записи. migrate.clone_local_path=или локальный путь на сервере migrate.permission_denied=У вас нет прав на импорт локальных репозиториев. -migrate.invalid_local_path=Недопустимый локальный путь. Он не существует или не является каталогом. +migrate.permission_denied_blocked=Импорт с запрещенных хостов невозможен. Обратитесь к администратору для проверки настроек ALLOWED_DOMAINS/ALLOW_LOCALNETWORKS/BLOCKED_DOMAINS. +migrate.invalid_local_path="Недопустимый локальный путь. Он не существует или не является каталогом." migrate.invalid_lfs_endpoint=Конечная точка LFS недействительна. migrate.failed=Миграция не удалась: %v migrate.migrate_items_options=Токен доступа необходим для миграции дополнительных элементов -migrated_from=Перенесено из %[2]s +migrated_from="Перенесено из %[2]s" migrated_from_fake=Перенесено из %[1]s migrate.migrate=Миграция из %s +migrate.migrating=Перенос из %s… migrate.migrating_failed=Перенос из %s не удался. migrate.migrating_failed.error=Не удалось мигрировать: %s migrate.migrating_failed_no_addr=Миграция не удалась. @@ -1004,6 +1227,11 @@ migrate.gogs.description=Перенести данные с notabug.org или migrate.onedev.description=Перенести данные с code.onedev.io или других экземпляров OneDev. migrate.codebase.description=Перенос данных с codebasehq.com. migrate.gitbucket.description=Перенести данные из экземпляров GitBucket. +migrate.codecommit.description=Перенос данных из AWS CodeCommit. +migrate.codecommit.aws_access_key_id=ID ключа доступа AWS Access Key ID +migrate.codecommit.aws_secret_access_key=Секретный ключ доступа AWS (Secret Access Key) +migrate.codecommit.https_git_credentials_username=Имя пользователя HTTPS Git +migrate.codecommit.https_git_credentials_password=Пароль HTTPS Git migrate.migrating_git=Перенос Git данных migrate.migrating_topics=Миграция тем migrate.migrating_milestones=Перенос этапов @@ -1013,6 +1241,7 @@ migrate.migrating_issues=Миграция задач migrate.migrating_pulls=Миграция запросов на слияние migrate.cancel_migrating_title=Отменить миграцию migrate.cancel_migrating_confirm=Вы хотите отменить эту миграцию? +migration_status=Статус миграции mirror_from=зеркало из forked_from=ответвлено от @@ -1026,6 +1255,7 @@ watch=Следить unstar=Убрать из избранного star=В избранное fork=Форкнуть +action.blocked_user=Не удается выполнить действие, потому что вы заблокированы владельцем репозитория. download_archive=Скачать репозиторий more_operations=Ещё действия @@ -1034,7 +1264,9 @@ clone_this_repo=Клонировать репозиторий cite_this_repo=Сослаться на этот репозиторий create_new_repo_command=Создать новый репозиторий из командной строки push_exist_repo=Отправка существующего репозитория из командной строки +empty_message=В репозитории нет файлов. broken_message=Данные Git, лежащие в основе репозитория, не могут быть прочитаны. Свяжитесь с администратором этого экземпляра или удалите этот репозиторий. +no_branch=В этом репозитории нет веток. code=Код code.desc=Исходный код, файлы, коммиты и ветки. @@ -1051,6 +1283,7 @@ projects=Проекты packages=Пакеты actions=Действия labels=Метки +org_labels_desc=Метки уровня организации, которые можно использовать со всеми репозиториями в этой организации org_labels_desc_manage=управлять milestone=Этап @@ -1062,6 +1295,7 @@ releases=Релизы tag=Тег released_this=выпустил(-а) это tagged_this=добавил(а) тег +file.title=%s в %s file_raw=Исходник file_history=История file_view_source=Просмотреть исходный код @@ -1069,10 +1303,16 @@ file_view_rendered=Просмотр отрендеренного file_view_raw=Посмотреть исходник file_permalink=Постоянная ссылка file_too_large=Этот файл слишком большой, поэтому он не может быть отображён. +file_is_empty=Файл пуст. +code_preview_line_from_to=Строки с %[1]d по %[2]d в %[3]s +code_preview_line_in=Строка %[1]d в %[2]s invisible_runes_header=`Этот файл содержит невидимые символы Юникода` +invisible_runes_description=`Этот файл содержит невидимые символы Юникода, которые неразличимы для человека, но могут быть по-разному обработаны компьютером. Если вы считаете, что это сделано намеренно, вы можете спокойно проигнорировать это предупреждение. Используйте кнопку Escape, чтобы показать их.` ambiguous_runes_header=`Этот файл содержит неоднозначные символы Юникода` +ambiguous_runes_description=`Этот файл содержит символы Юникода, которые можно спутать с другими символами. Если вы считаете, что это сделано намеренно, вы можете спокойно проигнорировать это предупреждение. Используйте кнопку Escape, чтобы показать эти символы.` invisible_runes_line=`В этой строке есть невидимые символы Юникода` ambiguous_runes_line=`В этой строке есть неоднозначные символы Юникода` +ambiguous_character=`%[1]c [U+%04[1]X] можно спутать с %[2]c [U+%04[2]X]` escape_control_characters=Экранировать unescape_control_characters=Убрать экранирование @@ -1082,6 +1322,8 @@ video_not_supported_in_browser=Ваш браузер не поддерживае audio_not_supported_in_browser=Ваш браузер не поддерживает HTML5 'audio' тэг. symbolic_link=Символическая ссылка executable_file=Исполняемый файл +vendored=Поставленные +generated=Сгенерировано commit_graph=Граф коммитов commit_graph.select=Выбрать ветку commit_graph.hide_pr_refs=Скрыть запросы на слияние @@ -1090,6 +1332,7 @@ commit_graph.color=Цвет commit.contained_in=Этот коммит содержится в: commit.contained_in_default_branch=Этот коммит является частью ветки по умолчанию commit.load_referencing_branches_and_tags=Загрузить ветки и теги, ссылающиеся на этот коммит +commit.merged_in_pr=Этот коммит был объединён с запросом на слияние %s. blame=Ответственный download_file=Скачать файл normal_view=Обычный вид @@ -1103,7 +1346,9 @@ editor.upload_file=Загрузить файл editor.edit_file=Редактировать файл editor.preview_changes=Просмотр изменений editor.cannot_edit_lfs_files=LFS файлы невозможно редактировать в веб-интерфейсе. +editor.cannot_edit_too_large_file=Файл слишком большой для редактирования. editor.cannot_edit_non_text_files=Двоичные файлы нельзя редактировать в веб-интерфейсе. +editor.file_not_editable_hint=Но вы все равно можете переименовать или переместить его. editor.edit_this_file=Редактировать файл editor.this_file_locked=Файл заблокирован editor.must_be_on_a_branch=Чтобы внести или предложить изменения этого файла, необходимо выбрать ветку. @@ -1117,15 +1362,17 @@ editor.or=или editor.cancel_lower=Отменить editor.commit_signed_changes=Зафиксировать подписанные изменения editor.commit_changes=Сохранить правки +editor.add_tmpl=Добавить '{filename}' editor.add=Добавить %s editor.update=Обновить %s editor.delete=Удалить %s editor.patch=Применить патч editor.patching=Исправление: +editor.fail_to_apply_patch=Не удалось применить патч editor.new_patch=Новый патч editor.commit_message_desc=Добавьте необязательное расширенное описание… editor.signoff_desc=Добавить трейлер Signed-off-by с автором коммита в конце сообщения коммита. -editor.commit_directly_to_this_branch=Сделайте коммит прямо в ветку %s. +editor.commit_directly_to_this_branch="Сделайте коммит прямо в ветку %s." editor.create_new_branch=Создайте новую ветку для этого коммита, и сделайте запрос на слияние. editor.create_new_branch_np=Создать новую ветку для этого коммита. editor.propose_file_change=Предложить изменение файла @@ -1134,12 +1381,18 @@ editor.new_branch_name_desc=Новое название ветки… editor.cancel=Отмена editor.filename_cannot_be_empty=Имя файла не может быть пустым. editor.filename_is_invalid=Недопустимое имя файла: «%s». +editor.commit_email=Адрес электронной почты коммита +editor.invalid_commit_email=Этот адрес электронной почты - неверен. editor.branch_does_not_exist=Ветка «%s» отсутствует в этом репозитории. editor.branch_already_exists=Ветка «%s» уже существует в этом репозитории. editor.directory_is_a_file=Имя каталога «%s» уже используется в качестве имени файла в этом репозитории. +editor.file_is_a_symlink=`"%s" является символической ссылкой. Символические ссылки не могут быть отредактированы в веб-редакторе.` editor.filename_is_a_directory=Имя файла «%s» уже используется в качестве каталога в этом репозитории. -editor.file_changed_while_editing=Содержимое файла изменилось с момента начала редактирования. Нажмите здесь, чтобы увидеть, что было изменено, или Зафиксировать изменения снова, чтобы заменить их. +editor.file_modifying_no_longer_exists=Файл, который вы пытаетесь отредактировать, "%s", больше не существует в этом репозитории. +editor.file_changed_while_editing="Содержимое файла изменилось с момента начала редактирования. Нажмите здесь, чтобы увидеть, что было изменено, или Зафиксировать изменения снова, чтобы заменить их." editor.file_already_exists=Файл с именем «%s» уже существует в репозитории. +editor.commit_id_not_matching=ID фиксации не совпадает с ID в начале редактирования. Зафиксируйтесь в патч ветку, а затем объедините. +editor.push_out_of_date=Похоже, что push устарел. editor.commit_empty_file_header=Закоммитить пустой файл editor.commit_empty_file_text=Файл, который вы собираетесь зафиксировать, пуст. Продолжить? editor.no_changes_to_show=Нет изменений. @@ -1156,13 +1409,22 @@ editor.user_no_push_to_branch=Пользователь не может отпр editor.require_signed_commit=Ветка ожидает подписанный коммит editor.cherry_pick=Перенести изменения %s в: editor.revert=Откатить %s к: +editor.failed_to_commit=Не удалось зафиксировать изменения. +editor.failed_to_commit_summary=Сообщение об ошибке: +editor.fork_create=Сделать ответвление репозитория для предложения изменений +editor.fork_create_description=Вы не можете редактировать этот репозиторий напрямую. Вместо этого вы можете создать ответвление, внести изменения и создать запрос на слияние. +editor.fork_edit_description=Вы не можете редактировать этот репозиторий напрямую. Изменения будут записаны в ваше ответвление %s, чтобы вы могли создать запрос на слияние. +editor.fork_not_editable=Вы создали ответвление этого репозитория, но ваше ответвление не может быть отредактировано. +editor.fork_failed_to_push_branch=Не удалось отправить ветку %s в ваш репозиторий. +editor.fork_branch_exists=Ветка "%s" уже существует в вашем ответвлении, пожалуйста, выберите новое имя для ветки. commits.desc=Просмотр истории изменений исходного кода. commits.commits=Коммитов commits.no_commits=Нет общих коммитов. «%s» и «%s» имеют совершенно разные истории. commits.nothing_to_compare=Эти ветки одинаковы. commits.search.tooltip=Можно предварять ключевые слова префиксами "author:", "committer:", "after:", или "before:", например "revert author:Alice before:2019-01-13". +commits.search_branch=Эта ветка commits.search_all=Все ветки commits.author=Автор commits.message=Сообщение @@ -1174,6 +1436,8 @@ commits.signed_by_untrusted_user=Подписано ненадежным пол commits.signed_by_untrusted_user_unmatched=Подписан недоверенным пользователем, который не соответствует автору коммита commits.gpg_key_id=Идентификатор ключа GPG commits.ssh_key_fingerprint=Отпечаток ключа SSH +commits.view_path=Посмотреть историю в данной точке +commits.view_file_diff=Просмотр изменений файла в этой фиксации commit.operations=Операции commit.revert=Откатить @@ -1184,13 +1448,14 @@ commit.cherry-pick-header=Cherry-pick: %s commit.cherry-pick-content=Выбрать ветку для переноса: commitstatus.error=Ошибка -commitstatus.failure=Неудача +commitstatus.failure=Неудачно commitstatus.pending=Ожидание commitstatus.success=Успешно ext_issues=Доступ к внешним задачам ext_issues.desc=Ссылка на внешнюю систему отслеживания ошибок. +projects.desc=Управление задачами и запросами на слияние в проектах. projects.description=Описание (необязательно) projects.description_placeholder=Описание projects.create=Создать проект @@ -1205,26 +1470,27 @@ projects.edit=Редактировать проекты projects.edit_subheader=Создавайте и организуйте задачи и отслеживайте прогресс. projects.modify=Обновить проект projects.edit_success=Проект «%s» обновлён. -projects.type.none=Нет -projects.type.basic_kanban=Обычный Канбан -projects.type.bug_triage=Планирование работы с багами -projects.template.desc=Шаблон проекта -projects.template.desc_helper=Выберите шаблон проекта для начала -projects.column.edit=Изменить столбец -projects.column.edit_title=Название -projects.column.new_title=Название -projects.column.new_submit=Создать столбец -projects.column.new=Новый столбец -projects.column.set_default=Установить по умолчанию -projects.column.set_default_desc=Назначить этот столбец по умолчанию для неклассифицированных задач и запросов на слияние -projects.column.delete=Удалить столбец -projects.column.color=Цвет +projects.type.none="Нет" +projects.type.basic_kanban="Обычный Канбан" +projects.type.bug_triage="Планирование работы с багами" +projects.template.desc="Шаблон проекта" +projects.template.desc_helper="Выберите шаблон проекта для начала" +projects.column.edit="Изменить столбец" +projects.column.edit_title="Название" +projects.column.new_title="Название" +projects.column.new_submit="Создать столбец" +projects.column.new="Новая колонка" +projects.column.set_default="Установить по умолчанию" +projects.column.set_default_desc="Назначить этот столбец по умолчанию для неклассифицированных задач и запросов на слияние" +projects.column.delete="Удалить столбец" +projects.column.deletion_desc="Удаление колонки проекта перемещает все связанные задачи в колонку по умолчанию. Продолжить?" +projects.column.color="Цвет" projects.open=Открыть projects.close=Закрыть projects.column.assigned_to=Назначено на -projects.card_type.desc=Предпросмотр карточек -projects.card_type.images_and_text=Изображения и текст -projects.card_type.text_only=Только текст +projects.card_type.desc="Предпросмотр карточек" +projects.card_type.images_and_text="Изображения и текст" +projects.card_type.text_only="Только текст" issues.desc=Организация отчетов об ошибках, заданий и этапов. issues.filter_assignees=Фильтр назначений @@ -1232,6 +1498,8 @@ issues.filter_milestones=Фильтр этапов issues.filter_projects=Фильтровать проекты issues.filter_labels=Фильтр меток issues.filter_reviewers=Фильтр рецензентов +issues.filter_no_results=Нет результатов +issues.filter_no_results_placeholder=Попробуйте изменить фильтры поиска. issues.new=Новая задача issues.new.title_empty=Заголовок не может быть пустым issues.new.labels=Метки @@ -1249,6 +1517,10 @@ issues.new.clear_milestone=Очистить этап issues.new.assignees=Назначенные issues.new.clear_assignees=Убрать ответственных issues.new.no_assignees=Нет назначенных лиц +issues.new.no_reviewers=Нет рецензентов +issues.new.blocked_user=Не удается создать задачу, потому что вы были заблокированы владельцем репозитория. +issues.edit.already_changed=Не удается сохранить изменения в задаче. Похоже, содержимое уже было изменено другим пользователем. Пожалуйста, обновите страницу и попробуйте еще раз, чтобы избежать перезаписи его изменений +issues.edit.blocked_user=Не удалось отредактировать содержимое, потому что вы заблокированы автором или владельцем репозитория. issues.choose.get_started=Начать issues.choose.open_external_link=Открыть issues.choose.blank=По умолчанию @@ -1274,6 +1546,7 @@ issues.remove_labels=удалил(а) метки %s %s issues.add_remove_labels=добавил(а) метки %s и удалил(а) %s %s issues.add_milestone_at=`добавил(а) к этапу %s %s` issues.add_project_at=`добавил(а) в %s проект %s` +issues.move_to_column_of_project=`перемещено в %s в %s на %s` issues.change_milestone_at=`изменил(а) целевой этап с %s на %s %s` issues.change_project_at=`изменил(а) проект с %s на %s %s` issues.remove_milestone_at=`удалил(а) это из этапа %s %s` @@ -1302,9 +1575,14 @@ issues.filter_project=Проект issues.filter_project_all=Все проекты issues.filter_project_none=Нет проекта issues.filter_assignee=Назначено +issues.filter_assignee_no_assignee=Без назначения +issues.filter_assignee_any_assignee=С назначением issues.filter_poster=Автор +issues.filter_user_placeholder=Поиск пользователей +issues.filter_user_no_select=Все пользователи issues.filter_type=Тип issues.filter_type.all_issues=Все задачи +issues.filter_type.all_pull_requests=Все запросы на слияние issues.filter_type.assigned_to_you=Назначено вам issues.filter_type.created_by_you=Созданные вами issues.filter_type.mentioning_you=Вы упомянуты @@ -1313,13 +1591,14 @@ issues.filter_type.reviewed_by_you=Проверенные вами issues.filter_sort=Сортировать issues.filter_sort.latest=Новейшие issues.filter_sort.oldest=Старейшие +issues.filter_sort.recentupdate=Последнее обновление issues.filter_sort.leastupdate=Давно обновленные issues.filter_sort.mostcomment=Больше комментариев issues.filter_sort.leastcomment=Меньше комментариев issues.filter_sort.nearduedate=Ближайшее по дате завершения issues.filter_sort.farduedate=Удалённое по дате завершения -issues.filter_sort.moststars=Больше звезд -issues.filter_sort.feweststars=Меньше звезд +issues.filter_sort.moststars=Больше в избранном +issues.filter_sort.feweststars=Меньше в избранном issues.filter_sort.mostforks=Больше форков issues.filter_sort.fewestforks=Меньше форков issues.action_open=Открыть @@ -1331,10 +1610,10 @@ issues.action_assignee=Ответственный issues.action_assignee_no_select=Нет ответственного issues.action_check=Выбрать/отменить выбор issues.action_check_all=Выбрать/отменить выбор всех элементов -issues.opened_by=открыта %[1]s %[3]s -pulls.merged_by=от %[3]s был слит %[1]s +issues.opened_by="открыта %[1]s %[3]s" +pulls.merged_by="от %[3]s был слит %[1]s" pulls.merged_by_fake=от %[2]s был слит %[1]s -issues.closed_by=от %[3]s была закрыта %[1]s +issues.closed_by="от %[3]s была закрыта %[1]s" issues.opened_by_fake=открыт %[1]s пользователем %[2]s issues.closed_by_fake=%[2]s закрыл(а) %[1]s issues.previous=Предыдущая @@ -1344,7 +1623,7 @@ issues.closed_title=Закрыто issues.draft_title=Черновик issues.num_comments_1=%d комментарий issues.num_comments=комментариев: %d -issues.commented_at=`прокомментировал(а) %s` +issues.commented_at="`прокомментировал(а) %s`" issues.delete_comment_confirm=Вы уверены, что хотите удалить этот комментарий? issues.context.copy_link=Копировать ссылку issues.context.quote_reply=Цитировать ответ @@ -1355,17 +1634,20 @@ issues.no_content=Описание отсутствует. issues.close=Закрыть задачу issues.comment_pull_merged_at=слил(а) коммит %[1]s в %[2]s %[3]s issues.comment_manually_pull_merged_at=вручную слил(а) коммит %[1]s в %[2]s %[3]s +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.ref_issue_from=`ссылка на эту проблему %[4]s %[2]s` -issues.ref_pull_from=`сослался(ась) на этот запрос на слияние %[4]s %[2]s` -issues.ref_closing_from=`сослался(ась) на запрос на слияние %[4]s, который закроет эту задачу %[2]s` -issues.ref_reopening_from=`сослался(ась) на запрос на слияние %[4]s, который повторно откроет эту задачу %[2]s` -issues.ref_closed_from=`закрыл этот запрос %[4]s %[2]s` -issues.ref_reopened_from=`переоткрыл эту задачу %[4]s %[2]s` +issues.comment.blocked_user=Не удалось создать или отредактировать комментарий, потому что вы заблокированы автором или владельцем репозитория. +issues.closed_at="`закрыл(а) эту задачу %[2]s`" +issues.reopened_at="`переоткрыл(а) эту проблему %[2]s`" +issues.commit_ref_at="`упомянул эту задачу в коммите %[2]s`" +issues.ref_issue_from="`ссылка на эту проблему %[4]s %[2]s`" +issues.ref_pull_from="`сослался(ась) на этот запрос на слияние %[4]s %[2]s`" +issues.ref_closing_from="`сослался(ась) на запрос на слияние %[4]s, который закроет эту задачу %[2]s`" +issues.ref_reopening_from="`сослался(ась) на запрос на слияние %[4]s, который повторно откроет эту задачу %[2]s`" +issues.ref_closed_from="`закрыл этот запрос %[4]s %[2]s`" +issues.ref_reopened_from="`переоткрыл эту задачу %[4]s %[2]s`" issues.ref_from=`из %[1]s` issues.author=Автор issues.author_helper=Этот пользователь является автором. @@ -1378,25 +1660,29 @@ issues.role.collaborator_helper=Этот пользователь был при issues.role.first_time_contributor=Новый участник issues.role.first_time_contributor_helper=Это первый вклад пользователя в репозиторий. issues.role.contributor=Участник +issues.role.contributor_helper=Этот пользователь ранее вносил изменения в репозиторий. issues.re_request_review=Повторить запрос на отзыв issues.is_stale=Со времени этого обзора в этот PR были внесены некоторые изменения issues.remove_request_review=Удалить запрос на отзыв issues.remove_request_review_block=Невозможно удалить запрос на отзыв issues.dismiss_review=Отклонить отзыв issues.dismiss_review_warning=Вы уверены, что хотите отклонить эту рецензию? -issues.sign_in_require_desc=Войдите, чтобы присоединиться к обсуждению. +issues.sign_in_require_desc="Войдите, чтобы присоединиться к обсуждению." issues.edit=Изменить issues.cancel=Отмена issues.save=Сохранить issues.label_title=Имя метки issues.label_description=Описание метки issues.label_color=Цвет метки +issues.label_color_invalid=Недопустимый цвет issues.label_exclusive=Эксклюзивный issues.label_archive=Метка архива issues.label_archived_filter=Показать архивированные метки issues.label_archive_tooltip=Архивированные метки исключаются по умолчанию из подсказок при поиске по метке. issues.label_exclusive_desc=Назовите метку область/элемент, чтобы сделать ее взаимоисключающей с другими метками область/. issues.label_exclusive_warning=Любые метки с конфликтующей областью будут удалены при редактировании меток задачи или запроса на слияние. +issues.label_exclusive_order=Порядок сортировки +issues.label_exclusive_order_tooltip=Исключающие метки в одной области будут отсортированы в соответствии с этим числовым порядком. issues.label_count=%d меток issues.label_open_issues=%d открытых задач issues.label_edit=Редактировать @@ -1415,18 +1701,19 @@ issues.attachment.download=`Нажмите, чтобы скачать «%s»` issues.subscribe=Подписаться issues.unsubscribe=Отказаться от подписки issues.unpin=Открепить -issues.max_pinned=Нельзя закрепить больше задач -issues.pin_comment=закрепил(а) эту задачу %s -issues.unpin_comment=открепил(а) эту задачу %s +issues.max_pinned="Нельзя закрепить больше задач" +issues.pin_comment="закрепил(а) эту задачу %s" +issues.unpin_comment="открепил(а) эту задачу %s" issues.lock=Ограничить обсуждение issues.unlock=Снять ограничение issues.lock_duplicate=Обсуждение задачи уже ограничено. issues.unlock_error=Невозможно снять несуществующее ограничение обсуждения. -issues.lock_with_reason=заблокировано как %s и ограничено обсуждение для соучастников %s -issues.lock_no_reason=ограничил(а) обсуждение задачи кругом соавторов %s -issues.unlock_comment=снял(а) ограничение %s +issues.lock_with_reason="заблокировано как %s и ограничено обсуждение для соучастников %s" +issues.lock_no_reason="ограничил(а) обсуждение задачи кругом соавторов %s" +issues.unlock_comment="снял(а) ограничение %s" issues.lock_confirm=Ограничить issues.unlock_confirm=Снять +issues.lock.notice_1=- Другие пользователи не могут добавлять новые комментарии к этой задаче. issues.lock.notice_2=- Вы и другие соавторы с доступом к этому репозиторию могут оставлять комментарии, которые могут видеть другие. issues.lock.notice_3=- Вы всегда можете снять ограничение с обсуждения этой задачи. issues.unlock.notice_1=- Все снова смогут принять участие в обсуждении данной задачи. @@ -1440,12 +1727,29 @@ issues.delete.title=Удалить эту задачу? issues.delete.text=Вы действительно хотите удалить эту задачу? Это навсегда удалит всё содержимое. Возможно лучше закрыть её в архивных целях. issues.tracker=Отслеживание времени - +issues.timetracker_timer_start=Запустить таймер +issues.timetracker_timer_stop=Остановить таймер +issues.timetracker_timer_discard=Сбросить таймер +issues.timetracker_timer_manually_add=Добавить время + +issues.time_estimate_set=Установить предполагаемое время +issues.time_estimate_display=Оценка: %s +issues.change_time_estimate_at=изменена оценка времени на %[1]s %[2]s +issues.remove_time_estimate_at=удалена оценка времени %s +issues.time_estimate_invalid=Неверный формат оценки времени +issues.start_tracking_history=начал(а) работу %s issues.tracker_auto_close=Таймер будет остановлен автоматически, когда эта проблема будет закрыта -issues.tracking_already_started=`Вы уже начали отслеживать время для другой задачи!` +issues.stopwatch_already_stopped=Таймер для этой задачи уже остановлен +issues.stopwatch_already_created=Таймер для этой задачи уже существует +issues.tracking_already_started="`Вы уже начали отслеживать время для другой задачи!`" +issues.stop_tracking=Остановить Таймер +issues.stop_tracking_history=проработал(а) %[1]s %[2]s +issues.cancel_tracking=Отменить отслеживание issues.cancel_tracking_history=`отменил(а) отслеживание времени %s` issues.del_time=Удалить этот журнал времени +issues.add_time_history=Добавлено время %[1]s %[2]s issues.del_time_history=`удалил(а) потраченное время %s` +issues.add_time_manually=Добавить время вручную issues.add_time_hours=Часы issues.add_time_minutes=Минуты issues.add_time_sum_to_small=Время не было введено. @@ -1453,29 +1757,30 @@ issues.time_spent_total=Общее затраченное время issues.time_spent_from_all_authors=`Общее затраченное время: %s` issues.due_date=Срок выполнения -issues.invalid_due_date_format=Дата окончания должна быть в формате 'гггг-мм-дд'. -issues.error_modifying_due_date=Не удалось изменить срок выполнения. -issues.error_removing_due_date=Не удалось убрать срок выполнения. -issues.push_commit_1=добавил(а) %d коммит %s -issues.push_commits_n=добавил(а) %d коммитов %s -issues.force_push_codes=`форсировал(а) отправку изменений %[1]s %[4]s вместо %[2]s %[6]s` +issues.invalid_due_date_format="Дата окончания должна быть в формате 'гггг-мм-дд'." +issues.error_modifying_due_date="Не удалось изменить срок выполнения." +issues.error_removing_due_date="Не удалось убрать срок выполнения." +issues.push_commit_1="добавил(а) %d коммит %s" +issues.push_commits_n="добавил(а) %d коммитов %s" +issues.force_push_codes="`форсировал(а) отправку изменений %[1]s %[4]s вместо %[2]s %[6]s`" issues.force_push_compare=Сравнить -issues.due_date_form=гггг-мм-дд -issues.due_date_form_add=Добавить срок выполнения -issues.due_date_form_edit=Редактировать -issues.due_date_form_remove=Удалить -issues.due_date_not_set=Срок выполнения не установлен. -issues.due_date_added=добавил(а) срок выполнения %s %s -issues.due_date_modified=изменил(а) срок выполнения с %[2]s на %[1]s %[3]s -issues.due_date_remove=удалён срок выполнения %s %s -issues.due_date_overdue=Просроченные -issues.due_date_invalid=Срок действия недействителен или находится за пределами допустимого диапазона. Пожалуйста, используйте формат 'гггг-мм-дд'. +issues.due_date_form="гггг-мм-дд" +issues.due_date_form_add="Добавить срок выполнения" +issues.due_date_form_edit="Редактировать" +issues.due_date_form_remove="Удалить" +issues.due_date_not_writer="Вы должны иметь доступ на запись к этому репозиторию, чтобы обновить срок выполнения задачи." +issues.due_date_not_set="Срок выполнения не установлен." +issues.due_date_added="добавил(а) срок выполнения %s %s" +issues.due_date_modified="изменил(а) срок выполнения с %[2]s на %[1]s %[3]s" +issues.due_date_remove="удалён срок выполнения %s %s" +issues.due_date_overdue="Просроченные" +issues.due_date_invalid="Срок действия недействителен или находится за пределами допустимого диапазона. Пожалуйста, используйте формат 'гггг-мм-дд'." issues.dependency.title=Зависимости issues.dependency.issue_no_dependencies=Зависимостей нет. issues.dependency.pr_no_dependencies=Зависимостей нет. -issues.dependency.no_permission_1=У вас недостаточно прав для чтения %d зависимости -issues.dependency.no_permission_n=У вас недостаточно прав для чтения %d зависимостей -issues.dependency.no_permission.can_remove=У вас недостаточно прав для чтения этой зависимости, но вы можете удалить эту зависимость +issues.dependency.no_permission_1="У вас недостаточно прав для чтения %d зависимости" +issues.dependency.no_permission_n="У вас недостаточно прав для чтения %d зависимостей" +issues.dependency.no_permission.can_remove="У вас недостаточно прав для чтения этой зависимости, но вы можете удалить эту зависимость" issues.dependency.add=Добавить зависимость… issues.dependency.cancel=Отменить issues.dependency.remove=Удалить @@ -1486,7 +1791,9 @@ issues.dependency.pr_closing_blockedby=Закрытие этого запрос issues.dependency.issue_closing_blockedby=Закрытие этой задачи блокируется следующими задачами issues.dependency.issue_close_blocks=Эта задача блокирует закрытие следующих задач issues.dependency.pr_close_blocks=Этот запрос на слияние блокирует закрытие следующих задач -issues.dependency.issue_batch_close_blocked=Невозможно пакетно закрыть выбранные задачи, потому что у задачи #%d остаются открытые зависимости +issues.dependency.issue_close_blocked=Вы должны закрыть все задачи, блокирующие эту задачу, прежде чем ее можно будет закрыть. +issues.dependency.issue_batch_close_blocked="Невозможно пакетно закрыть выбранные задачи, потому что у задачи #%d остаются открытые зависимости" +issues.dependency.pr_close_blocked=Вы должны закрыть все задачи, блокирующие этот запрос на слияние, прежде чем его можно будет слить. issues.dependency.blocks_short=Блоки issues.dependency.blocked_by_short=Зависит от issues.dependency.remove_header=Удалить зависимость @@ -1497,22 +1804,27 @@ issues.dependency.add_error_same_issue=Вы не можете заставить issues.dependency.add_error_dep_issue_not_exist=Зависимая задача не существует. issues.dependency.add_error_dep_not_exist=Зависимости не существует. issues.dependency.add_error_dep_exists=Зависимость уже существует. +issues.dependency.add_error_cannot_create_circular=Вы не можете создать зависимость с двумя задачами, блокирующими друг друга. issues.dependency.add_error_dep_not_same_repo=Обе задачи должны находиться в одном репозитории. issues.review.self.approval=Вы не можете одобрить собственный запрос на слияние. issues.review.self.rejection=Невозможно запрашивать изменения своего запроса на слияние. -issues.review.approve=одобрил(а) эти изменения %s +issues.review.approve="одобрил(а) эти изменения %s" +issues.review.comment="рассмотрел(а) %s" +issues.review.dismissed="отклонил(а) проверку %s %s" issues.review.dismissed_label=Отклонено issues.review.left_comment=оставил комментарий issues.review.content.empty=Запрашивая изменения, вы обязаны оставить комментарий с пояснением своих пожеланий относительно запроса на слияние. -issues.review.reject=запросил(а) изменения %s -issues.review.wait=был запрошен для отзыва %s -issues.review.add_review_request=запросил отзыв от %s %s -issues.review.remove_review_request=удалена заявка на отзыв для %s %s +issues.review.reject="запросил(а) изменения %s" +issues.review.wait="был запрошен для отзыва %s" +issues.review.add_review_request="запросил отзыв от %s %s" +issues.review.remove_review_request="удалена заявка на отзыв для %s %s" +issues.review.remove_review_request_self="отказался(ась) от проверки %s" issues.review.pending=Ожидание issues.review.pending.tooltip=Этот комментарий в настоящее время не виден другим пользователям. Чтобы отправить отложенные комментарии, выберите «%s» → «%s/%s/%s» в верхней части страницы. issues.review.review=Рецензия issues.review.reviewers=Рецензенты issues.review.outdated=Устаревшее +issues.review.outdated_description=Содержимое изменилось с момента создания этого комментария issues.review.option.show_outdated_comments=Показать устаревшие комментарии issues.review.option.hide_outdated_comments=Скрыть устаревшие комментарии issues.review.show_outdated=Показать устаревшие @@ -1523,6 +1835,12 @@ issues.review.resolve_conversation=Покинуть диалог issues.review.un_resolve_conversation=Незавершённый разговор issues.review.resolved_by=пометить этот разговор как разрешённый issues.review.commented=Комментировать +issues.review.official=Одобрено +issues.review.requested=На рассмотрении +issues.review.rejected=Запрошены изменения +issues.review.stale=Будет обновлено после подтверждения +issues.review.unofficial=Неучтенное одобрение +issues.assignee.error=Не все назначения были добавлены из-за непредвиденной ошибки. issues.reference_issue.body=Тело issues.content_history.deleted=удалено issues.content_history.edited=отредактировано @@ -1537,6 +1855,9 @@ compare.compare_head=сравнить pulls.desc=Включить запросы на слияние и проверки кода. pulls.new=Новый запрос на слияние +pulls.new.blocked_user=Не удаётся создать запрос на слияние, потому что вы заблокированы владельцем репозитория. +pulls.new.must_collaborator=Вы должны быть соавтором, чтобы создать запрос на слияние. +pulls.edit.already_changed=Не удаётся сохранить изменения в запросе на слияние. Похоже, содержимое уже было изменено другим пользователем. Пожалуйста, обновите страницу и попробуйте ещё раз, чтобы избежать перезаписи его изменений pulls.view=Просмотр запроса на слияние pulls.compare_changes=Новый запрос на слияние pulls.allow_edits_from_maintainers=Разрешить редактирование сопровождающими @@ -1557,12 +1878,15 @@ pulls.show_all_commits=Показать все коммиты pulls.show_changes_since_your_last_review=Показать изменения с момента вашего последнего отзыва pulls.showing_only_single_commit=Показать только изменения коммита %[1]s pulls.showing_specified_commit_range=Показаны только изменения между %[1]s..%[2] +pulls.select_commit_hold_shift_for_range=Выберите коммит. Удерживайте Shift + клик, чтобы выбрать диапазон +pulls.review_only_possible_for_full_diff=Проверка возможна только при просмотре полного различия pulls.filter_changes_by_commit=Фильтр по коммиту pulls.nothing_to_compare=Нечего сравнивать, родительская и текущая ветка одинаковые. +pulls.nothing_to_compare_have_tag=Выбранные ветки/теги идентичны. pulls.nothing_to_compare_and_allow_empty_pr=Ветки идентичны. Этот PR будет пустым. -pulls.has_pull_request=`Запрос на слияние этих веток уже существует: %[2]s#%[3]d` +pulls.has_pull_request="`Запрос на слияние этих веток уже существует: %[2]s#%[3]d`" pulls.create=Создать запрос на слияние -pulls.title_desc=хочет влить %[1]d коммит(ов) из %[2]s в %[3]s +pulls.title_desc="хочет влить %[1]d коммит(ов) из %[2]s в %[3]s" pulls.merged_title_desc=слито %[1]d коммит(ов) из %[2]s в %[3]s %[4]s pulls.change_target_branch_at=`изменил(а) целевую ветку с %s на %s %s` pulls.tab_conversation=Обсуждение @@ -1576,46 +1900,66 @@ pulls.closed=Запрос на слияние закрыт pulls.manually_merged=Слито вручную pulls.merged_info_text=Ветку %s теперь можно удалить. pulls.is_closed=Запрос на слияние закрыт. -pulls.title_wip_desc=`Добавьте %s в начало заголовка для защиты от случайного досрочного принятия запроса на слияние` +pulls.title_wip_desc="`Добавьте %s в начало заголовка для защиты от случайного досрочного принятия запроса на слияние`" pulls.cannot_merge_work_in_progress=Этот запрос на слияние помечен как в процессе работы. pulls.still_in_progress=Всё ещё в процессе? pulls.add_prefix=Добавить %s префикс pulls.remove_prefix=Удалить %s префикс pulls.data_broken=Содержимое этого запроса было нарушено вследствие удаления информации форка. pulls.files_conflicted=Этот запрос на слияние имеет изменения конфликтующие с целевой веткой. -pulls.is_ancestor=Эта ветка уже включена в целевую ветку. Сливать нечего. -pulls.is_empty=Изменения из этой ветки уже есть в целевой ветке. Это будет пустой коммит. +pulls.is_checking=Проверка конфликтов слияния… +pulls.is_ancestor="Эта ветка уже включена в целевую ветку. Сливать нечего." +pulls.is_empty="Изменения из этой ветки уже есть в целевой ветке. Это будет пустой коммит." pulls.required_status_check_failed=Некоторые необходимые проверки не были пройдены. pulls.required_status_check_missing=Отсутствуют некоторые обязательные проверки. pulls.required_status_check_administrator=Как администратор, вы все равно можете принять этот запрос на слияние. -pulls.blocked_by_rejection=Официальный рецензент запросил изменения к этому запросу на слияние. +pulls.blocked_by_approvals="Этот запрос на слияние пока не имеет достаточного количества одобрений. Получено %d из %d одобрений." +pulls.blocked_by_approvals_whitelisted="Этому запросу на слияние не хватает необходимых подтверждений. Получено %d из %d подтверждений от пользователей или команд из белого списка." +pulls.blocked_by_rejection="Официальный рецензент запросил изменения к этому запросу на слияние." +pulls.blocked_by_official_review_requests="Для этого запроса на слияние требуются официальные проверки." +pulls.blocked_by_outdated_branch="Этот запрос на слияние заблокирован, так как устарел." +pulls.blocked_by_changed_protected_files_1="Этот запрос на слияние заблокирован, так как изменяет защищенный файл:" +pulls.blocked_by_changed_protected_files_n="Этот запрос на слияние заблокирован, так как изменяет защищенные файлы:" pulls.can_auto_merge_desc=Этот запрос на слияние может быть объединён автоматически. pulls.cannot_auto_merge_desc=Этот запрос на слияние не может быть объединён автоматически. pulls.cannot_auto_merge_helper=Пожалуйста, совершите слияние вручную для урегулирования конфликтов. -pulls.num_conflicting_files_1=%d конфликтующий файл -pulls.num_conflicting_files_n=%d конфликтующих файлов -pulls.approve_count_1=%d одобрение -pulls.approve_count_n=%d одобрений -pulls.reject_count_1=%d запрос на изменение -pulls.reject_count_n=%d запросов на изменение -pulls.waiting_count_1=%d ожидает проверки -pulls.waiting_count_n=%d ожидающих отзывов +pulls.num_conflicting_files_1="%d конфликтующий файл" +pulls.num_conflicting_files_n="%d конфликтующих файлов" +pulls.approve_count_1="%d одобрение" +pulls.approve_count_n="%d одобрений" +pulls.reject_count_1="%d запрос на изменение" +pulls.reject_count_n="%d запросов на изменение" +pulls.waiting_count_1="%d ожидает проверки" +pulls.waiting_count_n="%d ожидающих отзывов" +pulls.wrong_commit_id="ID фиксации должен быть идентификатором фиксации в целевой ветке" pulls.no_merge_desc=Запрос на слияние не может быть принят, так как отключены все настройки слияния. pulls.no_merge_helper=Включите опции слияния в настройках репозитория или совершите слияние этого запроса вручную. pulls.no_merge_wip=Данный запрос на слияние не может быть принят, поскольку он помечен как находящийся в разработке. +pulls.no_merge_not_ready=Этот запрос не готов к слиянию, обратите внимания на ревью и проверки. pulls.no_merge_access=У вас нет права для слияния данного запроса. pulls.merge_pull_request=Создать коммит на слияние +pulls.rebase_merge_pull_request=Перебазировать, затем перемотка вперёд +pulls.rebase_merge_commit_pull_request=Перебазировать, затем создать коммит слияния pulls.squash_merge_pull_request=Создать объединённый коммит +pulls.fast_forward_only_merge_pull_request=Только перемотка вперед pulls.merge_manually=Слито вручную pulls.merge_commit_id=ID коммита слияния pulls.require_signed_wont_sign=Данная ветка ожидает подписанные коммиты, однако слияние не будет подписано pulls.invalid_merge_option=Этот параметр слияния нельзя использовать для этого запроса на слияние. +pulls.merge_conflict=Ошибка слияния: Возник конфликт при слиянии. Подсказка: Попробуйте другую стратегию. pulls.merge_conflict_summary=Сообщение об ошибке +pulls.rebase_conflict=Ошибка слияния: Возник конфликт при перебазировании коммита: %[1]s. Совет: Попробуйте другую стратегию. pulls.rebase_conflict_summary=Сообщение об ошибке +pulls.unrelated_histories=Ошибка слияния: Ветки для слияния не имеют общей истории. Совет: Попробуйте другую стратегию. +pulls.merge_out_of_date=Ошибка слияния: Во время генерации слияния базовая ветка была обновлена. Совет: Попробуйте снова. +pulls.head_out_of_date=Ошибка слияния: Во время генерации слияния исходная ветка была обновлена. Совет: Попробуйте снова. +pulls.has_merged=Ошибка: Запрос на слияние был объединен, вы не можете выполнить повторное слияние или изменить целевую ветку. +pulls.push_rejected=Слияние не удалось: отправка была отклонена. Проверьте Git-хуки для этого репозитория. pulls.push_rejected_summary=Полная ошибка отклонения -pulls.open_unmerged_pull_exists=`Вы не можете снова открыть, поскольку уже существует запрос на слияние (#%d) из того же репозитория с той же информацией о слиянии и ожидающий слияния.` +pulls.push_rejected_no_message=Слияние не удалось: отправка была отклонена, но сервер не указал причину.
Проверьте Git-хуки для этого репозитория +pulls.open_unmerged_pull_exists="`Вы не можете снова открыть, поскольку уже существует запрос на слияние (#%d) из того же репозитория с той же информацией о слиянии и ожидающий слияния.`" pulls.status_checking=Выполняются некоторые проверки pulls.status_checks_success=Все проверки выполнены успешно pulls.status_checks_warning=Некоторые проверки сообщили о предупреждениях @@ -1631,11 +1975,16 @@ pulls.update_branch_success=Обновление ветки выполнено pulls.update_not_allowed=У вас недостаточно прав для обновления ветки pulls.outdated_with_base_branch=Эта ветка отстает от базовой ветки pulls.close=Закрыть запрос на слияние -pulls.closed_at=`закрыл этот запрос на слияние %[2]s` -pulls.reopened_at=`переоткрыл этот запрос на слияние %[2]s` +pulls.closed_at="`закрыл этот запрос на слияние %[2]s`" +pulls.reopened_at="`переоткрыл этот запрос на слияние %[2]s`" +pulls.cmd_instruction_hint=Просмотреть инструкции для командной строки +pulls.cmd_instruction_checkout_title=Переключить +pulls.cmd_instruction_checkout_desc=Из репозитория вашего проекта переключитесь на новую ветку и протестируйте изменения. pulls.cmd_instruction_merge_title=Слить pulls.cmd_instruction_merge_desc=Слить изменения и обновить в Gitea. +pulls.cmd_instruction_merge_warning=Внимание: Эта операция не может объединить запрос на слияние, так как "автоопределение ручного слияния" не включено. pulls.clear_merge_message=Очистить сообщение о слиянии +pulls.clear_merge_message_hint=Очистка сообщения о слиянии удалит только содержимое сообщения коммита, но сохранит сгенерированные git дополнения, такие как "Соафторы…". pulls.auto_merge_button_when_succeed=(При успешных проверках) pulls.auto_merge_when_succeed=Слить автоматически после прохождения всех проверок @@ -1652,9 +2001,17 @@ pulls.auto_merge_canceled_schedule_comment=`отменил автоматиче pulls.delete.title=Удалить этот запрос на слияние? pulls.delete.text=Вы действительно хотите удалить этот запрос на слияние? (Это навсегда удалит всё содержимое. Возможно, лучше закрыть запрос в архивных целях.) +pulls.recently_pushed_new_branches=Вы отправили изменения в ветку %[1]s %[2]s +pulls.upstream_diverging_prompt_behind_1=Эта ветка отстает на %[1]d коммит от %[2]s +pulls.upstream_diverging_prompt_behind_n=Эта ветка отстает на %[1]d коммитов от %[2]s +pulls.upstream_diverging_prompt_base_newer=В базовой ветке %s есть новые изменения +pulls.upstream_diverging_merge=Синхронизировать ответвление +pulls.upstream_diverging_merge_confirm=Вы хотите объединить "%[1]s" с "%[2]s"? pull.deleted_branch=(удалена):%s +pull.agit_documentation=Ознакомиться с документацией AGit +comments.edit.already_changed=Не удаётся сохранить изменения в комментарии. Похоже, содержимое уже было изменено другим пользователем. Пожалуйста, обновите страницу и попробуйте ещё раз, чтобы избежать перезаписи этих изменений milestones.new=Новый этап milestones.closed=Закрыт %s @@ -1662,12 +2019,14 @@ milestones.update_ago=Обновлено %s milestones.no_due_date=Срок не указан milestones.open=Открыть milestones.close=Закрыть +milestones.new_subheader=Контрольные точки могут помочь вам упорядочить задачи и отслеживать ход их выполнения. +milestones.completeness=%d%% Завершено milestones.create=Создать этап milestones.title=Заголовок milestones.desc=Описание milestones.due_date=Дата окончания (опционально) milestones.clear=Очистить -milestones.invalid_due_date_format=Дата окончания должна быть в формате 'гггг-мм-дд'. +milestones.invalid_due_date_format="Дата окончания должна быть в формате 'гггг-мм-дд'." milestones.create_success=Этап «%s» создан. milestones.edit=Редактировать этап milestones.edit_subheader=Используйте лучшее описание контрольной точки, во избежание непонимания со стороны других людей. @@ -1686,9 +2045,12 @@ milestones.filter_sort.most_issues=Большинство задач milestones.filter_sort.least_issues=Меньшинство задач signing.will_sign=Этот коммит будет подписан ключом «%s». +signing.wont_sign.error=Произошла ошибка при проверке возможности подписания фиксации. +signing.wont_sign.nokey=Нет доступного ключа для подписи этой фиксации. signing.wont_sign.never=Коммиты никогда не подписываются. signing.wont_sign.always=Коммиты всегда подписываются. signing.wont_sign.pubkey=Этот коммит не будет подписан, поскольку к вашей учётной записи не привязано публичного ключа. +signing.wont_sign.twofa=Для подписи коммитов необходимо включить двухфакторную аутентификацию. signing.wont_sign.parentsigned=Этот коммит не будет подписан, так как родительский коммит не подписан. signing.wont_sign.basesigned=Слияние не будет подписано, так как базовый коммит не подписан. signing.wont_sign.headsigned=Слияние не будет подписано, так как головной коммит не подписан. @@ -1724,8 +2086,13 @@ wiki.reserved_page=Имя страницы вики «%s» зарезервир wiki.pages=Страницы wiki.last_updated=Последнее обновление %s wiki.page_name_desc=Введите имя страницы вики. Некоторые специальные имена: 'Home', '_Sidebar' и '_Footer'. +wiki.original_git_entry_tooltip=Просмотр исходного Git файла вместо использования простой ссылки. activity=Активность +activity.navbar.pulse=Пульс +activity.navbar.code_frequency=Кодовая частота +activity.navbar.contributors=Соавторы +activity.navbar.recent_commits=Последние коммиты activity.period.filter_label=Период: activity.period.daily=1 день activity.period.halfweekly=3 дня @@ -1769,6 +2136,7 @@ activity.title.releases_1=%d релиз activity.title.releases_n=%d релизов activity.title.releases_published_by=%s опубликованы %s activity.published_release_label=Опубликовано +activity.no_git_activity=В этом периоде не было активности в Git. activity.git_stats_exclude_merges=За исключением слияний, activity.git_stats_author_1=%d автор activity.git_stats_author_n=%d автора(ов) @@ -1790,16 +2158,27 @@ activity.git_stats_and_deletions=и activity.git_stats_deletion_1=%d удаление activity.git_stats_deletion_n=%d удалений -contributors.contribution_type.commits=коммитов +contributors.contribution_type.filter_label=Тип участия: +contributors.contribution_type.commits=Коммиты +contributors.contribution_type.additions=Добавления +contributors.contribution_type.deletions=Удаления settings=Настройки +settings.desc=Настройки позволяют управлять параметрами репозитория. settings.options=Репозиторий +settings.public_access=Публичный доступ +settings.public_access_desc=Настройка прав доступа публичных посетителей для переопределения значений по умолчанию для этого репозитория. +settings.public_access.docs.not_set=Не задано: нет дополнительных разрешений на публичный доступ. Права посетителя определяются видимостью репозитория и правами участников. +settings.public_access.docs.anonymous_read=Анонимное чтение: пользователи, не вошедшие в систему, могут получить доступ к модулю с правами на чтение. +settings.public_access.docs.everyone_read=Чтение для всех: все вошедшие в систему пользователи могут получить доступ к модулю с правами на чтение. Право на чтение модулей задач/запросов на слияние также означает, что пользователи могут создавать новые задачи/запросы на слияние. +settings.public_access.docs.everyone_write=Запись для всех: все вошедшие в систему пользователи имеют права на запись в модуль. Только модуль Wiki поддерживает это разрешение. settings.collaboration=Соавторы settings.collaboration.admin=Администратор settings.collaboration.write=Запись settings.collaboration.read=Просмотр settings.collaboration.owner=Владелец settings.collaboration.undefined=Не определено +settings.collaboration.per_unit=Права доступа к модулям settings.hooks=Веб-хуки settings.githooks=Git-хуки settings.basic_settings=Основные параметры @@ -1809,12 +2188,15 @@ settings.mirror_settings.docs.disabled_pull_mirror.instructions=Настройт settings.mirror_settings.docs.disabled_push_mirror.instructions=Настройте свой проект, чтобы автоматически получать коммиты, теги и ветки из другого репозитория. settings.mirror_settings.docs.disabled_push_mirror.pull_mirror_warning=В настоящее время это можно сделать только в меню «Новая миграция». Для получения дополнительной информации, пожалуйста, ознакомьтесь: settings.mirror_settings.docs.disabled_push_mirror.info=Push-зеркала отключены администратором сайта. +settings.mirror_settings.docs.no_new_mirrors=Ваш репозиторий зеркалирует изменения в другой репозиторий или из него. Пожалуйста, имейте в виду, что в данный момент невозможно создавать новые зеркала. settings.mirror_settings.docs.can_still_use=Хотя вы не можете изменять существующие зеркала или создавать новые, вы можете по-прежнему использовать существующее зеркало. settings.mirror_settings.docs.pull_mirror_instructions=Чтобы настроить pull-зеркало, пожалуйста, ознакомьтесь: settings.mirror_settings.docs.more_information_if_disabled=Вы можете узнать больше о зеркалах push и pull здесь: settings.mirror_settings.docs.doc_link_title=Как зеркалировать репозитории? +settings.mirror_settings.docs.doc_link_pull_section=раздел документации "Извлечение из удаленного репозитория". settings.mirror_settings.docs.pulling_remote_title=Получение из удалённого репозитория settings.mirror_settings.mirrored_repository=Синхронизированное хранилище +settings.mirror_settings.pushed_repository=Отправляемый репозиторий settings.mirror_settings.direction=Направление settings.mirror_settings.direction.pull=Отправка settings.mirror_settings.direction.push=Отправка @@ -1825,6 +2207,7 @@ settings.mirror_settings.push_mirror.add=Добавить Push-зеркало settings.mirror_settings.push_mirror.edit_sync_time=Изменить интервал синхронизации зеркала settings.sync_mirror=Синхронизировать +settings.pull_mirror_sync_in_progress=В данный момент идёт извлечение изменений из удаленного репозитория %s. settings.push_mirror_sync_in_progress=Идёт отправка изменений в удалённый репозиторий %s. settings.site=Сайт settings.update_settings=Обновить настройки @@ -1835,6 +2218,8 @@ settings.branches.add_new_rule=Добавить новое правило settings.advanced_settings=Расширенные настройки settings.wiki_desc=Включить вики для репозитория settings.use_internal_wiki=Использовать встроенную вики +settings.default_wiki_branch_name=Название ветки вики по умолчанию +settings.failed_to_change_default_wiki_branch=Не удалось изменить ветку вики по умолчанию. settings.use_external_wiki=Использовать внешнюю вики settings.external_wiki_url=URL внешней вики settings.external_wiki_url_error=URL внешней вики не является корректным URL. @@ -1864,6 +2249,10 @@ settings.pulls.default_delete_branch_after_merge=Удалить ветку за settings.pulls.default_allow_edits_from_maintainers=По умолчанию разрешать редактирование сопровождающими settings.releases_desc=Включить релизы settings.packages_desc=Включить реестр пакетов +settings.projects_desc=Включить проекты +settings.projects_mode_desc=Режим проектов (какие типы проектов показывать) +settings.projects_mode_repo=Только проекты репозитория +settings.projects_mode_owner=Только проекты пользователя или организации settings.projects_mode_all=Все проекты settings.actions_desc=Включить действия репозитория settings.admin_settings=Настройки администратора @@ -1874,6 +2263,7 @@ settings.admin_indexer_commit_sha=Последний индексированн settings.admin_indexer_unindexed=Не индексировано settings.reindex_button=Добавить в очередь переиндексации settings.reindex_requested=Переиндексация запрошена +settings.admin_enable_close_issues_via_commit_in_any_branch=Закрывать задачи через коммиты в любой ветке settings.danger_zone=Опасная зона settings.new_owner_has_same_repo=У нового владельца уже есть хранилище с таким названием. settings.convert=Преобразовать в обычный репозиторий @@ -1889,14 +2279,17 @@ settings.convert_fork_succeed=Форк преобразован в обычны settings.transfer=Передать права собственности settings.transfer.rejected=Трансфер репозитория отменён. settings.transfer.success=Трансфер репозитория успешно выполнен. +settings.transfer.blocked_user=Не удалось передать репозиторий, так как вы заблокированы новым владельцем. settings.transfer_abort=Отменить трансфер settings.transfer_abort_invalid=Невозможно отменить трансфер несуществующего репозитория. settings.transfer_abort_success=Передача репозитория %s успешно отменена. settings.transfer_desc=Передать репозиторий другому пользователю или организации где у вас есть права администратора. settings.transfer_form_title=Введите сопутствующую информацию для подтверждения операции: +settings.transfer_in_progress=В данный момент выполняется передача. Отмените её, если хотите передать этот репозиторий другому пользователю. settings.transfer_notices_1=- Вы можете потерять доступ, если новый владелец является отдельным пользователем. settings.transfer_notices_2=- Вы сохраните доступ, если новым владельцем станет организация, владельцем которой вы являетесь. settings.transfer_notices_3=- если репозиторий является приватным и передается отдельному пользователю, это действие позволяет убедиться, что пользователь имеет хотя бы права на чтение (и при необходимости изменяет права доступа). +settings.transfer_notices_4=- Если репозиторий принадлежит организации, и вы передаете его другой организации или частному лицу, вы потеряете связи между задачами репозитория и доской проектов организации. settings.transfer_owner=Новый владелец settings.transfer_perform=Выполнить трансфер settings.transfer_started=Репозиторий ожидает подтверждения передачи от «%s» @@ -1907,9 +2300,13 @@ settings.trust_model.default=Модель доверия по умолчанию settings.trust_model.default.desc=Использовать стандартную модель доверия репозитория для этой установки. settings.trust_model.collaborator=Соавтор settings.trust_model.collaborator.long=Соавтор: Доверять подписям соавторов +settings.trust_model.collaborator.desc=Действительные подписи участников этого репозитория будут отмечены как "доверенные", независимо от того, соответствуют ли они автору коммита. В противном случае действительные подписи будут отмечены как "недоверенные", если подпись соответствует автору коммита, и "несоответствующие" в противном случае. settings.trust_model.committer=Коммитер +settings.trust_model.committer.long=Автор коммита: доверять подписям, соответствующим авторам коммитов. Это соответствует поведению GitHub и заставит коммиты, подписанные Gitea, указывать Gitea в качестве автора коммита. +settings.trust_model.committer.desc=Действительные подписи будут отмечены как "доверенные" только если они соответствуют автору коммита, в противном случае они будут отмечены как "несоответствующие". Это заставит Gitea указываться в качестве автора подписанных коммитов, а фактический автор будет указан в трейлерах коммита как Co-authored-by: и Co-committed-by:. Ключ Gitea по умолчанию должен соответствовать пользователю в базе данных. settings.trust_model.collaboratorcommitter=Соавтор+Коммитер settings.trust_model.collaboratorcommitter.long=Соавтор+Коммитер: Доверять подписям соавторов, которые соответствуют автору коммита +settings.trust_model.collaboratorcommitter.desc=Действительные подписи участников этого репозитория будут отмечены как "доверенные", если они соответствуют автору коммита. В противном случае действительные подписи будут отмечены как "недоверенные", если подпись соответствует автору коммита, и "несоответствующие" в противном случае. Это заставит Gitea указываться в качестве автора подписанных коммитов, а фактический автор будет указан в трейлерах коммита как Co-Authored-By: и Co-Committed-By:. Ключ Gitea по умолчанию должен соответствовать пользователю в базе данных. settings.wiki_delete=Стереть данные вики settings.wiki_delete_desc=Будьте внимательны! Как только вы удалите вики — пути назад не будет. settings.wiki_delete_notices_1=- Это навсегда удалит и отключит вики для %s. @@ -1918,6 +2315,7 @@ settings.wiki_deletion_success=Данные вики удалены. settings.delete=Удалить этот репозиторий settings.delete_desc=Будьте внимательны! Как только вы удалите репозиторий — пути назад не будет. settings.delete_notices_1=- Эта операция НЕ МОЖЕТ быть отменена. +settings.delete_notices_2=- Эта операция навсегда удалит репозиторий %s, включая код, задачи, комментарии, данные вики и настройки участников. settings.delete_notices_fork_1=- Все форки станут независимыми репозиториями после удаления. settings.deletion_success=Репозиторий удалён. settings.update_settings_success=Настройки репозитория обновлены. @@ -1928,6 +2326,7 @@ settings.add_collaborator_success=Соавтор добавлен. settings.add_collaborator_inactive_user=Невозможно добавить неактивного пользователя как соавтора. settings.add_collaborator_owner=Невозможно добавить владельца в качестве соавтора. settings.add_collaborator_duplicate=Соавтор уже добавлен в этот репозиторий. +settings.add_collaborator.blocked_user=Соавтор заблокирован владельцем репозитория или наоборот. settings.delete_collaborator=Удалить settings.collaborator_deletion=Удалить соавтора settings.collaborator_deletion_desc=Этот пользователь больше не будет иметь доступа для совместной работы в этом репозитории после удаления. Вы хотите продолжить? @@ -1938,31 +2337,38 @@ settings.team_not_in_organization=Команда не в той же орган settings.teams=Команды settings.add_team=Добавить команду settings.add_team_duplicate=Команда уже имеет репозиторий +settings.add_team_success=Команда теперь имеет доступ к репозиторию. +settings.change_team_permission_tip=Права команды настраиваются на странице настроек команды и не могут быть изменены для каждого репозитория отдельно settings.delete_team_tip=Эта команда имеет доступ ко всем репозиториям и не может быть удалена settings.remove_team_success=Доступ команды к репозиторию удалён. settings.add_webhook=Добавить веб-хук -settings.add_webhook.invalid_channel_name=Название канала веб-хука не может быть пустым или состоять только из символа #. -settings.hooks_desc=Веб-хуки позволяют внешним службам получать уведомления при возникновении определенных событий на Gitea. При возникновении указанных событий мы отправим запрос POST на каждый заданный вами URL. Узнать больше можно в нашем руководстве по веб-хукам. +settings.add_webhook.invalid_channel_name="Название канала веб-хука не может быть пустым или состоять только из символа #." +settings.hooks_desc="Веб-хуки позволяют внешним службам получать уведомления при возникновении определенных событий на Gitea. При возникновении указанных событий мы отправим запрос POST на каждый заданный вами URL. Узнать больше можно в нашем руководстве по веб-хукам." settings.webhook_deletion=Удалить веб-хук settings.webhook_deletion_desc=Удаление этого веб-хука приведет к удалению всей связанной с ним информации, включая историю. Хотите продолжить? settings.webhook_deletion_success=Веб-хук был удалён. +settings.webhook.test_delivery=Проверить отправку +settings.webhook.test_delivery_desc=Протестировать этот веб-хук с тестовой отправкой. +settings.webhook.test_delivery_desc_disabled=Чтобы протестировать этот веб-хук с помощью имитации события, активируйте его. settings.webhook.request=Запрос settings.webhook.response=Ответ settings.webhook.headers=Заголовки settings.webhook.payload=Содержимое settings.webhook.body=Тело ответа settings.webhook.replay.description=Повторить этот веб-хук. +settings.webhook.replay.description_disabled=Для повторной отправки веб-хука активируйте его. settings.webhook.delivery.success=Событие было добавлено в очередь доставки. Может пройти несколько секунд, прежде чем оно отобразится в истории. -settings.githooks_desc=Git-хуки предоставляются самим Git. Вы можете изменять файлы хуков из списка ниже, чтобы настроить собственные операции. +settings.githooks_desc="Git-хуки предоставляются самим Git. Вы можете изменять файлы хуков из списка ниже, чтобы настроить собственные операции." settings.githook_edit_desc=Если хук не активен, будет подставлен пример содержимого. Пустое значение в этом поле приведёт к отключению хука. settings.githook_name=Название хукa settings.githook_content=Содержимое хука settings.update_githook=Обновить хук -settings.add_webhook_desc=Gitea будет оправлять POST запросы на указанный URL адрес, с информацией о происходящих событиях. Подробности на странице инструкции по использованию веб-хуков. +settings.add_webhook_desc="Gitea будет оправлять POST запросы на указанный URL адрес, с информацией о происходящих событиях. Подробности на странице инструкции по использованию веб-хуков." settings.payload_url=URL обработчика settings.http_method=Метод HTTP settings.content_type=Тип содержимого settings.secret=Секретный ключ +settings.webhook_secret_desc=Если сервер веб-хука поддерживает использование секретного ключа, вы можете следовать инструкциям веб-хука и заполнить его здесь. settings.slack_username=Имя пользователя settings.slack_icon_url=URL иконки settings.slack_color=Цвет @@ -1981,14 +2387,18 @@ settings.event_fork=Форкнуть settings.event_fork_desc=Репозиторий форкнут. settings.event_wiki=Вики settings.event_wiki_desc=Страница вики создана, переименована, изменена или удалена. +settings.event_statuses=Статусы +settings.event_statuses_desc=Статус коммита обновлен через API. settings.event_release=Релиз settings.event_release_desc=Релиз опубликован, обновлён или удалён из репозитория. settings.event_push=Отправка +settings.event_force_push=Принудительная отправка settings.event_push_desc=Отправка в репозиторий. settings.event_repository=Репозиторий settings.event_repository_desc=Репозиторий создан или удален. settings.event_header_issue=События задачи settings.event_issues=Задачи +settings.event_issues_desc=Задача создана, закрыта, переоткрыта, отредактирована или удалена. settings.event_issue_assign=Назначена задача settings.event_issue_assign_desc=Задача назначена или снята с назначения. settings.event_issue_label=Ярлык задачи @@ -1999,6 +2409,7 @@ settings.event_issue_comment=Комментарии в задаче settings.event_issue_comment_desc=Комментарий создан, изменён или удалён. settings.event_header_pull_request=События запроса на слияние settings.event_pull_request=Запрос на слияние +settings.event_pull_request_desc=Запрос на слияние создан, закрыт, переоткрыт, отредактирован или удален. settings.event_pull_request_assign=Запроса на слияние назначен settings.event_pull_request_assign_desc=Запрос на слияние назначен или не назначен. settings.event_pull_request_label=Запрос на слияние отмечен @@ -2015,9 +2426,17 @@ settings.event_pull_request_review_request=Запрошена рецензия settings.event_pull_request_review_request_desc=Создан или удалён запрос на рецензию для запроса на слияние. settings.event_pull_request_approvals=Утверждения запросов на слияние settings.event_pull_request_merge=Удовлетворение запросов на слияние +settings.event_header_workflow=События рабочего процесса +settings.event_workflow_run=Запуск рабочего процесса +settings.event_workflow_run_desc=Запуск рабочего процесса Gitea Actions в очереди, ожидающий, выполняющийся или завершенный. +settings.event_workflow_job=Задания рабочего процесса +settings.event_workflow_job_desc=Задания рабочего процесса Gitea Actions в очереди, ожидающие, выполняющиеся или завершенные. settings.event_package=Пакеты settings.event_package_desc=Пакет создан или удален в репозитории. settings.branch_filter=Фильтр веток +settings.branch_filter_desc_1=Ветка (и имя ref) допускает список событий push, создания ветвей и удаления ветки, указанных как шаблон glob. Если пусто или *сообщаются события для всех ветвей и тегов. +settings.branch_filter_desc_2=Используйте префикс refs/heads/ или refs/tags/ для совпадения полного имени ссылки. +settings.branch_filter_desc_doc="Смотрите %[2]s документацию для получения информации о синтаксисе." settings.authorization_header=Заголовок Authorization settings.authorization_header_desc=Будет включён в качестве заголовка авторизации для запросов. Примеры: %s. settings.active=Активный @@ -2031,7 +2450,7 @@ settings.hook_type=Тип хука settings.slack_token=Slack токен settings.slack_domain=Домен settings.slack_channel=Канал -settings.add_web_hook_desc=Интегрировать %s в ваш репозиторий. +settings.add_web_hook_desc="Интегрировать %s в ваш репозиторий." settings.web_hook_name_gitea=Gitea settings.web_hook_name_gogs=Gogs settings.web_hook_name_slack=Slack @@ -2062,38 +2481,73 @@ 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.save_rule=Сохранить правило settings.protected_branch.delete_rule=Удалить правило 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=Предотвращает удаление, ограничивает Push и слияние Git в ветку. settings.protect_disable_push=Отключить отправку settings.protect_disable_push_desc=Отправка не будет разрешена в эту ветку. +settings.protect_disable_force_push=Запретить принудительную отправку +settings.protect_disable_force_push_desc=Принудительная отправка в эту ветку будет запрещена. settings.protect_enable_push=Включить отправку settings.protect_enable_push_desc=Любому, у кого есть доступ на запись, будет разрешена отправка изменений в эту ветку (но не принудительная отправка). +settings.protect_enable_force_push_all=Разрешить принудительную отправку всем +settings.protect_enable_force_push_all_desc=Любой пользователь с правами на отправку сможет выполнять принудительную отправку в эту ветку. +settings.protect_enable_force_push_allowlist=Ограниченная принудительная отправка по белому списку +settings.protect_enable_force_push_allowlist_desc=Только пользователи или команды из белого списка с правами на отправку смогут выполнять принудительную отправку в эту ветку. settings.protect_enable_merge=Разрешить всем settings.protect_enable_merge_desc=Все, у кого есть доступ на запись, смогут удовлетворять запросы на слияние в эту ветку. +settings.protect_whitelist_committers=Ограничение отправки по белому списку +settings.protect_whitelist_committers_desc=Только пользователям или командам из белого списка будет разрешена отправка изменений в эту ветку (но не принудительная отправка). +settings.protect_whitelist_deploy_keys=Разрешить отправку ключам развертывания из белого списка с правами на запись. +settings.protect_whitelist_users=Пользователи, которые могут отправлять изменения в эту ветку: +settings.protect_whitelist_teams=Команды, члены которых могут отправлять изменения в эту ветку: +settings.protect_force_push_allowlist_users=Пользователи из списка допущенных с правом принудительной отправки: +settings.protect_force_push_allowlist_teams=Команды из списка допущенных с правом принудительной отправки: +settings.protect_force_push_allowlist_deploy_keys=Ключи развёртывания из списка допущенных с правом отправки для принудительной отправки. +settings.protect_merge_whitelist_committers=Ограничить право на слияние белым списком +settings.protect_merge_whitelist_committers_desc=Только пользователи или команды из белого списка смогут объединять запросы на слияние в эту ветку. +settings.protect_merge_whitelist_users=Пользователи из белого списка с правом на слияние: +settings.protect_merge_whitelist_teams=Команды из белого списка, участники которых обладают правом на слияние: settings.protect_check_status_contexts=Включить проверку статуса settings.protect_status_check_patterns=Шаблоны проверки состояния: settings.protect_status_check_patterns_desc=Добавьте шаблоны, чтобы указать, какие проверки состояния должны быть пройдены, прежде чем ветви могут быть объединены в ветвь, соответствующую этому правилу. В каждой строке указывается шаблон. Шаблоны не могут быть пустыми. +settings.protect_check_status_contexts_desc=Требовать успешного прохождения проверок статуса перед слиянием. При включении коммиты сначала должны быть отправлены в другую ветку, а затем объединены или отправлены напрямую в ветку, соответствующую этому правилу, после успешного прохождения проверок. Если контексты не указаны, последний коммит должен быть успешным независимо от контекста. settings.protect_check_status_contexts_list=Проверки состояния за последнюю неделю для этого репозитория settings.protect_status_check_matched=Совпало settings.protect_invalid_status_check_pattern=Неверный шаблон проверки состояния: «%s». settings.protect_no_valid_status_check_patterns=Нет допустимых шаблонов проверки состояния. settings.protect_required_approvals=Необходимые одобрения: +settings.protect_required_approvals_desc=Разрешить принятие запроса на слияние только с достаточным количеством подтверждений. Подтверждения могут быть от пользователей или команд из белого списка или от любого пользователя с правами на запись. +settings.protect_approvals_whitelist_enabled=Ограничить подтверждения пользователями из белого списка +settings.protect_approvals_whitelist_enabled_desc=Только проверки от пользователей или команд из белого списка будут учитываться при подсчете необходимых подтверждений. Без белого списка подтверждений учитываются проверки от всех, у кого есть права на запись. +settings.protect_approvals_whitelist_users=Проверяющие из белого списка: +settings.protect_approvals_whitelist_teams=Команды из белого списка для проверок: settings.dismiss_stale_approvals=Отклонить устаревшие разрешения settings.dismiss_stale_approvals_desc=Когда новые коммиты, изменяющие содержимое запроса на слияние, отправляются в ветку, старые разрешения будут отклонены. +settings.ignore_stale_approvals=Игнорировать устаревшие подтверждения +settings.ignore_stale_approvals_desc=Не учитывать одобрения, сделанные для предыдущих коммитов (устаревшие рецензии), при подсчёте количества одобрений запроса на слияние. Неактуально, если устаревшие рецензии уже отклонены. settings.require_signed_commits=Требовать подписанные коммиты settings.require_signed_commits_desc=Отклонить отправку изменений в эту ветку, если они не подписаны или не проверяемы. settings.protect_branch_name_pattern=Шаблон имени для защищённых веток +settings.protect_branch_name_pattern_desc="Шаблоны имен защищенных веток. См. документацию для синтаксиса шаблонов. Примеры: main, release/**" settings.protect_patterns=Шаблоны -settings.protect_protected_file_patterns=Шаблоны защищённых файлов (разделённые точкой с запятой ';'): -settings.protect_unprotected_file_patterns=Шаблоны незащищённых файлов (разделённые точкой с запятой ';'): +settings.protect_protected_file_patterns="Шаблоны защищённых файлов (разделённые точкой с запятой ';'):" +settings.protect_protected_file_patterns_desc="Защищенные файлы нельзя изменять напрямую, даже если у пользователя есть права на добавление, редактирование или удаление файлов в этой ветке. Несколько шаблонов можно разделить точкой с запятой (';'). См. документацию по %[2]s для синтаксиса шаблонов. Примеры: .drone.yml, /docs/**/*.txt." +settings.protect_unprotected_file_patterns="Шаблоны незащищённых файлов (разделённые точкой с запятой ';'):" +settings.protect_unprotected_file_patterns_desc="Незащищенные файлы, которые можно изменять напрямую, если у пользователя есть права на запись, обходя ограничения на отправку. Несколько шаблонов можно разделить точкой с запятой (';'). См. документацию по %[2]s для синтаксиса шаблонов. Примеры: .drone.yml, /docs/**/*.txt." +settings.add_protected_branch=Включить защиту +settings.delete_protected_branch=Отключить защиту settings.update_protect_branch_success=Защита веток по правилу «%s» изменена. settings.remove_protected_branch_success=Защита веток по правилу «%s» удалена. settings.remove_protected_branch_failed=Не удалось удалить правило защиты веток «%s». +settings.protected_branch_deletion=Отключение защиты ветки settings.protected_branch_deletion_desc=Любой пользователь с разрешениями на запись сможет выполнять push в эту ветку. Вы уверены? settings.block_rejected_reviews=Блокировка слияния по отклоненным отзывам settings.block_rejected_reviews_desc=Слияние будет невозможно, если официальными рецензентами будут запрошены изменения, даже если имеется достаточное количество одобрений. @@ -2101,8 +2555,11 @@ settings.block_on_official_review_requests=Блокировать слияние settings.block_on_official_review_requests_desc=Слияние невозможно, если не имеется достаточное количество одобрений официальных представителей. settings.block_outdated_branch=Блокировать слияние, если запрос на слияние устарел settings.block_outdated_branch_desc=Слияние будет невозможно, если головная ветвь находится позади базовой ветви. +settings.block_admin_merge_override=Администраторы должны соблюдать правила защиты веток +settings.block_admin_merge_override_desc=Администраторы должны соблюдать правила защиты веток и не могут их обходить. settings.default_branch_desc=Главная ветка является "базовой" для вашего репозитория, на которую по умолчанию направлены все запросы на слияние и которая является лицом вашего репозитория. Первое, что увидит посетитель — это содержимое главной ветки. Выберите её из уже существующих: settings.merge_style_desc=Стили слияния +settings.default_merge_style_desc=Стиль слияния по умолчанию settings.choose_branch=Выберите ветку… settings.no_protected_branch=Нет защищённых веток. settings.edit_protected_branch=Редактировать @@ -2118,21 +2575,39 @@ settings.tags.protection.allowed.teams=Разрешенные команды settings.tags.protection.allowed.noone=Ни один settings.tags.protection.create=Защитить тег settings.tags.protection.none=Нет защищенных тегов. +settings.tags.protection.pattern.description="Вы можете использовать краткое имя, glob-шаблон или регулярное выражение для сопоставления с несколькими тегами. Подробнее можно ознакомиться в руководстве по защищенным тегам." settings.bot_token=Токен для бота settings.chat_id=ID чата +settings.thread_id=ID потока settings.matrix.homeserver_url=URL домашнего сервера settings.matrix.room_id=ID комнаты settings.matrix.message_type=Тип сообщения +settings.visibility.private.button=Сделать приватным +settings.visibility.private.text=Изменение видимости на приватное не только сделает репозиторий видимым только для разрешённых участников, но и может разорвать связь между ним и ответвлениями (форки), отслеживающих и добавивших его в избранное. +settings.visibility.private.bullet_title=Изменение видимости на приватную приведет к следующему: +settings.visibility.private.bullet_one=Сделать репозиторий видимым только для разрешенных участников. +settings.visibility.private.bullet_two=Может удалить связь между ним и ответвлениями (форки), отслеживающими и добавившими в избранное этот репозиторий. +settings.visibility.public.button=Сделать публичным +settings.visibility.public.text=Изменение видимости на публичную сделает репозиторий видимым для всех. +settings.visibility.public.bullet_title=Изменение видимости на публичную приведет к: +settings.visibility.public.bullet_one=Сделать репозиторий видимым для всех. +settings.visibility.success=Видимость репозитория изменена. +settings.visibility.error=Произошла ошибка при попытке изменить видимость репозитория. +settings.visibility.fork_error=Невозможно изменить видимость ответвлённого репозитория. settings.archive.button=Архивировать репозиторий settings.archive.header=Архивировать этот репозиторий +settings.archive.text=Архивация сделает репозиторий полностью доступным только для чтения. Он будет скрыт с панели управления. Никто (даже вы!) не сможет создавать новые коммиты, задачи или запросы на слияние. settings.archive.success=Репозиторий был успешно архивирован. settings.archive.error=Ошибка при попытке архивировать репозиторий. Смотрите логи для получения подробностей. settings.archive.error_ismirror=Вы не можете поместить зеркалируемый репозиторий в архив. settings.archive.branchsettings_unavailable=Настройки ветки недоступны, если репозиторий архивирован. settings.archive.tagsettings_unavailable=Настройки тегов недоступны, если репозиторий архивирован. +settings.archive.mirrors_unavailable=Зеркала недоступны, если репозиторий архивирован. settings.unarchive.button=Разархивировать репозиторий settings.unarchive.header=Вернуть этот репозиторий из архива +settings.unarchive.text=Разархивация восстановит возможность получения коммитов и отправки изменений, а также создания новых задач и запросов на слияние. settings.unarchive.success=Репозиторий был успешно разархивирован. +settings.unarchive.error=Произошла ошибка при попытке разархивировать репозиторий. Подробности смотрите в логах. settings.update_avatar_success=Аватар репозитория обновлён. settings.lfs=LFS settings.lfs_filelist=Файлы LFS хранятся в этом репозитории @@ -2148,9 +2623,11 @@ settings.lfs_invalid_locking_path=Недопустимый путь: %s settings.lfs_invalid_lock_directory=Невозможно заблокировать каталог: %s settings.lfs_lock_already_exists=Блокировка уже существует: %s settings.lfs_lock=Заблокировать +settings.lfs_lock_path=Путь к файлу для блокировки… settings.lfs_locks_no_locks=Нет блокировки settings.lfs_lock_file_no_exist=Заблокированный файл не существует в ветке по умолчанию settings.lfs_force_unlock=Принудительная разблокировка +settings.lfs_pointers.found=Найдено %d указателей blob — %d связанных, %d несвязанных (%d отсутствует в хранилище) settings.lfs_pointers.sha=Blob SHA settings.lfs_pointers.oid=OID settings.lfs_pointers.inRepo=В репозитории @@ -2196,6 +2673,7 @@ diff.show_more=Показать больше diff.load=Загрузить разницу diff.generated=сгенерированный diff.vendored=поставляемый +diff.comment.add_line_comment=Добавить комментарий к строке diff.comment.placeholder=Оставить комментарий diff.comment.add_single_comment=Добавить простой комментарий diff.comment.add_review_comment=Добавить комментарий @@ -2211,12 +2689,15 @@ diff.review.reject=Запрос изменений diff.review.self_approve=Авторы запросов на слияние не могут одобрять собственные запросы diff.committed_by=коммит произвёл diff.protected=Защищено -diff.image.side_by_side=`Режим "рядом"` +diff.image.side_by_side=Режим "рядом" diff.image.swipe=Свайп diff.image.overlay=Наложение diff.has_escaped=В этой строке есть невидимые символы Юникода diff.show_file_tree=Показать дерево файлов diff.hide_file_tree=Скрыть дерево файлов +diff.submodule_added=Подмодуль %[1]s добавлен в %[2]s +diff.submodule_deleted=Подмодуль %[1]s удален из %[2]s +diff.submodule_updated=Подмодуль %[1]s обновлен: %[2]s releases.desc=Релизы позволяют организовать хранение готовых сборок проекта в строгом хронологически верном порядке. release.releases=Релизы @@ -2226,6 +2707,7 @@ release.new_release=Новый релиз release.draft=Черновик release.prerelease=Пре-релиз release.stable=Стабильный +release.latest=Последний release.compare=Сравнить release.edit=редактировать release.ahead.commits=%d коммиты @@ -2251,6 +2733,7 @@ release.edit_release=Редактировать релиз release.delete_release=Удалить этот релиз release.delete_tag=Удалить тег release.deletion=Удаление релиза +release.deletion_desc=Удаление релиза только удаляет его из Gitea. Это действие не затронет Git-тег, содержимое вашего репозитория или его историю. Продолжить? release.deletion_success=Релиз удалён. release.deletion_tag_desc=Этот тег будет удалён из хранилища. Содержимое хранилища и история не изменятся. Продолжить? release.deletion_tag_success=Тег удалён. @@ -2285,6 +2768,7 @@ branch.restore_success=Ветка «%s» восстановлена. branch.restore_failed=Не удалось восстановить ветку «%s». branch.protected_deletion_failed=Ветка «%s» защищена. Её нельзя удалить. branch.default_deletion_failed=Ветка «%s» является веткой по умолчанию. Её нельзя удалить. +branch.default_branch_not_exist=Ветка по умолчанию "%s" не существует. branch.restore=Восстановить ветку «%s» branch.download=Скачать ветку «%s» branch.rename=Переименовать ветку «%s» @@ -2299,6 +2783,10 @@ branch.create_branch_operation=Создать ветку branch.new_branch=Создать новую ветку branch.new_branch_from=Создать новую ветку из «%s» branch.renamed=Ветка %s была переименована в %s. +branch.rename_default_or_protected_branch_error=Переименовывать ветку по умолчанию или защищенные ветки могут только администраторы. +branch.rename_protected_branch_failed=Эта ветвь защищена глобальными правилами защиты. +branch.commits_divergence_from=Расхождение коммитов: отстает на %[1]d и опережает на %[2]d от %[3]s +branch.commits_no_divergence=То же самое, что и в ветке %[1]s tag.create_tag=Создать тег %s tag.create_tag_operation=Создать тег @@ -2312,14 +2800,23 @@ topic.done=Сохранить topic.count_prompt=Нельзя выбрать более 25 тем topic.format_prompt=Темы должны начинаться с буквы или цифры и могут содержать дефисы («-») и точки («.»). Длина темы не должна превышать 35 символов. Все буквы должны быть строчными. +find_file.follow_symlink=Следовать этой символической ссылке find_file.go_to_file=Перейти к файлу find_file.no_matching=Совпадающих файлов не найдено error.csv.too_large=Не удается отобразить этот файл, потому что он слишком большой. error.csv.unexpected=Не удается отобразить этот файл, потому что он содержит неожиданный символ в строке %d и столбце %d. error.csv.invalid_field_count=Не удается отобразить этот файл, потому что он имеет неправильное количество полей в строке %d. +error.broken_git_hook="Похоже, Git-хуки этого репозитория не работают. Выполните указания из документации, чтобы исправить их, а затем делайте коммиты, чтобы обновить статус." [graphs] +component_loading=Загрузка %s… +component_loading_failed=Не удалось загрузить %s +component_loading_info=Это может занять некоторое время… +component_failed_to_load=Произошла непредвиденная ошибка. +code_frequency.what=частота кода +contributors.what=вклады +recent_commits.what=последние коммиты [org] org_name_holder=Название организации @@ -2344,6 +2841,7 @@ team_permission_desc=Разрешение team_unit_desc=Разрешить доступ к разделам репозитория team_unit_disabled=(Отключено) +form.name_been_taken=Название организации "%s" уже занято. form.name_reserved=Название организации «%s» зарезервировано. form.name_pattern_not_allowed=Шаблон «%s» не допускается в названии организации. form.create_org_not_allowed=Этому пользователю не разрешено создавать организацию. @@ -2351,11 +2849,17 @@ form.create_org_not_allowed=Этому пользователю не разре settings=Настройки settings.options=Организация settings.full_name=Полное имя +settings.email=Адрес электронной почты settings.website=Сайт settings.location=Местоположение settings.permission=Разрешения settings.repoadminchangeteam=Администратор репозитория может добавлять и удалять права доступа для команд settings.visibility=Видимость +settings.change_visibility=Изменить видимость +settings.change_visibility_notices_1=Если организация будет преобразована в приватную, у добавивших в избранное эти репозитории исчезнут из избранного безвозвратно. +settings.change_visibility_notices_2=При переводе организации в приватный режим пользователи, не входящие в неё, лишатся доступа к её репозиториям. +settings.change_visibility_success=Видимость организации %s успешно изменена. +settings.visibility_desc=Измените, кто может видеть организацию и ее репозитории. settings.visibility.public=Публичный settings.visibility.limited=Ограниченный (Видимый только выполнившим вход пользователям) settings.visibility.limited_shortname=Ограниченный @@ -2365,12 +2869,27 @@ settings.visibility.private_shortname=Приватный settings.update_settings=Обновить настройки settings.update_setting_success=Настройки организации обновлены. +settings.rename=Переименовать организацию +settings.rename_desc=Изменение названия организации также изменит URL организации и освободит старое название. +settings.rename_success=Организация %[1]s успешно переименована в %[2]s. +settings.rename_no_change=Название организации не изменилось. +settings.rename_new_org_name=Новое название организации +settings.rename_failed=Переименовать организацию не удалось из-за внутренней ошибки +settings.rename_notices_1=Эта операция НЕ МОЖЕТ быть отменена. +settings.rename_notices_2=Старое название будет перенаправлять на новое до тех пор, пока его не займут. settings.update_avatar_success=Аватар организации обновлён. settings.delete=Удалить организацию settings.delete_account=Удалить эту организацию settings.delete_prompt=Это действие БЕЗВОЗВРАТНО удалит эту организацию навсегда! +settings.name_confirm=Введите название организации для подтверждения: +settings.delete_notices_1=Эта операция НЕ МОЖЕТ быть отменена. +settings.delete_notices_2=Эта операция навсегда удалит все репозитории из %s, включая код, задачи, комментарии, данные вики и настройки участников. +settings.delete_notices_3=Эта операция навсегда удалит все пакеты из %s. +settings.delete_notices_4=Эта операция навсегда удалит все проекты из %s. settings.confirm_delete_account=Подтвердить удаление +settings.delete_failed=Не удалось удалить организацию из-за внутренней ошибки +settings.delete_successful=Организация %s успешно удалена. settings.hooks_desc=Добавьте веб-хуки, которые будет вызываться для всех репозиториев под этой организации. settings.labels_desc=Добавьте метки, которые могут быть использованы в задачах для всех репозиториев этой организации. @@ -2397,6 +2916,7 @@ teams.can_create_org_repo=Создать репозитории teams.can_create_org_repo_helper=Участники могут создавать новые репозитории в организации. Создатель получит администраторский доступ к новому репозиторию. teams.none_access=Нет доступа teams.none_access_helper=Участники не могут просматривать или выполнять любые другие действия над этим элементом. Это не влияет на публичные репозитории. +teams.general_access=Общий доступ teams.general_access_helper=Разрешения участников будут определяться таблицей разрешений ниже. teams.read_access=Чтение teams.read_access_helper=Участники могут просматривать и клонировать командные репозитории. @@ -2425,9 +2945,11 @@ teams.remove_all_repos_title=Удалить все репозитории ком teams.remove_all_repos_desc=Удаляет все репозитории из команды. teams.add_all_repos_title=Добавить все репозитории teams.add_all_repos_desc=Добавит все репозитории организации в команду. +teams.add_nonexistent_repo="Репозиторий, который вы пытаетесь добавить, не существует. Сначала создайте его." teams.add_duplicate_users=Пользователь уже состоит в команде. teams.repos.none=Для этой команды нет доступных репозиториев. teams.members.none=В этой команде нет участников. +teams.members.blocked_user=Нельзя добавить пользователя, так как он заблокирован организацией. teams.specific_repositories=Конкретные репозитории teams.specific_repositories_helper=Участники будут иметь доступ только к репозиториям, явно добавленным в команду. Выбор этого не автоматически удалит репозитории, уже добавленные в Все репозитории. teams.all_repositories=Все репозитории @@ -2439,17 +2961,32 @@ teams.invite.title=Вас пригласили присоединиться к teams.invite.by=Приглашен(а) %s teams.invite.description=Нажмите на кнопку ниже, чтобы присоединиться к команде. +view_as_role=Посмотреть как: %s +view_as_public_hint=Вы просматриваете README как публичный пользователь. +view_as_member_hint=Вы просматриваете README как участник этой организации. +worktime=Время работы +worktime.date_range_start=Дата начала +worktime.date_range_end=Дата завершения +worktime.query=Запрос +worktime.time=Время +worktime.by_repositories=По репозиториям +worktime.by_milestones=По этапам +worktime.by_members=По участникам [admin] +maintenance=Техническое обслуживание dashboard=Панель +self_check=Самопроверка identity_access=Идентификация и доступ users=Пользователи organizations=Организации +assets=Ресурсы кода repositories=Репозитории hooks=Веб-хуки integrations=Интеграции authentication=Аутентификация +emails=Адреса электронной почты пользователя config=Конфигурация config_summary=Статистика config_settings=Настройки @@ -2458,8 +2995,11 @@ monitor=Мониторинг first_page=Первая last_page=Последняя total=Всего: %d +settings=Настройки администратора +dashboard.new_version_hint="Доступна новая версия Gitea %s, у вас установлена версия %s. Подробности смотрите в блоге." dashboard.statistic=Статистика +dashboard.maintenance_operations=Операции по техническому обслуживанию dashboard.system_status=Состояние системы dashboard.operation_name=Имя операции dashboard.operation_switch=Переключить @@ -2478,16 +3018,29 @@ dashboard.cron.cancelled=Планировщик: %[1]s отменено: %[3]s dashboard.cron.error=Ошибка в запланированном задании: %s: %[3]s dashboard.cron.finished=Планировщик: %[1]s завершено dashboard.delete_inactive_accounts=Удалить все неактивированные учётные записи -dashboard.delete_repo_archives=Удалить все архивы репозиториев (ZIP, TAR.GZ, и т.д..) +dashboard.delete_inactive_accounts.started=Удаление всех неактивированных учётных записей началось. +dashboard.delete_repo_archives="Удалить все архивы репозиториев (ZIP, TAR.GZ, и т.д..)" +dashboard.delete_repo_archives.started=Удаление всех архивов репозитория началось. dashboard.delete_missing_repos=Удалить все записи о репозиториях с отсутствующими файлами Git +dashboard.delete_missing_repos.started=Началось удаление всех репозиториев без Git-файлов dashboard.delete_generated_repository_avatars=Удалить генерированные аватары репозитория +dashboard.sync_repo_branches=Синхронизировать пропущенные ветки из git-данных с базой данных +dashboard.sync_repo_tags=Синхронизировать пропущенные теги из git-данных с базой данных dashboard.update_mirrors=Обновить зеркала dashboard.repo_health_check=Проверка состояния всех репозиториев dashboard.check_repo_stats=Проверить всю статистику репозитория dashboard.archive_cleanup=Удалить старые архивы репозитория +dashboard.deleted_branches_cleanup=Очистка удаленных веток dashboard.update_migration_poster_id=Обновить ID плакатов миграции +dashboard.git_gc_repos=Выполнить сборку мусора во всех репозиториях +dashboard.resync_all_sshkeys=Обновить файл '.ssh/authorized_keys' с ключами Gitea SSH +dashboard.resync_all_sshprincipals=Обновить файл '.ssh/authorized_principals' с привилегиями Gitea SSH +dashboard.resync_all_hooks="Повторная синхронизация hook'ов pre-receive, update и post-receive во всех репозиториях." dashboard.reinit_missing_repos=Переинициализировать все отсутствующие Git репозитории, для которых существуют записи dashboard.sync_external_users=Синхронизировать данные внешних пользователей +dashboard.cleanup_hook_task_table=Очистить таблицу hook_task +dashboard.cleanup_packages=Очистка устаревших пакетов +dashboard.cleanup_actions=Очистка устаревших журналов и артефактов dashboard.server_uptime=Время непрерывной работы сервера dashboard.current_goroutine=Текущее количество Goroutines dashboard.current_memory_usage=Текущее использование памяти @@ -2517,8 +3070,19 @@ dashboard.total_gc_time=Итоговая задержка GC dashboard.total_gc_pause=Итоговая задержка GC dashboard.last_gc_pause=Последняя пауза сборщика мусора dashboard.gc_times=Количество сборок мусора +dashboard.delete_old_actions=Удаление всех старых активностей из базы данных +dashboard.delete_old_actions.started=Удаление всех старых активностей из базы данных запущено dashboard.update_checker=Проверка обновлений dashboard.delete_old_system_notices=Удалить все старые системные уведомления из базы данных +dashboard.gc_lfs=Очистить метаданные LFS +dashboard.stop_zombie_tasks=Остановить "зомби" задания +dashboard.stop_endless_tasks=Остановить бесконечные задания +dashboard.cancel_abandoned_jobs=Отменить оставшиеся задания +dashboard.start_schedule_tasks=Запустить запланированные задания +dashboard.sync_branch.started=Началась синхронизация веток +dashboard.sync_tag.started=Началась синхронизация тегов +dashboard.rebuild_issue_indexer=Перестроить индекс задач +dashboard.sync_repo_licenses=Синхронизировать лицензии репозиториев users.user_manage_panel=Панель управления пользователями users.new_account=Создать новый аккаунт @@ -2529,10 +3093,12 @@ users.admin=Администратор users.restricted=Ограничено users.reserved=Зарезервировано users.bot=Бот +users.remote=Удаленный users.2fa=Двухфакторная авторизация users.repos=Репозитории users.created=Создано users.last_login=Последний вход +users.never_login=Никогда не входил users.send_register_notify=Отправить пользователю уведомление о регистрации users.new_success=Учётная запись «%s» создана. users.edit=Редактировать @@ -2554,11 +3120,12 @@ users.allow_import_local=Пользователь имеет право импо users.allow_create_organization=Эта учётная запись имеет разрешения на создание организаций users.update_profile=Обновить профиль пользователя users.delete_account=Удалить эту учётную запись -users.cannot_delete_self=Вы не можете удалить собственную учётную запись +users.cannot_delete_self="Вы не можете удалить собственную учётную запись" users.still_own_repo=Этот пользователь всё ещё является владельцем одного или более репозиториев. Сначала удалите или передайте эти репозитории. users.still_has_org=Этот пользователь всё ещё является членом одной или более организаций. Сначала удалите пользователя из всех организаций. users.purge=Удалить пользователя users.purge_help=Принудительное удаление пользователя и любых репозиториев, организаций и пакетов, принадлежащих пользователю. Комментарии тоже будут удалены. +users.still_own_packages=Этот пользователь всё ещё владеет одним или несколькими пакетами. Сначала удалите эти пакеты. users.deletion_success=Учётная запись успешно удалена. users.reset_2fa=Сброс 2FA users.list_status_filter.menu_text=Фильтр @@ -2575,14 +3142,22 @@ users.list_status_filter.is_2fa_enabled=2FA включено users.list_status_filter.not_2fa_enabled=2FA отключено users.details=О пользователе -emails.email_manage_panel=Управление эл. почтой пользователя +emails.email_manage_panel=Управление электронной почтой пользователя emails.primary=Первичный emails.activated=Активирован +emails.filter_sort.email=Адрес электронной почты +emails.filter_sort.email_reverse=Адрес электронной почты (обратный порядок) emails.filter_sort.name=Имя пользователя +emails.filter_sort.name_reverse=Имя пользователя (обратный порядок) +emails.updated=Адрес электронной почты обновлён emails.not_updated=Не удалось обновить запрошенный адрес электронной почты: %v emails.duplicate_active=Этот адрес электронной почты уже активирован для другого пользователя. emails.change_email_header=Обновить свойства электронной почты emails.change_email_text=Вы уверены, что хотите обновить этот адрес электронной почты? +emails.delete=Удалить адрес электронной почты +emails.delete_desc=Вы уверены, что хотите удалить этот адрес электронной почты? +emails.deletion_success=Адрес электронной почты был удален. +emails.delete_primary_email_error=Нельзя удалить основной адрес электронной почты. orgs.org_manage_panel=Управление организациями orgs.name=Название @@ -2615,10 +3190,12 @@ packages.size=Размер packages.published=Опубликовано defaulthooks=Стандартные Веб-хуки +defaulthooks.desc="Вебхуки автоматически отправляют HTTP POST-запросы на сервер при срабатывании определённых событий в Gitea. Вебхуки, указанные здесь, используются по умолчанию и будут копироваться во все новые репозитории. Подробнее можно ознакомиться в руководстве по веб-хукам." defaulthooks.add_webhook=Добавить стандартный Веб-хук defaulthooks.update_webhook=Обновить стандартный Веб-хук systemhooks=Системные веб-хуки +systemhooks.desc="Вебхуки автоматически отправляют HTTP POST-запросы на сервер при срабатывании определённых событий в Gitea. Вебхуки, заданные здесь, будут применяться ко всем репозиториям в системе, поэтому, пожалуйста, учитывайте возможное влияние на производительность. Подробнее можно ознакомиться в руководстве по веб-хукам." systemhooks.add_webhook=Добавить системный веб-хук systemhooks.update_webhook=Обновить системный веб-хук @@ -2694,17 +3271,39 @@ auths.oauth2_required_claim_name_helper=Задайте, чтобы ограни auths.oauth2_required_claim_value=Необходимое значение заявки auths.oauth2_required_claim_value_helper=Задайте, чтобы ограничить вход с этого источника только пользователями с заявкой, имеющей такие имя и значение auths.oauth2_group_claim_name=Имя заявки, указывающее имена групп для этого источника. (Необязательно) +auths.oauth2_full_name_claim_name="Атрибут - клеймо, для полного имени пользователя необязателен. (Если он есть, то полное имя пользователя всегда будет синхронизироваться с этим значением)" +auths.oauth2_ssh_public_key_claim_name=Название публичного SSH-ключа +auths.oauth2_admin_group=Права группы для пользователей администраторов. (По желанию — требует указания названия вышеуказанного атрибута) +auths.oauth2_restricted_group=Права группы для ограниченных пользователей. (По желанию — требует указания названия вышеуказанного атрибута) +auths.oauth2_map_group_to_team=Сопоставление заявленных групп с командами организации. (По желанию — требует указания названия вышеуказанного атрибута) auths.oauth2_map_group_to_team_removal=Удалить пользователей из синхронизированных команд, если пользователь не принадлежит к соответствующей группе. auths.enable_auto_register=Включить автоматическую регистрацию auths.sspi_auto_create_users=Автоматически создавать пользователей +auths.sspi_auto_create_users_helper=Разрешить методу аутентификации SSPI автоматически создавать новые учетные записи для пользователей, входящих впервые auths.sspi_auto_activate_users=Автоматически активировать пользователей auths.sspi_auto_activate_users_helper=Разрешить метод аутентификации SSPI для автоматической активации новых пользователей auths.sspi_strip_domain_names=Удалять доменные имена из имён пользователей +auths.sspi_strip_domain_names_helper=Если отмечено, доменные имена будут удалены из имён входа (например, "DOMAIN\user" и "user@example.org" станут только "user"). auths.sspi_separator_replacement=Разделитель для использования вместо \, / и @ +auths.sspi_separator_replacement_helper=Символ для замены разделителей в именах входа нижнего уровня (например, \ в "ДОМЕН\пользователь") и именах участников-пользователей (например, @ в "user@example.org"). auths.sspi_default_language=Язык пользователя по умолчанию +auths.sspi_default_language_helper=Язык по умолчанию для пользователей, автоматически создаваемых методом аутентификации SSPI. Оставьте пустым, если предпочитаете автоматическое определение языка. auths.tips=Советы auths.tips.oauth2.general=Аутентификация OAuth2 +auths.tips.oauth2.general.tip=При регистрации новой аутентификации OAuth2 URL обратного вызова/перенаправления должен быть: auths.tip.oauth2_provider=Поставщик OAuth2 +auths.tip.bitbucket=Зарегистрируйте нового OAuth потребителя на %s и добавьте разрешение 'Аккаунт' - 'Чтение' +auths.tip.nextcloud=Зарегистрируйте нового потребителя OAuth в вашем экземпляре, выбрав в меню "Настройки -> Безопасность -> OAuth 2.0 client" +auths.tip.dropbox=Добавьте новое приложение на %s +auths.tip.facebook=Зарегистрируйте новое приложение на %s и добавьте модуль "Facebook Login" +auths.tip.github=Добавьте OAuth приложение на %s +auths.tip.gitlab_new=Добавьте новое приложение на %s +auths.tip.google_plus=Получите учетные данные OAuth2 клиента в консоли Google API по адресу %s +auths.tip.openid_connect=Используйте OpenID Connect Discovery URL "https://{server}/.well-known/openid-configuration" для указания конечных точек +auths.tip.twitter=Перейдите на %s, создайте приложение и убедитесь, что опция "Разрешить использовать это приложение для входа с помощью Twitter" включена +auths.tip.discord=Добавьте новое приложение на %s +auths.tip.gitea=Зарегистрировать новое приложение OAuth2. Руководство можно найти на %s +auths.tip.yandex=Создайте новое приложение по адресу %s. В разделе "API Яндекс.Паспорта" выберите следующие разрешения: "Доступ к адресу электронной почты", "Доступ к аватару пользователя" и "Доступ к имени пользователя, фамилии и полу" auths.tip.mastodon=Введите пользовательский URL экземпляра для экземпляра mastodon, с которым вы хотите аутентифицироваться (или использовать его по умолчанию) auths.edit=Обновить параметры аутентификации auths.activated=Источник аутентификации активирован @@ -2726,7 +3325,7 @@ config.app_name=Название сайта config.app_ver=Версия Gitea config.app_url=Базовый URL Gitea config.custom_conf=Путь к файлу конфигурации -config.custom_file_root_path=Пользовательский путь до папки с файлами +config.custom_file_root_path="Пользовательский путь до папки с файлами" config.domain=Домен сервера config.offline_mode=Локальный режим config.disable_router_log=Отключение журнала маршрутизатора @@ -2774,7 +3373,7 @@ config.enable_openid_signin=Включение входа через OpenID config.show_registration_button=Показать кнопку регистрации config.require_sign_in_view=Для просмотра необходима авторизация config.mail_notify=Почтовые уведомления -config.enable_captcha=Включить CAPTCHA +config.enable_captcha=Включить КАПЧУ config.active_code_lives=Время жизни кода для активации config.reset_password_code_lives=Время действия кода восстановления аккаунта config.default_keep_email_private=Скрывать адреса электронной почты по умолчанию @@ -2804,6 +3403,7 @@ config.mailer_sendmail_path=Путь к Sendmail config.mailer_sendmail_args=Дополнительные аргументы для Sendmail config.mailer_sendmail_timeout=Тайм-аут Sendmail config.mailer_use_dummy=Заглушка +config.test_email_placeholder=Адрес электронной почты (например, test@example.com) config.send_test_mail=Отправить тестовое письмо config.send_test_mail_submit=Отправить config.test_mail_failed=Не удалось отправить тестовое письмо на «%s»: %v @@ -2817,6 +3417,10 @@ config.cache_adapter=Адаптер кэша config.cache_interval=Интервал кэширования config.cache_conn=Подключение кэша config.cache_item_ttl=Время жизни данных в кеше +config.cache_test=Проверка кэша +config.cache_test_failed=Не удалось проверить кэш: %v. +config.cache_test_slow=Проверка кэша прошла успешно, но отклик был медленным: %s. +config.cache_test_succeeded=Проверка кэша прошла успешно, ответ был получен за: %s. config.session_config=Конфигурация сессии config.session_provider=Провайдер сессии @@ -2831,6 +3435,8 @@ config.picture_config=Настройка изображения config.picture_service=Сервис изображений config.disable_gravatar=Отключить Gravatar config.enable_federated_avatar=Включить внешние аватары +config.open_with_editor_app_help=Редакторы «Открыть с помощью» для меню клонирования. Если оставить пустым, будет использоваться редактор по умолчанию (разверните для просмотра). +config.git_guide_remote_name=Имя удалённого репозитория в командах git руководства config.git_config=Конфигурация Git config.git_disable_diff_highlight=Отключить подсветку синтаксиса при сравнении @@ -2862,6 +3468,9 @@ monitor.next=Следующий раз monitor.previous=Предыдущий раз monitor.execute_times=Количество выполнений monitor.process=Запущенные процессы +monitor.stacktrace=Трассировка стека +monitor.trace=Трассировка +monitor.performance_logs=Журналы производительности monitor.processes_count=%d процессов monitor.download_diagnosis_report=Скачать диагностический отчёт monitor.desc=Описание @@ -2869,6 +3478,7 @@ monitor.start=Время начала monitor.execute_time=Время выполнения monitor.last_execution_result=Результат monitor.process.cancel=Отменить процесс +monitor.process.cancel_desc=Отмена процесса может привести к потере данных monitor.process.children=Потомки monitor.queues=Очереди @@ -2880,8 +3490,10 @@ monitor.queue.numberworkers=Количество рабочих monitor.queue.activeworkers=Активные рабочие monitor.queue.maxnumberworkers=Максимальное количество рабочих monitor.queue.numberinqueue=Позиция в очереди +monitor.queue.review_add=Просмотр / Добавление воркеров monitor.queue.settings.title=Настройки пула monitor.queue.settings.desc=Пулы увеличиваются динамически в ответ на блокировку очередей своих рабочих. +monitor.queue.settings.maxnumberworkers=Максимальное количество воркеров monitor.queue.settings.maxnumberworkers.placeholder=В настоящее время %[1]d monitor.queue.settings.maxnumberworkers.error=Максимальное количество рабочих должно быть числом monitor.queue.settings.submit=Обновить настройки @@ -2904,38 +3516,47 @@ notices.desc=Описание notices.op=Oп. notices.delete_success=Уведомления системы были удалены. +self_check.no_problem_found=Проблем не обнаружено. +self_check.startup_warnings=Предупреждения при запуске: +self_check.database_collation_mismatch=Ожидается, что в базе данных будет использоваться сортировка: %s +self_check.database_collation_case_insensitive=В базе данных используется сортировка %s, которая не учитывает регистр. Хотя Gitea может работать с ней, в редких случаях возможны непредвиденные проблемы. +self_check.database_inconsistent_collation_columns=В базе данных используется сортировка %s, но эти столбцы используют несовместимые сортировки. Это может вызвать непредвиденные проблемы. +self_check.database_fix_mysql=Для пользователей MySQL/MariaDB можно использовать команду "gitea doctor convert" для исправления проблем с сортировкой или исправить их вручную с помощью SQL-запросов "ALTER ... COLLATE ...". +self_check.database_fix_mssql=Для пользователей MSSQL на данный момент проблему можно исправить только вручную с помощью SQL-запросов "ALTER ... COLLATE ...". +self_check.location_origin_mismatch=Текущий URL (%[1]s) не совпадает с URL, который видит Gitea (%[2]s). Если вы используете обратный прокси, убедитесь, что заголовки "Host" и "X-Forwarded-Proto" настроены правильно. [action] -create_repo=создал(а) репозиторий %s -rename_repo=переименовал(а) репозиторий из %[1]s на %[3]s -commit_repo=отправил(а) изменения в %[3]s в %[4]s -create_issue=`открыл(а) задачу %[3]s#%[2]s` -close_issue=`закрыл(а) задачу %[3]s#%[2]s` -reopen_issue=`переоткрыл(а) задачу %[3]s#%[2]s` -create_pull_request=`создал(а) запрос на слияние %[3]s#%[2]s` -close_pull_request=`закрыл(а) запрос на слияние %[3]s#%[2]s` -reopen_pull_request=`переоткрыл(а) запрос на слияние %[3]s#%[2]s` -comment_issue=`прокомментировал(а) задачу %[3]s#%[2]s` -comment_pull=`прокомментировал(а) запрос на слияние %[3]s#%[2]s` -merge_pull_request=`принял(а) запрос на слияние %[3]s#%[2]s` -auto_merge_pull_request=`автоматически принял(а) запрос на слияние %[3]s#%[2]s` -transfer_repo=передал(а) репозиторий %s %s -push_tag=создал(а) тег %[3]s в %[4]s -delete_tag=удалил(а) тэг %[2]s из %[3]s -delete_branch=удалил(а) ветку %[2]s из %[3]s +create_repo="создал(а) репозиторий %s" +rename_repo="переименовал(а) репозиторий из %[1]s на %[3]s" +commit_repo="отправил(а) изменения в %[3]s в %[4]s" +create_issue="`открыл(а) задачу %[3]s#%[2]s`" +close_issue="`закрыл(а) задачу %[3]s#%[2]s`" +reopen_issue="`переоткрыл(а) задачу %[3]s#%[2]s`" +create_pull_request="`создал(а) запрос на слияние %[3]s#%[2]s`" +close_pull_request="`закрыл(а) запрос на слияние %[3]s#%[2]s`" +reopen_pull_request="`переоткрыл(а) запрос на слияние %[3]s#%[2]s`" +comment_issue="`прокомментировал(а) задачу %[3]s#%[2]s`" +comment_pull="`прокомментировал(а) запрос на слияние %[3]s#%[2]s`" +merge_pull_request="`принял(а) запрос на слияние %[3]s#%[2]s`" +auto_merge_pull_request="`автоматически принял(а) запрос на слияние %[3]s#%[2]s`" +transfer_repo="передал(а) репозиторий %s %s" +push_tag="создал(а) тег %[3]s в %[4]s" +delete_tag="удалил(а) тэг %[2]s из %[3]s" +delete_branch="удалил(а) ветку %[2]s из %[3]s" compare_branch=Сравнить compare_commits=Сравнить %d коммитов compare_commits_general=Сравнить коммиты -mirror_sync_push=синхронизировал(а) коммиты %[3]s в %[4]s из зеркала -mirror_sync_create=синхронизировал(а) новую ссылку %[3]s в %[4]s из зеркала -mirror_sync_delete=синхронизированные и удалённые ссылки %[2]s на %[3]s из зеркала -approve_pull_request=`утвердил(а) задачу %[3]s#%[2]s` -reject_pull_request=`предложил(а) изменения для %[3]s#%[2]s` -review_dismissed=`отклонил(а) отзыв от %[4]s для %[3]s#%[2]s` +mirror_sync_push="синхронизировал(а) коммиты %[3]s в %[4]s из зеркала" +mirror_sync_create="синхронизировал(а) новую ссылку %[3]s в %[4]s из зеркала" +mirror_sync_delete="синхронизированные и удалённые ссылки %[2]s на %[3]s из зеркала" +approve_pull_request="`утвердил(а) задачу %[3]s#%[2]s`" +reject_pull_request="`предложил(а) изменения для %[3]s#%[2]s`" +publish_release="`выпущен %[4]s в %[3]s`" +review_dismissed="`отклонил(а) отзыв от %[4]s для %[3]s#%[2]s`" review_dismissed_reason=Причина: -create_branch=создал(а) ветку %[3]s в %[4]s -starred_repo=добавил(а) %[2]s в избранное -watched_repo=начала(а) наблюдение за %[2]s +create_branch="создал(а) ветку %[3]s в %[4]s" +starred_repo="добавил(а) %[2]s в избранное" +watched_repo="начала(а) наблюдение за %[2]s" [tool] now=сейчас @@ -2959,6 +3580,8 @@ raw_minutes=минут [dropzone] default_message=Перетащите файл или кликните сюда для загрузки. +invalid_input_type=Вы не можете загрузить файлы этого типа. +file_too_big=Размер файла ({{filesize}} MB) превышает максимальный размер ({{maxFilesize}} MB). remove_file=Удалить файл [notification] @@ -2980,9 +3603,11 @@ default_key=Подписано ключом по умолчанию error.extract_sign=Не удалось извлечь подпись error.generate_hash=Не удается создать хэш коммита error.no_committer_account=Аккаунт пользователя с такой электронной почтой не найден -error.no_gpg_keys_found=Не найден ключ, соответствующий данной подписи -error.not_signed_commit=Неподписанный коммит -error.failed_retrieval_gpg_keys=Не удалось получить ни одного ключа GPG автора коммита +error.no_gpg_keys_found="Не найден ключ, соответствующий данной подписи" +error.not_signed_commit="Неподписанный коммит" +error.failed_retrieval_gpg_keys="Не удалось получить ни одного ключа GPG автора коммита" +error.probable_bad_signature="ВНИМАНИЕ! Хотя в базе данных есть ключ с этим идентификатором, он не подтверждает этот коммит! Этот коммит ПОДОЗРИТЕЛЬНЫЙ." +error.probable_bad_default_signature="ВНИМАНИЕ! Хотя ключ по умолчанию имеет этот идентификатор, он не подтверждает этот коммит! Этот коммит ПОДОЗРИТЕЛЬНЫЙ." [units] unit=Элемент @@ -2993,16 +3618,17 @@ error.unit_not_allowed=У вас нет доступа к этому разде title=Пакеты desc=Управление пакетами репозитория. empty=Пока нет пакетов. -empty.documentation=Дополнительную информацию о реестре пакетов можно найти в документации. -empty.repo=Вы загрузили пакет, но он здесь не отображается? Перейдите в настройки пакета и свяжите его с этим репозиторием. -registry.documentation=Для получения дополнительной информации о реестре %s смотрите документацию. +no_metadata=Метаданные отсутствуют. +empty.documentation="Дополнительную информацию о реестре пакетов можно найти в документации." +empty.repo="Вы загрузили пакет, но он здесь не отображается? Перейдите в настройки пакета и свяжите его с этим репозиторием." +registry.documentation="Для получения дополнительной информации о реестре %s смотрите документацию." filter.type=Тип filter.type.all=Все filter.no_result=Фильтр не дал результатов. filter.container.tagged=С тегом filter.container.untagged=Без тегов -published_by=Опубликовано %[1]s %[3]s -published_by_in=Опубликовано %[1]s %[3]s в %[5]s +published_by="Опубликовано %[1]s %[3]s" +published_by_in="Опубликовано %[1]s %[3]s в %[5]s" installation=Установка about=Об этом пакете requirements=Требования @@ -3019,32 +3645,46 @@ versions=Версии versions.view_all=Показать всё dependency.id=ID dependency.version=Версия +search_in_external_registry=Искать в %s +alpine.registry=Настройте этот реестр, добавив URL в файл /etc/apk/repositories: alpine.registry.key=Загрузите публичный ключ RSA реестра в каталог /etc/apk/keys/ для проверки подписи индекса: alpine.registry.info=Выберите $branch и $repository из списка ниже. alpine.install=Чтобы установить пакет, выполните следующую команду: alpine.repository=О репозитории +alpine.repository.branches=Ветки alpine.repository.repositories=Репозитории alpine.repository.architectures=Архитектуры +arch.registry=Добавьте сервер с соответствующим репозиторием и архитектурой в /etc/pacman.conf: +arch.install=Синхронизировать пакет с pacman: arch.repository=О репозитории arch.repository.repositories=Репозитории arch.repository.architectures=Архитектуры +cargo.registry=Настройте этот реестр в конфигурационном файле Cargo (например, ~/.cargo/config.toml): cargo.install=Чтобы установить пакет с помощью Cargo, выполните следующую команду: +chef.registry=Настройте этот реестр в своём файле ~/.chef/config.rb: chef.install=Чтобы установить пакет, выполните следующую команду: +composer.registry=Настройте этот реестр в файле ~/.composer/config.json: composer.install=Чтобы установить пакет с помощью Composer, выполните следующую команду: composer.dependencies=Зависимости composer.dependencies.development=Зависимости для разработки conan.details.repository=Репозиторий +conan.registry=Установить реестр из командной строки: conan.install=Чтобы установить пакет с помощью Conan, выполните следующую команду: +conda.registry=Пропишите этот реестр в качестве репозитория Conda в своём файле .condarc: conda.install=Чтобы установить пакет с помощью Conda, выполните следующую команду: container.details.type=Тип образа container.details.platform=Платформа container.pull=Загрузите образ из командной строки: +container.images=Образы +container.digest=Хеш-сумма container.multi_arch=ОС / архитектура container.layers=Слои образа container.labels=Метки container.labels.key=Ключ container.labels.value=Значение +cran.registry=Настройте этот реестр в файле Rprofile.site: cran.install=Чтобы установить пакет, выполните следующую команду: +debian.registry=Настройте этот реестр из командной строки: debian.registry.info=Выберите $distribution и $component из списка ниже. debian.install=Чтобы установить пакет, выполните следующую команду: debian.repository=О репозитории @@ -3053,40 +3693,53 @@ debian.repository.components=Компоненты debian.repository.architectures=Архитектуры generic.download=Скачать пакет из командной строки: go.install=Установите пакет из командной строки: +helm.registry=Настройте этот реестр из командной строки: helm.install=Чтобы установить пакет, выполните следующую команду: +maven.registry=Настройте реестр в файле pom.xml вашего проекта: +maven.install=Чтобы использовать пакет, включите в блок dependencies в файле pom.xml следующее: maven.install2=Выполнить через командную строку: maven.download=Чтобы скачать зависимость, запустите в командной строке: +nuget.registry=Настройте этот реестр из командной строки: nuget.install=Чтобы установить пакет с помощью NuGet, выполните следующую команду: nuget.dependency.framework=Целевой фреймворк +npm.registry=Настройте реестр в файле .npmrc вашего проекта: npm.install=Чтобы установить пакет с помощью npm, выполните следующую команду: npm.install2=или добавьте его в файл package.json: npm.dependencies=Зависимости npm.dependencies.development=Зависимости для разработки +npm.dependencies.bundle=Зависимости комплекта npm.dependencies.peer=Одноранговые зависимости npm.dependencies.optional=Необязательные зависимости npm.details.tag=Тег pub.install=Чтобы установить пакет с помощью Dart, выполните следующую команду: pypi.requires=Требуется Python pypi.install=Чтобы установить пакет с помощью pip, выполните следующую команду: +rpm.registry=Настройте этот реестр из командной строки: rpm.distros.redhat=на дистрибутивах семейства RedHat rpm.distros.suse=на дистрибутивах семейства SUSE rpm.install=Чтобы установить пакет, выполните следующую команду: rpm.repository=О репозитории rpm.repository.architectures=Архитектуры +rpm.repository.multiple_groups=Этот пакет доступен в нескольких группах. rubygems.install=Чтобы установить пакет с помощью gem, выполните следующую команду: rubygems.install2=или добавьте его в Gemfile: rubygems.dependencies.runtime=Зависимости времени выполнения rubygems.dependencies.development=Зависимости для разработки rubygems.required.ruby=Требуется версия Ruby rubygems.required.rubygems=Требуется версия RubyGem +swift.registry=Настройте этот реестр из командной строки: swift.install=Добавьте пакет в свой файл Package.swift: swift.install2=и запустите следующую команду: vagrant.install=Чтобы добавить бокс Vagrant, выполните следующую команду: settings.link=Связать этот пакет с репозиторием +settings.link.description=Если вы свяжете пакет с репозиторием, пакет появится в списке пакетов репозитория. Связывать можно только репозитории одного владельца. Оставьте поле пустым, чтобы удалить связь. settings.link.select=Выберите репозиторий settings.link.button=Обновить ссылку на репозиторий settings.link.success=Связь с репозиторием успешно обновлена. settings.link.error=Не удалось обновить привязку к репозиторию. +settings.link.repo_not_found=Репозиторий %s не найден. +settings.unlink.error=Не удалось удалить связь с репозиторием. +settings.unlink.success=Связь с репозиторием успешно удалена. settings.delete=Удалить пакет settings.delete.description=Удаление пакета необратимо и не может быть отменено. settings.delete.notice=Вы собираетесь удалить %s (%s). Эта операция необратима, вы уверены? @@ -3098,10 +3751,13 @@ owner.settings.cargo.initialize.description=Для использования р owner.settings.cargo.initialize.error=Не удалось инициализировать индекс Cargo: %v owner.settings.cargo.initialize.success=Индекс Cargo успешно создан. owner.settings.cargo.rebuild=Перестроить индекс +owner.settings.cargo.rebuild.description=Пересборка может быть полезна, если индекс не синхронизирован с сохраненными пакетами Cargo. owner.settings.cargo.rebuild.error=Не удалось перестроить индекс Cargo: %v +owner.settings.cargo.rebuild.success=Индекс Cargo успешно перестроен. owner.settings.cleanuprules.title=Управление правилами очистки owner.settings.cleanuprules.add=Добавить правило очистки owner.settings.cleanuprules.edit=Изменить правило очистки +owner.settings.cleanuprules.none=Правила очистки недоступны. Пожалуйста, ознакомьтесь с документацией. owner.settings.cleanuprules.preview=Предварительный просмотр правила очистки owner.settings.cleanuprules.preview.overview=Планируется удалить %d пакетов. owner.settings.cleanuprules.preview.none=Правило очистки не соответствует ни одному пакету. @@ -3120,6 +3776,7 @@ owner.settings.cleanuprules.success.update=Правило очистки обн owner.settings.cleanuprules.success.delete=Правило очистки удалено. owner.settings.chef.title=Реестр Chef owner.settings.chef.keypair=Создать пару ключей +owner.settings.chef.keypair.description=Для аутентификации в реестре Chef необходима пара ключей. Если вы уже генерировали пару ключей ранее, создание новой пары приведет к удалению старой. [secrets] secrets=Секреты @@ -3130,8 +3787,13 @@ none=Секретов пока нет. creation.description=Описание creation.name_placeholder=регистр не важен, только алфавитно-цифровые символы и подчёркивания, не может начинаться с GITEA_ или GITHUB_ creation.value_placeholder=Введите любое содержимое. Пробельные символы в начале и конце будут опущены. +creation.description_placeholder=Добавьте краткое описание (необязательно). +save_success=Секрет "%s" успешно сохранён. +save_failed=Не удалось сохранить секрет. +add_secret=Добавить секрет +edit_secret=Редактировать секрет deletion=Удалить секрет deletion.description=Удаление секрета необратимо, его нельзя отменить. Продолжить? deletion.success=Секрет удалён. @@ -3143,14 +3805,14 @@ actions=Действия unit.desc=Управление действиями -status.unknown=Неизвестно -status.waiting=Ожидает -status.running=Запущено -status.success=Успешно -status.failure=Неудача -status.cancelled=Отменено -status.skipped=Пропущено -status.blocked=Заблокировано +status.unknown="Неизвестно" +status.waiting="Ожидает" +status.running="Запущено" +status.success="Успешно" +status.failure="Неудача" +status.cancelled="Отменено" +status.skipped="Пропущено" +status.blocked="Заблокировано" runners=Раннеры runners.runner_manage_panel=Управление раннерами @@ -3179,6 +3841,7 @@ runners.delete_runner=Удалить этот раннер runners.delete_runner_success=Раннер успешно удалён runners.delete_runner_failed=Не удалось удалить раннер runners.delete_runner_header=Подтвердите удаление раннера +runners.delete_runner_notice=Если на этом раннере выполняется задание, оно будет завершено и помечено как неудачное. Это может нарушить рабочий поток сборки. runners.none=Нет доступных раннеров runners.status.unspecified=Неизвестно runners.status.idle=Простаивает @@ -3186,26 +3849,45 @@ runners.status.active=Активный runners.status.offline=Недоступен runners.version=Версия runners.reset_registration_token=Сброс регистрационного токена +runners.reset_registration_token_confirm=Вы хотите аннулировать текущий токен и сгенерировать новый? runners.reset_registration_token_success=Токен регистрации раннера успешно сброшен runs.all_workflows=Все рабочие потоки -runs.commit=коммит +runs.commit=Коммит runs.scheduled=Запланировано runs.pushed_by=отправлено runs.invalid_workflow_helper=Файл конфигурации рабочего потока некорректен. Пожалуйста, проверьте конфигурационный файл: %s +runs.no_matching_online_runner_helper=Нет доступных раннеров с меткой: %s +runs.no_job_without_needs=Рабочий поток должен содержать по крайней мере одну задачу без зависимостей. +runs.no_job=Рабочий поток должен содержать хотя бы одно задание runs.actor=Актор runs.status=Статус runs.actors_no_select=Все акторы +runs.status_no_select=Все статусы runs.no_results=Ничего не найдено. runs.no_workflows=Пока нет рабочих процессов. +runs.no_workflows.quick_start="Не знаете, с чего начать работу с Gitea Actions? Ознакомьтесь с кратким руководством." +runs.no_workflows.documentation="Дополнительную информацию о Gitea Actions можно найти в документации." runs.no_runs=Рабочий поток ещё не запускался. runs.empty_commit_message=(пустое сообщение коммита) +runs.expire_log_message=Логи были удалены, так как они устарели. +runs.delete=Удалить рабочий поток +runs.cancel=Отмена выполнения рабочего потока +runs.delete.description=Вы уверены, что хотите навсегда удалить этот рабочий поток? Это действие нельзя отменить. +runs.not_done=Этот рабочий поток не завершен. +runs.view_workflow_file=Просмотр файла рабочего потока workflow.disable=Выключить рабочий поток workflow.disable_success=Рабочий поток «%s» успешно выключен. workflow.enable=Включить рабочий поток workflow.enable_success=Рабочий поток «%s» успешно включен. workflow.disabled=Рабочий поток выключен. +workflow.run=Запустить рабочий поток +workflow.not_found=Рабочий поток '%s' не найден. +workflow.run_success=Рабочий поток '%s' успешно запущен. +workflow.from_ref=Использовать рабочий поток из +workflow.has_workflow_dispatch=Данный рабочий поток имеет триггер событий workflow_dispatch. +workflow.has_no_workflow_dispatch=Рабочий поток '%s' не имеет триггера события workflow_dispatch. need_approval_desc=Требуется одобрение, чтобы запустить рабочие потоки для запроса на слияние. @@ -3216,6 +3898,7 @@ variables.none=Переменных пока нет. variables.deletion=Удалить переменную variables.deletion.description=Удаление переменной необратимо, его нельзя отменить. Продолжить? variables.description=Переменные будут передаваться определенным действиям и не могут быть прочитаны иначе. +variables.id_not_exist=Переменная с идентификатором %d не существует. variables.edit=Изменить переменную variables.deletion.failed=Не удалось удалить переменную. variables.deletion.success=Переменная удалена. @@ -3224,11 +3907,16 @@ variables.creation.success=Переменная «%s» добавлена. variables.update.failed=Не удалось изменить переменную. variables.update.success=Переменная изменена. +logs.always_auto_scroll=Всегда автоматически прокручивать логи +logs.always_expand_running=Всегда разворачивать журнал выполнения [projects] +deleted.display_name=Удалённый проект type-1.display_name=Индивидуальный проект type-2.display_name=Проект репозитория type-3.display_name=Проект организации +enter_fullscreen=Полноэкранный режим +exit_fullscreen=Выход из полноэкранного режима [git.filemode] changed_filemode=%[1]s → %[2]s diff --git a/stylelint.config.ts b/stylelint.config.ts index 8a5b87e17caa4..2c2b0e0462231 100644 --- a/stylelint.config.ts +++ b/stylelint.config.ts @@ -20,9 +20,13 @@ export default { ], ignoreFiles: [ '**/*.go', - '/web_src/fomantic', + '/web_src/fomantic/**/*', ], overrides: [ + { + files: ['**/*.css', '**/*.vue'], + rules: {}, + }, { files: ['**/chroma/*', '**/codemirror/*', '**/standalone/*', '**/console.css', 'font_i18n.css'], rules: { diff --git a/web_src/css/base.css b/web_src/css/base.css index 9cef92019d08b..4e5bfab0c6cab 100644 --- a/web_src/css/base.css +++ b/web_src/css/base.css @@ -1,7 +1,9 @@ :root { /* fonts */ - --fonts-proportional: -apple-system, "Segoe UI", system-ui, Roboto, "Helvetica Neue", Arial; - --fonts-monospace: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace, var(--fonts-emoji); + --fonts-proportional: -apple-system, "Segoe UI", system-ui, Roboto, + "Helvetica Neue", Arial; + --fonts-monospace: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, + Consolas, "Liberation Mono", "Courier New", monospace, var(--fonts-emoji); /* GitHub explicitly sets font names like: "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji", "Twemoji Mozilla"; Actually "Twemoji Mozilla" emoji font is widely used by browsers like Firefox, Pale Moon, and it is more likely up-to-dated than the system emoji font. So not setting emoji font seems to be the best choice, here we just use a non-existing dummy font name and let browsers choose. */ @@ -54,10 +56,13 @@ } :root * { - --fonts-regular: var(--fonts-override, var(--fonts-proportional)), "Noto Sans", "Liberation Sans", sans-serif, var(--fonts-emoji); + --fonts-regular: var(--fonts-override, var(--fonts-proportional)), "Noto Sans", + "Liberation Sans", sans-serif, var(--fonts-emoji); } -*, ::before, ::after { +*, +::before, +::after { /* these are needed for tailwind borders to work because we do not load tailwind's base https://github.com/tailwindlabs/tailwindcss/blob/master/src/css/preflight.css */ border-width: 0; @@ -65,7 +70,8 @@ border-color: currentcolor; } -html, body { +html, +body { height: 100%; font-size: 14px; } @@ -105,7 +111,7 @@ code { padding: 1px 4px; border-radius: var(--border-radius); background-color: var(--color-label-bg); - color: var(--color-label-text); + color: var(--color-text-light); } b, @@ -347,7 +353,7 @@ a.label, .inline-code-block { padding: 2px 4px; - border-radius: .24em; + border-radius: 0.24em; background-color: var(--color-label-bg); } @@ -405,7 +411,7 @@ a.label, margin-bottom: -0.25rem; } .ui.dropdown .menu > .item > svg { - margin-right: .78rem; /* use the same margin as for */ + margin-right: 0.78rem; /* use the same margin as for */ } .ui.selection.dropdown .menu > .item { @@ -563,7 +569,7 @@ img.ui.avatar, } .text.grey { - color: var(--color-text-light) !important; + color: var(--color-orange-badge) !important; } .text.light { @@ -699,35 +705,40 @@ img.ui.avatar, blockquote.attention-note { border-left-color: var(--color-blue-dark-1); } -strong.attention-note, svg.attention-note { +strong.attention-note, +svg.attention-note { color: var(--color-blue-dark-1); } blockquote.attention-tip { border-left-color: var(--color-success-text); } -strong.attention-tip, svg.attention-tip { +strong.attention-tip, +svg.attention-tip { color: var(--color-success-text); } blockquote.attention-important { border-left-color: var(--color-violet-dark-1); } -strong.attention-important, svg.attention-important { +strong.attention-important, +svg.attention-important { color: var(--color-violet-dark-1); } blockquote.attention-warning { border-left-color: var(--color-warning-text); } -strong.attention-warning, svg.attention-warning { +strong.attention-warning, +svg.attention-warning { color: var(--color-warning-text); } blockquote.attention-caution { border-left-color: var(--color-red-dark-1); } -strong.attention-caution, svg.attention-caution { +strong.attention-caution, +svg.attention-caution { color: var(--color-red-dark-1); } @@ -992,7 +1003,7 @@ table th[data-sortt-desc] .svg { .ui.tabular.menu .item:hover, .ui.secondary.pointing.menu a.item:hover { - color: var(--color-text); + color: var(--color-primary-3); } .ui.tabular.menu .active.item, @@ -1024,7 +1035,9 @@ table th[data-sortt-desc] .svg { } .ui.dropdown:not(.button) { - line-height: var(--line-height-default); /* the dropdown doesn't have default line-height, use this to make the dropdown icon align with plain dropdown */ + line-height: var( + --line-height-default + ); /* the dropdown doesn't have default line-height, use this to make the dropdown icon align with plain dropdown */ } /* dropdown has some kinds of icons: diff --git a/web_src/css/chroma/dark.css b/web_src/css/chroma/dark.css index bfe9d69f73304..f47d2456695a1 100644 --- a/web_src/css/chroma/dark.css +++ b/web_src/css/chroma/dark.css @@ -1,76 +1,252 @@ -/* https://github.com/alecthomas/chroma/blob/6428fb4e65f3c1493491571c8a6a8f1add1da822/types.go#L208 */ -.chroma .bp { color: #fabd2f; } /* NameBuiltinPseudo */ -.chroma .c { color: #777e94; } /* Comment */ -.chroma .c1 { color: #777e94; } /* CommentSingle */ -.chroma .ch { color: #777e94; } /* CommentHashbang */ -.chroma .cm { color: #777e94; } /* CommentMultiline */ -.chroma .cp { color: #8ec07c; } /* CommentPreproc */ -.chroma .cpf { color: #649bc4; } /* CommentPreprocFile */ -.chroma .cs { color: #9075cd; } /* CommentSpecial */ -.chroma .dl { color: #649bc4; } /* LiteralStringDelimiter */ -.chroma .fm {} /* NameFunctionMagic */ -.chroma .g {} /* Generic */ -.chroma .gd { color: #ffffff; background-color: #5f3737; } /* GenericDeleted */ -.chroma .ge { color: #ddee30; } /* GenericEmph */ -.chroma .gh { color: #ffaa10; } /* GenericHeading */ -.chroma .gi { color: #ffffff; background-color: #3a523a; } /* GenericInserted */ -.chroma .gl {} /* GenericUnderline */ -.chroma .go { color: #777e94; } /* GenericOutput */ -.chroma .gp { color: #ebdbb2; } /* GenericPrompt */ -.chroma .gr { color: #ff4433; } /* GenericError */ -.chroma .gs { color: #ebdbb2; } /* GenericStrong */ -.chroma .gt { color: #ff7540; } /* GenericTraceback */ -.chroma .gu { color: #b8bb26; } /* GenericSubheading */ -.chroma .il { color: #649bc4; } /* LiteralNumberIntegerLong */ -.chroma .k { color: #ff7540; } /* Keyword */ -.chroma .kc { color: #649bc4; } /* KeywordConstant */ -.chroma .kd { color: #ff7540; } /* KeywordDeclaration */ -.chroma .kn { color: #ffaa10; } /* KeywordNamespace */ -.chroma .kp { color: #5f8700; } /* KeywordPseudo */ -.chroma .kr { color: #ff7540; } /* KeywordReserved */ -.chroma .kt { color: #ff7b72; } /* KeywordType */ -.chroma .l {} /* Literal */ -.chroma .ld {} /* LiteralDate */ -.chroma .m { color: #649bc4; } /* LiteralNumber */ -.chroma .mb { color: #649bc4; } /* LiteralNumberBin */ -.chroma .mf { color: #649bc4; } /* LiteralNumberFloat */ -.chroma .mh { color: #649bc4; } /* LiteralNumberHex */ -.chroma .mi { color: #649bc4; } /* LiteralNumberInteger */ -.chroma .mo { color: #649bc4; } /* LiteralNumberOct */ -.chroma .n { color: #c9d1d9; } /* Name */ -.chroma .na { color: #fabd2f; } /* NameAttribute */ -.chroma .nb { color: #fabd2f; } /* NameBuiltin */ -.chroma .nc { color: #ffaa10; } /* NameClass */ -.chroma .nd { color: #8ec07c; } /* NameDecorator */ -.chroma .ne { color: #ff7540; } /* NameException */ -.chroma .nf { color: #fabd2f; } /* NameFunction */ -.chroma .ni { color: #fabd2f; } /* NameEntity */ -.chroma .nl { color: #ff7540; } /* NameLabel */ -.chroma .nn { color: #c9d1d9; } /* NameNamespace */ -.chroma .no { color: #649bc4; } /* NameConstant */ -.chroma .nt { color: #ff7540; } /* NameTag */ -.chroma .nv { color: #ebdbb2; } /* NameVariable */ -.chroma .nx { color: #b6bac5; } /* NameOther */ -.chroma .o { color: #ff7540; } /* Operator */ -.chroma .ow { color: #5f8700; } /* OperatorWord */ -.chroma .p { color: #d2d4db; } /* Punctuation */ -.chroma .py {} /* NameProperty */ -.chroma .s { color: #b8bb26; } /* LiteralString */ -.chroma .s1 { color: #b8bb26; } /* LiteralStringSingle */ -.chroma .s2 { color: #b8bb26; } /* LiteralStringDouble */ -.chroma .sa { color: #ffaa10; } /* LiteralStringAffix */ -.chroma .sb { color: #b8bb26; } /* LiteralStringBacktick */ -.chroma .sc { color: #ffaa10; } /* LiteralStringChar */ -.chroma .sd { color: #b8bb26; } /* LiteralStringDoc */ -.chroma .se { color: #ff8540; } /* LiteralStringEscape */ -.chroma .sh { color: #b8bb26; } /* LiteralStringHeredoc */ -.chroma .si { color: #ffaa10; } /* LiteralStringInterpol */ -.chroma .sr { color: #9075cd; } /* LiteralStringRegex */ -.chroma .ss { color: #ff8540; } /* LiteralStringSymbol */ -.chroma .sx { color: #ffaa10; } /* LiteralStringOther */ -.chroma .vc { color: #649bee; } /* NameVariableClass */ -.chroma .vg { color: #649bee; } /* NameVariableGlobal */ -.chroma .vi { color: #649bee; } /* NameVariableInstance */ -.chroma .vm {} /* NameVariableMagic */ -.chroma .w { color: #7f8699; } /* TextWhitespace */ -.chroma .err {/* not styled because Chroma uses it on too many things like JSX */} /* Error */ +/* Tokyo Night Storm Theme for Gitea */ +/* Типы данных */ +.chroma .k, /* Ключевые слова типов (int, string, bool) */ +.chroma .kt, /* Ключевые слова типов (type, interface, struct) */ +.chroma .nc, /* Имена классов/пользовательских типов */ +.chroma .nn, /* Пространства имён */ +.chroma .no, /* Константы типов */ +.chroma .n, /* Общие имена (пользовательские типы) */ +.chroma .n[class*="Type"] { + /* Классы с Type в названии */ + color: #009999; /* Светло-голубой для всех типов */ +} + +.chroma .bp { + color: #7dcfff; +} /* Псевдоклассы встроенных объектов */ +.chroma .c { + color: #565f89; + font-style: italic; +} /* Комментарии */ +.chroma .c1 { + color: #565f89; + font-style: italic; +} /* Однострочные комментарии */ +.chroma .ch { + color: #565f89; + font-style: italic; +} /* Комментарии с хэшбэнгом (#!) */ +.chroma .cm { + color: #565f89; + font-style: italic; +} /* Многострочные комментарии */ +.chroma .cp { + color: #7aa2f7; +} /* Директивы препроцессора */ +.chroma .cpf { + color: #7aa2f7; +} /* Файловые директивы препроцессора */ +.chroma .cs { + color: #9d7cd8; + font-style: italic; +} /* Специальные комментарии */ +.chroma .dl { + color: #9ece6a; +} /* Разделители строковых литералов */ +.chroma .fm { + color: #7dcfff; +} /* Магические методы функций */ +.chroma .g { + color: #a9b1d6; +} /* Общие стили */ +.chroma .gd { + color: #f7768e; + background-color: #3b2a3f; +} /* Удаленный текст (git diff) */ +.chroma .ge { + color: #9ece6a; + font-style: italic; +} /* Курсивный текст */ +.chroma .gh { + color: #7aa2f7; + font-weight: bold; +} /* Заголовки */ +.chroma .gi { + color: #9ece6a; + background-color: #2a3a3a; +} /* Добавленный текст (git diff) */ +.chroma .gl { + text-decoration: underline; +} /* Подчеркнутый текст */ +.chroma .go { + color: #444b6a; +} /* Вывод программы */ +.chroma .gp { + color: #7aa2f7; +} /* Приглашение командной строки */ +.chroma .gr { + color: #f7768e; + font-weight: bold; +} /* Ошибки */ +.chroma .gs { + font-weight: bold; +} /* Жирный текст */ +.chroma .gt { + color: #ff9e64; +} /* Трассировка стека */ +.chroma .gu { + color: #7aa2f7; + font-weight: bold; +} /* Подзаголовки */ +.chroma .il { + color: #ff9e64; +} /* Длинные целые числа */ +.chroma .k { + color: #bb9af7; +} /* Ключевые слова */ +.chroma .kc { + color: #bb9af7; +} /* Константы */ +.chroma .kd { + color: #bb9af7; +} /* Объявления ключевых слов */ +.chroma .kn { + color: #7dcfff; +} /* Пространства имен */ +.chroma .kp { + color: #bb9af7; +} /* Псевдоклассы */ +.chroma .kr { + color: #bb9af7; +} /* Зарезервированные слова */ +.chroma .kt { + color: #7dcfff; +} /* Типы данных */ +.chroma .l { + color: #ff9e64; +} /* Литералы */ +.chroma .ld { + color: #e0af68; +} /* Даты */ +.chroma .m { + color: #ff9e64; +} /* Числа */ +.chroma .mb { + color: #ff9e64; +} /* Двоичные числа */ +.chroma .mf { + color: #ff9e64; +} /* Числа с плавающей точкой */ +.chroma .mh { + color: #ff9e64; +} /* Шестнадцатеричные числа */ +.chroma .mi { + color: #ff9e64; +} /* Целые числа */ +.chroma .mo { + color: #ff9e64; +} /* Восьмеричные числа */ +.chroma .n { + color: #a9b1d6; +} /* Имена */ +.chroma .na { + color: #7dcfff; +} /* Атрибуты */ +.chroma .nb { + color: #7dcfff; +} /* Встроенные имена */ +.chroma .nc { + color: #7dcfff; + font-style: italic; +} /* Классы */ +.chroma .nd { + color: #bb9af7; +} /* Декораторы */ +.chroma .ne { + color: #f7768e; +} /* Исключения */ +.chroma .nf { + color: #7dcfff; +} /* Функции */ +.chroma .ni { + color: #ff9e64; +} /* Сущности */ +.chroma .nl { + color: #e0af68; +} /* Метки */ +.chroma .nn { + color: #7dcfff; +} /* Пространства имен */ +.chroma .no { + color: #7dcfff; +} /* Константы */ +.chroma .nt { + color: #f7768e; +} /* HTML-теги */ +.chroma .nv { + color: #a9b1d6; +} /* Переменные */ +.chroma .nx { + color: #a9b1d6; +} /* Другие имена */ +.chroma .o { + color: #7aa2f7; +} /* Операторы */ +.chroma .ow { + color: #7dcfff; +} /* Ключевые слова операторов */ +.chroma .p { + color: #a9b1d6; +} /* Пунктуация */ +.chroma .py { + color: #a9b1d6; +} /* Свойства */ +.chroma .s { + color: #9ece6a; +} /* Строковые литералы */ +.chroma .s1 { + color: #9ece6a; +} /* Одинарные кавычки */ +.chroma .s2 { + color: #9ece6a; +} /* Двойные кавычки */ +.chroma .sa { + color: #bb9af7; +} /* Префиксы/суффиксы строк */ +.chroma .sb { + color: #9ece6a; +} /* Обратные кавычки */ +.chroma .sc { + color: #e0af68; +} /* Символы в строках */ +.chroma .sd { + color: #565f89; + font-style: italic; +} /* Документационные строки */ +.chroma .se { + color: #ff9e64; +} /* Экранированные последовательности */ +.chroma .sh { + color: #9ece6a; +} /* Наследуемые строки */ +.chroma .si { + color: #bb9af7; +} /* Интерполированные строки */ +.chroma .sr { + color: #9ece6a; +} /* Регулярные выражения */ +.chroma .ss { + color: #9ece6a; +} /* Символьные строки */ +.chroma .sx { + color: #e0af68; +} /* Другие строки */ +.chroma .vc { + color: #7dcfff; +} /* Переменные класса */ +.chroma .vg { + color: #7dcfff; +} /* Глобальные переменные */ +.chroma .vi { + color: #7dcfff; +} /* Переменные экземпляра */ +.chroma .vm { + color: #a9b1d6; +} /* Магические переменные */ +.chroma .w { + color: #444b6a; +} /* Пробельные символы */ +.chroma .err { + color: #f7768e; + background-color: #3b2a3f; +} /* Ошибки */ diff --git a/web_src/css/features/gitgraph.css b/web_src/css/features/gitgraph.css index 8bdafc3c99a5a..c730bc876fa76 100644 --- a/web_src/css/features/gitgraph.css +++ b/web_src/css/features/gitgraph.css @@ -88,162 +88,226 @@ fill: var(--color-secondary-dark-5); } -#git-graph-container:not(.monochrome) #rel-container .flow-group.flow-color-16-1 { - stroke: #499a37; - fill: #499a37; +#git-graph-container:not(.monochrome) +#rel-container +.flow-group.flow-color-16-1 { + stroke: #4db392; + fill: #4db392; } -#git-graph-container:not(.monochrome) #rel-container .flow-group.flow-color-16-2 { +#git-graph-container:not(.monochrome) +#rel-container +.flow-group.flow-color-16-2 { stroke: #ce4751; fill: #ce4751; } -#git-graph-container:not(.monochrome) #rel-container .flow-group.flow-color-16-3 { +#git-graph-container:not(.monochrome) +#rel-container +.flow-group.flow-color-16-3 { stroke: #8f9121; fill: #8f9121; } -#git-graph-container:not(.monochrome) #rel-container .flow-group.flow-color-16-4 { +#git-graph-container:not(.monochrome) +#rel-container +.flow-group.flow-color-16-4 { stroke: #ac32a6; fill: #ac32a6; } -#git-graph-container:not(.monochrome) #rel-container .flow-group.flow-color-16-5 { +#git-graph-container:not(.monochrome) +#rel-container +.flow-group.flow-color-16-5 { stroke: #7445e9; fill: #7445e9; } -#git-graph-container:not(.monochrome) #rel-container .flow-group.flow-color-16-6 { +#git-graph-container:not(.monochrome) +#rel-container +.flow-group.flow-color-16-6 { stroke: #c67d28; fill: #c67d28; } -#git-graph-container:not(.monochrome) #rel-container .flow-group.flow-color-16-7 { - stroke: #4db392; - fill: #4db392; +#git-graph-container:not(.monochrome) +#rel-container +.flow-group.flow-color-16-7 { + stroke: #499a37; + fill: #499a37; } -#git-graph-container:not(.monochrome) #rel-container .flow-group.flow-color-16-8 { +#git-graph-container:not(.monochrome) +#rel-container +.flow-group.flow-color-16-8 { stroke: #aa4d30; fill: #aa4d30; } -#git-graph-container:not(.monochrome) #rel-container .flow-group.flow-color-16-9 { +#git-graph-container:not(.monochrome) +#rel-container +.flow-group.flow-color-16-9 { stroke: #2a6f84; fill: #2a6f84; } -#git-graph-container:not(.monochrome) #rel-container .flow-group.flow-color-16-10 { +#git-graph-container:not(.monochrome) +#rel-container +.flow-group.flow-color-16-10 { stroke: #c45327; fill: #c45327; } -#git-graph-container:not(.monochrome) #rel-container .flow-group.flow-color-16-11 { +#git-graph-container:not(.monochrome) +#rel-container +.flow-group.flow-color-16-11 { stroke: #3d965c; fill: #3d965c; } -#git-graph-container:not(.monochrome) #rel-container .flow-group.flow-color-16-12 { +#git-graph-container:not(.monochrome) +#rel-container +.flow-group.flow-color-16-12 { stroke: #792a93; fill: #792a93; } -#git-graph-container:not(.monochrome) #rel-container .flow-group.flow-color-16-13 { +#git-graph-container:not(.monochrome) +#rel-container +.flow-group.flow-color-16-13 { stroke: #439d73; fill: #439d73; } -#git-graph-container:not(.monochrome) #rel-container .flow-group.flow-color-16-14 { +#git-graph-container:not(.monochrome) +#rel-container +.flow-group.flow-color-16-14 { stroke: #103aad; fill: #103aad; } -#git-graph-container:not(.monochrome) #rel-container .flow-group.flow-color-16-15 { +#git-graph-container:not(.monochrome) +#rel-container +.flow-group.flow-color-16-15 { stroke: #982e85; fill: #982e85; } -#git-graph-container:not(.monochrome) #rel-container .flow-group.flow-color-16-0 { +#git-graph-container:not(.monochrome) +#rel-container +.flow-group.flow-color-16-0 { stroke: #7db233; fill: #7db233; } -#git-graph-container:not(.monochrome) #rel-container .flow-group.highlight.flow-color-16-1 { +#git-graph-container:not(.monochrome) +#rel-container +.flow-group.highlight.flow-color-16-1 { stroke: #5ac144; fill: #5ac144; } -#git-graph-container:not(.monochrome) #rel-container .flow-group.highlight.flow-color-16-2 { +#git-graph-container:not(.monochrome) +#rel-container +.flow-group.highlight.flow-color-16-2 { stroke: #ed5a8b; fill: #ed5a8b; } -#git-graph-container:not(.monochrome) #rel-container .flow-group.highlight.flow-color-16-3 { +#git-graph-container:not(.monochrome) +#rel-container +.flow-group.highlight.flow-color-16-3 { stroke: #ced049; fill: #ced048; } -#git-graph-container:not(.monochrome) #rel-container .flow-group.highlight.flow-color-16-4 { +#git-graph-container:not(.monochrome) +#rel-container +.flow-group.highlight.flow-color-16-4 { stroke: #db61d7; fill: #db62d6; } -#git-graph-container:not(.monochrome) #rel-container .flow-group.highlight.flow-color-16-5 { +#git-graph-container:not(.monochrome) +#rel-container +.flow-group.highlight.flow-color-16-5 { stroke: #8455f9; fill: #8455f9; } -#git-graph-container:not(.monochrome) #rel-container .flow-group.highlight.flow-color-16-6 { +#git-graph-container:not(.monochrome) +#rel-container +.flow-group.highlight.flow-color-16-6 { stroke: #e6a151; fill: #e6a151; } -#git-graph-container:not(.monochrome) #rel-container .flow-group.highlight.flow-color-16-7 { +#git-graph-container:not(.monochrome) +#rel-container +.flow-group.highlight.flow-color-16-7 { stroke: #44daaa; fill: #44daaa; } -#git-graph-container:not(.monochrome) #rel-container .flow-group.highlight.flow-color-16-8 { +#git-graph-container:not(.monochrome) +#rel-container +.flow-group.highlight.flow-color-16-8 { stroke: #dd7a5c; fill: #dd7a5c; } -#git-graph-container:not(.monochrome) #rel-container .flow-group.highlight.flow-color-16-9 { +#git-graph-container:not(.monochrome) +#rel-container +.flow-group.highlight.flow-color-16-9 { stroke: #38859c; fill: #38859c; } -#git-graph-container:not(.monochrome) #rel-container .flow-group.highlight.flow-color-16-10 { +#git-graph-container:not(.monochrome) +#rel-container +.flow-group.highlight.flow-color-16-10 { stroke: #d95520; fill: #d95520; } -#git-graph-container:not(.monochrome) #rel-container .flow-group.highlight.flow-color-16-11 { +#git-graph-container:not(.monochrome) +#rel-container +.flow-group.highlight.flow-color-16-11 { stroke: #42ae68; fill: #42ae68; } -#git-graph-container:not(.monochrome) #rel-container .flow-group.highlight.flow-color-16-12 { +#git-graph-container:not(.monochrome) +#rel-container +.flow-group.highlight.flow-color-16-12 { stroke: #9126b5; fill: #9126b5; } -#git-graph-container:not(.monochrome) #rel-container .flow-group.highlight.flow-color-16-13 { +#git-graph-container:not(.monochrome) +#rel-container +.flow-group.highlight.flow-color-16-13 { stroke: #4ab080; fill: #4ab080; } -#git-graph-container:not(.monochrome) #rel-container .flow-group.highlight.flow-color-16-14 { +#git-graph-container:not(.monochrome) +#rel-container +.flow-group.highlight.flow-color-16-14 { stroke: #284fb8; fill: #284fb8; } -#git-graph-container:not(.monochrome) #rel-container .flow-group.highlight.flow-color-16-15 { +#git-graph-container:not(.monochrome) +#rel-container +.flow-group.highlight.flow-color-16-15 { stroke: #971c80; fill: #971c80; } -#git-graph-container:not(.monochrome) #rel-container .flow-group.highlight.flow-color-16-0 { +#git-graph-container:not(.monochrome) +#rel-container +.flow-group.highlight.flow-color-16-0 { stroke: #87ca28; fill: #87ca28; } diff --git a/web_src/css/markup/content.css b/web_src/css/markup/content.css index 14d95ca72671e..573eeaeb228af 100644 --- a/web_src/css/markup/content.css +++ b/web_src/css/markup/content.css @@ -169,7 +169,7 @@ In markup content, we always use bottom margin for all elements */ } .markup .task-list-item input[type="checkbox"] { - margin: 0 .3em .25em -1.4em; + margin: 0 0.3em 0.25em -1.4em; vertical-align: middle; padding: 0; } diff --git a/web_src/css/modules/button.css b/web_src/css/modules/button.css index 8e3309474b2a7..2c636b8d4f240 100644 --- a/web_src/css/modules/button.css +++ b/web_src/css/modules/button.css @@ -17,6 +17,8 @@ border: 1px solid var(--color-light-border); color: var(--color-text); white-space: nowrap; + padding: 0.57em 1.43em; + min-height: 38px; } .ui.button:focus-visible { @@ -30,8 +32,8 @@ } .ui.button:hover { - background: var(--color-hover); - color: var(--color-text); + background: var(--color-primary); + color: var(--color-nav-bg); } .ui.active.button, @@ -99,10 +101,6 @@ } /* reference sizes (not exactly at the moment): normal: padding-x=21, height=38 ; compact: padding-x=15, height=32 */ -.ui.button { /* stylelint-disable-line no-duplicate-selectors */ - min-height: 38px; - padding: 0.57em /* around 8px */ 1.43em /* around 20px */; -} .ui.compact.buttons .button, .ui.compact.button { padding: 0.42em /* around 8px */ 1.07em /* around 15px */; @@ -162,6 +160,7 @@ .ui.basic.buttons .button, .ui.basic.button { border-radius: var(--border-radius); + margin-top: 5px; background: none; } .ui.basic.buttons { @@ -182,8 +181,8 @@ .ui.basic.buttons .button:hover, .ui.basic.button:hover { - color: var(--color-text); - background: var(--color-hover); + color: var(--color-primary); + /* background: var(--color-hover); */ border-color: var(--color-secondary-dark-2); } @@ -193,8 +192,8 @@ .ui.basic.active.button, .ui.basic.buttons .active.button:hover, .ui.basic.active.button:hover { - color: var(--color-text); - background: var(--color-active); + color: var(--color-primary); + /* background: var(--color-active); */ } .ui.button.toggle.active { @@ -214,13 +213,13 @@ .ui.primary.button, .ui.primary.buttons .button { background: var(--color-primary); - color: var(--color-primary-contrast); + color: var(--color-nav-bg); } .ui.primary.button:hover, .ui.primary.buttons .button:hover { background: var(--color-primary-hover); - color: var(--color-primary-contrast); + color: var(--color-nav-bg); } .ui.primary.button:active, @@ -249,7 +248,7 @@ .ui.red.button, .ui.red.buttons .button { - color: var(--color-white); + color: var(--color-nav-bg); background: var(--color-red); } diff --git a/web_src/css/modules/checkbox.css b/web_src/css/modules/checkbox.css index f7e61ba360ff1..1fc9dacd3b89f 100644 --- a/web_src/css/modules/checkbox.css +++ b/web_src/css/modules/checkbox.css @@ -87,6 +87,7 @@ input[type="radio"] { left: 0; } .ui.toggle.checkbox label::after { + cursor: pointer; background: var(--color-white); box-shadow: 1px 1px 4px 1px var(--color-shadow); position: absolute; diff --git a/web_src/css/modules/input.css b/web_src/css/modules/input.css index d39377b4e1f7b..29a307e1b92b8 100644 --- a/web_src/css/modules/input.css +++ b/web_src/css/modules/input.css @@ -170,13 +170,16 @@ .ui.action.input:not([class*="left action"]) > .ui.dropdown.selection { min-width: 10em; } -.ui.action.input:not([class*="left action"]) > .ui.dropdown.selection:not(:focus) { +.ui.action.input:not([class*="left action"]) +> .ui.dropdown.selection:not(:focus) { border-right: none; } -.ui.action.input:not([class*="left action"]) > .ui.dropdown.selection:not(.active):hover { +.ui.action.input:not([class*="left action"]) +> .ui.dropdown.selection:not(.active):hover { border-color: var(--color-input-border); } -.ui.action.input:not([class*="left action"]) .ui.dropdown.selection.upward.visible { +.ui.action.input:not([class*="left action"]) +.ui.dropdown.selection.upward.visible { border-bottom-left-radius: 0 !important; border-bottom-right-radius: 0 !important; } @@ -184,12 +187,19 @@ .ui.action.input:not([class*="left action"]) > input:hover { border-right: none; } -.ui.action.input:not([class*="left action"]) > input:focus + .ui.dropdown.selection, -.ui.action.input:not([class*="left action"]) > input:focus + .ui.dropdown.selection:hover, +.ui.action.input:not([class*="left action"]) +> input:focus ++ .ui.dropdown.selection, +.ui.action.input:not([class*="left action"]) +> input:focus ++ .ui.dropdown.selection:hover, .ui.action.input:not([class*="left action"]) > input:focus + .button, .ui.action.input:not([class*="left action"]) > input:focus + .button:hover, .ui.action.input:not([class*="left action"]) > input:focus + i.icon + .button, -.ui.action.input:not([class*="left action"]) > input:focus + i.icon + .button:hover { +.ui.action.input:not([class*="left action"]) +> input:focus ++ i.icon ++ .button:hover { border-left-color: var(--color-primary); } .ui.action.input:not([class*="left action"]) > input:focus { diff --git a/web_src/css/modules/label.css b/web_src/css/modules/label.css index cf850e4c5aac7..776cd0d23bca6 100644 --- a/web_src/css/modules/label.css +++ b/web_src/css/modules/label.css @@ -22,6 +22,7 @@ a.ui.label { cursor: pointer; + margin-top: 5px; } .ui.label > a { @@ -91,25 +92,25 @@ a.ui.label:hover { .ui.basic.label { background: var(--color-button); - border: 1px solid var(--color-light-border); - color: var(--color-text-light); + border: 1px solid var(--color-primary-2); + color: var(--color-primary); } a.ui.basic.label:hover { text-decoration: none; - color: var(--color-text); - border-color: var(--color-secondary-dark-2); + color: var(--color-primary-hover); + border-color: var(--color-primary); background: var(--color-hover); } .ui.ui.ui.primary.label { background: var(--color-primary); border-color: var(--color-primary-dark-2); - color: var(--color-primary-contrast); + color: var(--color-white); } a.ui.ui.ui.primary.label:hover { - background: var(--color-primary-dark-3); - border-color: var(--color-primary-dark-3); - color: var(--color-primary-contrast); + background: var(--color-primary-hover); + border-color: var(--color-primary-dark-2); + color: var(--color-nav-bg); } .ui.ui.ui.basic.primary.label { background: transparent; @@ -288,7 +289,9 @@ a.ui.ui.ui.basic.grey.label:hover { If the labels-list itself needs some layouts, use extra classes or "tw" helpers. */ .labels-list { display: contents; - font-size: var(--font-size-label); /* it must match the label font size, otherwise the height mismatches */ + font-size: var( + --font-size-label + ); /* it must match the label font size, otherwise the height mismatches */ } .labels-list a { diff --git a/web_src/css/modules/menu.css b/web_src/css/modules/menu.css index 5072dcbd0e17d..a64748be5000f 100644 --- a/web_src/css/modules/menu.css +++ b/web_src/css/modules/menu.css @@ -332,27 +332,27 @@ background: none; padding: 0.5em 1.33333333em; font-size: 0.85714286em; - color: var(--color-text-light-2); + color: var(--color-text-light); } .ui.vertical.menu .item .menu .item { - color: var(--color-text-light-2); + color: var(--color-text-light); text-indent: 16px; } .ui.vertical.menu .item .menu .item:hover, .ui.vertical.menu .item .menu a.item:hover { - color: var(--color-text-light-1); + color: var(--color-text-light); } .ui.vertical.menu .item .menu .active.item { background-color: transparent; font-weight: var(--font-weight-medium); - color: var(--color-text); + color: var(--color-text-light-2); } .ui.vertical.menu .item .menu a.item:hover { - color: var(--color-text); + color: var(--color-text-light-2); } .ui.vertical.menu .menu .item::before { display: none; @@ -458,7 +458,7 @@ } @media (max-width: 767.98px) { - .ui.pagination.menu .item:not(.active,.navigation), + .ui.pagination.menu .item:not(.active, .navigation), .ui.pagination.menu .item.navigation span.navigation_label { display: none; } @@ -479,7 +479,7 @@ background: none; margin-left: 0; margin-right: 0; - gap: .35714286em; + gap: 0.35714286em; border-radius: 0; border: none; } @@ -602,7 +602,7 @@ .ui.secondary.pointing.menu .active.item, .ui.secondary.pointing.menu .active.item:hover, .ui.secondary.pointing.menu .dropdown.item:hover { - color: var(--color-text-dark); + color: var(--color-primary-3-hover); } .ui.secondary.pointing.menu .active.dropdown.item { diff --git a/web_src/css/modules/navbar.css b/web_src/css/modules/navbar.css index 149766a586b09..7e86e56a020f5 100644 --- a/web_src/css/modules/navbar.css +++ b/web_src/css/modules/navbar.css @@ -31,12 +31,14 @@ } #navbar .item.active { - background: var(--color-active); + color: var(--color-primary); + /* background: var(--color-active); */ } #navbar a.item:hover, #navbar button.item:hover { - background: var(--color-nav-hover-bg); + color: var(--color-primary); + /* background: var(--color-nav-hover-bg); */ } #navbar .item.ui.dropdown { @@ -130,7 +132,9 @@ } .secondary-nav { - background: var(--color-secondary-nav-bg) !important; /* important because of .ui.secondary.menu */ + background: var( + --color-secondary-nav-bg + ) !important; /* important because of .ui.secondary.menu */ } .issue-navbar { diff --git a/web_src/css/modules/segment.css b/web_src/css/modules/segment.css index adb514be59939..5afeef65a0376 100644 --- a/web_src/css/modules/segment.css +++ b/web_src/css/modules/segment.css @@ -7,7 +7,7 @@ padding: 1em; border-radius: 0.28571429rem; border: 1px solid var(--color-secondary); - background: var(--color-box-body); + background: var(--color-nav-bg); color: var(--color-text); } .ui.segment:first-child { @@ -70,7 +70,8 @@ } .ui.segments:not(.horizontal) > .segment:only-child, -.ui.segments:not(.horizontal) > .segment:has(~ .tw-hidden) { /* workaround issue with :last-child ignoring hidden elements */ +.ui.segments:not(.horizontal) > .segment:has(~ .tw-hidden) { + /* workaround issue with :last-child ignoring hidden elements */ border-radius: 0.28571429rem; } diff --git a/web_src/css/modules/table.css b/web_src/css/modules/table.css index 6298471d474e4..b05fa32dcce65 100644 --- a/web_src/css/modules/table.css +++ b/web_src/css/modules/table.css @@ -169,7 +169,7 @@ .ui.selectable.table > tbody > tr:hover, .ui.table tbody tr td.selectable:hover { - background: var(--color-hover); + background: var(--color-hover-table); } .ui.attached.table { @@ -295,7 +295,7 @@ background: var(--color-light); } .ui.basic.striped.selectable.table > tbody > tr:nth-child(2n):hover { - background: var(--color-hover); + background: var(--color-hover-table); } .ui[class*="very basic"].table { diff --git a/web_src/css/repo.css b/web_src/css/repo.css index 9f4fa518819a7..5083474bc471d 100644 --- a/web_src/css/repo.css +++ b/web_src/css/repo.css @@ -162,22 +162,38 @@ td .commit-summary { font-size: 0.5em; } -.repository.file.list .non-diff-file-content .header .file-actions .btn-octicon { +.repository.file.list +.non-diff-file-content +.header +.file-actions +.btn-octicon { line-height: var(--line-height-default); padding: 8px; vertical-align: middle; color: var(--color-text); } -.repository.file.list .non-diff-file-content .header .file-actions .btn-octicon:hover { +.repository.file.list +.non-diff-file-content +.header +.file-actions +.btn-octicon:hover { color: var(--color-primary); } -.repository.file.list .non-diff-file-content .header .file-actions .btn-octicon-danger:hover { +.repository.file.list +.non-diff-file-content +.header +.file-actions +.btn-octicon-danger:hover { color: var(--color-red); } -.repository.file.list .non-diff-file-content .header .file-actions .btn-octicon.disabled { +.repository.file.list +.non-diff-file-content +.header +.file-actions +.btn-octicon.disabled { color: inherit; opacity: var(--opacity-disabled); cursor: default; @@ -268,7 +284,11 @@ td .commit-summary { display: none; } } -.repository.file.editor .commit-form-wrapper .commit-form .quick-pull-choice .branch-name { +.repository.file.editor +.commit-form-wrapper +.commit-form +.quick-pull-choice +.branch-name { display: inline-block; padding: 2px 4px; font: 12px var(--fonts-monospace); @@ -278,21 +298,34 @@ td .commit-summary { margin: 0 2px; } -.repository.file.editor .commit-form-wrapper .commit-form .quick-pull-choice .new-branch-name-input { +.repository.file.editor +.commit-form-wrapper +.commit-form +.quick-pull-choice +.new-branch-name-input { position: relative; margin-left: 25px; } -.repository.file.editor .commit-form-wrapper .commit-form .quick-pull-choice .new-branch-name-input input { +.repository.file.editor +.commit-form-wrapper +.commit-form +.quick-pull-choice +.new-branch-name-input +input { width: 240px !important; padding-left: 26px !important; } -.repository.file.editor .commit-form-wrapper .commit-form .quick-pull-choice .octicon-git-branch { +.repository.file.editor +.commit-form-wrapper +.commit-form +.quick-pull-choice +.octicon-git-branch { position: absolute; top: 9px; left: 10px; - color: var(--color-grey); + color: var(--color-grey-light); } .repository.options #interval { @@ -361,7 +394,7 @@ td .commit-summary { .repository.view.issue .issue-title .ui.input input { font-size: 1.5em; - padding: 2px .5rem; + padding: 2px 0.5rem; } .issue-title .index { @@ -436,7 +469,8 @@ td .commit-summary { padding-left: 16px; } -.repository.view.issue .comment-list .timeline::before { /* ciara */ +.repository.view.issue .comment-list .timeline::before { + /* ciara */ display: block; content: ""; position: absolute; @@ -518,7 +552,11 @@ td .commit-summary { padding: 3px; } -.repository.view.issue .comment-list .timeline-item .badge .svg.octicon-comment { +.repository.view.issue +.comment-list +.timeline-item +.badge +.svg.octicon-comment { margin-top: 2px; } @@ -536,7 +574,11 @@ td .commit-summary { color: inherit; } -.repository.view.issue .comment-list .timeline-item .avatar-with-link + .comment-text-line { +.repository.view.issue +.comment-list +.timeline-item +.avatar-with-link ++ .comment-text-line { margin-left: 0.25em; } @@ -545,7 +587,10 @@ td .commit-summary { padding-top: 0; } -.repository.view.issue .comment-list .timeline-item.event > .commit-status-link { +.repository.view.issue +.comment-list +.timeline-item.event +> .commit-status-link { float: right; margin-right: 8px; margin-top: 4px; @@ -587,7 +632,11 @@ td .commit-summary { background: var(--color-box-body); } -.repository.view.issue .comment-list .conversation-holder .comment .comment-container { +.repository.view.issue +.comment-list +.conversation-holder +.comment +.comment-container { border: none; } @@ -596,7 +645,12 @@ td .commit-summary { width: 100%; margin: 0; } - .repository.view.issue .comment-list .comment .content .form .button:not(:last-child) { + .repository.view.issue + .comment-list + .comment + .content + .form + .button:not(:last-child) { margin-bottom: 1rem; } } @@ -620,10 +674,11 @@ td .commit-summary { } .merge-section-info code { - border: 1px solid var(--color-light-border); + border: 1px solid var(--color-primary); border-radius: var(--border-radius); + color: var(--color-milk-text); padding: 2px 4px; - background: var(--color-light); + background: var(--color-primary-2); } .repository.view.issue .comment-list .comment .no-content { @@ -662,7 +717,10 @@ td .commit-summary { margin-left: 24px; } -.repository.view.issue .comment-list .comment-code-cloud button.comment-form-reply { +.repository.view.issue +.comment-list +.comment-code-cloud +button.comment-form-reply { margin: 0; } @@ -790,16 +848,16 @@ td .commit-summary { /* the border css competes with .markup where all tables have outer border which would add a double border here, remove only the outer borders from this table */ -.repository .data-table tr:first-child :is(td,th) { +.repository .data-table tr:first-child :is(td, th) { border-top: none !important; } -.repository .data-table tr:last-child :is(td,th) { +.repository .data-table tr:last-child :is(td, th) { border-bottom: none !important; } -.repository .data-table tr :is(td,th):first-child { +.repository .data-table tr :is(td, th):first-child { border-left: none !important; } -.repository .data-table tr :is(td,th):last-child { +.repository .data-table tr :is(td, th):last-child { border-right: none !important; } @@ -899,6 +957,10 @@ td .commit-summary { justify-content: end; } +.diff-detail-actions > * { + margin-top: 5px; +} + .diff-detail-actions > *, .diff-detail-actions .button { margin-left: 0 !important; @@ -990,7 +1052,12 @@ td .commit-summary { display: inline-block; } -.repository .diff-file-box .code-diff-split .tag-code .lines-code code.code-inner { +.repository +.diff-file-box +.code-diff-split +.tag-code +.lines-code +code.code-inner { padding-left: 10px !important; } @@ -1130,7 +1197,8 @@ td .commit-summary { } .repository .repository-summary .sub-menu .item.active { - background: var(--color-secondary); + color: var(--color-primary-3); + background: var(--color-code-bg); } #cite-repo-modal #citation-panel { @@ -1837,7 +1905,11 @@ tbody.commit-list { /* Don't show the general avatar, we show the inline avatar on mobile. * And don't show the role labels, there's no place for that. */ .repository.view.issue .comment-list .timeline .timeline-avatar, - .repository.view.issue .comment-list .timeline .comment-header-right .role-label { + .repository.view.issue + .comment-list + .timeline + .comment-header-right + .role-label { display: none; } .commit-header h3 { @@ -1881,7 +1953,7 @@ tbody.commit-list { .commit-status-list { max-height: 240px; /* fit exactly 6 items, commit-status-item.height * 6 */ overflow-x: hidden; - transition: max-height .2s; + transition: max-height 0.2s; } .commit-status-item { diff --git a/web_src/css/review.css b/web_src/css/review.css index 23383c051cccb..24c5e9ae5a09b 100644 --- a/web_src/css/review.css +++ b/web_src/css/review.css @@ -133,7 +133,7 @@ } .code-expander-button:hover { - background: var(--color-primary); + background: var(--color-primary-2-hover); color: var(--color-primary-contrast); } @@ -150,7 +150,9 @@ .review-box-panel .combo-markdown-editor { width: 730px; /* this width matches current EasyMDE's toolbar's width */ - max-width: calc(100vw - 70px); /* leave enough space on left, and align the page content */ + max-width: calc( + 100vw - 70px + ); /* leave enough space on left, and align the page content */ } #review-box { diff --git a/web_src/css/shared/flex-list.css b/web_src/css/shared/flex-list.css index e94e9e9cc265c..165efeea46abc 100644 --- a/web_src/css/shared/flex-list.css +++ b/web_src/css/shared/flex-list.css @@ -25,7 +25,7 @@ .flex-item-header { display: flex; - gap: .25rem; + gap: 0.25rem; justify-content: space-between; flex-wrap: wrap; } @@ -59,7 +59,7 @@ } .flex-item .flex-item-title a { - color: var(--color-text); + color: var(--color-primary); overflow-wrap: anywhere; } @@ -67,13 +67,13 @@ display: flex; align-items: center; flex-wrap: wrap; - gap: .25rem; + gap: 0.25rem; color: var(--color-text-light-2); overflow-wrap: anywhere; } .flex-item .flex-item-body a { - color: inherit; + /* color: inherit; */ overflow-wrap: anywhere; } diff --git a/web_src/css/themes/theme-gitea-dark.css b/web_src/css/themes/theme-gitea-dark.css index 48fbd14dfb251..0de83f412a3a0 100644 --- a/web_src/css/themes/theme-gitea-dark.css +++ b/web_src/css/themes/theme-gitea-dark.css @@ -7,8 +7,12 @@ gitea-theme-meta-info { :root { --is-dark-theme: true; - --color-primary: #4183c4; - --color-primary-contrast: #ffffff; + --color-primary-2: #384c78b3; + --color-primary-2-hover: #384c78; + --color-primary-3: #75a3e8cc; + --color-primary-3-hover: #75a3e8; + --color-primary: #75a3e8cc; + --color-primary-contrast: #bcc3cb; --color-primary-dark-1: #548fca; --color-primary-dark-2: #679cd0; --color-primary-dark-3: #7aa8d6; @@ -16,25 +20,30 @@ gitea-theme-meta-info { --color-primary-dark-5: #b3cde7; --color-primary-dark-6: #d9e6f3; --color-primary-dark-7: #f4f8fb; - --color-primary-light-1: #3876b3; - --color-primary-light-2: #31699f; + --color-primary-light-1: #75a3e8; + --color-primary-light-2: #75a3e8; --color-primary-light-3: #2b5c8b; --color-primary-light-4: #254f77; --color-primary-light-5: #193450; --color-primary-light-6: #0c1a28; --color-primary-light-7: #04080c; - --color-primary-alpha-10: #4183c419; - --color-primary-alpha-20: #4183c433; - --color-primary-alpha-30: #4183c44b; - --color-primary-alpha-40: #4183c466; - --color-primary-alpha-50: #4183c480; - --color-primary-alpha-60: #4183c499; - --color-primary-alpha-70: #4183c4b3; - --color-primary-alpha-80: #4183c4cc; - --color-primary-alpha-90: #4183c4e1; + --color-primary-external-legend-1: #5ee9b5; + --color-primary-external-legend-2: #00d492; + --color-primary-external-legend-3: #00bc7d; + --color-primary-external-legend-4: #009966; + --color-primary-external-legend-5: #007a55; + --color-primary-alpha-10: #1e1a4d; + --color-primary-alpha-20: #312c85; + --color-primary-alpha-30: #372aac; + --color-primary-alpha-40: #432dd7; + --color-primary-alpha-50: #4f39f6; + --color-primary-alpha-60: #615fff; + --color-primary-alpha-70: #7c86ff; + --color-primary-alpha-80: #a3b3ff; + --color-primary-alpha-90: #c6d2ff; --color-primary-hover: var(--color-primary-light-1); --color-primary-active: var(--color-primary-light-2); - --color-secondary: #3b444c; + --color-secondary: #4d5565; --color-secondary-dark-1: #414b54; --color-secondary-dark-2: #49545f; --color-secondary-dark-3: #576471; @@ -57,7 +66,7 @@ gitea-theme-meta-info { --color-secondary-alpha-30: #3b444c4b; --color-secondary-alpha-40: #3b444c66; --color-secondary-alpha-50: #3b444c80; - --color-secondary-alpha-60: #3b444c99; + --color-secondary-alpha-60: #363b49; --color-secondary-alpha-70: #3b444cb3; --color-secondary-alpha-80: #3b444ccc; --color-secondary-alpha-90: #3b444ce1; @@ -65,20 +74,20 @@ gitea-theme-meta-info { --color-secondary-hover: var(--color-secondary-dark-3); --color-secondary-active: var(--color-secondary-dark-2); /* console colors - used for actions console and console files */ - --color-console-fg: #f7f8f9; + --color-console-fg: #abb1d3; --color-console-fg-subtle: #bdc4cc; - --color-console-bg: #171b1e; - --color-console-border: #2e353b; - --color-console-hover-bg: #272d33; - --color-console-active-bg: #2e353b; - --color-console-menu-bg: #262b31; - --color-console-menu-border: #414b55; + --color-console-bg: var(--color-nav-bg); + --color-console-border: var(--color-primary-2); + --color-console-hover-bg: #6464ff1a; + --color-console-active-bg: #6464ff1a; + --color-console-menu-bg: var(--color-nav-bg); + --color-console-menu-border: var(--color-primary-2); /* named colors */ - --color-red: #cc4848; + --color-red: #e24471cc; /* #cc4848 */ --color-orange: #cc580c; --color-yellow: #cc9903; --color-olive: #91a313; - --color-green: #87ab63; + --color-green: #50bda4; /* #73c280 */ --color-teal: #00918a; --color-blue: #3a8ac6; --color-violet: #906ae1; @@ -87,7 +96,7 @@ gitea-theme-meta-info { --color-brown: #a47252; --color-black: #1d2328; /* light variants - produced via Sass scale-color(color, $lightness: +10%) */ - --color-red-light: #d15a5a; + --color-red-light: #e24471; /* #d15a5a */ --color-orange-light: #f6a066; --color-yellow-light: #eaaf03; --color-olive-light: #abc016; @@ -100,7 +109,7 @@ gitea-theme-meta-info { --color-brown-light: #b08061; --color-black-light: #424851; /* dark 1 variants - produced via Sass scale-color(color, $lightness: -10%) */ - --color-red-dark-1: #c23636; + --color-red-dark-1: #e24471; /* #c23636 */ --color-orange-dark-1: #f38236; --color-yellow-dark-1: #b88a03; --color-olive-dark-1: #839311; @@ -113,7 +122,7 @@ gitea-theme-meta-info { --color-brown-dark-1: #94674a; --color-black-dark-1: #292e38; /* dark 2 variants - produced via Sass scale-color(color, $lightness: -20%) */ - --color-red-dark-2: #ad3030; + --color-red-dark-2: #e24471e6; /* #ad3030 */ --color-orange-dark-2: #f16e17; --color-yellow-dark-2: #a37a02; --color-olive-dark-2: #74820f; @@ -147,25 +156,33 @@ gitea-theme-meta-info { --color-grey-light: #818f9e; --color-gold: #b1983b; --color-white: #ffffff; - --color-diff-added-linenum-bg: #274227; - --color-diff-added-row-bg: #203224; + --color-diff-added-linenum-bg: #324e38; + --color-diff-added-row-bg: #25332f; --color-diff-added-row-border: #314a37; - --color-diff-added-word-bg: #3c653c; + --color-diff-added-word-bg: #324e38; --color-diff-moved-row-bg: #818044; --color-diff-moved-row-border: #bcca6f; - --color-diff-removed-linenum-bg: #482121; - --color-diff-removed-row-bg: #301e1e; + --color-diff-removed-linenum-bg: #5b3235; + --color-diff-removed-row-bg: #3c2930; --color-diff-removed-row-border: #634343; --color-diff-removed-word-bg: #6f3333; - --color-diff-inactive: #22282d; - --color-error-border: #a04141; + --color-diff-inactive: #363b49; + --color-error-border: var(--color-red); + --color-error-bg: #e244711a; + --color-error-bg-active: var(--color-red-dark-1); + --color-error-bg-hover: var(--color-red-dark-2); + --color-error-text: var(--color-red-light); + /* --color-error-border: #a04141; --color-error-bg: #522; --color-error-bg-active: #744; --color-error-bg-hover: #633; - --color-error-text: #f9cbcb; + --color-error-text: #f9cbcb; */ --color-success-border: #458a57; --color-success-bg: #284034; --color-success-text: #6cc664; + /* --color-success-border: #50bda4; + --color-success-bg: #50bda41a; + --color-success-text: #50bda4cc; */ --color-warning-border: #bb9d00; --color-warning-bg: #3a3a30; --color-warning-text: #fbbd08; @@ -187,62 +204,71 @@ gitea-theme-meta-info { --color-git: #f05133; --color-logo: #609926; /* target-based colors */ - --color-body: #1b1f23; - --color-box-header: #1a1d1f; - --color-box-body: #14171a; - --color-box-body-highlight: #1e2226; - --color-text-dark: #f7f8f9; - --color-text: #d0d5da; - --color-text-light: #bcc3cb; - --color-text-light-1: #a5afb9; - --color-text-light-2: #8f9ba8; - --color-text-light-3: #788797; + --color-body: #1f212b; + --color-box-header: #363b49; + --color-box-body: #1f212b; + --color-box-body-highlight: #2c3752; + --color-text-dark: #666d88; + --color-text: #7d84a0; + --color-text-light: #949bb8; + --color-text-light-1: #abb1d3; + --color-text-light-2: #c0c5de; + --color-text-light-3: #d1d5e6; --color-footer: var(--color-nav-bg); --color-timeline: #343c44; --color-input-text: var(--color-text-dark); - --color-input-background: #171a1e; - --color-input-toggle-background: #2e353c; + --color-input-background: #1f212b; + --color-input-toggle-background: #363b49; --color-input-border: var(--color-secondary); --color-input-border-hover: var(--color-secondary-dark-1); - --color-light: #00001728; - --color-light-mimic-enabled: rgba(0, 0, 0, calc(40 / 255 * 222 / 255 / var(--opacity-disabled))); - --color-light-border: #e8f3ff28; - --color-hover: #e8f3ff19; - --color-hover-opaque: #21252a; /* TODO: color-mix(in srgb, var(--color-body), var(--color-hover)); */ - --color-active: #e8f3ff24; - --color-menu: #171a1e; - --color-card: #171a1e; - --color-markup-table-row: #e8f3ff0f; - --color-markup-code-block: #e8f3ff12; - --color-markup-code-inline: #e8f3ff28; - --color-button: #171a1e; - --color-code-bg: #14171a; - --color-shadow: #00001758; - --color-shadow-opaque: #000017; - --color-secondary-bg: #2a3137; - --color-expand-button: #2f363d; - --color-placeholder-text: var(--color-text-light-3); - --color-editor-line-highlight: var(--color-primary-light-5); - --color-project-column-bg: var(--color-secondary-light-2); - --color-caret: var(--color-text); /* should ideally be --color-text-dark, see #15651 */ - --color-reaction-bg: #e8f3ff12; + --color-light: #21232d; + --color-hover-table: #2a2e41; + --color-light-mimic-enabled: rgba( + 0, + 0, + 0, + calc(40 / 255 * 222 / 255 / var(--opacity-disabled)) + ); + --color-light-border: #4d5565; + --color-hover: #2a2e41; /* #50bda4 */ + --color-hover-opaque: #2a2e41; /* TODO: color-mix(in srgb, var(--color-body), var(--color-hover)); */ + --color-active: #2a2e41; + --color-menu: #1f212b; + --color-card: #1f212b; + --color-markup-table-row: #e2447180; + --color-markup-code-block: #2a2e41; + --color-markup-code-inline: #384c78b3; + --color-milk-text: #abb1d3; + --color-button: #363b49; + --color-code-bg: #2a2e41; + --color-shadow: #6464ff4d; + --color-shadow-opaque: #6464ff4d; + --color-secondary-bg: #1f212b; + --color-expand-button: #384c78b3; + --color-placeholder-text: var(--color-green); + --color-editor-line-highlight: #32364d; + --color-project-column-bg: #6464ff1a; + --color-caret: var( + --color-text + ); /* should ideally be --color-text-dark, see #15651 */ + --color-reaction-bg: #1f212b; --color-reaction-hover-bg: var(--color-primary-light-4); --color-reaction-active-bg: var(--color-primary-light-5); - --color-tooltip-text: #f9fafb; - --color-tooltip-bg: #000b17f0; - --color-nav-bg: #16191d; - --color-nav-hover-bg: var(--color-secondary-light-1); + --color-tooltip-text: #50bda4; + --color-tooltip-bg: #1f212b; + --color-nav-bg: #2a2e41; + --color-nav-hover-bg: #363b49; --color-nav-text: var(--color-text); - --color-secondary-nav-bg: #181c20; - --color-label-text: var(--color-text); - --color-label-bg: #7282924b; - --color-label-hover-bg: #728292a0; - --color-label-active-bg: #728292ff; + --color-secondary-nav-bg: #1f212b; + --color-label-text: var(--color-nav-bg); + --color-label-bg: var(--color-primary); + --color-label-hover-bg: var(--color-primary-hover); + --color-label-active-bg: var(--color-primary-active); --color-accent: var(--color-primary-light-1); --color-small-accent: var(--color-primary-light-5); --color-highlight-fg: #87651e; - --color-highlight-bg: #352c1c; - --color-overlay-backdrop: #080808c0; + --color-highlight-bg: #1f212b; + --color-overlay-backdrop: #1f212b; accent-color: var(--color-accent); color-scheme: dark; } diff --git a/web_src/css/themes/theme-gitea-light.css b/web_src/css/themes/theme-gitea-light.css index eaff717417ff2..23d071f5b55a9 100644 --- a/web_src/css/themes/theme-gitea-light.css +++ b/web_src/css/themes/theme-gitea-light.css @@ -7,124 +7,133 @@ gitea-theme-meta-info { :root { --is-dark-theme: false; - --color-primary: #4183c4; - --color-primary-contrast: #ffffff; - --color-primary-dark-1: #3876b3; - --color-primary-dark-2: #31699f; - --color-primary-dark-3: #2b5c8b; - --color-primary-dark-4: #254f77; - --color-primary-dark-5: #193450; - --color-primary-dark-6: #0c1a28; - --color-primary-dark-7: #04080c; - --color-primary-light-1: #548fca; - --color-primary-light-2: #679cd0; - --color-primary-light-3: #7aa8d6; - --color-primary-light-4: #8db5dc; - --color-primary-light-5: #b3cde7; - --color-primary-light-6: #d9e6f3; - --color-primary-light-7: #f4f8fb; - --color-primary-alpha-10: #4183c419; - --color-primary-alpha-20: #4183c433; - --color-primary-alpha-30: #4183c44b; - --color-primary-alpha-40: #4183c466; - --color-primary-alpha-50: #4183c480; - --color-primary-alpha-60: #4183c499; - --color-primary-alpha-70: #4183c4b3; - --color-primary-alpha-80: #4183c4cc; - --color-primary-alpha-90: #4183c4e1; - --color-primary-hover: var(--color-primary-dark-1); - --color-primary-active: var(--color-primary-dark-2); - --color-secondary: #d0d7de; - --color-secondary-dark-1: #c7ced5; - --color-secondary-dark-2: #b9c0c7; - --color-secondary-dark-3: #99a0a7; - --color-secondary-dark-4: #899097; - --color-secondary-dark-5: #7a8188; - --color-secondary-dark-6: #6a7178; - --color-secondary-dark-7: #5b6269; - --color-secondary-dark-8: #4b5259; - --color-secondary-dark-9: #3c434a; - --color-secondary-dark-10: #2c333a; - --color-secondary-dark-11: #1d242b; - --color-secondary-dark-12: #0d141b; - --color-secondary-dark-13: #00040b; - --color-secondary-light-1: #dee5ec; - --color-secondary-light-2: #e4ebf2; - --color-secondary-light-3: #ebf2f9; - --color-secondary-light-4: #f1f8ff; - --color-secondary-alpha-10: #d0d7de19; - --color-secondary-alpha-20: #d0d7de33; - --color-secondary-alpha-30: #d0d7de4b; - --color-secondary-alpha-40: #d0d7de66; - --color-secondary-alpha-50: #d0d7de80; - --color-secondary-alpha-60: #d0d7de99; - --color-secondary-alpha-70: #d0d7deb3; - --color-secondary-alpha-80: #d0d7decc; - --color-secondary-alpha-90: #d0d7dee1; + --color-primary-2: #615fff; + --color-primary-2-hover: #4f39f6; + --color-primary-3: #615fff; + --color-primary-3-hover: #4f39f6; + --color-primary: #615fff; + --color-primary-contrast: #bcc3cb; + --color-primary-dark-1: #548fca; + --color-primary-dark-2: #679cd0; + --color-primary-dark-3: #7aa8d6; + --color-primary-dark-4: #8db5dc; + --color-primary-dark-5: #b3cde7; + --color-primary-dark-6: #d9e6f3; + --color-primary-dark-7: #f4f8fb; + --color-primary-light-1: #4f39f6; + --color-primary-light-2: #4f39f6; + --color-primary-light-3: #432dd7; + --color-primary-light-4: #372aac; + --color-primary-light-5: #312c85; + --color-primary-light-6: #1e1a4d; + --color-primary-light-7: #04080c; + --color-primary-external-legend-1: #4f39f6; + --color-primary-external-legend-2: #615fff; + --color-primary-external-legend-3: #7c86ff; + --color-primary-external-legend-4: #a3b3ff; + --color-primary-external-legend-5: #c6d2ff; + --color-primary-alpha-10: #1e1a4d; + --color-primary-alpha-20: #312c85; + --color-primary-alpha-30: #372aac; + --color-primary-alpha-40: #432dd7; + --color-primary-alpha-50: #4f39f6; + --color-primary-alpha-60: #615fff; + --color-primary-alpha-70: #7c86ff; + --color-primary-alpha-80: #a3b3ff; + --color-primary-alpha-90: #c6d2ff; + --color-primary-hover: var(--color-primary-light-1); + --color-primary-active: var(--color-primary-light-2); + --color-secondary: #c6c9e2; + --color-secondary-dark-1: #414b54; + --color-secondary-dark-2: #49545f; + --color-secondary-dark-3: #576471; + --color-secondary-dark-4: #677685; + --color-secondary-dark-5: #758594; + --color-secondary-dark-6: #8392a0; + --color-secondary-dark-7: #929eab; + --color-secondary-dark-8: #a2acb7; + --color-secondary-dark-9: #a9b3bd; + --color-secondary-dark-10: #b7bfc7; + --color-secondary-dark-11: #c5cbd2; + --color-secondary-dark-12: #cfd4da; + --color-secondary-dark-13: #d2d7dc; + --color-secondary-light-1: #313940; + --color-secondary-light-2: #292f35; + --color-secondary-light-3: #1d2226; + --color-secondary-light-4: #171b1e; + --color-secondary-alpha-10: #3b444c19; + --color-secondary-alpha-20: #c6c9e2; + --color-secondary-alpha-30: #3b444c4b; + --color-secondary-alpha-40: #d0d4ed; + --color-secondary-alpha-50: #3b444c80; + --color-secondary-alpha-60: #d5d9f3; + --color-secondary-alpha-70: #3b444cb3; + --color-secondary-alpha-80: #3b444ccc; + --color-secondary-alpha-90: #3b444ce1; --color-secondary-button: var(--color-secondary-dark-4); - --color-secondary-hover: var(--color-secondary-dark-5); - --color-secondary-active: var(--color-secondary-dark-6); + --color-secondary-hover: var(--color-secondary-dark-3); + --color-secondary-active: var(--color-secondary-dark-2); /* console colors - used for actions console and console files */ - --color-console-fg: #f7f8f9; + --color-console-fg: #abb1d3; --color-console-fg-subtle: #bdc4cc; - --color-console-bg: #171b1e; - --color-console-border: #2e353b; - --color-console-hover-bg: #272d33; - --color-console-active-bg: #2e353b; - --color-console-menu-bg: #262b31; - --color-console-menu-border: #414b55; + --color-console-bg: var(--color-nav-bg); + --color-console-border: var(--color-primary-2); + --color-console-hover-bg: #6464ff1a; + --color-console-active-bg: #6464ff1a; + --color-console-menu-bg: var(--color-nav-bg); + --color-console-menu-border: var(--color-primary-2); /* named colors */ - --color-red: #db2828; - --color-orange: #f2711c; - --color-yellow: #fbbd08; - --color-olive: #b5cc18; - --color-green: #21ba45; - --color-teal: #00b5ad; - --color-blue: #2185d0; - --color-violet: #6435c9; - --color-purple: #a333c8; - --color-pink: #e03997; - --color-brown: #a5673f; + --color-red: #e24471cc; /* #cc4848 */ + --color-orange: #cc580c; + --color-yellow: #cc9903; + --color-olive: #91a313; + --color-green: #50bda4; /* #73c280 */ + --color-teal: #00918a; + --color-blue: #3a8ac6; + --color-violet: #906ae1; + --color-purple: #b259d0; + --color-pink: #d22e8b; + --color-brown: #a47252; --color-black: #1d2328; - /* light variants - produced via Sass scale-color(color, $lightness: +25%) */ - --color-red-light: #e45e5e; - --color-orange-light: #f59555; - --color-yellow-light: #fcce46; - --color-olive-light: #d3e942; - --color-green-light: #46de6a; - --color-teal-light: #08fff4; - --color-blue-light: #51a5e3; - --color-violet-light: #8b67d7; - --color-purple-light: #bb64d8; - --color-pink-light: #e86bb1; - --color-brown-light: #c58b66; - --color-black-light: #4b5b68; + /* light variants - produced via Sass scale-color(color, $lightness: +10%) */ + --color-red-light: #e24471; /* #d15a5a */ + --color-orange-light: #f6a066; + --color-yellow-light: #eaaf03; + --color-olive-light: #abc016; + --color-green-light: #93b373; + --color-teal-light: #00b6ad; + --color-blue-light: #4e96cc; + --color-violet-light: #9b79e4; + --color-purple-light: #ba6ad5; + --color-pink-light: #d74397; + --color-brown-light: #b08061; + --color-black-light: #424851; /* dark 1 variants - produced via Sass scale-color(color, $lightness: -10%) */ - --color-red-dark-1: #c82121; - --color-orange-dark-1: #e6630d; - --color-yellow-dark-1: #e5ac04; - --color-olive-dark-1: #a3b816; - --color-green-dark-1: #1ea73e; - --color-teal-dark-1: #00a39c; - --color-blue-dark-1: #1e78bb; - --color-violet-dark-1: #5a30b5; - --color-purple-dark-1: #932eb4; - --color-pink-dark-1: #db228a; - --color-brown-dark-1: #955d39; - --color-black-dark-1: #2c3339; + --color-red-dark-1: #e24471; /* #c23636 */ + --color-orange-dark-1: #f38236; + --color-yellow-dark-1: #b88a03; + --color-olive-dark-1: #839311; + --color-green-dark-1: #7a9e55; + --color-teal-dark-1: #00837c; + --color-blue-dark-1: #347cb3; + --color-violet-dark-1: #7b4edb; + --color-purple-dark-1: #a742c9; + --color-pink-dark-1: #be297d; + --color-brown-dark-1: #94674a; + --color-black-dark-1: #292e38; /* dark 2 variants - produced via Sass scale-color(color, $lightness: -20%) */ - --color-red-dark-2: #b11e1e; - --color-orange-dark-2: #cc580c; - --color-yellow-dark-2: #cc9903; - --color-olive-dark-2: #91a313; - --color-green-dark-2: #1a9537; - --color-teal-dark-2: #00918a; - --color-blue-dark-2: #1a6aa6; - --color-violet-dark-2: #502aa1; - --color-purple-dark-2: #8229a0; - --color-pink-dark-2: #c21e7b; - --color-brown-dark-2: #845232; - --color-black-dark-2: #131619; + --color-red-dark-2: #e24471e6; /* #ad3030 */ + --color-orange-dark-2: #f16e17; + --color-yellow-dark-2: #a37a02; + --color-olive-dark-2: #74820f; + --color-green-dark-2: #6c8c4c; + --color-teal-dark-2: #00746e; + --color-blue-dark-2: #2e6e9f; + --color-violet-dark-2: #6733d6; + --color-purple-dark-2: #9834b9; + --color-pink-dark-2: #a9246f; + --color-brown-dark-2: #835b42; + --color-black-dark-2: #272930; /* ansi colors used for actions console and console files */ --color-ansi-black: #1e2327; --color-ansi-red: #cc4848; @@ -134,7 +143,7 @@ gitea-theme-meta-info { --color-ansi-magenta: #d22e8b; --color-ansi-cyan: #00918a; --color-ansi-white: var(--color-console-fg-subtle); - --color-ansi-bright-black: #46494d; + --color-ansi-bright-black: #424851; --color-ansi-bright-red: #d15a5a; --color-ansi-bright-green: #93b373; --color-ansi-bright-yellow: #eaaf03; @@ -143,35 +152,43 @@ gitea-theme-meta-info { --color-ansi-bright-cyan: #00b6ad; --color-ansi-bright-white: var(--color-console-fg); /* other colors */ - --color-grey: #697077; - --color-grey-light: #7c838a; - --color-gold: #a1882b; + --color-grey: #384149; + --color-grey-light: #818f9e; + --color-gold: #b1983b; --color-white: #ffffff; - --color-diff-added-linenum-bg: #d1f8d9; - --color-diff-added-row-bg: #e6ffed; - --color-diff-added-row-border: #e6ffed; - --color-diff-added-word-bg: #acf2bd; - --color-diff-moved-row-bg: #f1f8d1; - --color-diff-moved-row-border: #d0e27f; - --color-diff-removed-linenum-bg: #ffcecb; - --color-diff-removed-row-bg: #ffeef0; - --color-diff-removed-row-border: #f1c0c0; - --color-diff-removed-word-bg: #fdb8c0; - --color-diff-inactive: #f0f2f4; - --color-error-border: #e0b4b4; - --color-error-bg: #fff6f6; - --color-error-bg-active: #fbb; - --color-error-bg-hover: #fdd; - --color-error-text: #9f3a38; - --color-success-border: #a3c293; - --color-success-bg: #fcfff5; - --color-success-text: #2c662d; - --color-warning-border: #c9ba9b; - --color-warning-bg: #fffaf3; - --color-warning-text: #573a08; - --color-info-border: #a9d5de; - --color-info-bg: #f8ffff; - --color-info-text: #276f86; + --color-diff-added-linenum-bg: #759c91; + --color-diff-added-row-bg: #83a79d; + --color-diff-added-row-border: #506c64; + --color-diff-added-word-bg: #96b5ac; + --color-diff-moved-row-bg: #818044; + --color-diff-moved-row-border: #bcca6f; + --color-diff-removed-linenum-bg: #8e6b78; + --color-diff-removed-row-bg: #a4808d; + --color-diff-removed-row-border: #634343; + --color-diff-removed-word-bg: #b794a0; + --color-diff-inactive: #d5d9f3; + --color-error-border: var(--color-red); + --color-error-bg: #e244711a; + --color-error-bg-active: var(--color-red-dark-1); + --color-error-bg-hover: var(--color-red-dark-2); + --color-error-text: var(--color-red-light); + /* --color-error-border: #a04141; + --color-error-bg: #522; + --color-error-bg-active: #744; + --color-error-bg-hover: #633; + --color-error-text: #f9cbcb; */ + --color-success-border: #458a57; + --color-success-bg: #284034; + --color-success-text: #6cc664; + /* --color-success-border: #50bda4; + --color-success-bg: #50bda41a; + --color-success-text: #50bda4cc; */ + --color-warning-border: #bb9d00; + --color-warning-bg: #3a3a30; + --color-warning-text: #fbbd08; + --color-info-border: #306090; + --color-info-bg: #26354c; + --color-info-text: #38a8e8; --color-red-badge: #db2828; --color-red-badge-bg: #db28281a; --color-red-badge-hover-bg: #db28284d; @@ -187,62 +204,71 @@ gitea-theme-meta-info { --color-git: #f05133; --color-logo: #609926; /* target-based colors */ - --color-body: #ffffff; - --color-box-header: #f1f3f5; - --color-box-body: #ffffff; - --color-box-body-highlight: #ecf5fd; - --color-text-dark: #01050a; - --color-text: #181c21; - --color-text-light: #30363b; - --color-text-light-1: #40474d; - --color-text-light-2: #5b6167; - --color-text-light-3: #747c84; + --color-body: #e9edfd; + --color-box-header: #d5d9f3; + --color-box-body: #e9edfd; + --color-box-body-highlight: #abb1d3; + --color-text-dark: #25283a; + --color-text: #2c3752; + --color-text-light: #364363; + --color-text-light-1: #7b82a6; + --color-text-light-2: #3e4c70; + --color-text-light-3: #8d94bb; --color-footer: var(--color-nav-bg); - --color-timeline: #d0d7de; + --color-timeline: #343c44; --color-input-text: var(--color-text-dark); - --color-input-background: #fff; - --color-input-toggle-background: #d0d7de; + --color-input-background: #e9edfd; + --color-input-toggle-background: #d5d9f3; --color-input-border: var(--color-secondary); --color-input-border-hover: var(--color-secondary-dark-1); - --color-light: #00001706; - --color-light-mimic-enabled: rgba(0, 0, 0, calc(6 / 255 * 222 / 255 / var(--opacity-disabled))); - --color-light-border: #0000171d; - --color-hover: #00001708; - --color-hover-opaque: #f1f3f5; /* TODO: color-mix(in srgb, var(--color-body), var(--color-hover)); */ - --color-active: #00001714; - --color-menu: #f8f9fb; - --color-card: #f8f9fb; - --color-markup-table-row: #0030600a; - --color-markup-code-block: #00306010; - --color-markup-code-inline: #00306012; - --color-button: #f8f9fb; - --color-code-bg: #fafdff; - --color-shadow: #00001726; - --color-shadow-opaque: #c7ced5; - --color-secondary-bg: #f2f5f8; - --color-expand-button: #cfe8fa; - --color-placeholder-text: var(--color-text-light-3); - --color-editor-line-highlight: var(--color-primary-light-6); - --color-project-column-bg: var(--color-secondary-light-4); - --color-caret: var(--color-text-dark); - --color-reaction-bg: #0000170a; - --color-reaction-hover-bg: var(--color-primary-light-5); - --color-reaction-active-bg: var(--color-primary-light-6); - --color-tooltip-text: #fbfdff; - --color-tooltip-bg: #000017f0; - --color-nav-bg: #f6f7fa; - --color-nav-hover-bg: var(--color-secondary-light-1); + --color-light: #e2e6f6; + --color-hover-table: #d5d9f3; + --color-light-mimic-enabled: rgba( + 0, + 0, + 0, + calc(40 / 255 * 222 / 255 / var(--opacity-disabled)) + ); + --color-light-border: var(--color-primary); + --color-hover: #d5d9f3; + --color-hover-opaque: #d5d9f3; /* TODO: color-mix(in srgb, var(--color-body), var(--color-hover)); */ + --color-active: #d5d9f3; + --color-menu: #e9edfd; + --color-card: #e9edfd; + --color-markup-table-row: #e2447180; + --color-markup-code-block: #d5d9f3; + --color-markup-code-inline: #d5d9f3; + --color-milk-text: #abb1d3; + --color-button: #abb1d3; + --color-code-bg: #d5d9f3; + --color-shadow: #6464ff4d; + --color-shadow-opaque: #6464ff4d; + --color-secondary-bg: #e9edfd; + --color-expand-button: #6464ff1a; + --color-placeholder-text: var(--color-text-light-1); + --color-editor-line-highlight: #d0d4ee; + --color-project-column-bg: #6464ff1a; + --color-caret: var( + --color-text + ); /* should ideally be --color-text-dark, see #15651 */ + --color-reaction-bg: #e9edfd; + --color-reaction-hover-bg: var(--color-primary-light-4); + --color-reaction-active-bg: var(--color-primary-light-5); + --color-tooltip-text: var(--color-primary-alpha-20); + --color-tooltip-bg: #e9edfd; + --color-nav-bg: #d5d9f3; + --color-nav-hover-bg: #d5d9f3; --color-nav-text: var(--color-text); - --color-secondary-nav-bg: #f9fafb; - --color-label-text: var(--color-text); - --color-label-bg: #949da64b; - --color-label-hover-bg: #949da6a0; - --color-label-active-bg: #949da6ff; + --color-secondary-nav-bg: #e9edfd; + --color-label-text: var(--color-primary-alpha-20); + --color-label-bg: #c6d2ff; + --color-label-hover-bg: #a3b3ff; + --color-label-active-bg: #a3b3ff; --color-accent: var(--color-primary-light-1); - --color-small-accent: var(--color-primary-light-6); - --color-highlight-fg: #eed200; - --color-highlight-bg: #fffbdd; - --color-overlay-backdrop: #080808c0; + --color-small-accent: var(--color-primary-light-5); + --color-highlight-fg: #87651e; + --color-highlight-bg: #e9edfd; + --color-overlay-backdrop: #e9edfd; accent-color: var(--color-accent); color-scheme: light; } diff --git a/web_src/js/components/ActivityHeatmap.vue b/web_src/js/components/ActivityHeatmap.vue index 296cb61cff516..163e50f6d5891 100644 --- a/web_src/js/components/ActivityHeatmap.vue +++ b/web_src/js/components/ActivityHeatmap.vue @@ -17,11 +17,11 @@ defineProps<{ const colorRange = [ 'var(--color-secondary-alpha-60)', 'var(--color-secondary-alpha-60)', - 'var(--color-primary-light-4)', - 'var(--color-primary-light-2)', - 'var(--color-primary)', - 'var(--color-primary-dark-2)', - 'var(--color-primary-dark-4)', + 'var(--color-primary-external-legend-5)', + 'var(--color-primary-external-legend-4)', + 'var(--color-primary-external-legend-3)', + 'var(--color-primary-external-legend-2)', + 'var(--color-primary-external-legend-1)', ]; const endDate = shallowRef(new Date());