i18n

package
v0.0.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 11, 2025 License: MIT Imports: 17 Imported by: 0

Documentation

Overview

Copyright © 2025 PRAS

[Documentation reference](https://develop.kde.org/docs/plasma/widget/translations-i18n/) [Logic reference](https://github.com/Zren/plasma-applet-lib/blob/master/package/translate/build)

[Documentation reference](https://develop.kde.org/docs/plasma/widget/translations-i18n/) [Logic reference](https://github.com/Zren/plasma-applet-lib/blob/master/package/translate/merge)

Copyright © 2025 PRAS

Index

Constants

This section is empty.

Variables

View Source
var (

	// utils functions
	GetDataFromMetadata = utils.GetDataFromMetadata
)

mockable functions for testing

View Source
var I18nCmd = &cobra.Command{
	Use:   "i18n",
	Short: "Manage internationalization (i18n) for the plasmoid",
	Long:  `Provides tools to extract translatable strings and compile translation files.`,
}

i18nCmd represents the i18n command

View Source
var I18nCompileCmd = &cobra.Command{
	Use:   "compile",
	Short: "Compile .po files to binary .mo files",
	Run: func(cmd *cobra.Command, args []string) {
		if !utilsIsValidPlasmoid() {
			fmt.Println(color.RedString("Current directory is not a valid plasmoid."))
			return
		}

		if !utilsIsPackageInstalled(consts.GettextPackageName["binary"]) {
			pm, _ := utilsDetectPackageManager()
			var confirm bool
			confirmPrompt := &survey.Confirm{
				Message: "gettext is not installed. Do you want to install it first?",
				Default: true,
			}
			if !confirm {
				if err := surveyAskOne(confirmPrompt, &confirm); err != nil {
					return
				}
			}

			if confirm {
				if err := utilsInstallPackage(pm, consts.GettextPackageName["binary"], consts.GettextPackageName); err != nil {
					fmt.Println(color.RedString("Failed to install gettext:", err))
					return
				}
			} else {
				fmt.Println("Operation cancelled.")
				return
			}
		}

		if !silent {
			fmt.Println(color.CyanString("Compiling translation files..."))
		}

		if err := CompileI18n(root.ConfigRC, silent); err != nil {
			fmt.Println(color.RedString("Failed to compile messages: %v", err))
			return
		}

		if !silent {
			fmt.Println(color.GreenString("Successfully compiled all translation files."))
		}
	},
}
View Source
var I18nExtractCmd = &cobra.Command{
	Use:   "extract",
	Short: "Extract translatable strings from source files",
	Run: func(cmd *cobra.Command, args []string) {
		if !utilsIsValidPlasmoid() {
			fmt.Println(color.RedString("Current directory is not a valid plasmoid."))
			return
		}

		if !utilsIsPackageInstalled(consts.GettextPackageName["binary"]) {
			pm, _ := utilsDetectPackageManager()
			var confirm bool
			confirmPrompt := &survey.Confirm{
				Message: "gettext is not installed. Do you want to install it first?",
				Default: true,
			}
			if !confirm {
				if err := surveyAskOne(confirmPrompt, &confirm); err != nil {
					return
				}
			}

			if confirm {
				if err := utilsInstallPackage(pm, consts.GettextPackageName["binary"], consts.GettextPackageName); err != nil {
					fmt.Println(color.RedString("Failed to install gettext:", err))
					return
				}
			} else {
				fmt.Println("Operation cancelled.")
				return
			}
		}

		color.Cyan("Extracting translatable strings...")

		translationsDir := root.ConfigRC.I18n.Dir
		_ = osMkdirAll(translationsDir, 0755)

		if err := runXGettext(translationsDir); err != nil {
			fmt.Println(color.RedString("Failed to extract strings: %v", err))
			return
		}

		fmt.Println(color.GreenString("Successfully extracted strings to %s/template.pot", translationsDir))

		isPoGen, _ := cmd.Flags().GetBool("no-po")
		if !isPoGen {
			if err := generatePoFiles(translationsDir); err != nil {
				fmt.Println(color.RedString("Failed to generate .po files: %v", err))
				return
			}
		}
	},
}

Functions

func CompileI18n

func CompileI18n(config types.Config, silent bool) error

Types

This section is empty.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL