2
0
Files
gitcaddy-server/templates/repo/settings/pages_languages.tmpl
logikonline 5788123e00 feat(pages): add multi-language support for landing pages
Implement internationalization system for landing pages:
- Database model for storing language-specific translations
- Language configuration with default and enabled languages
- Language switcher in navigation across all templates
- Translation management UI in settings
- Support for 15 languages including English, Spanish, German, French, Japanese, Chinese
- Auto-detection and manual language selection
- AI-powered translation generation capability
2026-03-07 13:09:46 -05:00

119 lines
5.0 KiB
Handlebars

{{template "repo/settings/layout_head" (dict "ctxData" . "pageClass" "repository settings pages")}}
<div class="user-main-content twelve wide column">
<h4 class="ui top attached header">
{{ctx.Locale.Tr "repo.settings.pages.languages"}}
</h4>
<div class="ui attached segment">
<form class="ui form" method="post">
{{.CsrfTokenHtml}}
<input type="hidden" name="action" value="update_i18n">
<div class="field">
<label>{{ctx.Locale.Tr "repo.settings.pages.default_lang"}}</label>
<select name="default_lang" class="ui dropdown">
{{range $code, $name := .LanguageNames}}
<option value="{{$code}}" {{if eq $code $.Config.I18n.DefaultLang}}selected{{end}}>{{$name}}</option>
{{end}}
</select>
<p class="help">{{ctx.Locale.Tr "repo.settings.pages.default_lang_help"}}</p>
</div>
<div class="field">
<label>{{ctx.Locale.Tr "repo.settings.pages.enabled_languages"}}</label>
<p class="help">{{ctx.Locale.Tr "repo.settings.pages.enabled_languages_help"}}</p>
<div class="grouped fields">
{{range $code, $name := .LanguageNames}}
<div class="field">
<div class="ui checkbox">
<input type="checkbox" name="languages" value="{{$code}}" {{if $.IsLangEnabled $code}}checked{{end}}>
<label>{{$name}} ({{$code}})</label>
</div>
</div>
{{end}}
</div>
</div>
<div class="field">
<button class="ui primary button">{{ctx.Locale.Tr "repo.settings.pages.save_languages"}}</button>
</div>
</form>
</div>
{{if .Config.I18n.Languages}}
<h4 class="ui top attached header tw-mt-4">
{{ctx.Locale.Tr "repo.settings.pages.translations"}}
</h4>
<div class="ui attached segment">
{{range .Config.I18n.Languages}}
{{if ne . $.Config.I18n.DefaultLang}}
<div class="ui segment">
<div class="tw-flex tw-justify-between tw-items-center tw-mb-4">
<h5 class="tw-m-0">{{index $.LanguageNames .}} ({{.}})</h5>
<div>
{{if $.AIEnabled}}
<form method="post" class="tw-inline-block">
{{$.CsrfTokenHtml}}
<input type="hidden" name="action" value="ai_translate">
<input type="hidden" name="target_lang" value="{{.}}">
<button class="ui purple tiny button">{{ctx.Locale.Tr "repo.settings.pages.ai_translate"}}</button>
</form>
{{end}}
{{if index $.TranslationMap .}}
<form method="post" class="tw-inline-block">
{{$.CsrfTokenHtml}}
<input type="hidden" name="action" value="delete_translation">
<input type="hidden" name="target_lang" value="{{.}}">
<button class="ui red tiny button">{{ctx.Locale.Tr "repo.settings.pages.delete_translation"}}</button>
</form>
{{end}}
</div>
</div>
<form class="ui form" method="post">
{{$.CsrfTokenHtml}}
<input type="hidden" name="action" value="save_translation">
<input type="hidden" name="target_lang" value="{{.}}">
{{$trans := index $.TranslationMap .}}
<div class="field">
<label>{{ctx.Locale.Tr "repo.settings.pages.trans_headline"}}</label>
<input name="trans_headline" value="{{if $trans}}{{$trans.Headline}}{{end}}" placeholder="{{$.Config.Hero.Headline}}">
</div>
<div class="field">
<label>{{ctx.Locale.Tr "repo.settings.pages.trans_subheadline"}}</label>
<input name="trans_subheadline" value="{{if $trans}}{{$trans.Subheadline}}{{end}}" placeholder="{{$.Config.Hero.Subheadline}}">
</div>
<div class="field">
<label>{{ctx.Locale.Tr "repo.settings.pages.trans_primary_cta"}}</label>
<input name="trans_primary_cta" value="{{if $trans}}{{$trans.PrimaryCTA}}{{end}}" placeholder="{{$.Config.Hero.PrimaryCTA.Label}}">
</div>
<div class="field">
<label>{{ctx.Locale.Tr "repo.settings.pages.trans_secondary_cta"}}</label>
<input name="trans_secondary_cta" value="{{if $trans}}{{$trans.SecondaryCTA}}{{end}}" placeholder="{{$.Config.Hero.SecondaryCTA.Label}}">
</div>
<div class="field">
<label>{{ctx.Locale.Tr "repo.settings.pages.trans_cta_headline"}}</label>
<input name="trans_cta_headline" value="{{if $trans}}{{$trans.CTAHeadline}}{{end}}" placeholder="{{$.Config.CTASection.Headline}}">
</div>
<div class="field">
<label>{{ctx.Locale.Tr "repo.settings.pages.trans_cta_subheadline"}}</label>
<input name="trans_cta_subheadline" value="{{if $trans}}{{$trans.CTASubheadline}}{{end}}" placeholder="{{$.Config.CTASection.Subheadline}}">
</div>
<div class="field">
<label>{{ctx.Locale.Tr "repo.settings.pages.trans_cta_button"}}</label>
<input name="trans_cta_button" value="{{if $trans}}{{$trans.CTAButton}}{{end}}" placeholder="{{$.Config.CTASection.Button.Label}}">
</div>
<div class="field">
<button class="ui primary tiny button">{{ctx.Locale.Tr "repo.settings.pages.save_translation"}}</button>
</div>
</form>
</div>
{{end}}
{{end}}
</div>
{{end}}
</div>
{{template "repo/settings/layout_footer" .}}