[gimp] Add i18n support for python spyrogimp plugin
- From: Ell <ell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] Add i18n support for python spyrogimp plugin
- Date: Fri, 1 Feb 2019 12:42:05 +0000 (UTC)
commit f6e414575628189a51582f34284bd4356b659f85
Author: Elad Shahar <dawn ever gmail com>
Date: Fri Feb 1 00:05:45 2019 +0200
Add i18n support for python spyrogimp plugin
plug-ins/pygimp/plug-ins/spyro_plus.py | 178 ++++++++++++++++++---------------
po-python/POTFILES.in | 1 +
2 files changed, 96 insertions(+), 83 deletions(-)
---
diff --git a/plug-ins/pygimp/plug-ins/spyro_plus.py b/plug-ins/pygimp/plug-ins/spyro_plus.py
index e9da063872..e6cd464ec5 100644
--- a/plug-ins/pygimp/plug-ins/spyro_plus.py
+++ b/plug-ins/pygimp/plug-ins/spyro_plus.py
@@ -24,18 +24,28 @@ import gobject
import gtk
from math import pi, sin, cos, atan, atan2, fmod, radians
+import gettext
import fractions
import time
+
+# i18n
+t = gettext.translation("gimp20-python", gimp.locale_directory, fallback=True)
+_ = t.ugettext
+
+def N_(message):
+ return message
+
+
pdb = gimp.pdb
two_pi, half_pi = 2 * pi, pi / 2
-layer_name = "Spyro Layer"
+layer_name = _("Spyro Layer")
# "Enums"
GEAR_NOTATION, TOY_KIT_NOTATION = range(2) # Pattern notations
-# Mapping of pattern notation to the corresponding tab in the patttern notation notebook.
+# Mapping of pattern notation to the corresponding tab in the pattern notation notebook.
pattern_notation_page = {}
ring_teeth = [96, 144, 105, 150]
@@ -76,7 +86,7 @@ class Shape:
class CircleShape(Shape):
- name = "Circle"
+ name = _("Circle")
def get_center_of_moving_gear(self, oangle, dist=None):
"""
@@ -112,7 +122,7 @@ class SidedShape(CanRotateShape, Shape):
class PolygonShape(SidedShape):
- name = "Polygon-Star"
+ name = _("Polygon-Star")
def get_shape_factor(self, oangle):
oangle_mod = fmod(oangle + self.cp.shape_rotation_radians, self.angle_of_each_side)
@@ -128,7 +138,7 @@ class PolygonShape(SidedShape):
class SineShape(SidedShape):
# Sine wave on a circle ring.
- name = "Sine"
+ name = _("Sine")
def get_shape_factor(self, oangle):
oangle_mod = fmod(oangle + self.cp.shape_rotation_radians, self.angle_of_each_side)
@@ -138,7 +148,7 @@ class SineShape(SidedShape):
class BumpShape(SidedShape):
# Semi-circles, based on a polygon
- name = "Bumps"
+ name = _("Bumps")
def get_shape_factor(self, oangle):
oangle_mod = fmod(oangle + self.cp.shape_rotation_radians, self.angle_of_each_side)
@@ -243,7 +253,7 @@ class AbstractShapeFromParts(Shape):
class RackShape(CanRotateShape, AbstractShapeFromParts):
- name = "Rack"
+ name = _("Rack")
def configure(self, img, pp, cp, drawing_no):
Shape.configure(self, img, pp, cp, drawing_no)
@@ -287,7 +297,7 @@ class RackShape(CanRotateShape, AbstractShapeFromParts):
class FrameShape(AbstractShapeFromParts):
- name = "Frame"
+ name = _("Frame")
def configure(self, img, pp, cp, drawing_no):
Shape.configure(self, img, pp, cp, drawing_no)
@@ -376,7 +386,7 @@ class SelectionToPath:
class SelectionShape(Shape):
- name = "Selection"
+ name = _("Selection")
def __init__(self):
self.path = None
@@ -466,7 +476,7 @@ def get_gradient_samples(num_samples):
class PencilTool():
- name = "Pencil"
+ name = _("Pencil")
can_color = True
def draw(self, layer, strokes, color=None):
@@ -482,7 +492,7 @@ class PencilTool():
class AirBrushTool():
- name = "AirBrush"
+ name = _("AirBrush")
can_color = True
def draw(self, layer, strokes, color=None):
@@ -542,12 +552,12 @@ class PreviewTool:
pdb.gimp_pencil(layer, len(strokes), strokes)
pdb.gimp_context_pop()
- name = "Preview"
+ name = _("Preview")
can_color = False
class StrokeTool(AbstractStrokeTool):
- name = "Stroke"
+ name = _("Stroke")
can_color = True
def prepare_stroke_context(self, color):
@@ -575,10 +585,10 @@ class StrokePaintTool(AbstractStrokeTool):
tools = [
PreviewTool(),
- StrokePaintTool("PaintBrush", "gimp-paintbrush"),
+ StrokePaintTool(_("PaintBrush"), "gimp-paintbrush"),
PencilTool(), AirBrushTool(), StrokeTool(),
- StrokePaintTool("Ink", 'gimp-ink'),
- StrokePaintTool("MyPaintBrush", 'gimp-mybrush')
+ StrokePaintTool(_("Ink"), 'gimp-ink'),
+ StrokePaintTool(_("MyPaintBrush"), 'gimp-mybrush')
# Clone does not work properly when an image is not set. When that happens, drawing fails, and
# I am unable to catch the error. This causes the plugin to crash, and subsequent problems with undo.
# StrokePaintTool("Clone", 'gimp-clone', False)
@@ -807,21 +817,21 @@ class RouletteCurveType(CurveType):
class SpyroCurveType(RouletteCurveType):
- name = "Spyrograph"
+ name = _("Spyrograph")
def get_angle_factor(self, cp):
return - (cp.fixed_gear_teeth - cp.moving_gear_teeth) / float(cp.moving_gear_teeth)
class EpitrochoidCurvetype(RouletteCurveType):
- name = "Epitrochoid"
+ name = _("Epitrochoid")
def get_angle_factor(self, cp):
return (cp.fixed_gear_teeth + cp.moving_gear_teeth) / float(cp.moving_gear_teeth)
class SineCurveType(CurveType):
- name = "Sine"
+ name = _("Sine")
def get_angle_factor(self, cp):
return cp.fixed_gear_teeth / float(cp.moving_gear_teeth)
@@ -841,7 +851,7 @@ class SineCurveType(CurveType):
class LissaCurveType:
- name = "Lissajous"
+ name = _("Lissajous")
def get_angle_factor(self, cp):
return cp.fixed_gear_teeth / float(cp.moving_gear_teeth)
@@ -1085,23 +1095,23 @@ class SpyroWindow(gtk.Window):
# Curve type
row = 0
- label_in_table("Curve Type", table, row,
- "An Epitrochoid pattern is when the moving gear is on the outside of the fixed
gear.")
+ label_in_table(_("Curve Type"), table, row,
+ _("An Epitrochoid pattern is when the moving gear is on the outside of the fixed
gear."))
self.curve_type_combo = set_combo_in_table([ct.name for ct in curve_types], table, row,
self.curve_type_changed)
row += 1
- label_in_table("Tool", table, row,
- "The tool with which to draw the pattern."
- "The Preview tool just draws quickly.")
+ label_in_table(_("Tool"), table, row,
+ _("The tool with which to draw the pattern."
+ "The Preview tool just draws quickly."))
self.tool_combo = set_combo_in_table([tool.name for tool in tools], table, row,
self.tool_combo_changed)
- self.long_gradient_checkbox = gtk.CheckButton("Long Gradient")
+ self.long_gradient_checkbox = gtk.CheckButton(_("Long Gradient"))
self.long_gradient_checkbox.set_tooltip_text(
- "When unchecked, the current tool settings will be used. "
- "When checked, will use a long gradient to match the length of the pattern, "
- "based on current gradient and repeat mode from the gradient tool settings."
+ _("When unchecked, the current tool settings will be used. "
+ "When checked, will use a long gradient to match the length of the pattern, "
+ "based on current gradient and repeat mode from the gradient tool settings.")
)
self.long_gradient_checkbox.set_border_width(0)
table.attach(self.long_gradient_checkbox, 2, 3, row, row + 1, xoptions=0, yoptions=0)
@@ -1119,11 +1129,11 @@ class SpyroWindow(gtk.Window):
hbox = gtk.HBox(spacing=5)
hbox.set_border_width(5)
- label = gtk.Label("Specify pattern using one of the following tabs:")
- label.set_tooltip_text(
+ label = gtk.Label(_("Specify pattern using one of the following tabs:"))
+ label.set_tooltip_text(_(
"The pattern is specified only by the active tab. Toy Kit is similar to Gears, "
"but it uses gears and hole numbers which are found in toy kits. "
- "If you follow the instructions from the toy kit manuals, results should be similar.")
+ "If you follow the instructions from the toy kit manuals, results should be similar."))
hbox.pack_start(label)
label.show()
@@ -1144,27 +1154,27 @@ class SpyroWindow(gtk.Window):
# Teeth
row = 0
- fixed_gear_tooltip = (
+ fixed_gear_tooltip = _(
"Number of teeth of fixed gear. The size of the fixed gear is "
"proportional to the number of teeth."
)
- label_in_table("Fixed Gear Teeth", gear_table, row, fixed_gear_tooltip)
+ label_in_table(_("Fixed Gear Teeth"), gear_table, row, fixed_gear_tooltip)
self.outer_teeth_adj = gtk.Adjustment(self.p.outer_teeth, 10, 180, 1)
hscale_in_table(self.outer_teeth_adj, gear_table, row, self.outer_teeth_changed)
row += 1
- moving_gear_tooltip = (
+ moving_gear_tooltip = _(
"Number of teeth of moving gear. The size of the moving gear is "
"proportional to the number of teeth."
)
- label_in_table("Moving Gear Teeth", gear_table, row, moving_gear_tooltip)
+ label_in_table(_("Moving Gear Teeth"), gear_table, row, moving_gear_tooltip)
self.inner_teeth_adj = gtk.Adjustment(self.p.inner_teeth, 2, 100, 1)
hscale_in_table(self.inner_teeth_adj, gear_table, row, self.inner_teeth_changed)
row += 1
- label_in_table("Hole percent", gear_table, row,
- "How far is the hole from the center of the moving gear. "
- "100% means that the hole is at the gear's edge.")
+ label_in_table(_("Hole percent"), gear_table, row,
+ _("How far is the hole from the center of the moving gear. "
+ "100% means that the hole is at the gear's edge."))
self.hole_percent_adj = gtk.Adjustment(self.p.hole_percent, 2.5, 100.0, 0.5)
self.hole_percent_myscale = hscale_in_table(self.hole_percent_adj, gear_table,
row, self.hole_percent_changed, digits=1)
@@ -1174,31 +1184,32 @@ class SpyroWindow(gtk.Window):
kit_table = create_table(3, 3, 5)
row = 0
- label_in_table("Fixed Gear Teeth", kit_table, row, fixed_gear_tooltip)
+ label_in_table(_("Fixed Gear Teeth"), kit_table, row, fixed_gear_tooltip)
self.kit_outer_teeth_combo = set_combo_in_table([str(t) for t in ring_teeth], kit_table, row,
self.kit_outer_teeth_combo_changed)
row += 1
- label_in_table("Moving Gear Teeth", kit_table, row, moving_gear_tooltip)
+ label_in_table(_("Moving Gear Teeth"), kit_table, row, moving_gear_tooltip)
self.kit_inner_teeth_combo = set_combo_in_table([str(t) for t in wheel_teeth], kit_table, row,
self.kit_inner_teeth_combo_changed)
row += 1
- label_in_table("Hole Number", kit_table, row, "Hole #1 is at the edge of the gear. "
- "The maximum hole number is near the center. "
- "The maximum hole number is different for each gear.")
+ label_in_table(_("Hole Number"), kit_table, row,
+ _("Hole #1 is at the edge of the gear. "
+ "The maximum hole number is near the center. "
+ "The maximum hole number is different for each gear."))
self.kit_hole_adj = gtk.Adjustment(self.p.hole_number, 1, self.p.kit_max_hole_number(), 1)
self.kit_hole_myscale = hscale_in_table(self.kit_hole_adj, kit_table, row, self.kit_hole_changed)
# Add tables as childs of the pattern notebook
pattern_notation_page[TOY_KIT_NOTATION] = self.pattern_notebook.append_page(kit_table)
- self.pattern_notebook.set_tab_label_text(kit_table, 'Toy Kit')
+ self.pattern_notebook.set_tab_label_text(kit_table, _("Toy Kit"))
self.pattern_notebook.set_tab_label_packing(kit_table, 0, 0, gtk.PACK_END)
kit_table.show()
pattern_notation_page[GEAR_NOTATION] = self.pattern_notebook.append_page(gear_table)
- self.pattern_notebook.set_tab_label_text(gear_table, 'Gears')
+ self.pattern_notebook.set_tab_label_text(gear_table, _("Gears"))
self.pattern_notebook.set_tab_label_packing(gear_table, 0, 0, gtk.PACK_END)
gear_table.show()
@@ -1210,9 +1221,9 @@ class SpyroWindow(gtk.Window):
pattern_table = create_table(1, 3, 5)
row = 0
- label_in_table("Rotation", pattern_table, row,
- "Rotation of the pattern, in degrees. "
- "The starting position of the moving gear in the fixed gear.")
+ label_in_table(_("Rotation"), pattern_table, row,
+ _("Rotation of the pattern, in degrees. "
+ "The starting position of the moving gear in the fixed gear."))
self.pattern_rotation_adj, myscale = rotation_in_table(
self.p.pattern_rotation, pattern_table, row, self.pattern_rotation_changed
)
@@ -1234,27 +1245,27 @@ class SpyroWindow(gtk.Window):
table = create_table(4, 2, 10)
row = 0
- label_in_table("Shape", table, row,
- "The shape of the fixed gear to be used inside current selection. "
- "Rack is a long round-edged shape provided in the toy kits. "
- "Frame hugs the boundaries of the rectangular selection, "
- "use hole=100 in Gear notation to touch boundary. "
- "Selection will hug boundaries of current selection - try something
non-rectangular.")
+ label_in_table(_("Shape"), table, row,
+ _("The shape of the fixed gear to be used inside current selection. "
+ "Rack is a long round-edged shape provided in the toy kits. "
+ "Frame hugs the boundaries of the rectangular selection, "
+ "use hole=100 in Gear notation to touch boundary. "
+ "Selection will hug boundaries of current selection - try something
non-rectangular."))
self.shape_combo = set_combo_in_table([shape.name for shape in shapes], table, row,
self.shape_combo_changed)
row += 1
- label_in_table("Sides", table, row, "Number of sides of the shape.")
+ label_in_table(_("Sides"), table, row, _("Number of sides of the shape."))
self.sides_adj = gtk.Adjustment(self.p.sides, 3, 16, 1)
self.sides_myscale = hscale_in_table(self.sides_adj, table, row, self.sides_changed)
row += 1
- label_in_table("Morph", table, row, "Morph fixed gear shape. Only affects some of the shapes.")
+ label_in_table(_("Morph"), table, row, _("Morph fixed gear shape. Only affects some of the
shapes."))
self.morph_adj = gtk.Adjustment(self.p.morph, 0.0, 1.0, 0.01)
self.morph_myscale = hscale_in_table(self.morph_adj, table, row, self.morph_changed, digits=2)
row += 1
- label_in_table("Rotation", table, row, "Rotation of the fixed gear, in degrees")
+ label_in_table(_("Rotation"), table, row, _("Rotation of the fixed gear, in degrees"))
self.shape_rotation_adj, self.shape_rotation_myscale = rotation_in_table(
self.p.shape_rotation, table, row, self.shape_rotation_changed
)
@@ -1269,15 +1280,15 @@ class SpyroWindow(gtk.Window):
table = create_table(2, 2, 10)
row = 0
- label_in_table("Margin (px)", table, row, "Margin from edge of selection.")
+ label_in_table(_("Margin (px)"), table, row, _("Margin from edge of selection."))
self.margin_adj = gtk.Adjustment(self.p.margin_pixels, 0, max(img.height, img.width), 1)
hscale_in_table(self.margin_adj, table, row, self.margin_changed)
row += 1
- self.equal_w_h_checkbox = gtk.CheckButton("Make width and height equal")
+ self.equal_w_h_checkbox = gtk.CheckButton(_("Make width and height equal"))
self.equal_w_h_checkbox.set_tooltip_text(
- "When unchecked, the pattern will fill the current image or selection. "
- "When checked, the pattern will have same width and height, and will be centered."
+ _("When unchecked, the pattern will fill the current image or selection. "
+ "When checked, the pattern will have same width and height, and will be centered.")
)
self.equal_w_h_checkbox.set_border_width(15)
table.attach(self.equal_w_h_checkbox, 0, 2, row, row + 1)
@@ -1300,18 +1311,18 @@ class SpyroWindow(gtk.Window):
def dialog_button_box():
hbox = gtk.HBox(homogeneous=True, spacing=20)
- add_button_to_box(hbox, "Redraw", self.redraw,
- "If you change the settings of a tool, change color, or change the selection, "
- "press this to preview how the pattern looks.")
- add_button_to_box(hbox, "Reset", self.reset_params)
- add_button_to_box(hbox, "Cancel", self.cancel_window)
- self.ok_btn = add_button_to_box(hbox, "OK", self.ok_window)
+ add_button_to_box(hbox, _("Redraw"), self.redraw,
+ _("If you change the settings of a tool, change color, or change the
selection, "
+ "press this to preview how the pattern looks."))
+ add_button_to_box(hbox, _("Reset"), self.reset_params)
+ add_button_to_box(hbox, _("Cancel"), self.cancel_window)
+ self.ok_btn = add_button_to_box(hbox, _("OK"), self.ok_window)
- self.keep_separate_layer_checkbox = gtk.CheckButton("Keep\nLayer")
+ self.keep_separate_layer_checkbox = gtk.CheckButton(_("Keep\nLayer"))
self.keep_separate_layer_checkbox.set_tooltip_text(
- "If checked, then once OK is pressed, the spyro layer is kept, and the plugin exits quickly.
"
- "If unchecked, the spyro layer is deleted, and the pattern is redrawn on the layer that was "
- "active when the plugin was launched."
+ _("If checked, then once OK is pressed, the spyro layer is kept, and the plugin exits
quickly. "
+ "If unchecked, the spyro layer is deleted, and the pattern is redrawn on the layer that
was "
+ "active when the plugin was launched.")
)
hbox.add(self.keep_separate_layer_checkbox)
self.keep_separate_layer_checkbox.show()
@@ -1323,7 +1334,7 @@ class SpyroWindow(gtk.Window):
# Create the dialog
gtk.Window.__init__(self)
- self.set_title("Spyrogimp")
+ self.set_title(_("Spyrogimp"))
self.set_default_size(350, -1)
self.set_border_width(10)
# self.set_keep_above(True) # keep the window on top
@@ -1332,7 +1343,7 @@ class SpyroWindow(gtk.Window):
vbox = gtk.VBox(spacing=10, homogeneous=False)
self.add(vbox)
- box = gimpui.HintBox("Draw spyrographs using current tool settings and selection.")
+ box = gimpui.HintBox(_("Draw spyrographs using current tool settings and selection."))
vbox.pack_start(box, expand=False)
box.show()
@@ -1345,13 +1356,13 @@ class SpyroWindow(gtk.Window):
self.main_notebook.set_border_width(5)
pattern_frame = pattern_notation_frame()
- self.main_notebook.append_page(pattern_frame, gtk.Label("Curve Pattern"))
+ self.main_notebook.append_page(pattern_frame, gtk.Label(_("Curve Pattern")))
pattern_frame.show()
fixed_g_page = fixed_gear_page()
- self.main_notebook.append_page(fixed_g_page, gtk.Label("Fixed Gear"))
+ self.main_notebook.append_page(fixed_g_page, gtk.Label(_("Fixed Gear")))
fixed_g_page.show()
size_p = size_page()
- self.main_notebook.append_page(size_p, gtk.Label("Size"))
+ self.main_notebook.append_page(size_p, gtk.Label(_("Size")))
size_p.show()
vbox.add(self.main_notebook)
@@ -1528,7 +1539,6 @@ class SpyroWindow(gtk.Window):
self.hole_percent_myscale.set_sensitive(False)
self.kit_hole_myscale.set_sensitive(False)
-
def curve_type_changed(self, val):
self.p.curve_type = val.get_active()
self.curve_type_side_effects()
@@ -1637,7 +1647,7 @@ class SpyroWindow(gtk.Window):
# Progress bar of plugin window.
def progress_start(self):
- self.progress_bar.set_text("Rendering Pattern")
+ self.progress_bar.set_text(_("Rendering Pattern"))
self.progress_bar.set_fraction(0.0)
pdb.gimp_displays_flush()
@@ -1649,7 +1659,7 @@ class SpyroWindow(gtk.Window):
self.progress_bar.set_fraction(self.engine.fraction_done())
def progress_unknown(self):
- self.progress_bar.set_text("Please wait : Rendering Pattern")
+ self.progress_bar.set_text(_("Please wait : Rendering Pattern"))
self.progress_bar.pulse()
pdb.gimp_displays_flush()
@@ -1758,7 +1768,7 @@ class SpyrogimpPlusPlugin(gimpplugin.plugin):
def query(self):
plugin_name = "plug_in_spyrogimp"
- label = "Spyrogimp..."
+ label = N_("Spyrogimp...")
menu = "<Image>/Filters/Render/"
params = [
@@ -1767,7 +1777,7 @@ class SpyrogimpPlusPlugin(gimpplugin.plugin):
(PDB_IMAGE, "image", "Input image"),
(PDB_DRAWABLE, "drawable", "Input drawable"),
(PDB_INT32, "curve_type",
- "The curve type { Spyrograph (0), Epitrochoid (1), Sine (2), Lissajous(3) }"),
+ "The curve type { Spyrograph (0), Epitrochoid (1), Sine (2), Lissajous(3) }"),
(PDB_INT32, "shape", "Shape of fixed gear"),
(PDB_INT32, "sides", "Number of sides of fixed gear (3 or greater). Only used by some shapes."),
(PDB_FLOAT, "morph", "Morph shape of fixed gear, between 0 and 1. Only used by some shapes."),
@@ -1785,9 +1795,11 @@ class SpyrogimpPlusPlugin(gimpplugin.plugin):
"Only applicable to some of the tools.")
]
+ gimp.domain_register("gimp20-python", gimp.locale_directory)
+
gimp.install_procedure(
plugin_name,
- "Draw spyrographs using current tool settings and selection.",
+ N_("Draw spyrographs using current tool settings and selection."),
"Uses current tool settings to draw Spyrograph patterns. "
"The size and location of the pattern is based on the current selection.",
"Elad Shahar",
diff --git a/po-python/POTFILES.in b/po-python/POTFILES.in
index c6cd45e625..a6dcefa165 100644
--- a/po-python/POTFILES.in
+++ b/po-python/POTFILES.in
@@ -16,3 +16,4 @@ plug-ins/pygimp/plug-ins/palette-to-gradient.py
plug-ins/pygimp/plug-ins/py-slice.py
plug-ins/pygimp/plug-ins/python-console.py
plug-ins/pygimp/plug-ins/shadow_bevel.py
+plug-ins/pygimp/plug-ins/spyro_plus.py
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]