https://mw.lojban.org/index.php?title=ygyde&feed=atom&action=historyygyde - Revision history2024-03-28T16:41:58ZRevision history for this page on the wikiMediaWiki 1.38.4https://mw.lojban.org/index.php?title=ygyde&diff=100564&oldid=prevConversion script: Conversion script moved page Ygyde to ygyde: Converting page titles to lowercase2014-06-30T08:38:26Z<p>Conversion script moved page <a href="/papri/Ygyde" class="mw-redirect" title="Ygyde">Ygyde</a> to <a href="/papri/ygyde" title="ygyde">ygyde</a>: Converting page titles to lowercase</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<tr class="diff-title" lang="en">
<td colspan="1" style="background-color: #fff; color: #202122; text-align: center;">← Older revision</td>
<td colspan="1" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 08:38, 30 June 2014</td>
</tr><tr><td colspan="2" class="diff-notice" lang="en"><div class="mw-diff-empty">(No difference)</div>
</td></tr></table>Conversion scripthttps://mw.lojban.org/index.php?title=ygyde&diff=92416&oldid=prevGleki: Gleki moved page jbocre: Ygyde to Ygyde without leaving a redirect: Text replace - "jbocre: ([A-Z])" to "$1"2014-03-23T15:47:11Z<p>Gleki moved page <a href="/index.php?title=jbocre:_Ygyde&action=edit&redlink=1" class="new" title="jbocre: Ygyde (page does not exist)">jbocre: Ygyde</a> to <a href="/papri/Ygyde" class="mw-redirect" title="Ygyde">Ygyde</a> without leaving a redirect: Text replace - "jbocre: ([A-Z])" to "$1"</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Older revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 15:47, 23 March 2014</td>
</tr>
<!-- diff cache key mediawiki:diff::1.12:old-91554:rev-92416 -->
</table>Glekihttps://mw.lojban.org/index.php?title=ygyde&diff=91554&oldid=prevGleki: Text replace - "jbocre: ([A-K])" to "$1"2014-03-23T14:56:57Z<p>Text replace - "jbocre: ([A-K])" to "$1"</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Older revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 14:56, 23 March 2014</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l4">Line 4:</td>
<td colspan="2" class="diff-lineno">Line 4:</td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>:''Ygyde conlang is easy to pronounce, easy to understand, extremely easy to learn, and has unique ability to define all meanings in short (7 letters or less) compound words. Last, but not least, Ygyde is fun to work with. Some compound words are unintentionally funny. If you do not believe me, think of an English word, define it in Ygyde, and compare it with my definition. Is your definition better than mine?''</div></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>:''Ygyde conlang is easy to pronounce, easy to understand, extremely easy to learn, and has unique ability to define all meanings in short (7 letters or less) compound words. Last, but not least, Ygyde is fun to work with. Some compound words are unintentionally funny. If you do not believe me, think of an English word, define it in Ygyde, and compare it with my definition. Is your definition better than mine?''</div></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td></tr>
<tr><td class="diff-marker" data-marker="−"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>He sent the same thing to [[<del style="font-weight: bold; text-decoration: none;">jbocre: </del>Esperanto|esperanto]]-l: [http://groups.yahoo.com/group/esperanto-l/message/26558 He] then fails to listen to any rational comments, and responds with "Lojban is a religion".</div></td><td class="diff-marker" data-marker="+"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>He sent the same thing to [[Esperanto|esperanto]]-l: [http://groups.yahoo.com/group/esperanto-l/message/26558 He] then fails to listen to any rational comments, and responds with "Lojban is a religion".</div></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Problems with Ygyde:</div></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Problems with Ygyde:</div></td></tr>
<!-- diff cache key mediawiki:diff::1.12:old-91428:rev-91554 -->
</table>Glekihttps://mw.lojban.org/index.php?title=ygyde&diff=91428&oldid=prevGleki: Text replace - "jbocre: ([L-Z])" to "$1"2014-03-23T14:56:18Z<p>Text replace - "jbocre: ([L-Z])" to "$1"</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Older revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 14:56, 23 March 2014</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l17">Line 17:</td>
<td colspan="2" class="diff-lineno">Line 17:</td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* The author has been rudely spamming USENET groups and various conlang mailing lists with that same mail. (And apparently now he's spamming individuals too).</div></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* The author has been rudely spamming USENET groups and various conlang mailing lists with that same mail. (And apparently now he's spamming individuals too).</div></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td></tr>
<tr><td class="diff-marker" data-marker="−"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* It tries to introduce a new 'alphabet' made up of nonsensical characters (specifically non-[[<del style="font-weight: bold; text-decoration: none;">jbocre: </del>Unicode|Unicode]] ones)</div></td><td class="diff-marker" data-marker="+"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* It tries to introduce a new 'alphabet' made up of nonsensical characters (specifically non-[[Unicode|Unicode]] ones)</div></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>** In particular, the only difference between 'full stop' and 'octal point' is size, something which would be nigh impossible to get right by hand. (Update: now the octal point looks like a broken pipe, which means that a lot of cute smiley faces appear in everyday writing. For example, "differential" appears as :9 )</div></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>** In particular, the only difference between 'full stop' and 'octal point' is size, something which would be nigh impossible to get right by hand. (Update: now the octal point looks like a broken pipe, which means that a lot of cute smiley faces appear in everyday writing. For example, "differential" appears as :9 )</div></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td></tr>
<tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l25">Line 25:</td>
<td colspan="2" class="diff-lineno">Line 25:</td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Probably lots more...</div></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Probably lots more...</div></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td></tr>
<tr><td class="diff-marker" data-marker="−"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Yeah, lots more indeed. The "compounds" problem above is common to all "philosophical conlangs" (Lojban at least faces it properly). It's [[<del style="font-weight: bold; text-decoration: none;">jbocre: </del>Ro|Ro]] all over again... and [[aUI|aUI]] all over again... and possibly [[babm|babm]] all over again... ''--mi'e [[User:Mark Shoulson|.mark.]]''</div></td><td class="diff-marker" data-marker="+"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Yeah, lots more indeed. The "compounds" problem above is common to all "philosophical conlangs" (Lojban at least faces it properly). It's [[Ro|Ro]] all over again... and [[aUI|aUI]] all over again... and possibly [[babm|babm]] all over again... ''--mi'e [[User:Mark Shoulson|.mark.]]''</div></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td></tr>
<tr><td class="diff-marker" data-marker="−"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>'''''[[<del style="font-weight: bold; text-decoration: none;">jbocre: </del>WikiPolicy|WikiMaster]]'s Note:''' When someone designs an IAL, and they go and pick on Lojban in a context of "Mine is bigger/better/cooler!", the Wiki is an acceptable place to pick on their IAL.''</div></td><td class="diff-marker" data-marker="+"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>'''''[[WikiPolicy|WikiMaster]]'s Note:''' When someone designs an IAL, and they go and pick on Lojban in a context of "Mine is bigger/better/cooler!", the Wiki is an acceptable place to pick on their IAL.''</div></td></tr>
<!-- diff cache key mediawiki:diff::1.12:old-89071:rev-91428 -->
</table>Glekihttps://mw.lojban.org/index.php?title=ygyde&diff=89071&oldid=prevGleki: Text replace - "jbocre: b" to "b"2014-03-23T12:51:04Z<p>Text replace - "jbocre: b" to "b"</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Older revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 12:51, 23 March 2014</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l25">Line 25:</td>
<td colspan="2" class="diff-lineno">Line 25:</td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Probably lots more...</div></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Probably lots more...</div></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td></tr>
<tr><td class="diff-marker" data-marker="−"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Yeah, lots more indeed. The "compounds" problem above is common to all "philosophical conlangs" (Lojban at least faces it properly). It's [[jbocre: Ro|Ro]] all over again... and [[aUI|aUI]] all over again... and possibly [[<del style="font-weight: bold; text-decoration: none;">jbocre: </del>babm|babm]] all over again... ''--mi'e [[User:Mark Shoulson|.mark.]]''</div></td><td class="diff-marker" data-marker="+"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Yeah, lots more indeed. The "compounds" problem above is common to all "philosophical conlangs" (Lojban at least faces it properly). It's [[jbocre: Ro|Ro]] all over again... and [[aUI|aUI]] all over again... and possibly [[babm|babm]] all over again... ''--mi'e [[User:Mark Shoulson|.mark.]]''</div></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>'''''[[jbocre: WikiPolicy|WikiMaster]]'s Note:''' When someone designs an IAL, and they go and pick on Lojban in a context of "Mine is bigger/better/cooler!", the Wiki is an acceptable place to pick on their IAL.''</div></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>'''''[[jbocre: WikiPolicy|WikiMaster]]'s Note:''' When someone designs an IAL, and they go and pick on Lojban in a context of "Mine is bigger/better/cooler!", the Wiki is an acceptable place to pick on their IAL.''</div></td></tr>
<!-- diff cache key mediawiki:diff::1.12:old-88925:rev-89071 -->
</table>Glekihttps://mw.lojban.org/index.php?title=ygyde&diff=88925&oldid=prevGleki: Text replace - "jbocre: c" to "c"2014-03-23T12:36:28Z<p>Text replace - "jbocre: c" to "c"</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Older revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 12:36, 23 March 2014</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l20">Line 20:</td>
<td colspan="2" class="diff-lineno">Line 20:</td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>** In particular, the only difference between 'full stop' and 'octal point' is size, something which would be nigh impossible to get right by hand. (Update: now the octal point looks like a broken pipe, which means that a lot of cute smiley faces appear in everyday writing. For example, "differential" appears as :9 )</div></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>** In particular, the only difference between 'full stop' and 'octal point' is size, something which would be nigh impossible to get right by hand. (Update: now the octal point looks like a broken pipe, which means that a lot of cute smiley faces appear in everyday writing. For example, "differential" appears as :9 )</div></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td></tr>
<tr><td class="diff-marker" data-marker="−"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* All of the [[<del style="font-weight: bold; text-decoration: none;">jbocre: </del>color|color]] words are defined in terms of Red/Green/Blue, a notoriously horrible way of representing colors. For instance, what wavelength is the red?</div></td><td class="diff-marker" data-marker="+"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* All of the [[color|color]] words are defined in terms of Red/Green/Blue, a notoriously horrible way of representing colors. For instance, what wavelength is the red?</div></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* The compounds he proposes are useless, "woman" is "pretty feminine person"? Are ugly women not women? Are attractive drag queens women? ("Pretty feminine person" is a name, not a word... so it's just like some names that already exist.)</div></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* The compounds he proposes are useless, "woman" is "pretty feminine person"? Are ugly women not women? Are attractive drag queens women? ("Pretty feminine person" is a name, not a word... so it's just like some names that already exist.)</div></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td></tr>
<!-- diff cache key mediawiki:diff::1.12:old-86738:rev-88925 -->
</table>Glekihttps://mw.lojban.org/index.php?title=ygyde&diff=86738&oldid=prevGleki: Text replace - "jbocre: a" to "a"2014-03-23T11:35:52Z<p>Text replace - "jbocre: a" to "a"</p>
<table style="background-color: #fff; color: #202122;" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="en">
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Older revision</td>
<td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 11:35, 23 March 2014</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l1">Line 1:</td>
<td colspan="2" class="diff-lineno">Line 1:</td></tr>
<tr><td class="diff-marker" data-marker="−"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Yet another "[[<del style="font-weight: bold; text-decoration: none;">jbocre: </del>auxlang|IAL]]"</div></td><td class="diff-marker" data-marker="+"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Yet another "[[auxlang|IAL]]"</div></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>[http://www.medianet.pl/~andrew/ygyde/ygyde.htm The] author has the amazingly poor taste to go around sending the following email to Lojbanists:</div></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>[http://www.medianet.pl/~andrew/ygyde/ygyde.htm The] author has the amazingly poor taste to go around sending the following email to Lojbanists:</div></td></tr>
<tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l12">Line 12:</td>
<td colspan="2" class="diff-lineno">Line 12:</td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Uses base 8 for really really bad reasons.</div></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Uses base 8 for really really bad reasons.</div></td></tr>
<tr><td class="diff-marker" data-marker="−"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* The pronunciation guide only works for people who speak english (and with the same dialect as the author). This is essentially pure evil for a supposed [[<del style="font-weight: bold; text-decoration: none;">jbocre: </del>auxlang|IAL]].</div></td><td class="diff-marker" data-marker="+"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* The pronunciation guide only works for people who speak english (and with the same dialect as the author). This is essentially pure evil for a supposed [[auxlang|IAL]].</div></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td></tr>
<tr><td class="diff-marker" data-marker="−"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* No one speaks it. What's the point of an [[<del style="font-weight: bold; text-decoration: none;">jbocre: </del>auxlang|IAL]] which no one speaks?</div></td><td class="diff-marker" data-marker="+"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* No one speaks it. What's the point of an [[auxlang|IAL]] which no one speaks?</div></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* The author has been rudely spamming USENET groups and various conlang mailing lists with that same mail. (And apparently now he's spamming individuals too).</div></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* The author has been rudely spamming USENET groups and various conlang mailing lists with that same mail. (And apparently now he's spamming individuals too).</div></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td></tr>
<tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l25">Line 25:</td>
<td colspan="2" class="diff-lineno">Line 25:</td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Probably lots more...</div></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Probably lots more...</div></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td></tr>
<tr><td class="diff-marker" data-marker="−"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Yeah, lots more indeed. The "compounds" problem above is common to all "philosophical conlangs" (Lojban at least faces it properly). It's [[jbocre: Ro|Ro]] all over again... and [[<del style="font-weight: bold; text-decoration: none;">jbocre: </del>aUI|aUI]] all over again... and possibly [[jbocre: babm|babm]] all over again... ''--mi'e [[User:Mark Shoulson|.mark.]]''</div></td><td class="diff-marker" data-marker="+"></td><td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Yeah, lots more indeed. The "compounds" problem above is common to all "philosophical conlangs" (Lojban at least faces it properly). It's [[jbocre: Ro|Ro]] all over again... and [[aUI|aUI]] all over again... and possibly [[jbocre: babm|babm]] all over again... ''--mi'e [[User:Mark Shoulson|.mark.]]''</div></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br/></td></tr>
<tr><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>'''''[[jbocre: WikiPolicy|WikiMaster]]'s Note:''' When someone designs an IAL, and they go and pick on Lojban in a context of "Mine is bigger/better/cooler!", the Wiki is an acceptable place to pick on their IAL.''</div></td><td class="diff-marker"></td><td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>'''''[[jbocre: WikiPolicy|WikiMaster]]'s Note:''' When someone designs an IAL, and they go and pick on Lojban in a context of "Mine is bigger/better/cooler!", the Wiki is an acceptable place to pick on their IAL.''</div></td></tr>
<!-- diff cache key mediawiki:diff::1.12:old-76467:rev-86738 -->
</table>Glekihttps://mw.lojban.org/index.php?title=ygyde&diff=76467&oldid=prevGleki at 17:20, 4 November 20132013-11-04T17:20:34Z<p></p>
<a href="https://mw.lojban.org/index.php?title=ygyde&diff=76467&oldid=65893">Show changes</a>Glekihttps://mw.lojban.org/index.php?title=ygyde&diff=65893&oldid=prevGleki at 17:16, 4 November 20132013-11-04T17:16:23Z<p></p>
<p><b>New page</b></p><div><br />
{maketoc}<br />
<br />
== Design discussion ==<br />
<br />
What follows is something of a dumping ground for thoughts. It'll probably be incomplete, and if you don't understand it, don't worry.<br />
<br />
We're looking at completely redoing the way the multilingualism is done in<br />
<br />
Mooix. Specifically, instead of having xml files that each contain all<br />
<br />
languages, we're going to have separate files for translations into each<br />
<br />
language. So that instead of having one name, you'd have name.en, name.jbo,<br />
<br />
name.es, or whatever else.<br />
<br />
One advantage is that it would be faster than splitting the xml. Another<br />
<br />
advantage comes from the fact that language packs could be made much more<br />
<br />
easily (so you could download an entire language and add it to your MOO,<br />
<br />
without it breaking anything that currently exists). It also makes it much<br />
<br />
clearer which fields are subject to translation (so you won't be like me,<br />
<br />
with an editor of "<lang code='en'>vim</lang><lang code='jbo'>vim</lang>".<br />
<br />
So far the chief difficulty seems to be with inheritance.<br />
<br />
In the following, we have two users, John (who language is Lojban, "jbo"),<br />
<br />
and Ed (whose language is English, "en"). Ed creates a Meep, and gives it a<br />
<br />
description in English. Finally, John derives his own mipri from Ed's Meep,,<br />
<br />
but doesn't change anything in it. So we've got:<br />
<br />
~pp~<br />
<br />
/usr/lib/mooix/contrib/animal/description.en: An animal.<br />
<br />
/var/lib/mooix/contrib/animal/description.jbo: .i danlu<br />
<br />
/var/lib/mooix/users/ed/portfolio/Meep1/description.en: A meep!<br />
<br />
~/pp~<br />
<br />
It seems desirable that both John and Ed see the Meep described as "A meep!"<br />
<br />
(even though for John that's not his own language), instead of John seeing<br />
<br />
".i danlu" (which just means "[[jbocre: It's an|It's an]] animal").<br />
<br />
In addition, we want John to be able to create a descendant of Ed's meep, with properly translated messages, like:<br />
<br />
~pp~<br />
<br />
/var/lib/mooix/users/ed/portfolio/Meep2/description.jbo: .i me la mip<br />
<br />
~/pp~<br />
<br />
Here's a picture of this case:<br />
<br />
{img src="img/wiki_up/lang_inheritance_1.jpg" }<br />
<br />
What inheritance strategy provides this? We want John looking at the first Meep to see English (the wrong language for him) and we want Ed looking at the second Meep to see English (the correct language for him).<br />
<br />
More interestingly, what inheritance strategy handles that ''and'' the following case?<br />
<br />
{img src="img/wiki_up/lang_inheritance_2.jpg" }<br />
<br />
~pp~<br />
<br />
/usr/.../room/description.en: A room.<br />
<br />
/var/.../room/description.jbo: .i kumfa<br />
<br />
/var/lib/mooix/users/ed/portfolio/My_Room contains no description* files at all.<br />
<br />
~/pp~<br />
<br />
We want both John and Ed looking at My Room to see their own languages (jbo and en, resp.).<br />
<br />
=== Re-Stating The Problem ===<br />
<br />
The problem is that given two messages, one above the other in the<br />
<br />
tree (where Meep 1 is above Meep 2, for example) the message down<br />
<br />
the tree might be a direct translation, as with /usr/.../room and<br />
<br />
/var/...room, and hence we really only want to see one of them. On<br />
<br />
the other hand, it might be a new, more specific message, as with<br />
<br />
Meep 1 vs. animal.<br />
<br />
There doesn't seem to be any way to distinguish between the two<br />
<br />
cases (a message below another in a tree being a translation vs.<br />
<br />
being a more specific message) without putting in some kind of<br />
<br />
flagging system; I haven't thought of one that is workable.<br />
<br />
=== Some Possible Strategies ===<br />
<br />
==== Normal Inheritance, User's Language ====<br />
<br />
In this case, the bottom-most definition in the user's language prevails.<br />
<br />
===== The Good =====<br />
<br />
Both John and Ed looking at Meep2 or My Room see the correct messages in their own language.<br />
<br />
===== The Bad =====<br />
<br />
John looking at Meep 1 sees the generic ".i danlu".<br />
<br />
==== Last Object Special ====<br />
<br />
This is like "Normal Inheritance, User's Language" except that the<br />
<br />
object we are actually looking at getts special dispensation: we<br />
<br />
don't look past it for translations if we find anything at all.<br />
<br />
===== The Good =====<br />
<br />
John looking at Meep 1 sees the more specific (but wrong language)<br />
<br />
"A meep!".<br />
<br />
Both John and Ed looking at Meep2 or My Room see the correct messages in their own language.<br />
<br />
===== The Bad =====<br />
<br />
John looking at an unmodified child of Meep 1 sees the less specific<br />
<br />
"An animal.". This means that a child with no modifications has<br />
<br />
different behaviour than the parent, which is not cool.<br />
<br />
==== Reverse Hierarchical ====<br />
<br />
We walk up the stack, and take something from the first object with<br />
<br />
a defined message.<br />
<br />
A variant on this, with similar problems, is to present the first<br />
<br />
message up the tree we find in the user's language but if there is<br />
<br />
another message further down the tree, we present that as well in<br />
<br />
parens or something. <br />
<br />
===== The Good =====<br />
<br />
John looking at Meep 1 sees the more specific (but wrong language)<br />
<br />
"A meep!".<br />
<br />
John looking at Meep 2 sees the right thing.<br />
<br />
===== The Bad =====<br />
<br />
Ed looking at Meep 2 sees only the Lojban message; his translation<br />
<br />
is effectively lost unless John copies it. Copying it kind of<br />
<br />
defeats the purpose of an object oriented system.<br />
<br />
Same with Ed, looking at My Room, who sees the Lojban instead of the English.<br />
<br />
==== Untagged Special ====<br />
<br />
In addition to "description.en", "description.jbo", and so<br />
<br />
on, there's also a "description" file without a language, that represents the<br />
<br />
original, untranslated (or most native) version of the object. In almost all<br />
<br />
cases, it'll be just a symlink to one of the more specific languages. When<br />
<br />
we're looking for a property, we never look at anything but our own language<br />
<br />
and the untagged. So we look first at the object itself for the current<br />
<br />
language, then for the untagged, then up a level for user's language, then<br />
<br />
for untagged there, and so on.<br />
<br />
So for the test cases, we get<br />
<br />
/usr/lib/mooix/contrib/animal/description.en: An animal.<br />
<br />
/usr/lib/mooix/contrib/animal/description -> description.en<br />
<br />
/var/lib/mooix/contrib/animal/description.jbo: .i danlu<br />
<br />
/var/lib/mooix/users/ed/portfolio/Meep1/description.en: A meep!<br />
<br />
/var/lib/mooix/users/ed/portfolio/Meep1/description -> description.en<br />
<br />
/var/lib/mooix/users/ed/portfolio/Meep2/description.jbo: .i me la mip<br />
<br />
Now John looks for the a lojban or plain description in Meep1, finds the<br />
<br />
plain, and uses it. Ed can look for an English or plain description in<br />
<br />
Meep2, doesn't find either, looks for an English or plain description in<br />
<br />
Meep1, the English wins, so he uses it.<br />
<br />
For the room<br />
<br />
/usr/.../room/description.en: A room.<br />
<br />
/usr/.../room/description -> description.en<br />
<br />
/var/.../room/description.jbo: .i kumfa<br />
<br />
/var/lib/mooix/users/ed/portfolio/My_Room contains no description* files at<br />
<br />
all.<br />
<br />
John looks at My_Room, finds no description files, looks up a level, finds<br />
<br />
description.jbo, and uses it. Ed finds nothing on My_Room, nothing he can<br />
<br />
use on /var/.../room, but takes /usr/.../room/description.en.<br />
<br />
So in essence, the untagged says "I'm now replacing everything translated<br />
<br />
above me. For any language that I don't provide a translation for<br />
<br />
specifically, don't inherit from above. Instead, use this."<br />
<br />
There might be some issues with getting defaults for editing to work exactly<br />
<br />
properly, but I think then can be worked out.<br />
<br />
Specific issues, and possible ideas (though this could really go many<br />
<br />
different ways). When do we create an untagged, and when do we just create a<br />
<br />
new, additional language file? I'd say that definitely if we're editing an<br />
<br />
object that already contains the same field in a different language we don't<br />
<br />
create an untagged version by default. Perhaps we could make a separate<br />
<br />
command (fanva/translate) that never creates the untagged, with<br />
<br />
galfi/binxo/edit/is defaulting to creating the untagged (if we're changing<br />
<br />
the name, we're overriding. If we're providing a new translation, we're<br />
<br />
augmenting).<br />
<br />
Another good heuristic: if there is already a translation into the language that we're editing at or below the level of the current default, then we're almost certainly making ours more specific, so we should create a new default.<br />
<br />
As an alternative, if we do want to separate out the untagged/untranslated from the other, we could use an extension of something like .default, .def, or whatever, to say "this is the default language". <br />
<br />
===== The Good =====<br />
<br />
Lets us draw a clear distinction between translations and specializations.<br />
<br />
With proper configuration, allows a solution to all cases presented so far.<br />
<br />
===== The Bad =====<br />
<br />
===== !Complexity =====<br />
<br />
Gives us more complexity in deciding what overrides what. An implementation note, here, that seems to make this very easy from a coding perspective. Given variable X, and user's preferred language Y:<br />
<br />
# Find X.def. Since the core objects will have these added, this should always exist, but even if it doesn't we're OK. Call the full path of X.def PATH/X.def. Set the variable def_path to PATH. If there's no X.def, set it to the empty string.<br />
<br />
# Find PATH2/X.Y. If none, then not even the core object is translated to the user's language; it doesn't much matter what we do then, but we treat it as this step failing; go to the next step. Anyways, if PATH2 is a (non-proper) substring of def_path (or def_path is empty), then great: X.Y is more specific, and we're done. Otherwise, continue.<br />
<br />
# Find PATH3/X.L, for all languages L that the MUD supports. If PATH3 is a (non-proper) substring of def_path (or def_path is empty), that's our string, we're done. Otherwise, continue.<br />
<br />
# Find PATH/parent/MORE_PATH/X.def. Set def_path based on this. Return to step 1. Lather, rinse, repeat.<br />
<br />
===== !Editing =====<br />
<br />
Makes the user's task of editing an object that much more complicated, with the decisions of what to override and what not to. Except that it looks like we can automate this trivially: if you're editing variable X in language Y, and X.Y exists up the parent tree before or at the same level as the previous X.def, you are assumed to be creating a more specific instance of variable X (indeed, I haven't thought of a case where that fails yet), and X.def is automatically created at your level. This means, as far as I've noticed (and I haven't walked every step) that every case presented so for works (assuming all core objects have .def files in the right places) ''without anyone doing anything special''. Just regular editing.<br />
<br />
==== Look Ma, No Tags! ====<br />
<br />
So realizing that Untagged Special can put the tags in place<br />
<br />
automatically when editing made me wonder if we can do it<br />
<br />
programatically, hence dispensing with the actual tags. I believe<br />
<br />
the answer to be yes. The idea here is that if we see the same<br />
<br />
language twice down the parent tree, then everything after the<br />
<br />
more-parental instance must be a more-specific object.<br />
<br />
The algorithm is as follows:<br />
<br />
~pp~<br />
<br />
object = [[jbocre: the original object|the original object]]<br />
<br />
field = [[jbocre: description, article, name, whatever|description, article, name, whatever]]<br />
<br />
best_lang( object, field, user's preferred lang, language list (starts empty ) )<br />
<br />
{<br />
<br />
if field.user's preferred lang is found, return user's prefirred lang<br />
<br />
For X = every language in the MUD:<br />
<br />
if field.X exists, add X to language list<br />
<br />
if X is already in the language list, return X<br />
<br />
return best_lang( object's parent, field, user's preferred lang, language list )<br />
<br />
}<br />
<br />
~/pp~<br />
<br />
Given that, we just grab the normally inherited field X.[jbocre: whatever<br />
<br />
best_lang returns].<br />
<br />
Some extensions:<br />
<br />
Change "if X is already in the language list, return X" to "if X is<br />
<br />
already in the language list, return the thing in the language list<br />
<br />
that is highest in the user's preferences". Not doing this because<br />
<br />
a proper preference list is a fair bit of work; I'm not going to<br />
<br />
bother until someone wants a more-than-two language MUD.<br />
<br />
Add a user flag that says "If you don't find my language at the<br />
<br />
most-specific level, please print out whatever you *do* find in my<br />
<br />
language, as well".<br />
<br />
===== The Good =====<br />
<br />
Seems to work in all the cases presented so far. (but not a simple extension of them; see The Bad)<br />
<br />
No manual intervention at all.<br />
<br />
===== The Bad =====<br />
<br />
Breaks on a simple extension: My Room has an English description; a<br />
<br />
Lojbanic user will see the generic description instead.<br />
<br />
Potentially non-obvious to the casual builder.<br />
<br />
Cases where a user makes a child with a message on the object in<br />
<br />
language X and updates it in only language X in a trivial way (such<br />
<br />
as to correct a spelling mistake) will seem to do the wrong thing,<br />
<br />
as all languages above that one will be "lost". OTOH, if the change<br />
<br />
is not trivial, then all languages above being lost are The Right<br />
<br />
Thing, and telling the difference requires smart intervention.<br />
<br />
==== Daddy's Got A Brand New Non-Existant Tag ====<br />
<br />
So "Look Ma, No Tags!" turns out to not DTRT; this is an extension<br />
<br />
that counts from the bottom instead of the top, on the same<br />
<br />
principle: a repeated copy in the same language means an increase in<br />
<br />
specificity.<br />
<br />
# Start at the top of the chain (i.e. the root object) (actual implementation will presumably be recursive to the top and then return stuff back up)<br />
<br />
# Walk down the chain towards the child we're wondering about. Collect a list of languages.<br />
<br />
# If we see a language that matches our current one, clear the list, then add the language in question back into it.<br />
<br />
# When we reach the child and have collected all of its languages, return the language most preferred by the user.<br />
<br />
The "show *something* in my language, dammit" tag works here (as it does with any variant).<br />
<br />
A crack at pseudo-code for the recursive version:<br />
<br />
~pp~<br />
<br />
best_lang( object, field )<br />
<br />
{<br />
<br />
if at the root<br />
<br />
return list of all available languages on the root object<br />
<br />
else<br />
<br />
language list = best_lang( object's parent, field, user's preferred lang )<br />
<br />
Add all languages on object to the list. If a duplicate is<br />
<br />
found, clear the list and then add the duplicate back in<br />
<br />
return the resulting list<br />
<br />
}<br />
<br />
language list = best_lang( object, field )<br />
<br />
EITHER<br />
<br />
IF language list includes the user's preferred lang, return<br />
<br />
that ELSE return the first thing on the list<br />
<br />
OR<br />
<br />
Sort the list via the user's preferred languages list and return<br />
<br />
the top<br />
<br />
DEPENDING ON whether more than one language has been implemented for<br />
<br />
the user (the latter) or not (the former)<br />
<br />
~/pp~<br />
<br />
===== The Good =====<br />
<br />
Seems to work in all the cases presented so far.<br />
<br />
No manual intervention at all.<br />
<br />
===== The Bad =====<br />
<br />
Potentially non-obvious to the casual builder.<br />
<br />
Cases where a user makes a child with a message on the object in<br />
<br />
language X and updates it in only language X in a trivial way (such<br />
<br />
as to correct a spelling mistake) will seem to do the wrong thing,<br />
<br />
as all languages above that one will be "lost". OTOH, if the change<br />
<br />
is not trivial, then all languages above being lost are The Right<br />
<br />
Thing, and telling the difference requires smart intervention.</div>Gleki