Merge commit '372a3dad83dbea80660a6aa702cad860927acb59' into v11.0/forgejo
Some checks are pending
/ release (push) Waiting to run
testing / backend-checks (push) Waiting to run
testing / frontend-checks (push) Waiting to run
testing / test-unit (push) Blocked by required conditions
testing / test-e2e (push) Blocked by required conditions
testing / test-remote-cacher (redis) (push) Blocked by required conditions
testing / test-remote-cacher (valkey) (push) Blocked by required conditions
testing / test-remote-cacher (garnet) (push) Blocked by required conditions
testing / test-remote-cacher (redict) (push) Blocked by required conditions
testing / test-mysql (push) Blocked by required conditions
testing / test-pgsql (push) Blocked by required conditions
testing / test-sqlite (push) Blocked by required conditions
testing / security-check (push) Blocked by required conditions
Some checks are pending
/ release (push) Waiting to run
testing / backend-checks (push) Waiting to run
testing / frontend-checks (push) Waiting to run
testing / test-unit (push) Blocked by required conditions
testing / test-e2e (push) Blocked by required conditions
testing / test-remote-cacher (redis) (push) Blocked by required conditions
testing / test-remote-cacher (valkey) (push) Blocked by required conditions
testing / test-remote-cacher (garnet) (push) Blocked by required conditions
testing / test-remote-cacher (redict) (push) Blocked by required conditions
testing / test-mysql (push) Blocked by required conditions
testing / test-pgsql (push) Blocked by required conditions
testing / test-sqlite (push) Blocked by required conditions
testing / security-check (push) Blocked by required conditions
This commit is contained in:
commit
b26c24e45c
11 changed files with 713 additions and 100 deletions
|
@ -21,11 +21,6 @@ Our promise: **Independent Free/Libre Software forever!**
|
||||||
|
|
||||||
## What does Forgejo offer?
|
## What does Forgejo offer?
|
||||||
|
|
||||||
<!-- If you want to know what Forgejo is like,
|
|
||||||
you can check out public instances,
|
|
||||||
e.g. [Codeberg.org](https://codeberg.org).
|
|
||||||
-->
|
|
||||||
|
|
||||||
If you like any of the following, Forgejo is literally meant for you:
|
If you like any of the following, Forgejo is literally meant for you:
|
||||||
|
|
||||||
- Lightweight: Forgejo can easily be hosted on nearly **every machine**.
|
- Lightweight: Forgejo can easily be hosted on nearly **every machine**.
|
||||||
|
|
|
@ -26,8 +26,6 @@ import (
|
||||||
// this works by first gathering all valid source string IDs from `en-US` reference files
|
// this works by first gathering all valid source string IDs from `en-US` reference files
|
||||||
// and then checking if all used source strings are actually defined
|
// and then checking if all used source strings are actually defined
|
||||||
|
|
||||||
type OnMsgidHandler func(fset *token.FileSet, pos token.Pos, msgid string)
|
|
||||||
|
|
||||||
type LocatedError struct {
|
type LocatedError struct {
|
||||||
Location string
|
Location string
|
||||||
Kind string
|
Kind string
|
||||||
|
@ -49,8 +47,24 @@ func (e LocatedError) Error() string {
|
||||||
return sb.String()
|
return sb.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
func isLocaleTrFunction(funcname string) bool {
|
func InitLocaleTrFunctions() map[string][]uint {
|
||||||
return funcname == "Tr" || funcname == "TrN"
|
ret := make(map[string][]uint)
|
||||||
|
|
||||||
|
f0 := []uint{0}
|
||||||
|
ret["Tr"] = f0
|
||||||
|
ret["TrString"] = f0
|
||||||
|
ret["TrHTML"] = f0
|
||||||
|
|
||||||
|
ret["TrPluralString"] = []uint{1}
|
||||||
|
ret["TrN"] = []uint{1, 2}
|
||||||
|
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
type Handler struct {
|
||||||
|
OnMsgid func(fset *token.FileSet, pos token.Pos, msgid string)
|
||||||
|
OnUnexpectedInvoke func(fset *token.FileSet, pos token.Pos, funcname string, argc int)
|
||||||
|
LocaleTrFunctions map[string][]uint
|
||||||
}
|
}
|
||||||
|
|
||||||
// the `Handle*File` functions follow the following calling convention:
|
// the `Handle*File` functions follow the following calling convention:
|
||||||
|
@ -58,7 +72,7 @@ func isLocaleTrFunction(funcname string) bool {
|
||||||
// * `src` is either `nil` (then the function invokes `ReadFile` to read the file)
|
// * `src` is either `nil` (then the function invokes `ReadFile` to read the file)
|
||||||
// or the contents of the file as {`[]byte`, or a `string`}
|
// or the contents of the file as {`[]byte`, or a `string`}
|
||||||
|
|
||||||
func (omh OnMsgidHandler) HandleGoFile(fname string, src any) error {
|
func (handler Handler) HandleGoFile(fname string, src any) error {
|
||||||
fset := token.NewFileSet()
|
fset := token.NewFileSet()
|
||||||
node, err := goParser.ParseFile(fset, fname, src, goParser.SkipObjectResolution)
|
node, err := goParser.ParseFile(fset, fname, src, goParser.SkipObjectResolution)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -70,31 +84,47 @@ func (omh OnMsgidHandler) HandleGoFile(fname string, src any) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
ast.Inspect(node, func(n ast.Node) bool {
|
ast.Inspect(node, func(n ast.Node) bool {
|
||||||
// search for function calls of the form `anything.Tr(any-string-lit)`
|
// search for function calls of the form `anything.Tr(any-string-lit, ...)`
|
||||||
|
|
||||||
call, ok := n.(*ast.CallExpr)
|
call, ok := n.(*ast.CallExpr)
|
||||||
if !ok || len(call.Args) != 1 {
|
if !ok || len(call.Args) < 1 {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
funSel, ok := call.Fun.(*ast.SelectorExpr)
|
funSel, ok := call.Fun.(*ast.SelectorExpr)
|
||||||
if (!ok) || !isLocaleTrFunction(funSel.Sel.Name) {
|
if !ok {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
argLit, ok := call.Args[0].(*ast.BasicLit)
|
ltf, ok := handler.LocaleTrFunctions[funSel.Sel.Name]
|
||||||
if (!ok) || argLit.Kind != token.STRING {
|
if !ok {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
// extract string content
|
var gotUnexpectedInvoke *int
|
||||||
arg, err := strconv.Unquote(argLit.Value)
|
|
||||||
if err != nil {
|
for _, argNum := range ltf {
|
||||||
return true
|
if len(call.Args) >= int(argNum+1) {
|
||||||
|
argLit, ok := call.Args[int(argNum)].(*ast.BasicLit)
|
||||||
|
if !ok || argLit.Kind != token.STRING {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// extract string content
|
||||||
|
arg, err := strconv.Unquote(argLit.Value)
|
||||||
|
if err == nil {
|
||||||
|
// found interesting strings
|
||||||
|
handler.OnMsgid(fset, argLit.ValuePos, arg)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
argc := len(call.Args)
|
||||||
|
gotUnexpectedInvoke = &argc
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// found interesting string
|
if gotUnexpectedInvoke != nil {
|
||||||
omh(fset, argLit.ValuePos, arg)
|
handler.OnUnexpectedInvoke(fset, funSel.Sel.NamePos, funSel.Sel.Name, *gotUnexpectedInvoke)
|
||||||
|
}
|
||||||
|
|
||||||
return true
|
return true
|
||||||
})
|
})
|
||||||
|
@ -103,33 +133,33 @@ func (omh OnMsgidHandler) HandleGoFile(fname string, src any) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// derived from source: modules/templates/scopedtmpl/scopedtmpl.go, L169-L213
|
// derived from source: modules/templates/scopedtmpl/scopedtmpl.go, L169-L213
|
||||||
func (omh OnMsgidHandler) handleTemplateNode(fset *token.FileSet, node tmplParser.Node) {
|
func (handler Handler) handleTemplateNode(fset *token.FileSet, node tmplParser.Node) {
|
||||||
switch node.Type() {
|
switch node.Type() {
|
||||||
case tmplParser.NodeAction:
|
case tmplParser.NodeAction:
|
||||||
omh.handleTemplatePipeNode(fset, node.(*tmplParser.ActionNode).Pipe)
|
handler.handleTemplatePipeNode(fset, node.(*tmplParser.ActionNode).Pipe)
|
||||||
case tmplParser.NodeList:
|
case tmplParser.NodeList:
|
||||||
nodeList := node.(*tmplParser.ListNode)
|
nodeList := node.(*tmplParser.ListNode)
|
||||||
omh.handleTemplateFileNodes(fset, nodeList.Nodes)
|
handler.handleTemplateFileNodes(fset, nodeList.Nodes)
|
||||||
case tmplParser.NodePipe:
|
case tmplParser.NodePipe:
|
||||||
omh.handleTemplatePipeNode(fset, node.(*tmplParser.PipeNode))
|
handler.handleTemplatePipeNode(fset, node.(*tmplParser.PipeNode))
|
||||||
case tmplParser.NodeTemplate:
|
case tmplParser.NodeTemplate:
|
||||||
omh.handleTemplatePipeNode(fset, node.(*tmplParser.TemplateNode).Pipe)
|
handler.handleTemplatePipeNode(fset, node.(*tmplParser.TemplateNode).Pipe)
|
||||||
case tmplParser.NodeIf:
|
case tmplParser.NodeIf:
|
||||||
nodeIf := node.(*tmplParser.IfNode)
|
nodeIf := node.(*tmplParser.IfNode)
|
||||||
omh.handleTemplateBranchNode(fset, nodeIf.BranchNode)
|
handler.handleTemplateBranchNode(fset, nodeIf.BranchNode)
|
||||||
case tmplParser.NodeRange:
|
case tmplParser.NodeRange:
|
||||||
nodeRange := node.(*tmplParser.RangeNode)
|
nodeRange := node.(*tmplParser.RangeNode)
|
||||||
omh.handleTemplateBranchNode(fset, nodeRange.BranchNode)
|
handler.handleTemplateBranchNode(fset, nodeRange.BranchNode)
|
||||||
case tmplParser.NodeWith:
|
case tmplParser.NodeWith:
|
||||||
nodeWith := node.(*tmplParser.WithNode)
|
nodeWith := node.(*tmplParser.WithNode)
|
||||||
omh.handleTemplateBranchNode(fset, nodeWith.BranchNode)
|
handler.handleTemplateBranchNode(fset, nodeWith.BranchNode)
|
||||||
|
|
||||||
case tmplParser.NodeCommand:
|
case tmplParser.NodeCommand:
|
||||||
nodeCommand := node.(*tmplParser.CommandNode)
|
nodeCommand := node.(*tmplParser.CommandNode)
|
||||||
|
|
||||||
omh.handleTemplateFileNodes(fset, nodeCommand.Args)
|
handler.handleTemplateFileNodes(fset, nodeCommand.Args)
|
||||||
|
|
||||||
if len(nodeCommand.Args) != 2 {
|
if len(nodeCommand.Args) < 2 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,54 +168,66 @@ func (omh OnMsgidHandler) handleTemplateNode(fset *token.FileSet, node tmplParse
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
nodeString, ok := nodeCommand.Args[1].(*tmplParser.StringNode)
|
nodeIdent, ok := nodeChain.Node.(*tmplParser.IdentifierNode)
|
||||||
|
if !ok || nodeIdent.Ident != "ctx" || len(nodeChain.Field) != 2 || nodeChain.Field[0] != "Locale" {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
ltf, ok := handler.LocaleTrFunctions[nodeChain.Field[1]]
|
||||||
if !ok {
|
if !ok {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
nodeIdent, ok := nodeChain.Node.(*tmplParser.IdentifierNode)
|
var gotUnexpectedInvoke *int
|
||||||
if !ok || nodeIdent.Ident != "ctx" {
|
|
||||||
return
|
for _, argNum := range ltf {
|
||||||
|
if len(nodeCommand.Args) >= int(argNum+2) {
|
||||||
|
nodeString, ok := nodeCommand.Args[int(argNum+1)].(*tmplParser.StringNode)
|
||||||
|
if ok {
|
||||||
|
// found interesting strings
|
||||||
|
// the column numbers are a bit "off", but much better than nothing
|
||||||
|
handler.OnMsgid(fset, token.Pos(nodeString.Pos), nodeString.Text)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
argc := len(nodeCommand.Args) - 1
|
||||||
|
gotUnexpectedInvoke = &argc
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(nodeChain.Field) != 2 || nodeChain.Field[0] != "Locale" || !isLocaleTrFunction(nodeChain.Field[1]) {
|
if gotUnexpectedInvoke != nil {
|
||||||
return
|
handler.OnUnexpectedInvoke(fset, token.Pos(nodeChain.Pos), nodeChain.Field[1], *gotUnexpectedInvoke)
|
||||||
}
|
}
|
||||||
|
|
||||||
// found interesting string
|
|
||||||
// the column numbers are a bit "off", but much better than nothing
|
|
||||||
omh(fset, token.Pos(nodeString.Pos), nodeString.Text)
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (omh OnMsgidHandler) handleTemplatePipeNode(fset *token.FileSet, pipeNode *tmplParser.PipeNode) {
|
func (handler Handler) handleTemplatePipeNode(fset *token.FileSet, pipeNode *tmplParser.PipeNode) {
|
||||||
if pipeNode == nil {
|
if pipeNode == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE: we can't pass `pipeNode.Cmds` to handleTemplateFileNodes due to incompatible argument types
|
// NOTE: we can't pass `pipeNode.Cmds` to handleTemplateFileNodes due to incompatible argument types
|
||||||
for _, node := range pipeNode.Cmds {
|
for _, node := range pipeNode.Cmds {
|
||||||
omh.handleTemplateNode(fset, node)
|
handler.handleTemplateNode(fset, node)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (omh OnMsgidHandler) handleTemplateBranchNode(fset *token.FileSet, branchNode tmplParser.BranchNode) {
|
func (handler Handler) handleTemplateBranchNode(fset *token.FileSet, branchNode tmplParser.BranchNode) {
|
||||||
omh.handleTemplatePipeNode(fset, branchNode.Pipe)
|
handler.handleTemplatePipeNode(fset, branchNode.Pipe)
|
||||||
omh.handleTemplateFileNodes(fset, branchNode.List.Nodes)
|
handler.handleTemplateFileNodes(fset, branchNode.List.Nodes)
|
||||||
if branchNode.ElseList != nil {
|
if branchNode.ElseList != nil {
|
||||||
omh.handleTemplateFileNodes(fset, branchNode.ElseList.Nodes)
|
handler.handleTemplateFileNodes(fset, branchNode.ElseList.Nodes)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (omh OnMsgidHandler) handleTemplateFileNodes(fset *token.FileSet, nodes []tmplParser.Node) {
|
func (handler Handler) handleTemplateFileNodes(fset *token.FileSet, nodes []tmplParser.Node) {
|
||||||
for _, node := range nodes {
|
for _, node := range nodes {
|
||||||
omh.handleTemplateNode(fset, node)
|
handler.handleTemplateNode(fset, node)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (omh OnMsgidHandler) HandleTemplateFile(fname string, src any) error {
|
func (handler Handler) HandleTemplateFile(fname string, src any) error {
|
||||||
var tmplContent []byte
|
var tmplContent []byte
|
||||||
switch src2 := src.(type) {
|
switch src2 := src.(type) {
|
||||||
case nil:
|
case nil:
|
||||||
|
@ -222,7 +264,7 @@ func (omh OnMsgidHandler) HandleTemplateFile(fname string, src any) error {
|
||||||
Err: err,
|
Err: err,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
omh.handleTemplateFileNodes(fset, tmplParsed.Tree.Root.Nodes)
|
handler.handleTemplateFileNodes(fset, tmplParsed.Tree.Root.Nodes)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -289,12 +331,19 @@ func main() {
|
||||||
|
|
||||||
gotAnyMsgidError := false
|
gotAnyMsgidError := false
|
||||||
|
|
||||||
omh := OnMsgidHandler(func(fset *token.FileSet, pos token.Pos, msgid string) {
|
handler := Handler{
|
||||||
if !msgids.Contains(msgid) {
|
OnMsgid: func(fset *token.FileSet, pos token.Pos, msgid string) {
|
||||||
|
if !msgids.Contains(msgid) {
|
||||||
|
gotAnyMsgidError = true
|
||||||
|
fmt.Printf("%s:\tmissing msgid: %s\n", fset.Position(pos).String(), msgid)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
OnUnexpectedInvoke: func(fset *token.FileSet, pos token.Pos, funcname string, argc int) {
|
||||||
gotAnyMsgidError = true
|
gotAnyMsgidError = true
|
||||||
fmt.Printf("%s:\tmissing msgid: %s\n", fset.Position(pos).String(), msgid)
|
fmt.Printf("%s:\tunexpected invocation of %s with %d arguments\n", fset.Position(pos).String(), funcname, argc)
|
||||||
}
|
},
|
||||||
})
|
LocaleTrFunctions: InitLocaleTrFunctions(),
|
||||||
|
}
|
||||||
|
|
||||||
if err := filepath.WalkDir(".", func(fpath string, d fs.DirEntry, err error) error {
|
if err := filepath.WalkDir(".", func(fpath string, d fs.DirEntry, err error) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -308,15 +357,15 @@ func main() {
|
||||||
if name == "docker" || name == ".git" || name == "node_modules" {
|
if name == "docker" || name == ".git" || name == "node_modules" {
|
||||||
return fs.SkipDir
|
return fs.SkipDir
|
||||||
}
|
}
|
||||||
} else if name == "bindata.go" {
|
} else if name == "bindata.go" || fpath == "modules/translation/i18n/i18n_test.go" {
|
||||||
// skip false positives
|
// skip false positives
|
||||||
} else if strings.HasSuffix(name, ".go") {
|
} else if strings.HasSuffix(name, ".go") {
|
||||||
onError(omh.HandleGoFile(fpath, nil))
|
onError(handler.HandleGoFile(fpath, nil))
|
||||||
} else if strings.HasSuffix(name, ".tmpl") {
|
} else if strings.HasSuffix(name, ".tmpl") {
|
||||||
if strings.HasPrefix(fpath, "tests") && strings.HasSuffix(name, ".ini.tmpl") {
|
if strings.HasPrefix(fpath, "tests") && strings.HasSuffix(name, ".ini.tmpl") {
|
||||||
// skip false positives
|
// skip false positives
|
||||||
} else {
|
} else {
|
||||||
onError(omh.HandleTemplateFile(fpath, nil))
|
onError(handler.HandleTemplateFile(fpath, nil))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -11,21 +11,27 @@ import (
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func buildHandler(ret *[]string) Handler {
|
||||||
|
return Handler{
|
||||||
|
OnMsgid: func(fset *token.FileSet, pos token.Pos, msgid string) {
|
||||||
|
*ret = append(*ret, msgid)
|
||||||
|
},
|
||||||
|
OnUnexpectedInvoke: func(fset *token.FileSet, pos token.Pos, funcname string, argc int) {},
|
||||||
|
LocaleTrFunctions: InitLocaleTrFunctions(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func HandleGoFileWrapped(t *testing.T, fname, src string) []string {
|
func HandleGoFileWrapped(t *testing.T, fname, src string) []string {
|
||||||
var ret []string
|
var ret []string
|
||||||
omh := OnMsgidHandler(func(fset *token.FileSet, pos token.Pos, msgid string) {
|
handler := buildHandler(&ret)
|
||||||
ret = append(ret, msgid)
|
require.NoError(t, handler.HandleGoFile(fname, src))
|
||||||
})
|
|
||||||
require.NoError(t, omh.HandleGoFile(fname, src))
|
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
func HandleTemplateFileWrapped(t *testing.T, fname, src string) []string {
|
func HandleTemplateFileWrapped(t *testing.T, fname, src string) []string {
|
||||||
var ret []string
|
var ret []string
|
||||||
omh := OnMsgidHandler(func(fset *token.FileSet, pos token.Pos, msgid string) {
|
handler := buildHandler(&ret)
|
||||||
ret = append(ret, msgid)
|
require.NoError(t, handler.HandleTemplateFile(fname, src))
|
||||||
})
|
|
||||||
require.NoError(t, omh.HandleTemplateFile(fname, src))
|
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,10 @@ type contextKey struct{}
|
||||||
var ContextKey any = &contextKey{}
|
var ContextKey any = &contextKey{}
|
||||||
|
|
||||||
// Locale represents an interface to translation
|
// Locale represents an interface to translation
|
||||||
|
//
|
||||||
|
// If this gets modified, remember to also adjust
|
||||||
|
// build/lint-locale-usage/lint-locale-usage.go's InitLocaleTrFunctions(),
|
||||||
|
// which requires to know in what argument positions `trKey`'s are given.
|
||||||
type Locale interface {
|
type Locale interface {
|
||||||
Language() string
|
Language() string
|
||||||
TrString(string, ...any) string
|
TrString(string, ...any) string
|
||||||
|
|
|
@ -158,7 +158,7 @@ exact_tooltip = Medtag kun resultater, der matcher den nøjagtige søgeterm
|
||||||
regexp = RegExp
|
regexp = RegExp
|
||||||
regexp_tooltip = Fortolk søgetermen som et regulært udtryk
|
regexp_tooltip = Fortolk søgetermen som et regulært udtryk
|
||||||
org_kind = Søg i organisationer…
|
org_kind = Søg i organisationer…
|
||||||
team_kind = Søg efter hold…
|
team_kind = Søg efter teams…
|
||||||
code_kind = Søg kode…
|
code_kind = Søg kode…
|
||||||
code_search_by_git_grep = Aktuelle kodesøgeresultater leveres af "git grep". Der kan være bedre resultater, hvis webstedsadministratoren aktiverer kodeindeksering.
|
code_search_by_git_grep = Aktuelle kodesøgeresultater leveres af "git grep". Der kan være bedre resultater, hvis webstedsadministratoren aktiverer kodeindeksering.
|
||||||
package_kind = Søg pakker…
|
package_kind = Søg pakker…
|
||||||
|
@ -186,7 +186,7 @@ number_of_contributions_in_the_last_12_months = %s bidrag inden for de sidste 12
|
||||||
contributions_zero = Ingen bidrag
|
contributions_zero = Ingen bidrag
|
||||||
contributions_format = {contributions} på {month} {day}, {year}
|
contributions_format = {contributions} på {month} {day}, {year}
|
||||||
contributions_one = bidrag
|
contributions_one = bidrag
|
||||||
contributions_few = bidragene
|
contributions_few = bidrag
|
||||||
less = Mindre
|
less = Mindre
|
||||||
more = Mere
|
more = Mere
|
||||||
|
|
||||||
|
@ -200,7 +200,7 @@ buttons.link.tooltip = Tilføj et link
|
||||||
buttons.list.unordered.tooltip = Tilføj en punktliste
|
buttons.list.unordered.tooltip = Tilføj en punktliste
|
||||||
buttons.list.task.tooltip = Tilføj en liste over opgaver
|
buttons.list.task.tooltip = Tilføj en liste over opgaver
|
||||||
buttons.list.ordered.tooltip = Tilføj en nummereret liste
|
buttons.list.ordered.tooltip = Tilføj en nummereret liste
|
||||||
buttons.mention.tooltip = Nævn en bruger eller et hold
|
buttons.mention.tooltip = Nævn en bruger eller et team
|
||||||
buttons.ref.tooltip = Henvis til et problem eller pull-anmodning
|
buttons.ref.tooltip = Henvis til et problem eller pull-anmodning
|
||||||
buttons.enable_monospace_font = Aktiver monospace-skrifttype
|
buttons.enable_monospace_font = Aktiver monospace-skrifttype
|
||||||
buttons.disable_monospace_font = Deaktiver monospace-skrifttype
|
buttons.disable_monospace_font = Deaktiver monospace-skrifttype
|
||||||
|
@ -363,7 +363,7 @@ my_repos = Depoter
|
||||||
my_orgs = Organisationer
|
my_orgs = Organisationer
|
||||||
view_home = Se %s
|
view_home = Se %s
|
||||||
filter = Andre filtre
|
filter = Andre filtre
|
||||||
filter_by_team_repositories = Filtrer efter holddepoter
|
filter_by_team_repositories = Filtrer efter team depoter
|
||||||
feed_of = Feed af "%s"
|
feed_of = Feed af "%s"
|
||||||
show_archived = Arkiveret
|
show_archived = Arkiveret
|
||||||
show_both_archived_unarchived = Viser både arkiveret og ikke-arkiveret
|
show_both_archived_unarchived = Viser både arkiveret og ikke-arkiveret
|
||||||
|
@ -530,7 +530,7 @@ repo.collaborator.added.subject = %s føjede dig til %s som samarbejdspartner
|
||||||
repo.collaborator.added.text = Du er blevet tilføjet som samarbejdspartner til depotet:
|
repo.collaborator.added.text = Du er blevet tilføjet som samarbejdspartner til depotet:
|
||||||
team_invite.subject = %[1]s har inviteret dig til at deltage i %[2]s organisationen
|
team_invite.subject = %[1]s har inviteret dig til at deltage i %[2]s organisationen
|
||||||
team_invite.text_1 = %[1]s har inviteret dig til at deltage i teamet %[2]s i organisationen %[3]s.
|
team_invite.text_1 = %[1]s har inviteret dig til at deltage i teamet %[2]s i organisationen %[3]s.
|
||||||
team_invite.text_2 = Klik venligst på følgende link for at blive medlem af holdet:
|
team_invite.text_2 = Klik venligst på følgende link for at blive medlem af teamet:
|
||||||
team_invite.text_3 = Note: Denne invitation var beregnet til %[1]s. Hvis du ikke forventede denne invitation, kan du ignorere denne e-mail.
|
team_invite.text_3 = Note: Denne invitation var beregnet til %[1]s. Hvis du ikke forventede denne invitation, kan du ignorere denne e-mail.
|
||||||
|
|
||||||
[modal]
|
[modal]
|
||||||
|
@ -553,7 +553,7 @@ Email = E-mailadresse
|
||||||
Password = Adgangskode
|
Password = Adgangskode
|
||||||
Retype = Bekræft adgangskode
|
Retype = Bekræft adgangskode
|
||||||
PayloadUrl = Payload URL
|
PayloadUrl = Payload URL
|
||||||
TeamName = Holdnavn
|
TeamName = Team navn
|
||||||
AuthName = Autorisationsnavn
|
AuthName = Autorisationsnavn
|
||||||
AdminEmail = Admin email
|
AdminEmail = Admin email
|
||||||
To = Gren navn
|
To = Gren navn
|
||||||
|
@ -2525,10 +2525,216 @@ settings.ignore_stale_approvals_desc = Tæl ikke godkendelser, der er foretaget
|
||||||
settings.require_signed_commits = Kræv underskrevne commits
|
settings.require_signed_commits = Kræv underskrevne commits
|
||||||
settings.remove_protected_branch_success = Grenbeskyttelse for reglen "%s" er blevet fjernet.
|
settings.remove_protected_branch_success = Grenbeskyttelse for reglen "%s" er blevet fjernet.
|
||||||
settings.enforce_on_admins = Håndhæv denne regel for depotadministratorer
|
settings.enforce_on_admins = Håndhæv denne regel for depotadministratorer
|
||||||
|
settings.matrix.homeserver_url = Hjemmeserver URL
|
||||||
|
settings.matrix.room_id = Rum ID
|
||||||
|
branch.branch_name_conflict = Gren navn "%s" er i konflikt med den allerede eksisterende gren "%s".
|
||||||
|
release.tag_name_protected = Tagnavnet er beskyttet.
|
||||||
|
branch.name = Gren navn
|
||||||
|
settings.archive.error = Der opstod en fejl under forsøg på at arkivere depotet. Se loggen for flere detaljer.
|
||||||
|
settings.archive.error_ismirror = Du kan ikke arkivere et spejlet depot.
|
||||||
|
settings.unarchive.button = Fjern arkivering af depot
|
||||||
|
settings.unarchive.header = Fjern arkivering af dette depot
|
||||||
|
settings.lfs = LFS
|
||||||
|
settings.lfs_filelist = LFS-filer gemt i dette depot
|
||||||
|
settings.lfs_no_lfs_files = Ingen LFS-filer gemt i dette depot
|
||||||
|
settings.lfs_locks = Låse
|
||||||
|
settings.lfs_findcommits = Find commits
|
||||||
|
settings.lfs_lfs_file_no_commits = Ingen commits fundet for denne LFS-fil
|
||||||
|
settings.lfs_noattribute = Denne sti har ikke den låsbare attribut i standardgrenen
|
||||||
|
settings.lfs_delete = Slet LFS-fil med OID %s
|
||||||
|
settings.lfs_delete_warning = Sletning af en LFS-fil kan forårsage "objekt findes ikke"-fejl ved checkout. Er du sikker?
|
||||||
|
settings.lfs_findpointerfiles = Find pointer-filer
|
||||||
|
diff.download_patch = Download patch-fil
|
||||||
|
diff.whitespace_ignore_at_eol = Ignorer ændringer i blanke mellemrum på EOL
|
||||||
|
diff.stats_desc = <strong> %d ændrede filer</strong> med <strong>%d tilføjelser</strong> og <strong>%d sletninger</strong>
|
||||||
|
diff.stats_desc_file = %d ændringer: %d tilføjelser og %d sletninger
|
||||||
|
diff.bin = BIN
|
||||||
|
diff.file_suppressed = Filforskellen er undertrykt, fordi den er for stor
|
||||||
|
diff.generated = genereret
|
||||||
|
diff.vendored = forhandlet
|
||||||
|
diff.comment.add_line_comment = Tilføj linjekommentar
|
||||||
|
diff.comment.placeholder = Efterlad en kommentar
|
||||||
|
diff.comment.markdown_info = Styling med Markdown understøttes.
|
||||||
|
diff.comment.add_single_comment = Tilføj en enkelt kommentar
|
||||||
|
diff.comment.add_review_comment = Tilføj kommentar
|
||||||
|
diff.has_escaped = Denne linje har skjulte Unicode-tegn
|
||||||
|
release.tag_name = Tag navn
|
||||||
|
release.tag_helper_new = Nyt tag. Dette tag vil blive oprettet fra målet.
|
||||||
|
release.deletion_tag_desc = Vil slette dette tag fra depotet. Depotindhold og -historik forbliver uændret. Vil du fortsætte?
|
||||||
|
release.tag_already_exist = Dette tagnavn findes allerede.
|
||||||
|
release.add_tag_msg = Brug udgivelsens titel og indhold som tagmeddelelse.
|
||||||
|
release.tags_for = Tags for %s
|
||||||
|
release.asset_external_url = Ekstern URL
|
||||||
|
release.add_external_asset = Tilføj eksternt aktiv
|
||||||
|
branch.already_exists = En gren med navnet "%s" eksisterer allerede.
|
||||||
|
branch.tag_collision = Gren "%s" kan ikke oprettes, da et tag med samme navn allerede eksisterer i depotet.
|
||||||
|
releases.desc = Spor projektversioner og downloads.
|
||||||
|
release.detail = Udgivelsesdetaljer
|
||||||
|
release.tags = Tags
|
||||||
|
release.new_release = Ny udgivelse
|
||||||
|
release.stable = Stabil
|
||||||
|
release.compare = Sammenlign
|
||||||
|
release.deletion_desc = Sletning af en udgivelse fjerner den kun fra Forgejo. Det vil ikke påvirke Git-tagget, indholdet af dit depot eller dets historie. Vil du fortsætte?
|
||||||
|
release.deletion_tag_success = Tagget er blevet slettet.
|
||||||
|
release.tag_name_already_exist = Der findes allerede en udgivelse med dette tagnavn.
|
||||||
|
release.tag_name_invalid = Tagnavnet er ikke gyldigt.
|
||||||
|
release.downloads = Downloads
|
||||||
|
release.system_generated = Denne vedhæftede fil genereres automatisk.
|
||||||
|
release.invalid_external_url = Ugyldig ekstern URL: "%s"
|
||||||
|
branch.deleted_by = Slettet af %s
|
||||||
|
diff.comment.start_review = Start anmeldelse
|
||||||
|
diff.comment.reply = Svar
|
||||||
|
diff.review.comment = Kommentar
|
||||||
|
diff.review.approve = Godkend
|
||||||
|
diff.review.self_reject = Forfattere af pull-anmodninger kan ikke anmode om ændringer på deres egen pull-anmodning
|
||||||
|
diff.review.reject = Anmod om ændringer
|
||||||
|
diff.review.self_approve = Forfattere af pull-anmodninger kan ikke godkende deres egen pull-anmodning
|
||||||
|
diff.committed_by = committed af
|
||||||
|
diff.protected = Beskyttet
|
||||||
|
diff.image.side_by_side = Side om side
|
||||||
|
diff.image.swipe = Swipe
|
||||||
|
diff.image.overlay = Overlejring
|
||||||
|
release.prerelease = Forhåndsudgivelse
|
||||||
|
settings.tags.protection.allowed.teams = Tilladte hold
|
||||||
|
settings.tags.protection.create = Tilføj regel
|
||||||
|
settings.tags.protection.none = Der er ingen beskyttede tags.
|
||||||
|
settings.tags.protection.pattern.description = Du kan bruge et enkelt navn eller et globmønster eller regulært udtryk til at matche flere tags. Læs mere i <a target="_blank" rel="noopener" href="%s">guiden til beskyttede tags</a>.
|
||||||
|
settings.thread_id = Thread ID
|
||||||
|
settings.matrix.message_type = Meddelelsestype
|
||||||
|
settings.matrix.access_token_helper = Det anbefales at opsætte en dedikeret Matrix-konto til dette. Adgangstokenet kan hentes fra Element-webklienten (i en privat/inkognito-fane) > Brugermenu (øverst til venstre) > Alle indstillinger > Hjælp og om > Avanceret > Adgangstoken (lige under hjemmeserverens URL). Luk privat-/inkognitofanen (logging ud ville ugyldiggøre tokenet).
|
||||||
|
settings.lfs_invalid_locking_path = Ugyldig sti: %s
|
||||||
|
settings.lfs_invalid_lock_directory = Kan ikke låse mappe: %s
|
||||||
|
diff.options_button = Diff muligheder
|
||||||
|
release.hide_archive_links = Skjul automatisk genererede arkiver
|
||||||
|
release.hide_archive_links_helper = Skjul automatisk genererede kildekodearkiver for denne udgivelse. For eksempel hvis du uploader din egen.
|
||||||
|
release.add_tag = Opret tag
|
||||||
|
release.releases_for = Udgivelser for %s
|
||||||
|
branch.delete_branch_has_new_commits = Gren "%s" kan ikke slettes, fordi nye commits er blevet tilføjet efter fletning.
|
||||||
|
branch.create_branch = Opret gren %s
|
||||||
|
branch.create_from = fra "%s"
|
||||||
|
branch.create_success = Gren "%s" er blevet oprettet.
|
||||||
|
branch.branch_already_exists = Gren "%s" findes allerede i dette depot.
|
||||||
|
release.releases = Udgivelser
|
||||||
|
release.draft = Udkast
|
||||||
|
release.type_attachment = Vedhæftning
|
||||||
|
release.type_external_asset = Eksternt aktiv
|
||||||
|
release.asset_name = Aktivets navn
|
||||||
|
release.tag_helper_existing = Eksisterende tag.
|
||||||
|
release.title_empty = Titel må ikke være tom.
|
||||||
|
release.message = Beskriv denne udgivelse
|
||||||
|
settings.bot_token = Bot token
|
||||||
|
settings.chat_id = Chat ID
|
||||||
|
diff.show_file_tree = Vis filtræ
|
||||||
|
diff.hide_file_tree = Skjul filtræ
|
||||||
|
release.ahead.commits = <strong>%d</strong> commits
|
||||||
|
release.ahead.target = til %s siden denne udgivelse
|
||||||
|
release.source_code = Kildekode
|
||||||
|
release.edit_subheader = Udgivelser organiserer projektversioner.
|
||||||
|
release.tag_helper = Vælg et eksisterende tag, eller opret et nyt tag.
|
||||||
|
release.target = Mål
|
||||||
|
tag.ahead.target = til %s siden dette tag
|
||||||
|
release.new_subheader = Udgivelser organiserer projektversioner.
|
||||||
|
release.title = Udgivelsestitel
|
||||||
|
release.prerelease_desc = Markér som pre-release
|
||||||
|
release.prerelease_helper = Marker denne udgivelse uegnet til produktionsbrug.
|
||||||
|
release.deletion_success = Udgivelsen er blevet slettet.
|
||||||
|
release.summary_card_alt = Oversigtskort for en udgivelse med titlen "%s" i depots %s
|
||||||
|
settings.unarchive.text = Fjernelse af arkivering af depotet vil genoprette dens evne til at modtage commits og push, såvel som nye problemer og pull-anmodninger.
|
||||||
|
settings.unarchive.success = Depotet blev fjernet fra arkivet.
|
||||||
|
settings.unarchive.error = Der opstod en fejl under forsøg på at fjerne depotet fra arkivet. Se loggen for flere detaljer.
|
||||||
|
settings.update_avatar_success = Depot avataren er blevet opdateret.
|
||||||
|
branch.restore_success = Gren "%s" er blevet gendannet.
|
||||||
|
branch.restore_failed = Kunne ikke gendanne grenen "%s".
|
||||||
|
branch.protected_deletion_failed = Gren "%s" er beskyttet. Det kan ikke slettes.
|
||||||
|
branch.default_deletion_failed = Gren "%s" er standardgrenen. Det kan ikke slettes.
|
||||||
|
tag.create_tag_operation = Opret tag
|
||||||
|
tag.confirm_create_tag = Opret tag
|
||||||
|
settings.tags.protection.allowed.noone = Ingen
|
||||||
|
settings.archive.header = Arkivere dette depot
|
||||||
|
settings.matrix.room_id_helper = Rum-id'et kan hentes fra Element-webklienten > Rumindstillinger > Avanceret > Internt rum-id. Eksempel: %s.
|
||||||
|
settings.archive.text = Arkivering af depotet vil gøre den fuldstændig skrivebeskyttet. Det vil blive skjult fra dashboardet. Ingen (ikke engang dig!) vil være i stand til at foretage nye commits eller åbne nogen problemer eller pull-anmodninger.
|
||||||
|
settings.archive.success = Depotet blev arkiveret.
|
||||||
|
settings.archive.button = Arkivere depot
|
||||||
|
settings.rename_branch_success = Grenen %s blev omdøbt til %s.
|
||||||
|
diff.whitespace_ignore_amount_changes = Ignorer ændringer i mængden af blanke mellemrum
|
||||||
|
diff.download_diff = Download diff fil
|
||||||
|
diff.show_split_view = Opdelt visning
|
||||||
|
diff.show_unified_view = Samlet visning
|
||||||
|
diff.whitespace_button = Blanke mellemrum
|
||||||
|
diff.whitespace_show_everything = Vis alle ændringer
|
||||||
|
diff.whitespace_ignore_all_whitespace = Ignorer blanke mellemrum, når du sammenligner linjer
|
||||||
|
diff.too_many_files = Nogle filer blev ikke vist, fordi der er ændret for mange filer i denne diff
|
||||||
|
diff.show_more = Vis mere
|
||||||
|
diff.load = Load diff
|
||||||
|
settings.archive.branchsettings_unavailable = Indstillinger for gren er ikke tilgængelige i arkiverede depoter.
|
||||||
|
settings.archive.tagsettings_unavailable = Tag-indstillinger er ikke tilgængelige i arkiverede depoter.
|
||||||
|
settings.archive.mirrors_unavailable = Spejle er ikke tilgængelige i arkiverede depoter.
|
||||||
|
settings.lfs_lock_already_exists = Låsen findes allerede: %s
|
||||||
|
settings.lfs_pointers.associateAccessible = Tilknyt tilgængelige %d OID'er
|
||||||
|
settings.rename_branch_failed_protected = Kan ikke omdøbe grenen %s, fordi den er en beskyttet gren.
|
||||||
|
settings.rename_branch_failed_exist = Kan ikke omdøbe grenen, fordi målgrenen %s eksisterer.
|
||||||
|
settings.rename_branch_failed_not_exist = Kan ikke omdøbe grenen %s, fordi den ikke eksisterer.
|
||||||
|
settings.rename_branch = Omdøb gren
|
||||||
|
diff.browse_source = Gennemse kilde
|
||||||
|
diff.parent = forælder
|
||||||
|
diff.commit = commit
|
||||||
|
diff.git-notes = Noter
|
||||||
|
diff.git-notes.add = Tilføj note
|
||||||
|
diff.git-notes.remove-header = Fjern note
|
||||||
|
diff.git-notes.remove-body = Denne note vil blive fjernet.
|
||||||
|
diff.data_not_available = Diff-indhold er ikke tilgængeligt
|
||||||
|
diff.bin_not_shown = Binær fil vises ikke.
|
||||||
|
diff.view_file = Se fil
|
||||||
|
diff.file_before = Før
|
||||||
|
diff.file_after = Efter
|
||||||
|
diff.file_image_width = Bredde
|
||||||
|
diff.file_image_height = Højde
|
||||||
|
diff.file_byte_size = Størrelse
|
||||||
|
diff.file_suppressed_line_too_long = Filforskellen er undertrykt, fordi en eller flere linjer er for lange
|
||||||
|
diff.review = Afslut gennemgangen
|
||||||
|
diff.review.header = Send anmeldelse
|
||||||
|
diff.review.placeholder = Gennemgå kommentar
|
||||||
|
release.download_count_one = %s download
|
||||||
|
release.download_count_few = %s downloads
|
||||||
|
topic.format_prompt = Emner skal starte med et bogstav eller tal, kan indeholde bindestreger ("-") og prikker ("."), kan være op til 35 tegn lange. Bogstaver skal være små.
|
||||||
|
branch.warning_rename_default_branch = Du omdøber standardgrenen.
|
||||||
|
topic.done = Færdig
|
||||||
|
topic.count_prompt = Du kan ikke vælge mere end 25 emner
|
||||||
|
find_file.go_to_file = Find en fil
|
||||||
|
find_file.no_matching = Ingen matchende fil fundet
|
||||||
|
topic.manage_topics = Administrer emner
|
||||||
|
tag.create_tag_from = Opret nyt tag fra "%s"
|
||||||
|
tag.create_success = Tag "%s" er blevet oprettet.
|
||||||
|
branch.restore = Gendan grenen "%s"
|
||||||
|
branch.new_branch_from = Opret ny gren fra "%s"
|
||||||
|
branch.create_branch_operation = Opret gren
|
||||||
|
branch.renamed = Gren %s blev omdøbt til %s.
|
||||||
|
branch.new_branch = Opret ny gren
|
||||||
|
tag.create_tag = Opret tag %s
|
||||||
|
error.csv.too_large = Denne fil kan ikke gengives, fordi den er for stor.
|
||||||
|
error.csv.unexpected = Denne fil kan ikke gengives, fordi den indeholder et uventet tegn i linje %d og kolonne %d.
|
||||||
|
error.csv.invalid_field_count = Denne fil kan ikke gengives, fordi den har et forkert antal felter i linje %d.
|
||||||
|
branch.download = Download gren "%s"
|
||||||
|
branch.rename = Omdøb grenen "%s"
|
||||||
|
branch.included_desc = Denne gren er en del af standardgrenen
|
||||||
|
branch.included = Inkluderet
|
||||||
|
error.broken_git_hook = Git hooks af dette depot ser ud til at være brudt. Følg venligst <a target="_blank" rel="noreferrer" href="%s">dokumentationen</a> for at rette dem, og push derefter på nogle commits for at opdatere statussen.
|
||||||
|
branch.create_new_branch = Opret en gren fra gren:
|
||||||
|
branch.confirm_create_branch = Opret gren
|
||||||
|
branch.rename_branch_to = Omdøb "%s" til:
|
||||||
|
|
||||||
[notification]
|
[notification]
|
||||||
watching = Overvåger
|
watching = Overvåger
|
||||||
read = Læs
|
read = Læs
|
||||||
|
notifications = Notifikationer
|
||||||
|
no_unread = Ingen ulæste notifikationer.
|
||||||
|
unread = Ulæst
|
||||||
|
mark_as_read = Markér som læst
|
||||||
|
no_read = Ingen læste notifikationer.
|
||||||
|
mark_all_as_read = Markér alle som læste
|
||||||
|
mark_as_unread = Markér som ulæst
|
||||||
|
subscriptions = Abonnementer
|
||||||
|
no_subscriptions = Ingen abonnementer
|
||||||
|
|
||||||
[action]
|
[action]
|
||||||
watched_repo = begyndte at overvåge <a href="%[1]s">%[2]s</a>
|
watched_repo = begyndte at overvåge <a href="%[1]s">%[2]s</a>
|
||||||
|
@ -2561,6 +2767,93 @@ settings.location = Lokation
|
||||||
settings.permission = Tilladelser
|
settings.permission = Tilladelser
|
||||||
settings.visibility = Synlighed
|
settings.visibility = Synlighed
|
||||||
members.remove = Slet
|
members.remove = Slet
|
||||||
|
org_name_holder = Organisationens navn
|
||||||
|
create_team = Opret team
|
||||||
|
org_full_name_holder = Organisationens fulde navn
|
||||||
|
open_dashboard = Åbn dashboard
|
||||||
|
lower_repositories = depoter
|
||||||
|
team_unit_desc = Tillad adgang til depotsektioner
|
||||||
|
follow_blocked_user = Du kan ikke følge denne organisation, fordi denne organisation har blokeret dig.
|
||||||
|
org_name_helper = Organisationsnavne skal være korte og mindeværdige.
|
||||||
|
create_org = Opret organisation
|
||||||
|
form.name_reserved = Organisationsnavnet "%s" er reserveret.
|
||||||
|
create_new_team = Nyt team
|
||||||
|
team_unit_disabled = (Deaktiveret)
|
||||||
|
code = Kode
|
||||||
|
team_name = Team navn
|
||||||
|
team_name_helper = Team navne skal være korte og mindeværdige.
|
||||||
|
team_desc_helper = Beskriv teamets formål eller rolle.
|
||||||
|
team_access_desc = Depot adgang
|
||||||
|
team_permission_desc = Tilladelse
|
||||||
|
members.member = Medlem
|
||||||
|
settings.change_orgname_prompt = Bemærk: Ændring af organisationens navn vil også ændre din organisations URL og frigøre det gamle navn.
|
||||||
|
settings.change_orgname_redirect_prompt = Det gamle navn vil omdirigere, indtil det gøres krav på.
|
||||||
|
settings.change_orgname_redirect_prompt.with_cooldown.one = Det gamle organisationsnavn vil være tilgængeligt for alle efter en nedkølingsperiode på %[1]d dag, du kan stadig kræve det gamle navn tilbage i nedkølingsperioden.
|
||||||
|
settings.change_orgname_redirect_prompt.with_cooldown.few = Det gamle organisationsnavn vil være tilgængeligt for alle efter en nedkølingsperiode på %[1]d dage, du kan stadig kræve det gamle navn tilbage i .
|
||||||
|
settings.update_avatar_success = Organisationens avatar er blevet opdateret.
|
||||||
|
members.public_helper = Gør skjult
|
||||||
|
members.private = Skjult
|
||||||
|
members.private_helper = Gør synlig
|
||||||
|
members.member_role = Medlemsrolle:
|
||||||
|
members.remove.detail = Vil du fjerne %[1]s fra %[2]s?
|
||||||
|
members.invite_desc = Tilføj et nyt medlem til %s:
|
||||||
|
teams.read_permission_desc = Dette team giver <strong>læse</strong> adgang: medlemmer kan se og klone teamdepoter.
|
||||||
|
teams.remove_all_repos_title = Slet alle team depoter
|
||||||
|
members.leave.detail = Er du sikker på, at du vil forlade organisationen "%s"?
|
||||||
|
settings.email = Kontakt email
|
||||||
|
settings.delete_account = Slet denne organisation
|
||||||
|
teams.can_create_org_repo_helper = Medlemmer kan oprette nye arkiver i organisationen. Skaberen får administratoradgang til det nye lager.
|
||||||
|
teams.remove_all_repos_desc = Dette vil slette alle depoter fra teamet
|
||||||
|
teams.add_all_repos_title = Tilføj alle depoter
|
||||||
|
settings.update_settings = Opdater indstillinger
|
||||||
|
settings.update_setting_success = Organisationsindstillingerne er blevet opdateret.
|
||||||
|
settings.delete = Slet organisation
|
||||||
|
members.invite_now = Inviter nu
|
||||||
|
teams.members = Team medlemmer
|
||||||
|
teams.owners_permission_desc = Ejere har fuld adgang til <strong>alle depoter</strong> og har <strong>administratoradgang</strong> til organisationen.
|
||||||
|
teams.update_settings = Opdater indstillinger
|
||||||
|
settings.labels_desc = Tilføj etiketter, som kan bruges til problemer for <strong>alle lagre</strong> under denne organisation.
|
||||||
|
members.membership_visibility = Medlemskabs synlighed:
|
||||||
|
members.public = Synlig
|
||||||
|
settings.delete_prompt = Organisationen fjernes permanent. Dette <strong>KAN IKKE</strong> fortrydes!
|
||||||
|
settings.confirm_delete_account = Bekræft sletning
|
||||||
|
settings.delete_org_title = Slet organisation
|
||||||
|
settings.delete_org_desc = Denne organisation vil blive slettet permanent. Vil du fortsætte?
|
||||||
|
settings.hooks_desc = Tilføj webhooks, som vil blive udløst for <strong>alle lagre</strong> under denne organisation.
|
||||||
|
teams.leave.detail = Er du sikker på, at du vil forlade teamet "%s"?
|
||||||
|
teams.can_create_org_repo = Opret depoter
|
||||||
|
teams.general_access_helper = Medlemmers tilladelser bestemmes af nedenstående tilladelsestabell.
|
||||||
|
teams.delete_team = Slet team
|
||||||
|
teams.add_team_member = Slet team
|
||||||
|
form.name_pattern_not_allowed = Mønsteret "%s" er ikke tilladt i et organisationsnavn.
|
||||||
|
form.create_org_not_allowed = Du har ikke tilladelse til at oprette en organisation.
|
||||||
|
teams.none_access = Ingen adgang
|
||||||
|
teams.none_access_helper = Muligheden "ingen adgang" har kun effekt på private arkiver.
|
||||||
|
teams.general_access = Brugerdefineret adgang
|
||||||
|
members.leave = Forlad
|
||||||
|
teams.leave = Forlad
|
||||||
|
teams.join = Deltag
|
||||||
|
teams.delete_team_success = Teamet er blevet slettet.
|
||||||
|
teams.write_permission_desc = Dette team giver <strong>Skrive</strong> adgang: medlemmer kan læse fra og skubbe til teamdepoter.
|
||||||
|
teams.invite_team_member = Inviter til %s
|
||||||
|
teams.invite_team_member.list = Afventende invitationer
|
||||||
|
teams.admin_permission_desc = Dette team giver <strong>Administrator</strong> adgang: medlemmer kan læse fra, skubbe til og tilføje samarbejdspartnere til teamdepoter.
|
||||||
|
teams.create_repo_permission_desc = Derudover giver dette team tilladelse til <strong>Opret depot</strong>: medlemmer kan oprette nye lagre i organisationen.
|
||||||
|
teams.delete_team_title = Slet team
|
||||||
|
teams.repositories = Team depoter
|
||||||
|
teams.delete_team_desc = Sletning af et team tilbagekalder depotadgang fra dets medlemmer. Vil du fortsætte?
|
||||||
|
teams.add_all_repos_desc = Dette vil tilføje alle organisationens depoter til teamet.
|
||||||
|
teams.add_nonexistent_repo = Depotet, du forsøger at tilføje, eksisterer ikke, opret det først.
|
||||||
|
teams.invite.by = Inviteret af %s
|
||||||
|
teams.all_repositories_helper = Teamet har adgang til alle depoter. Hvis du vælger dette, <strong>føjes alle eksisterende</strong> depoter til teamet.
|
||||||
|
teams.invite.title = Du er blevet inviteret til at deltage i teamet <strong>%s</strong> i organisationen <strong>%s</strong>.
|
||||||
|
teams.add_duplicate_users = Brugeren er allerede et teammedlem.
|
||||||
|
teams.repos.none = Ingen depoter kunne tilgås af dette team.
|
||||||
|
teams.members.none = Ingen medlemmer på dette team.
|
||||||
|
teams.specific_repositories = Specifikke depoter
|
||||||
|
teams.specific_repositories_helper = Medlemmer vil kun have adgang til depoter, der udtrykkeligt er føjet til teamet. Hvis du vælger dette <strong>vil det ikke</strong> automatisk fjerne depoter, der allerede er tilføjet med <i>Alle depoter</i>.
|
||||||
|
teams.all_repositories = Alle depoter
|
||||||
|
teams.invite.description = Klik venligst på knappen nedenfor for at blive medlem af teamet.
|
||||||
|
|
||||||
[admin]
|
[admin]
|
||||||
orgs.members = Medlemmer
|
orgs.members = Medlemmer
|
||||||
|
@ -2601,6 +2894,207 @@ config.allow_dots_in_usernames = Tillad brugere at bruge prikker i deres brugern
|
||||||
auths.oauth2_icon_url = Icon URL
|
auths.oauth2_icon_url = Icon URL
|
||||||
users.edit = Redigere
|
users.edit = Redigere
|
||||||
users.auth_source = Godkendelseskilde
|
users.auth_source = Godkendelseskilde
|
||||||
|
monitor.queue.settings.maxnumberworkers.placeholder = I øjeblikket %[1]d
|
||||||
|
monitor.queue.settings.submit = Opdater indstillinger
|
||||||
|
monitor.queue.settings.changed = Indstillinger opdateret
|
||||||
|
monitor.queue.settings.remove_all_items = Slet alle
|
||||||
|
monitor.queue.settings.remove_all_items_done = Alle varer i køen er blevet fjernet.
|
||||||
|
notices.system_notice_list = Systemmeddelelser
|
||||||
|
dashboard.delete_repo_archives = Slet alle depoters arkiver (ZIP, TAR.GZ osv..)
|
||||||
|
organizations = Organisationer
|
||||||
|
dashboard.delete_repo_archives.started = Slet alle repository arkiver opgave startet.
|
||||||
|
dashboard.statistic = Oversigt
|
||||||
|
dashboard.task.finished = Opgave: %[1]s startet af %[2]s er afsluttet
|
||||||
|
dashboard.task.unknown = Ukendt opgave: %[1]s
|
||||||
|
dashboard.cron.error = Fejl i Cron: %s: %[3]s
|
||||||
|
dashboard.operation_name = Operations navn
|
||||||
|
dashboard.delete_missing_repos.started = Slet alle depoter, der mangler deres Git-filopgave startet.
|
||||||
|
dashboard.delete_generated_repository_avatars = Slet genererede depot avatarer
|
||||||
|
dashboard.sync_repo_branches = Synkroniser mistede grene fra Git-data til databasen
|
||||||
|
dashboard.sync_repo_tags = Synkroniser tags fra Git-data til database
|
||||||
|
dashboard.archive_cleanup = Slet gamle depotarkiver
|
||||||
|
dashboard.deleted_branches_cleanup = Ryd op i slettede grene
|
||||||
|
dashboard = Dashboard
|
||||||
|
self_check = Selvtjek
|
||||||
|
assets = Kode aktiver
|
||||||
|
repositories = Depoter
|
||||||
|
authentication = Godkendelseskilder
|
||||||
|
emails = Bruger e-mails
|
||||||
|
monitor = Overvågning
|
||||||
|
settings = Admin indstillinger
|
||||||
|
dashboard.new_version_hint = Forgejo %s er nu tilgængelig, du kører %s. Tjek <a target="_blank" rel="noreferrer" href="%s">bloggen</a> for flere detaljer.
|
||||||
|
dashboard.operation_switch = Skift
|
||||||
|
dashboard.operation_run = Kør
|
||||||
|
dashboard.clean_unbind_oauth = Rens ubundne OAuth-forbindelser
|
||||||
|
dashboard.delete_inactive_accounts.started = Slet alle uaktiverede konti opgave startet.
|
||||||
|
dashboard.delete_missing_repos = Slet alle depoter, der mangler deres Git-filer
|
||||||
|
dashboard.update_migration_poster_id = Opdater migrationsplakat-id'er
|
||||||
|
dashboard.memory_obtained = Hukommelse opnået
|
||||||
|
dashboard.pointer_lookup_times = Pointer-opslagstider
|
||||||
|
hooks = Webhooks
|
||||||
|
dashboard.cron.finished = Cron: %[1]s er færdig
|
||||||
|
dashboard.delete_inactive_accounts = Slet alle uaktiverede konti
|
||||||
|
config = Konfiguration
|
||||||
|
notices = Systemmeddelelser
|
||||||
|
config_summary = Oversigt
|
||||||
|
dashboard.system_status = System status
|
||||||
|
dashboard.update_mirrors = Opdater spejle
|
||||||
|
dashboard.server_uptime = Server oppetid
|
||||||
|
dashboard.current_goroutine = Nuværende goroutiner
|
||||||
|
dashboard.current_memory_usage = Aktuel hukommelsesbrug
|
||||||
|
dashboard.total_memory_allocated = Samlet hukommelse tildelt
|
||||||
|
integrations = Integrationer
|
||||||
|
dashboard.operations = Vedligeholdelses operationer
|
||||||
|
dashboard.repo_health_check = Sundhedstjek alle depoter
|
||||||
|
dashboard.check_repo_stats = Tjek alle depotstatistikker
|
||||||
|
dashboard.git_gc_repos = Samle alt affald fra alle depoter
|
||||||
|
dashboard.resync_all_sshkeys = Opdater filen ".ssh/authorized_keys" med Forgejo SSH-nøgler.
|
||||||
|
dashboard.resync_all_sshprincipals = Opdater ".ssh/authorized_principals" filen med Forgejo SSH principals.
|
||||||
|
users = Brugerkonti
|
||||||
|
identity_access = Identitet og adgang
|
||||||
|
first_page = Først
|
||||||
|
last_page = Sidst
|
||||||
|
dashboard.task.process = Opgave: %[1]s
|
||||||
|
total = Total: %d
|
||||||
|
dashboard.cron.started = Startede Cron: %[1]s
|
||||||
|
dashboard.cron.process = Cron: %[1]s
|
||||||
|
dashboard.cron.cancelled = Cron: %[1]s annulleret: %[3]s
|
||||||
|
dashboard.clean_unbind_oauth_success = Alle ubundne OAuth-forbindelser er blevet slettet.
|
||||||
|
dashboard.task.started = Startet opgave: %[1]s
|
||||||
|
dashboard.task.cancelled = Opgave: %[1]s annulleret: %[3]s
|
||||||
|
dashboard.task.error = Fejl i Opgave: %[1]s: %[3]s
|
||||||
|
dashboard.resync_all_hooks = Gensynkroniser pre-receive, update og post-receive hooks for alle depoter
|
||||||
|
dashboard.reinit_missing_repos = Geninitialiser alle manglende Git-depoter, som der findes poster for
|
||||||
|
dashboard.sync_external_users = Synkroniser eksterne brugerdata
|
||||||
|
dashboard.cleanup_hook_task_table = Oprydning hook_task tabel
|
||||||
|
dashboard.cleanup_packages = Ryd udløbne pakker
|
||||||
|
dashboard.cleanup_actions = Oprydning af udløbne logfiler og artefakter fra handlinger
|
||||||
|
users.remote = Remote
|
||||||
|
users.password_helper = Lad adgangskoden være tom for at bevare den uændret.
|
||||||
|
dashboard.cancel_abandoned_jobs = Annuller forladte handlingsjob
|
||||||
|
users.activated.description = Afslutning af e-mailbekræftelse. Ejeren af en uaktiveret konto vil ikke være i stand til at logge ind, før e-mailbekræftelsen er gennemført.
|
||||||
|
users.admin.description = Giv denne bruger fuld adgang til alle administrative funktioner, der er tilgængelige via web-UI og API.
|
||||||
|
users.update_profile = Opdater brugerkonto
|
||||||
|
users.still_has_org = Denne bruger er medlem af en organisation. Fjern først brugeren fra enhver organisation.
|
||||||
|
users.purge_help = Tvangsslet brugeren og eventuelle depoter, organisationer og pakker, der ejes af brugeren. Alle kommentarer og problemer indsendt af denne bruger vil også blive slettet.
|
||||||
|
users.is_admin = Administrator konto
|
||||||
|
dashboard.mspan_structures_obtained = Mspan strukturer opnået
|
||||||
|
dashboard.mcache_structures_usage = MCache strukturer brug
|
||||||
|
dashboard.mspan_structures_usage = MSpan strukturer brug
|
||||||
|
dashboard.mcache_structures_obtained = MCache-strukturer opnået
|
||||||
|
dashboard.profiling_bucket_hash_table_obtained = Profilering bucket hash tabel opnået
|
||||||
|
dashboard.gc_metadata_obtained = GC-metadata opnået
|
||||||
|
dashboard.other_system_allocation_obtained = Anden systemallokering opnået
|
||||||
|
dashboard.next_gc_recycle = Næste GC genbrug
|
||||||
|
dashboard.total_gc_pause = Total GC-pause
|
||||||
|
dashboard.last_gc_time = Tid siden sidste GC
|
||||||
|
dashboard.delete_old_system_notices = Slet alle gamle systemmeddelelser fra databasen
|
||||||
|
dashboard.gc_lfs = Affaldssamler LFS-metaobjekter
|
||||||
|
dashboard.start_schedule_tasks = Start planlæg handlingsopgaver
|
||||||
|
dashboard.sync_branch.started = Gren synkronisering startede
|
||||||
|
dashboard.sync_tag.started = Tag-synkronisering er startet
|
||||||
|
dashboard.rebuild_issue_indexer = Genopbyg problemindekser
|
||||||
|
users.update_profile_success = Brugerkontoen er blevet opdateret.
|
||||||
|
users.created = Oprettet
|
||||||
|
users.max_repo_creation = Maksimalt antal depoter
|
||||||
|
users.prohibit_login = Suspenderet konto
|
||||||
|
users.is_restricted = Begrænset konto
|
||||||
|
dashboard.memory_allocate_times = Hukommelsestildelinger
|
||||||
|
dashboard.memory_free_times = Hukommelses frigørelse
|
||||||
|
dashboard.current_heap_usage = Nuværende heap-brug
|
||||||
|
dashboard.heap_memory_obtained = Heap-hukommelse opnået
|
||||||
|
dashboard.heap_objects = Heap genstande
|
||||||
|
dashboard.bootstrap_stack_usage = Brug af bootstrap-stak
|
||||||
|
dashboard.update_checker = Opdateringskontrol
|
||||||
|
dashboard.delete_old_actions.started = Slet alle gamle aktiviteter fra den påbegyndte database.
|
||||||
|
dashboard.stop_zombie_tasks = Stop zombiehandlingsopgaver
|
||||||
|
dashboard.stop_endless_tasks = Stop endeløse handlingsopgaver
|
||||||
|
users.2fa = 2FA
|
||||||
|
users.last_login = Sidst logget ind
|
||||||
|
users.never_login = Aldrig logget ind
|
||||||
|
users.new_success = Brugerkontoen "%s" er blevet oprettet.
|
||||||
|
users.local_import.description = Tillad import af depoter fra serverens lokale filsystem. Dette kan være et sikkerhedsproblem.
|
||||||
|
users.organization_creation.description = Tillad oprettelse af nye organisationer.
|
||||||
|
users.delete_account = Slet brugerkonto
|
||||||
|
users.cannot_delete_self = Du kan ikke slette dig selv
|
||||||
|
users.still_own_repo = Denne bruger ejer stadig et eller flere arkiver. Slet eller overfør disse depoter først.
|
||||||
|
users.list_status_filter.is_admin = Admin
|
||||||
|
users.block.description = Bloker denne bruger i at interagere med denne tjeneste via deres konto, og forbyd at logge ind.
|
||||||
|
users.restricted.description = Tillad kun interaktion med de depoter og organisationer, hvor denne bruger er tilføjet som en samarbejdspartner. Dette forhindrer adgang til offentlige arkiver i denne instans.
|
||||||
|
users.list_status_filter.menu_text = Filter
|
||||||
|
dashboard.heap_memory_idle = Heap hukommelse inaktiv
|
||||||
|
dashboard.heap_memory_in_use = Heap hukommelse i brug
|
||||||
|
dashboard.heap_memory_released = Heap-hukommelse frigivet
|
||||||
|
dashboard.stack_memory_obtained = Stakhukommelse opnået
|
||||||
|
dashboard.last_gc_pause = Sidste GC-pause
|
||||||
|
dashboard.gc_times = GC times
|
||||||
|
dashboard.delete_old_actions = Slet alle gamle aktiviteter fra databasen
|
||||||
|
users.allow_create_organization = Kan skabe organisationer
|
||||||
|
users.list_status_filter.not_admin = Ikke admin
|
||||||
|
users.allow_import_local = Kan importere lokale depoter
|
||||||
|
users.send_register_notify = Giv besked om tilmelding via e-mail
|
||||||
|
users.local = Lokal
|
||||||
|
users.auth_login_name = Godkendelses-loginnavn
|
||||||
|
users.allow_git_hook = Kan skabe Git hooks
|
||||||
|
users.allow_git_hook_tooltip = Git hooks udføres som OS-brugeren, der kører Forgejo og vil have samme niveau af værtsadgang. Som et resultat kan brugere med dette specielle Git hook-privilegium få adgang til og ændre alle Forgejo-depoter såvel som databasen, der bruges af Forgejo. Derfor er de også i stand til at opnå Forgejo-administratorrettigheder.
|
||||||
|
users.repos = Depoter
|
||||||
|
users.still_own_packages = Denne bruger ejer stadig en eller flere pakker, slet disse pakker først.
|
||||||
|
users.deletion_success = Brugerkontoen er blevet slettet.
|
||||||
|
users.reset_2fa = Nulstil 2FA
|
||||||
|
users.max_repo_creation_desc = (Indtast -1 for at bruge den globale standardgrænse.)
|
||||||
|
users.is_activated = Aktiveret konto
|
||||||
|
users.edit_account = Rediger brugerkonto
|
||||||
|
packages.version = Version
|
||||||
|
users.list_status_filter.reset = Nulstil
|
||||||
|
users.list_status_filter.is_active = Aktiv
|
||||||
|
users.list_status_filter.not_active = Inaktiv
|
||||||
|
users.purge = Udrens bruger
|
||||||
|
users.user_manage_panel = Administrer brugerkonti
|
||||||
|
users.new_account = Opret brugerkonto
|
||||||
|
users.admin = Admin
|
||||||
|
users.restricted = Begrænset
|
||||||
|
users.reserved = Reserveret
|
||||||
|
users.bot = Bot
|
||||||
|
emails.primary = Primær
|
||||||
|
emails.updated = E-mail opdateret
|
||||||
|
emails.not_updated = Kunne ikke opdatere den anmodede e-mailadresse: %v
|
||||||
|
packages.package_manage_panel = Administrer pakker
|
||||||
|
packages.total_size = Samlet størrelse: %s
|
||||||
|
packages.unreferenced_size = Ikke-referencestørrelse: %s
|
||||||
|
users.list_status_filter.is_2fa_enabled = 2FA aktiveret
|
||||||
|
users.list_status_filter.not_2fa_enabled = 2FA deaktiveret
|
||||||
|
emails.filter_sort.email_reverse = E-mail (omvendt)
|
||||||
|
emails.filter_sort.name_reverse = Brugernavn (omvendt)
|
||||||
|
emails.delete = Slet e-mail
|
||||||
|
emails.delete_desc = Er du sikker på, at du vil slette denne e-mailadresse?
|
||||||
|
emails.deletion_success = E-mailadressen er blevet slettet.
|
||||||
|
users.list_status_filter.is_restricted = Begrænset
|
||||||
|
emails.duplicate_active = Denne e-mailadresse er allerede aktiv for en anden bruger.
|
||||||
|
emails.change_email_header = Opdater e-mail-egenskaber
|
||||||
|
emails.change_email_text = Er du sikker på, at du vil opdatere denne e-mailadresse?
|
||||||
|
repos.issues = Problemer
|
||||||
|
repos.size = Størrelse
|
||||||
|
repos.lfs_size = LFS størrelse
|
||||||
|
users.list_status_filter.not_restricted = Ikke begrænset
|
||||||
|
users.details = Brugeroplysninger
|
||||||
|
emails.email_manage_panel = Administrer bruger-e-mails
|
||||||
|
users.list_status_filter.is_prohibit_login = Forbyd login
|
||||||
|
users.list_status_filter.not_prohibit_login = Tillad login
|
||||||
|
emails.delete_primary_email_error = Du kan ikke slette den primære e-mail.
|
||||||
|
orgs.org_manage_panel = Administrer organisationer
|
||||||
|
repos.repo_manage_panel = Administrer depoter
|
||||||
|
repos.unadopted = Ikke-adopterede depoter
|
||||||
|
repos.unadopted.no_more = Ingen ikke-adopterede depoter fundet.
|
||||||
|
auths.domain = Domæne
|
||||||
|
auths.port = Port
|
||||||
|
auths.host = Host
|
||||||
|
packages.size = Størrelse
|
||||||
|
auths.security_protocol = Sikkerhedsprotokol
|
||||||
|
auths.updated = Opdateret
|
||||||
|
auths.type = Type
|
||||||
|
auths.syncenabled = Slå brugersynkronisering til
|
||||||
|
packages.published = Offentliggjort
|
||||||
|
packages.type = Type
|
||||||
|
|
||||||
[packages]
|
[packages]
|
||||||
arch.version.description = Beskrivelse
|
arch.version.description = Beskrivelse
|
||||||
|
@ -2646,15 +3140,77 @@ rpm.repository = Depot info
|
||||||
rpm.repository.architectures = Arkitekturer
|
rpm.repository.architectures = Arkitekturer
|
||||||
alt.registry = Konfigurer dette register fra kommandolinjen:
|
alt.registry = Konfigurer dette register fra kommandolinjen:
|
||||||
alt.repository = Depot info
|
alt.repository = Depot info
|
||||||
|
alpine.repository.repositories = Depoter
|
||||||
|
search_in_external_registry = Søg i %s
|
||||||
|
dependency.version = Version
|
||||||
|
alpine.registry = Konfigurer dette register ved at tilføje url'en i din <code>/etc/apk/repositories</code> fil:
|
||||||
|
alpine.registry.key = Download den offentlige RSA-nøgle til registreringsdatabasen i mappen <code>/etc/apk/keys/</code> for at bekræfte indekssignaturen:
|
||||||
|
alpine.registry.info = Vælg $branch og $repository fra listen nedenfor.
|
||||||
|
|
||||||
[actions]
|
[actions]
|
||||||
runners.description = Beskrivelse
|
runners.description = Beskrivelse
|
||||||
runners.labels = Etiketter
|
runners.labels = Etiketter
|
||||||
runners.name = Navn
|
runners.name = Navn
|
||||||
runners.task_list.repository = Depot
|
runners.task_list.repository = Depot
|
||||||
|
runners.status.active = Aktiv
|
||||||
|
runners.status.offline = Offline
|
||||||
|
runners.version = Version
|
||||||
|
|
||||||
[tool]
|
[tool]
|
||||||
1d = 1 dag
|
1d = 1 dag
|
||||||
1w = 1 uge
|
1w = 1 uge
|
||||||
1mon = 1 måned
|
1mon = 1 måned
|
||||||
1y = 1 år
|
1y = 1 år
|
||||||
|
months = %d måneder
|
||||||
|
years = %d år
|
||||||
|
raw_seconds = sekunder
|
||||||
|
raw_minutes = minutter
|
||||||
|
future = fremtid
|
||||||
|
1h = 1 time
|
||||||
|
seconds = %d sekunder
|
||||||
|
minutes = %d minutter
|
||||||
|
hours = %d timer
|
||||||
|
weeks = %d uger
|
||||||
|
1s = 1 sekund
|
||||||
|
1m = 1 minut
|
||||||
|
days = %d dage
|
||||||
|
|
||||||
|
[repo.permissions]
|
||||||
|
actions.read = <b>Læs:</b> Se integrerede CI/CD-pipelines og deres logfiler.
|
||||||
|
releases.write = <b>Skriv:</b> Udgiv, rediger og slet udgivelser og deres aktiver.
|
||||||
|
wiki.read = <b>Læs:</b> Læs den integrerede wiki og dens historie.
|
||||||
|
wiki.write = <b>Skriv:</b> Opret, opdater og slet sider i den integrerede wiki.
|
||||||
|
actions.write = <b>Skriv:</b> Udløs, genstart, annuller eller godkend afventende CI/CD-pipelines manuelt.
|
||||||
|
ext_issues = Få adgang til linket til en ekstern problemsporing. Tilladelserne administreres eksternt.
|
||||||
|
issues.write = <b>Skriv:</b> Luk problemer og administrer metadata som etiketter, milepæle, modtagere, forfaldsdatoer og afhængigheder.
|
||||||
|
releases.read = <b>Læs:</b> Se og download udgivelser.
|
||||||
|
projects.read = <b>Læs:</b> Få adgang til depot-projekttavler.
|
||||||
|
projects.write = <b>Skriv:</b> Opret projekter og kolonner, og rediger dem.
|
||||||
|
packages.read = <b>Læs:</b> Se og download pakker, der er tildelt depotet.
|
||||||
|
packages.write = <b>Skriv:</b> Udgiv og slet pakker, der er tildelt depotet.
|
||||||
|
ext_wiki = Få adgang til linket til en ekstern wiki. Tilladelserne administreres eksternt.
|
||||||
|
pulls.read = <b>Læs:</b> Læsning og oprettelse af pull-anmodninger.
|
||||||
|
pulls.write = <b>Skriv:</b> Luk pull-anmodninger og administrer metadata som etiketter, milepæle, modtagere, forfaldsdatoer og afhængigheder.
|
||||||
|
code.read = <b>Læs:</b> Få adgang til og klon koden for depotet.
|
||||||
|
code.write = <b>Skriv:</b> Skub til depotet, opret filialer og tags.
|
||||||
|
issues.read = <b>Læs:</b> Læs og opret problemer og kommentarer.
|
||||||
|
|
||||||
|
[graphs]
|
||||||
|
component_failed_to_load = Der skete en uventet fejl.
|
||||||
|
code_frequency.what = kode frekvens
|
||||||
|
contributors.what = bidrag
|
||||||
|
component_loading = Indlæser %s…
|
||||||
|
component_loading_info = Dette kan tage lidt tid…
|
||||||
|
recent_commits.what = nylige commits
|
||||||
|
component_loading_failed = Kunne ikke indlæse %s
|
||||||
|
|
||||||
|
[secrets]
|
||||||
|
creation.name_placeholder = uafhængig af store og små bogstaver, alfanumeriske tegn eller understregninger, kan ikke starte med GITEA_ eller GITHUB_
|
||||||
|
creation.value_placeholder = Indtast ethvert indhold. Mellemrum i starten og slutningen vil blive udeladt.
|
||||||
|
|
||||||
|
[dropzone]
|
||||||
|
invalid_input_type = Filer af denne type må ikke uploades.
|
||||||
|
remove_file = Fjern fil
|
||||||
|
|
||||||
|
[gpg]
|
||||||
|
default_key = Underskrevet med standardnøglen
|
|
@ -3978,7 +3978,7 @@ submodule=Sous-module
|
||||||
|
|
||||||
|
|
||||||
[search]
|
[search]
|
||||||
search = Rechercher...
|
search = Rechercher…
|
||||||
type_tooltip = Type de recherche
|
type_tooltip = Type de recherche
|
||||||
fuzzy = Approximatif
|
fuzzy = Approximatif
|
||||||
code_search_by_git_grep = Les résultats de recherche dans le code sont fournis par "git grep". Les résultats pourraient être plus pertinents si l'administrateur du site active les indexeurs de code source.
|
code_search_by_git_grep = Les résultats de recherche dans le code sont fournis par "git grep". Les résultats pourraient être plus pertinents si l'administrateur du site active les indexeurs de code source.
|
||||||
|
@ -3988,14 +3988,14 @@ keyword_search_unavailable = La recherche par mot-clé n'est pas disponible actu
|
||||||
fuzzy_tooltip = Inclure les résultats proches des termes recherchés
|
fuzzy_tooltip = Inclure les résultats proches des termes recherchés
|
||||||
match = Correspondance
|
match = Correspondance
|
||||||
match_tooltip = Uniquement inclure les résultats correspondant exactement aux termes recherchés
|
match_tooltip = Uniquement inclure les résultats correspondant exactement aux termes recherchés
|
||||||
repo_kind = Chercher dans les dépôts...
|
repo_kind = Chercher dans les dépôts…
|
||||||
user_kind = Chercher les utilisateurs...
|
user_kind = Chercher les utilisateurs…
|
||||||
org_kind = Chercher les organisations...
|
org_kind = Chercher les organisations…
|
||||||
team_kind = Chercher les équipes...
|
team_kind = Chercher les équipes…
|
||||||
code_kind = Chercher le code...
|
code_kind = Chercher le code…
|
||||||
code_search_unavailable = La recherche dans le code n'est pas disponible. Veuillez contacter l'administrateur du site.
|
code_search_unavailable = La recherche dans le code n'est pas disponible. Veuillez contacter l'administrateur du site.
|
||||||
package_kind = Chercher les paquets...
|
package_kind = Chercher les paquets…
|
||||||
project_kind = Chercher les projets...
|
project_kind = Chercher les projets…
|
||||||
branch_kind = Chercher les branches...
|
branch_kind = Chercher les branches...
|
||||||
commit_kind = Chercher les commits...
|
commit_kind = Chercher les commits...
|
||||||
exact = Exact
|
exact = Exact
|
||||||
|
|
|
@ -1571,7 +1571,7 @@ issues.self_assign_at=`piešķīra sev %s`
|
||||||
issues.add_assignee_at=`<b>%s</b> piešķīra %s`
|
issues.add_assignee_at=`<b>%s</b> piešķīra %s`
|
||||||
issues.remove_assignee_at=`<b>%s</b> noņēma %s`
|
issues.remove_assignee_at=`<b>%s</b> noņēma %s`
|
||||||
issues.remove_self_assignment=`noņēma sev %s`
|
issues.remove_self_assignment=`noņēma sev %s`
|
||||||
issues.change_title_at=`nomainīts nosaukums no <b><strike>%s</strike></b> uz <b>%s</b> %s`
|
issues.change_title_at=`nomainīja nosaukumu no <b><strike>%s</strike></b> uz <b>%s</b> %s`
|
||||||
issues.change_ref_at=`nomainīta atsauce no <b><strike>%s</strike></b> uz <b>%s</b> %s`
|
issues.change_ref_at=`nomainīta atsauce no <b><strike>%s</strike></b> uz <b>%s</b> %s`
|
||||||
issues.remove_ref_at=`noņēma atsauci no <b>%s</b> %s`
|
issues.remove_ref_at=`noņēma atsauci no <b>%s</b> %s`
|
||||||
issues.add_ref_at=`pievienoja atsauci uz <b>%s</b> %s`
|
issues.add_ref_at=`pievienoja atsauci uz <b>%s</b> %s`
|
||||||
|
@ -3658,7 +3658,7 @@ raw_seconds=sekundes
|
||||||
raw_minutes=minūtes
|
raw_minutes=minūtes
|
||||||
|
|
||||||
[dropzone]
|
[dropzone]
|
||||||
default_message=Jāievelk datnes vai jāklikšķina šeit, lai augšupielādētu.
|
default_message=Ievilkt datnes vai klikšķināt šeit, lai augšupielādētu.
|
||||||
invalid_input_type=Šī veida datnes nevar augšupielādēt.
|
invalid_input_type=Šī veida datnes nevar augšupielādēt.
|
||||||
file_too_big=Datnes izmērs ({{filesize}} MB) pārsniedz pieļaujamo izmēru ({{maxFilesize}} MB).
|
file_too_big=Datnes izmērs ({{filesize}} MB) pārsniedz pieļaujamo izmēru ({{maxFilesize}} MB).
|
||||||
remove_file=Noņemt datni
|
remove_file=Noņemt datni
|
||||||
|
|
|
@ -4060,7 +4060,7 @@ filepreview.lines = Строки с %[1]d по %[2]d в %[3]s
|
||||||
filepreview.truncated = Предпросмотр был обрезан
|
filepreview.truncated = Предпросмотр был обрезан
|
||||||
|
|
||||||
[translation_meta]
|
[translation_meta]
|
||||||
test = Forgejo!
|
test = Forgejo
|
||||||
|
|
||||||
[repo.permissions]
|
[repo.permissions]
|
||||||
code.write = <b>Запись:</b> отправка изменений в репозиторий, создание веток и тегов.
|
code.write = <b>Запись:</b> отправка изменений в репозиторий, создание веток и тегов.
|
||||||
|
|
|
@ -9,11 +9,14 @@
|
||||||
"many": "quer mesclar %[1]d commits de <code>%[2]s</code> em <code id=\"%[4]s\">%[3]s</code>",
|
"many": "quer mesclar %[1]d commits de <code>%[2]s</code> em <code id=\"%[4]s\">%[3]s</code>",
|
||||||
"other": ""
|
"other": ""
|
||||||
},
|
},
|
||||||
"search.milestone_kind": "Pesquisar marcos...",
|
"search.milestone_kind": "Pesquisar marcos…",
|
||||||
"home.welcome.no_activity": "Sem atividade",
|
"home.welcome.no_activity": "Sem atividade",
|
||||||
"home.welcome.activity_hint": "Ainda não tem nada no seu feed. Suas ações e atividade dos seus repositórios vigiados aparecerão aqui.",
|
"home.welcome.activity_hint": "Ainda não tem nada no seu feed. Suas ações e atividade dos seus repositórios vigiados aparecerão aqui.",
|
||||||
"home.explore_repos": "Explorar repositórios",
|
"home.explore_repos": "Explorar repositórios",
|
||||||
"home.explore_users": "Explorar usuários",
|
"home.explore_users": "Explorar usuários",
|
||||||
"home.explore_orgs": "Explorar organizações",
|
"home.explore_orgs": "Explorar organizações",
|
||||||
"incorrect_root_url": "Esta instância do Forgejo está configurada para o endereço \"%s\". Você está atualmente vendo o Forgejo através de uma URL diferente, o que pode causar erros em algumas partes da aplicação. A URL oficial é controlada pela administração do Forgejo através da configuração ROOT_URL no arquivo app.ini."
|
"incorrect_root_url": "Esta instância do Forgejo está configurada para o endereço \"%s\". Você está atualmente vendo o Forgejo através de uma URL diferente, o que pode causar erros em algumas partes da aplicação. A URL oficial é controlada pela administração do Forgejo através da configuração ROOT_URL no arquivo app.ini.",
|
||||||
|
"themes.names.forgejo-auto": "Forgejo (usar o tema do sistema)",
|
||||||
|
"themes.names.forgejo-light": "Forgejo claro",
|
||||||
|
"themes.names.forgejo-dark": "Forgejo escuro"
|
||||||
}
|
}
|
||||||
|
|
24
package-lock.json
generated
24
package-lock.json
generated
|
@ -32,7 +32,7 @@
|
||||||
"idiomorph": "0.3.0",
|
"idiomorph": "0.3.0",
|
||||||
"jquery": "3.7.1",
|
"jquery": "3.7.1",
|
||||||
"katex": "0.16.21",
|
"katex": "0.16.21",
|
||||||
"mermaid": "11.5.0",
|
"mermaid": "11.6.0",
|
||||||
"mini-css-extract-plugin": "2.9.2",
|
"mini-css-extract-plugin": "2.9.2",
|
||||||
"minimatch": "10.0.1",
|
"minimatch": "10.0.1",
|
||||||
"monaco-editor": "0.52.2",
|
"monaco-editor": "0.52.2",
|
||||||
|
@ -1634,12 +1634,12 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@mermaid-js/parser": {
|
"node_modules/@mermaid-js/parser": {
|
||||||
"version": "0.3.0",
|
"version": "0.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-0.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-0.4.0.tgz",
|
||||||
"integrity": "sha512-HsvL6zgE5sUPGgkIDlmAWR1HTNHz2Iy11BAWPTa4Jjabkpguy4Ze2gzfLrg6pdRuBvFwgUYyxiaNqZwrEEXepA==",
|
"integrity": "sha512-wla8XOWvQAwuqy+gxiZqY+c7FokraOTHRWMsbB4AgRx9Sy7zKslNyejy7E+a77qHfey5GXw/ik3IXv/NHMJgaA==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"langium": "3.0.0"
|
"langium": "3.3.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@napi-rs/wasm-runtime": {
|
"node_modules/@napi-rs/wasm-runtime": {
|
||||||
|
@ -9361,9 +9361,9 @@
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/langium": {
|
"node_modules/langium": {
|
||||||
"version": "3.0.0",
|
"version": "3.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/langium/-/langium-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/langium/-/langium-3.3.1.tgz",
|
||||||
"integrity": "sha512-+Ez9EoiByeoTu/2BXmEaZ06iPNXM6thWJp02KfBO/raSMyCJ4jw7AkWWa+zBCTm0+Tw1Fj9FOxdqSskyN5nAwg==",
|
"integrity": "sha512-QJv/h939gDpvT+9SiLVlY7tZC3xB2qK57v0J04Sh9wpMb6MP1q8gB21L3WIo8T5P1MSMg3Ep14L7KkDCFG3y4w==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"chevrotain": "~11.0.3",
|
"chevrotain": "~11.0.3",
|
||||||
|
@ -9847,14 +9847,14 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/mermaid": {
|
"node_modules/mermaid": {
|
||||||
"version": "11.5.0",
|
"version": "11.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/mermaid/-/mermaid-11.5.0.tgz",
|
"resolved": "https://registry.npmjs.org/mermaid/-/mermaid-11.6.0.tgz",
|
||||||
"integrity": "sha512-IYhyukID3zzDj1EihKiN1lp+PXNImoJ3Iyz73qeDAgnus4BNGsJV1n471P4PyeGxPVONerZxignwGxGTSwZnlg==",
|
"integrity": "sha512-PE8hGUy1LDlWIHWBP05SFdqUHGmRcCcK4IzpOKPE35eOw+G9zZgcnMpyunJVUEOgb//KBORPjysKndw8bFLuRg==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@braintree/sanitize-url": "^7.0.4",
|
"@braintree/sanitize-url": "^7.0.4",
|
||||||
"@iconify/utils": "^2.1.33",
|
"@iconify/utils": "^2.1.33",
|
||||||
"@mermaid-js/parser": "^0.3.0",
|
"@mermaid-js/parser": "^0.4.0",
|
||||||
"@types/d3": "^7.4.3",
|
"@types/d3": "^7.4.3",
|
||||||
"cytoscape": "^3.29.3",
|
"cytoscape": "^3.29.3",
|
||||||
"cytoscape-cose-bilkent": "^4.1.0",
|
"cytoscape-cose-bilkent": "^4.1.0",
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
"idiomorph": "0.3.0",
|
"idiomorph": "0.3.0",
|
||||||
"jquery": "3.7.1",
|
"jquery": "3.7.1",
|
||||||
"katex": "0.16.21",
|
"katex": "0.16.21",
|
||||||
"mermaid": "11.5.0",
|
"mermaid": "11.6.0",
|
||||||
"mini-css-extract-plugin": "2.9.2",
|
"mini-css-extract-plugin": "2.9.2",
|
||||||
"minimatch": "10.0.1",
|
"minimatch": "10.0.1",
|
||||||
"monaco-editor": "0.52.2",
|
"monaco-editor": "0.52.2",
|
||||||
|
|
Loading…
Add table
Reference in a new issue