mu' chevwI'

Version - the Hybrid (Dictionary file klingon.xml)
If you're like me - lazy, that is - you don't learn vocabulary often enough to be able to read any klingon text longer than three words.
Of course, the best thing to do would be to start learning.
Alas, that would be the opposite of lazy. So I had to find another way.
The result - this program. Better than nothing, yet not as good as learning vocabulary. :-) So I wrote mu' chevwI'.

You might notice that the name doesn't say anything about translating, or analyzing the words, like Holtej's pojwI' does, because this program is rather limited in it's abilities.
As the name suggests, it separates words. Splits them into syllables, and tries to find a translation for them.
The result is an HTML-file containing not only the original text(formatting mostly preserved), but also a plethora of hopefully helpful hints helping understand what the word just might be.
The text on the lower half isn't displayed because I want to show off my "l33t CSS skillz", it's there so you can change the resulting layout to something more pleasing.
You might want to change the used colors for example, or the font-size, or whatever. Since the CSS is for layout and the actual information is inside the content, you can easily change the layout without ever touching the HTML coding.
Isn't that neat?
The default stylesheet is stored inside the executable, so there is no risk of ruining anything.
To make editing the CSS more comfortable, the program also looks for a file named "kth_user.css" in the starting directory. A sample of that is provided, along with some explanations on how to change it.

Firefox Should work just fine. I'm doing all primary tests with it, since I don't really use any fance coding, even older versions shouldn't have any problems.
Opera I tested it with a recent version, no problems. Unlikely that older versions have trouble.
Internet Explorer Ah yes, here it comes. I think it is obvious that anything below version 7 won't even remotely work. Version 5 is outdated and 6 is a rotting corpse. MS had no interest in providing good HTML/CSS support.
Anyway. Version 7 seems to have problems with the pseudo-class ":active". I have therefore added a predfined custom-stylesheet for IE7 into the program. It will be invoked via conditional comments only by IE7, all others will ignore it. Instead of :active, :hover is used - which means that the text is displayed as soon as you just HOVER above the word.
That is hardcoded, I'm afraid. The rest, though, can be changed through the user stylesheet.
Version 8 of IE should be able to work with the created HTML - however, it will be slow if the page is too long. (Which is, unfortunately not much.)
I'm trying to find a solution, but until then I suggest you either switch to a decent browser - Firefox, Safari, Opera, take your pick. Just not IE. Perhaps version 9 will be up to yesterday...
Update:Thanks to, I now know the reason why it's slow with IE. Apparently, it doesn't like all those inline containers. Switching to float would help. Unfortunately, I can't get it working with float - the design is ruined every time. I'm sorry, but it's not important enough for me to try to fix it any further. I'd rather fix important bugs in the program, than work around a single browser. If you have a working stylesheet, please send me. I'm not against making it usable in IE :-)
I thought about creating a version that relies on Javascript instead of CSS. It would probably work with more browsers (that is, IE), but rely on JavaScript. Can't say I like either choice.
JS is nice, but for something simple like this it shouldn't be necessary.
If you think it is necessary, write me. I'll consider it if even people ask for it or someone has a good argument for it. (No, "it doesn't work with IE" is not enough.)

Alright. Since you're still reading, I assume you want to know just how the program works. Here's a rough list of it:

Separating and translating - the magic behind the program:

As you can see, it's rather simple. It isn't able to catch multi-syllable-words like volchaH for example.
Nor can it understand ungrammatical constructs like a noun-verb word. It'll just translate the noun and try to find a suffix-translation for the verb.
I might add that some time, shouldn't be too much trouble, though I fear I'll have to restructure parts of the program - and I am afraid this might ruin it. I tried to restructure the program twice, so far.
Both times it ended in desaster and me going back to version 1.

How to read the result?

