<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://okapiframework.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Penyaskito</id>
	<title>Okapi Framework - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://okapiframework.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Penyaskito"/>
	<link rel="alternate" type="text/html" href="http://okapiframework.org/wiki/index.php/Special:Contributions/Penyaskito"/>
	<updated>2026-04-17T15:32:53Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.38.2</generator>
	<entry>
		<id>http://okapiframework.org/wiki/index.php?title=Rainbow&amp;diff=880</id>
		<title>Rainbow</title>
		<link rel="alternate" type="text/html" href="http://okapiframework.org/wiki/index.php?title=Rainbow&amp;diff=880"/>
		<updated>2021-05-25T09:41:04Z</updated>

		<summary type="html">&lt;p&gt;Penyaskito: Edited links to the new distribution channel&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Rainbow3.png|thumb|Rainbow on Windows 7]]&lt;br /&gt;
{| cellpadding=&amp;quot;8&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
[[Image:RainbowIcon.png]]&lt;br /&gt;
|&lt;br /&gt;
Help Topics:&lt;br /&gt;
|&lt;br /&gt;
* [[Rainbow - Main Window|Main Window]]&lt;br /&gt;
* [[Rainbow - Main Menu|Main Menu]]&lt;br /&gt;
* [[Rainbow - Usage|Usage]]&lt;br /&gt;
|&lt;br /&gt;
* [[Rainbow - User Preferences|User Preferences]]&lt;br /&gt;
* [[Rainbow - Command Line|Command Line]]&lt;br /&gt;
* [[Rainbow - Utilities|Utilities]]&lt;br /&gt;
|&lt;br /&gt;
* [[Rainbow - Edit / Execute Pipeline|Edit / Execute Pipeline]]&lt;br /&gt;
* [[Rainbow - Input Document Properties|Input Document Properties]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
Rainbow is a cross-platform application to launch different utilities to help you perform various localization-relate tasks.&lt;br /&gt;
&lt;br /&gt;
Its features include for example:&lt;br /&gt;
&lt;br /&gt;
* Creation of translation packages (e.g. XLIFF, OmegaT, RTF).&lt;br /&gt;
* Conversion of character encoding or line-breaks.&lt;br /&gt;
* Conversion to various file formats.&lt;br /&gt;
* Terminology extraction and quality check reports.&lt;br /&gt;
* Batch translation using various MT and TM sources.&lt;br /&gt;
* Pseudo-translation and various modifications of the source text for testing.&lt;br /&gt;
* Apply XSLT templates in batch mode and comparison between different translations.&lt;br /&gt;
* Search and replace on filtered text, as well as source and translation alignment.&lt;br /&gt;
* [[Rainbow - Utilities|And much more...]]&lt;br /&gt;
&lt;br /&gt;
Like other Okapi applications, Rainbow uses the components called &amp;quot;[[Glossary#Filter|filters]]&amp;quot; that take input files in a given native format and extract its translatable content into common resources that the Okapi tools can manipulate and modify. There are filters for many formats, for example: [[OpenOffice Filter|OpenOffice]], [[XML Filter|XML]], [[HTML Filter|HTML]], [[Properties Filter|Properties]], [[DTD Filter|DTD]], [[OpenXML Filter|MS Office]], [[Table Filter|tables]], etc. Many translation-related formats are also supported: [[XLIFF Filter|XLIFF]], [[PO Filter|PO]], [[TS Filter|TS]], [[TMX Filter|TMX]], [[TTX Filter|TTX]], etc.&lt;br /&gt;
&lt;br /&gt;
Rainbow also uses the Okapi components called &amp;quot;[[Connectors|connectors]]&amp;quot;: They allow you to access different type of local or remote translation resources. For example: [[Google MT v2 Connector|Google MT]], [[Microsoft Translator Connector|Microsoft Translator]], [[OpenTran Translation Repository Connector|Open-Tran]], [[MyMemory TM Connector|MyMemory]], [[Translate Toolkit TM Connector|Translate Toolkit TM]], [[Apertium MT Connector|Apertium]], [[TDA Translation Repository Connector|TDA-Search]], and more.&lt;br /&gt;
&lt;br /&gt;
Note that, in addition to third-party TM access, Rainbow can also use Okapi's own TM engine: the [[Pensieve TM]].&lt;br /&gt;
Another feature of Rainbow is to allow the user to build &amp;quot;[[How to Create a Pipeline in Rainbow|pipelines]]&amp;quot; of tasks using simple components called &amp;quot;[[Steps|steps]]&amp;quot; that perform well-defined limited actions. You can chain those steps to execute many tasks in a single process.&lt;br /&gt;
&lt;br /&gt;
==Download==&lt;br /&gt;
&lt;br /&gt;
Rainbow is available from the okapi-apps distribution:&lt;br /&gt;
&lt;br /&gt;
* '''Stable release: https://okapiframework.org/binaries/main/&lt;br /&gt;
&lt;br /&gt;
* Development release (snapshot): https://gitlab.com/okapiframework/okapi/-/jobs/artifacts/dev/browse/deployment/maven/done&lt;br /&gt;
&lt;br /&gt;
[[Category:Rainbow]]&lt;/div&gt;</summary>
		<author><name>Penyaskito</name></author>
	</entry>
	<entry>
		<id>http://okapiframework.org/wiki/index.php?title=JSON_Filter&amp;diff=855</id>
		<title>JSON Filter</title>
		<link rel="alternate" type="text/html" href="http://okapiframework.org/wiki/index.php?title=JSON_Filter&amp;diff=855"/>
		<updated>2021-03-10T08:18:37Z</updated>

		<summary type="html">&lt;p&gt;Penyaskito: Added examples for excluding a key or a inner JSON structure.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Filters Header}}&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
The JSON Filter is an Okapi component that implements the IFilter interface for JSON (Javascript Object Notation).&lt;br /&gt;
&lt;br /&gt;
The implementation is based on the JSON specifications: http://www.json.org/&lt;br /&gt;
&lt;br /&gt;
The following is an example of a very simple JSON file. The translatable text is highlighted:&lt;br /&gt;
&lt;br /&gt;
 {&amp;quot;menu&amp;quot;: {&lt;br /&gt;
   &amp;quot;value&amp;quot;: &amp;quot;&amp;lt;span class=&amp;quot;hi&amp;quot;&amp;gt;File&amp;lt;/span&amp;gt;&amp;quot;,&lt;br /&gt;
    &amp;quot;popup&amp;quot;: {&lt;br /&gt;
       &amp;quot;menuitem&amp;quot;: [&lt;br /&gt;
          {&amp;quot;value&amp;quot;: &amp;quot;&amp;lt;span class=&amp;quot;hi&amp;quot;&amp;gt;New&amp;lt;/span&amp;gt;&amp;quot;},&lt;br /&gt;
          {&amp;quot;value&amp;quot;: &amp;quot;&amp;lt;span class=&amp;quot;hi&amp;quot;&amp;gt;Open&amp;lt;/span&amp;gt;&amp;quot;},&lt;br /&gt;
          {&amp;quot;value&amp;quot;: &amp;quot;&amp;lt;span class=&amp;quot;hi&amp;quot;&amp;gt;Close&amp;lt;/span&amp;gt;&amp;quot;}&lt;br /&gt;
       ]&lt;br /&gt;
    }&lt;br /&gt;
 }}&lt;br /&gt;
&lt;br /&gt;
==Processing Details==&lt;br /&gt;
&lt;br /&gt;
===Input Encoding===&lt;br /&gt;
&lt;br /&gt;
JSON files are normally in one of the Unicode encoding, but the filter supports any encoding. It decides which encoding to use for the input file using the following logic:&lt;br /&gt;
&lt;br /&gt;
* If the file has a Unicode Byte-Order-Mark:&lt;br /&gt;
** Then, the corresponding encoding (e.g. UTF-8, UTF-16, etc.) is used.&lt;br /&gt;
* Else, if a header entry with a &amp;lt;code&amp;gt;charset&amp;lt;/code&amp;gt; declaration exists in the first 1000 characters of the file:&lt;br /&gt;
** If the value of the &amp;lt;code&amp;gt;charset&amp;lt;/code&amp;gt; is &amp;quot;&amp;lt;code&amp;gt;charset&amp;lt;/code&amp;gt;&amp;quot; (case insensitive):&lt;br /&gt;
*** Then the file is likely to be a template with no encoding declared, so the current encoding (auto-detected or default) is used.&lt;br /&gt;
*** Else, the declared encoding is used. Note that if the encoding has been detected from a Byte-Order-Mark and the encoding declared in the header entry does not match, a warning is generated and the encoding of the Byte-Order-Mark is used.&lt;br /&gt;
* Otherwise, the input encoding used is the default encoding that was specified when setting the filter options.&lt;br /&gt;
&lt;br /&gt;
===Output Encoding===&lt;br /&gt;
&lt;br /&gt;
If the output encoding is UTF-8:&lt;br /&gt;
&lt;br /&gt;
* If the input encoding was also UTF-8, a Byte-Order-Mark is used for the output document only if one was detected in the input document.&lt;br /&gt;
* If the input encoding was not UTF-8, no Byte-Order-Mark is used in the output document.&lt;br /&gt;
&lt;br /&gt;
===Line-Breaks===&lt;br /&gt;
&lt;br /&gt;
The type of line-breaks of the output is the same as the one of the original input.&lt;br /&gt;
&lt;br /&gt;
===Comments===&lt;br /&gt;
&lt;br /&gt;
Though not technically legal in JSON these comment types are supported:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
* // comment&lt;br /&gt;
* # comment&lt;br /&gt;
* /* comment */&lt;br /&gt;
* &amp;amp;lt;!-- comment --&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
&lt;br /&gt;
=== Options Tab===&lt;br /&gt;
&lt;br /&gt;
====Stand-alone strings====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cite&amp;gt;Extract strings without associated key&amp;lt;/cite&amp;gt; &amp;amp;mdash; Set this option to extract string that are not associated directly to a key value.&lt;br /&gt;
&lt;br /&gt;
====Strings with keys====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cite&amp;gt;Extract all key/strings pairs&amp;lt;/cite&amp;gt; &amp;amp;mdash; Set this option to extract all strings that have a key associated. If a regular expression for exceptions is defined, the strings that have a key matching the expression are not extracted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cite&amp;gt;Do not extract key/string pairs&amp;lt;/cite&amp;gt; &amp;amp;mdash; Set the option to not extract any string that has an associated key. If a regular expression for exceptions is defined, the strings that have a key matching the expression are extracted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cite&amp;gt;Excepted when the key matches the following regular expression&amp;lt;/cite&amp;gt; &amp;amp;mdash; Enter a regular expression that correspond to the keys that should have a behavior inverse to the default behavior you have selected for the key/strings pairs.&lt;br /&gt;
For example, you could exclude a key-value with &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt;.&lt;br /&gt;
In combination with &amp;lt;code&amp;gt;Use the full key path&amp;lt;/code&amp;gt; you can exclude all nested elements in a JSON structure with &amp;lt;code&amp;gt;^.*?/excludedStructure/.*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cite&amp;gt;Use the key as the resname&amp;lt;/cite&amp;gt; &amp;amp;mdash; Set this option to use the value of the key as the value of the name of the extracted item (&amp;lt;code&amp;gt;resname&amp;lt;/code&amp;gt; in XLIFF).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cite&amp;gt;Use the full key path&amp;lt;/cite&amp;gt; &amp;amp;mdash; Set this option to use the full key path in the &amp;lt;code&amp;gt;resname&amp;lt;/code&amp;gt;. For example: &amp;lt;code&amp;gt;/menu/value/popup/menuitem/value&amp;lt;/code&amp;gt;. The use key name as resname option must be set for this option to take effect. If enabled, exception regular expressions apply to the full path.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cite&amp;gt;Include leading &amp;quot;/&amp;quot; on key path&amp;lt;/cite&amp;gt; &amp;amp;mdash; Set this option to have a leading character '/' in the full key path.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cite&amp;gt;Regex matching keys that are notes, values of which to appear as &amp;lt;note&amp;gt; in XLIFF&amp;lt;/cite&amp;gt; &amp;amp;mdash; Specify regular expression. The values of the matching keys will be transferred to &amp;amp;lt;note&amp;gt; elements in XLIFF.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cite&amp;gt;Regex matching keys who's values are added as TextUnit Metadata&amp;lt;/cite&amp;gt; &amp;amp;mdash; Specify regular expression. The values of the matching keys will be written out as &amp;amp;lt;context-group&amp;gt; elements in XLIFF.&lt;br /&gt;
&lt;br /&gt;
===New Extraction Rules &amp;gt;= version M39===&lt;br /&gt;
&amp;lt;b&amp;gt;If specified these will override the corresponding rules above.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cite&amp;gt;Regex matching keys which are ID's (resname in XLIFF), &amp;lt;b&amp;gt;overrides &amp;amp;quot;use the key as resname&amp;amp;quot;&amp;lt;/b&amp;gt;&amp;lt;/cite&amp;gt; &amp;amp;mdash; Specify regular expression. The value of the matching key will be used as &amp;lt;code&amp;gt;resname&amp;lt;/code&amp;gt; in XLIFF.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cite&amp;gt;Regex matching keys who's values are extracted (&amp;lt;b&amp;gt;overrides &amp;amp;quot;extraction exceptions&amp;amp;quot;&amp;lt;/b&amp;gt;)&amp;lt;/cite&amp;gt; &amp;amp;mdash; Specify regular expression. The values of the matching keys will be extracted.&lt;br /&gt;
&lt;br /&gt;
===Content Processing Tab===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cite&amp;gt;Process text content with this sub-filter&amp;lt;/cite&amp;gt; &amp;amp;mdash; Specify an Okapi filter ID (e.g. &amp;lt;code&amp;gt;okf_html&amp;lt;/code&amp;gt;) to process the content of all translatable text with that filter. Leave this field blank for default behavior.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;cite&amp;gt;Find inline codes by patterns defined below&amp;lt;/cite&amp;gt; &amp;amp;mdash; Set this option to use the specified regular expressions on the text of the extracted items. Any match will be converted to an inline code.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' This option cannot be used together with the sub-filtering option.&lt;br /&gt;
&lt;br /&gt;
By default the expression is:&lt;br /&gt;
&lt;br /&gt;
 ((%(([-0+#]?)[-0+#]?)((\d\$)?)(([\d\*]*)(\.[\d\*]*)?)[dioxXucsfeEgGpn])&lt;br /&gt;
 |((\\r\\n)|\\a|\\b|\\f|\\n|\\r|\\t|\\v)&lt;br /&gt;
 |(\{\d.*?\}))&lt;br /&gt;
&lt;br /&gt;
{{CodeFinder Help}}&lt;br /&gt;
&lt;br /&gt;
==Limitations==&lt;br /&gt;
&lt;br /&gt;
Comments within a JSON string are parsed as part of the string content, not as comments. A configured subfilter will then process these as true comments (they will become part of the skeleton or whatever the filter is configured to do).&lt;br /&gt;
[[Category:Filters]]&lt;/div&gt;</summary>
		<author><name>Penyaskito</name></author>
	</entry>
</feed>