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
119 lines
5.0 KiB
Handlebars
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" .}}
|