Enhanced words should have a dashed underline and the cursor should turn into a question mark - or whatever your browser is configured to show when told to show the "help" cursor.
Clicking such a word (and holding the mouse button, I'm afraid) will display a window containing information about the word.
The information should consist of:

In order to provide the most information possible, the program will NOT check if the suffix is of the right type! That means a noun suffix on a verb stem will still be translated as such.
There is no special marking in that case, just the suffix type ("VS7" for example). Since the word before it has "Noun" written next to it, it should be obvious that a verb suffix is ungrammatical - which doesn't mean it's not correct, though.

Note that some browsers may not be able to do that. If you don't see anything aside from the question mark, it's likely your browser doesn't understand ":active". In that case, I suggest using a modern browser, if possible. Otherwise change :active to :hover in the stylesheet. Either the external kth_user.css if you want to keep it that way, or just the local copy inside the HTML file.
If it still doesn't work, your browser probably is too old or doesn't understand enough CSS. I'm afraid you're out of luck then. Perhaps a javascript based version would help, but I don't plan to write one yet. Mail me if you think I should.


Of course I prepared something :-)
I have taken a piece of classical literature and ran it through my program. One or two words weren't recognized, unfortunately, but the rest worked fine.
See for yourself: Original Text file and Enhanced html file
Since every instance of every word is "enhanced" - the program does not yet check for duplicates to ignore them - the resulting file tends to be rather large. In this example, the size grew 25-fold.
Horrible, I know. Fortunately disk space is cheap nowadays. I'm trying to keep the size down, but apart from only enhancing the first occurrence of the words, I don't really know what to do.
And I hesitate doing even that as it could lead to problems with longer texts - i.e. you'd have to remember every definition at once, or constantly look back up - in which case you might just as well have a dictionary at hand...
A possible solution might be to create an XML file instead of HTML, and transform it with an XSLT stylesheet - that way, explanations only have to be stored once.
However, that'll mean TWO files (AFAIK, XSLT cannot be integrated INTO the XML file :-/), also, I'll have to seriously redesign the program. Which will take time - if I ever manage to do it.

Why does it need .Net 2.0?

Well, because I wrote it in C#, and Microsoft decided to design that language around .Net. Sorry.
There's 2 good reasons why I'm using C#:
1) I need C# at work sometimes, so it is a good opportunity to try to get more acquainted with it.
2) With C#, it shouldn't be too difficult to move the core programming(i.e. the syllable split and translation) onto the webserver, which in turn should lead to a website that can on-the-fly enhance klingon texts and perhaps even websites.
2.5) In theory, it should be rather easy to migrate the program to other platforms as well, like Unix. Time will tell.

I'm afraid I can't go lower than .Net 2.0 - appparently 1.X were mere beta versions, insted of the finished product. They're now discontinued and their use is prohibited.
Well, not really prohibited, but while I could set the compiler to use .Net 3.5, I can't tell it to use 1.X .

I found out it's possible to bundle the Mono interpreter together with the binary file - creating essentially a Linux executable. Of course, you still need the libraries(which would be installed by Mono), but it would be possible to link those as well - creating a true Linux binary - which won't run on Windows anymore, but on Linux without the need of Mono.
Of course, the downside is that even compressed the file is about 7MB large... (not to mention it might not be entirely legal to copy that file then)

The Hybrid

Why "the hybrid"?
I like the sound of it. Also, it tells a lot about the program - it is a new program, basically.
Of course, I didn't start anew, I just made a copy of the old source and reworked the original - more structured, more encapsulated. And more powerful.
The original could only be used within the Windows GUI. The new version - the Hybrid - can be used from the command line as well. It'll even recognize who called it and accordingly show the GUI or not.
However, that was mostly a result of the restructuring - I finally separated input/output from actual processing. So there was no reason not to accept command line parameters.
The true reason for the new name "Hybrid" is that I discovered that it is easily possible to run this program from Unix now. Of course, not just by itself - that still only works in Windows - but by using Mono as .Net framework/interpreter. I tried it on the command line - works fine. I didn't yet have the resources to try the GUI in Linux, but I see no reason why it shouldn't work.

Command Line Parameters

As the program can now be called from the command line, you might be interested to know just what is possible.
I'm not going to list all possible parameters, if you wan't to know them, just start the program. Instead, I'm going to list the interesting options the command line mode offers:
*)Output to screen
Instead of creating a file, the HTML code will be put at the standard output - useful for integrating the program into a webservice or such.
*)Supress/Enforce use of GUI
You can force the program to show the GUI even though it's called from command line, or, conversely, prevent it from doing so even if you start it from GUI
*)Specify klingon.xml
Instead of using default paths, you can specify a specific path for the vocabulary file
*)Supply text instead of file
The analogue to output to screen, you can supply the text-to-enhance just like a parameter.
That should cover the most important things.
One note, though - for some reason the command line doesn't show any output in Windows. A bug in the framework, you can circumvent it by either redirecting the output to a file(and displaying that), or using "|more" - the latter will make the output immediately visible.
BTW, you can start the program from the command line and still have it show the GUI - useful for setting some of the parameters that are inaccessible in GUI mode.

A few notes about the program

The program has built in the list of pre- and suffixes, but not the rest of the words. Those words are stored in a separate XML-file, called klingon.xml .
If you want, you can add words to the XML file, or correct mistakes in it. The structure is simple enough to be edited by anyone, which is the reason I used an external file in the first place.
The program is made for plain text files - in theory, you can supply an HTML file as input, but I won't guarantee that the entire text will be enhanced. I have a hardcoded check for HTML-files, to ensure the output is a working file - but since the program doesn't really understand HTML, it doesn't differentiate between tags and text - it will just assume that anything not specifically marked as "no text" is text to enhance.
It DOES look for several tags and ignores lines containing them, because changing anything there would ruin the file - but, it's still quite primitive.
Quite frankly, I don't think there's much use in trying to work around the tricky tags. Instead, I'll have to use a real parser, sooner or later. Or fumble something up with RegEx or somesuch.
For now, the more pressing concern is wether or not the program will be useful.

Possible issues and problems

As I said, I've used C#, and thus .Net - if you don't have the .Net 2.0 Framework (or higher) installed, I fear you won't be able to use the program.
If you're adamant on using IE, you're bound to have problems with the file. I recommend not trying to enhance any text longer than a page, because the resulting HTML file may seriously slow down your computer to the point of not reacting anymore.
I'm not kidding - I tried a huge file (about 600K in size) and IE simply stopped working.


The main vocabulary file. For easier maintenance it is a separate file instead of built-in.
Despite the name, what you will see is not named klingon.xml, but rather klingon.tgz. If you know unixoid systems, you'll recognize the TAR/GZip extension.
Indeed, the original program used the XML file directly, but as I found out that .Net natively supports GZIP compression, I wanted to make use of it. PKZIP would have been supported by .Net 3.5, which is unfortunately not yet within my reach (the mono installation on the web server doesn't handle 3.5 - also, there would be few else I'd need).
To further ease the maintenance, I decided to split the xml file into three - one for nouns, one for verbs, one for the rest. That way, you don't have to edit a single 200K file.
Another improvement is the optional inclusion of a file called "klingon_add.xml" - unlike the other files, this will be scanned for any type of klingon word. So you can add words in that file, and only once in a while update the named files.

What's in a name?...

The program actually looks for more than just a single name. It tries to find a file named "klingon.tgz", "klingon.tar", "klingon.tar.gz", "klingon.xml". If any of these is found, it's used. Note that the klingon_add.xml is only used if it's either next to the klingon.xml or within klingon.tgz(tar).


Alright, here's the good stuff:
mu'chevwI', aka Klingon Translate Help, 52K in size, needs .Net 2.0
klingon.tgz, the most actual version

KTH Web Interface

As mentioned before, the executable can be run on Linux via the use of Mono. Since my webserver runs on Linux, the next step was logical and inevitable - create a web interface for it.
Take a look here.