summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorAndreas Baumann <abaumann@yahoo.com>2009-03-15 12:07:56 +0100
committerAndreas Baumann <abaumann@yahoo.com>2009-03-15 12:07:56 +0100
commit77817905a6e661ad5dfda3b64fd0205a52e8c5b8 (patch)
tree0908f8ce0ae6679d44e124715da3dbd44101fcc0 /docs
parent625678ac8781a065161d2b1c6b7e942aa95d9874 (diff)
downloadwolfbones-77817905a6e661ad5dfda3b64fd0205a52e8c5b8.tar.gz
wolfbones-77817905a6e661ad5dfda3b64fd0205a52e8c5b8.tar.bz2
added TODOs for i18n (gengetopt and getopt mainly)
Diffstat (limited to 'docs')
-rw-r--r--docs/i18n/Interesting internationalization | Echoreply.txt371
-rw-r--r--docs/i18n/TODOS4
2 files changed, 373 insertions, 2 deletions
diff --git a/docs/i18n/Interesting internationalization | Echoreply.txt b/docs/i18n/Interesting internationalization | Echoreply.txt
new file mode 100644
index 0000000..9e077de
--- /dev/null
+++ b/docs/i18n/Interesting internationalization | Echoreply.txt
@@ -0,0 +1,371 @@
+ #[1]RSS 2.0 [2]RSS .92 [3]Atom 0.3
+
+[4]Echoreply
+
+Computers, Science, Technology, Xen Virtualization, Hosting, The Internet,
+Geekdom And More
+
+ * [5]Site Home
+ * [6]Blog Home
+ * [7]RSS
+ * [8]Contact
+ * [9]Legal
+
+[10]Interesting internationalization
+
+ Posted on September 18, 2008
+ Filed Under [11]Programming |
+
+ I've been having a rather enjoyable discussion with [12]Lorenzo
+ Bettini, the author of GNU [13]Gengetopt and [14]Gengen. If you are not
+ familiar with Gengetopt, its a tool that simplifies generating the code
+ required for programs to accept options. I [15]talked about gengetopt a
+ while back on this blog.
+
+ The discussion surrounds support for internationalization, which simply
+ means a program printing output in whatever language your system is
+ using. A very popular means to accomplish this is the GNU gettext
+ library, or its counterpart in various other operating systems.
+ Disclamer, if you do not care about C standards and common UNIX
+ programming, this post will probably bore you to tears. However, your
+ welcome to read on if only to discover how much I value life in boring
+ geeky flavors :)
+
+ Recently, while working on HelenOS I found the need to implement
+ getopt. I'm working on something a lot like busybox, but from scratch.
+ Rather than re-invent the getopt wheel yet again, I dove into the
+ source code of GNU getopt as well as the various *BSD implementations
+ to find the one that was easiest to port. One thing that stood out at
+ me was that most implementations declared error strings and formats as
+ static, English strings.
+
+ A week later, a proposal to add gettext support came across the
+ gengetopt mailing list. I voted to not include it because the resulting
+ output would be at best mixed, as error strings in basic C89/C99 libc
+ are hard coded, usually in English. The getopt family of functions are
+ an interesting corner case, most core libc functions never print
+ anything ... they just exit with some value and set a global errno to
+ inform the calling function of what went wrong. Its then up to the
+ calling function to (use or not use) something like gettext to display
+ the information in the appropriate language.
+
+ This got me thinking .. if we're making a truly modern operating system
+ based on C89/C99 .. internationalization must be easy to leverage.
+ Talking with Lorenzo, some interesting ideas came to light.
+
+ Gettext is a great tool, however it introduces dependencies on shared
+ objects (or requires static linking). Simply parsing command line
+ arguments should not introduce additional dependencies. Additionally,
+ standard libc should not favor one internationalization library over
+ another, therefore its just not practical to include
+ internationalization in standard libc. However, stuff in libc that
+ prints strings can remain friendly to internationalization by simply
+ requiring one tiny additional step - have the programmer register a
+ callback function that gets all output instead of printing to the error
+ file descriptor directly in libc.
+
+ For instance, a modern getopt might look like this:
+
+ void getopt_callback(int level, char *format, int line)
+ {
+ switch (level) {
+ case GETOPT_EOK:
+ fprintf(stdout, "line %d of getopt.c says %s", line, format);
+ break;
+ case GETOPT_EFAIL:
+ fprintf(stderr, "line %d of getopt.c says %s", line, format);
+ break;
+ }
+ return;
+ }
+ int main(int argc, char **argv)
+ {
+ int c, opt_ind;
+ getopt_register_callback(getopt_callback);
+ for (c = 0, optind = 0, opt_ind = 0; c != -1;) {
+ c = getopt_long(argc, argv, "f:o:O", long_options, &opt_ind);
+ ......
+
+ As we can see, the getopt implementation does not actually print
+ anything, it allows the callback function to handle that. One could
+ very easily use internationalization tools within the callback, if they
+ wanted to do so. This goes (basically) for anything in core libc that
+ prints anything. The callback may be better typed as something like
+ getopt_callback_t.
+
+ This seems to be the favorable approach. Of course, getopt would
+ feature its own static callback that printed the strings as-is if the
+ calling function did not register one, this keeps from breaking
+ existing use.
+
+ After I finish some other tasks, I am going to take a stroll through
+ the HelenOS userspace generic libc to see if getopt is the only case
+ where this should be implemented. At the least, I'll implement this
+ getopt method there so that programs can be fully internationalized.
+
+ This also shows the virtue of not using printf() directly when you can
+ avoid it. Writing your own functions to print warnings or messages
+ allows someone else (even you) to go back and make only a few minor
+ changes in order for your program to support any language.
+
+ Working on a new OS that aims to be fully modern presents interesting
+ opportunities to pick things apart. Hopefully, this didn't put you to
+ sleep :)
+ [16]Share this post
+ [17]Submit to Bloglines [18]Submit to Del.icio.us [19]Submit to digg
+ [20]Submit to Facebook [21]Submit to Google Bookmarks [22]Submit
+ to reddit [23]Submit to Slashdot [24]Submit to Stumble Upon [25]Submit
+ to SphereIt [26]Submit to Technorati [27]Submit to Yahoo My Web
+ [28]Hide Sites
+
+You might also enjoy reading:
+
+ * [29]For Concurrency Issues, There Is Music (0)
+ * [30]The Great Microkernel Debate (2)
+ * [31]Xen And Single System Images (0)
+
+ Tags: [32]helenos, [33]Ideas, [34]interesting, [35]Programming
+
+Comments
+
+ Leave a Reply (NoFollow Free!)
+
+ Name or nickname(required)
+ ________________________________________
+
+ Email Address (kept private)(required)
+ ________________________________________
+
+ Website
+ ________________________________________
+
+ XHTML: You can use these tags: <a href="" title=""> <abbr title="">
+ <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del
+ datetime=""> <em> <i> <q cite=""> <strike> <strong>
+
+
+ __________________________________________________
+ __________________________________________________
+ __________________________________________________
+ __________________________________________________
+ __________________________________________________
+ __________________________________________________
+ __________________________________________________
+ __________________________________________________
+ __________________________________________________
+ __________________________________________________
+
+ Submit Comment
+ * Recently written
+ + [36]For Concurrency Issues, There Is Music
+ + [37]Django And The Admin Anthem
+ + [38]The Great Microkernel Debate
+ + [39]Xen And Single System Images
+ + [40]Yes, I'm Still Alive
+ + [41]Please adopt /etc/vendor
+ + [42]My list for 2009
+ + [43]Web pages as graphs
+ * Me According To Ohloh
+ [44]Ohloh profile for Tim Post
+ * Read By Description
+ + [45]Free Software
+ + [46]ohno
+ + [47]haha
+ + [48]GNU
+ + [49]Programming
+ + [50]thinking out loud
+ + [51]interesting
+ + [52]Linux
+ * Twitter
+ + Writing proof of concept code, I may have a new (full time)
+ opportunity. [53]11 days ago
+ + My kernel's OOM killer has become sentient and self aware
+ [54]12 days ago
+ + Wrapping up nexgent for its first alpha release [55]69 days
+ ago
+ *
+ + Blogs I frequent
+ o [56]Corey Henderson
+ o [57]Jakub Jermar
+ o [58]John Hawks
+ o [59]Pavel Rimsky
+ + Current Projects
+ o [60]Ext3cow
+ o [61]Gridnix
+ o [62]HelenOS
+ o [63]My HG Repository
+ o [64]SRCE
+ o [65]Xen Guests
+ + For Developers
+ o [66]Blue - A Programming Language
+ o [67]Mercurial
+ o [68]ShareSource
+ o [69]Stackoverflow
+ * Archives
+ + [70]March 2009
+ + [71]February 2009
+ + [72]January 2009
+ + [73]December 2008
+ + [74]November 2008
+ + [75]October 2008
+ + [76]September 2008
+ + [77]August 2008
+ + [78]July 2008
+ + [79]June 2008
+ + [80]May 2008
+ + [81]April 2008
+ + [82]March 2008
+ + [83]February 2008
+ + [84]January 2008
+ + [85]December 2007
+ + [86]November 2007
+ + [87]October 2007
+ + [88]September 2007
+
+ *
+
+ Penguin
+ * Search
+ + ____________________
+ * Categories
+ + [89]Better Living
+ + [90]Blogeting
+ + [91]Computing
+ + [92]Free Software
+ + [93]Future Presents
+ + [94]Gizmos
+ + [95]GNU
+ + [96]Humor
+ + [97]Ideas
+ + [98]Linux
+ + [99]Neat Things
+ + [100]Parenting
+ + [101]Programming
+ + [102]Rants
+ + [103]Science
+ + [104]The Web Hosting Industry
+ + [105]Travels
+ + [106]Uncategorized
+ + [107]Xen
+ * Misc
+ + [108]Log in
+
+ [109]Valid XHTML Copyright © 2007 Tim Post - All Rights Reserved
+ The views and opinions expressed on this web site are my own and not
+ necessarily those of my employers or affiliates.
+ Theme made from [110]many free design elements, [111]powered by
+ Wordpress.
+
+References
+
+ 1. http://echoreply.us/tech/feed/
+ 2. http://echoreply.us/tech/feed/rss/
+ 3. http://echoreply.us/tech/feed/atom/
+ 4. http://echoreply.us/tech/
+ 5. http://echoreply.us/
+ 6. http://echoreply.us/tech/
+ 7. http://echoreply.us/tech/feed/rss2/
+ 8. http://echoreply.us/tech/contact/
+ 9. http://echoreply.us/tech/legal/
+ 10. http://echoreply.us/tech/2008/09/18/interesting-internationalization/
+ 11. http://echoreply.us/tech/category/programming/
+ 12. http://www.lorenzobettini.it/
+ 13. http://www.gnu.org/software/gengetopt/gengetopt.html
+ 14. http://www.gnu.org/software/gengen/
+ 15. http://echoreply.us/tech/2008/01/08/fun-with-gengetopt/
+ 16. file://localhost/home/abaumann/projects/WolfBones/docs/i18n/Interesting%20internationalization%20|%20Echoreply.html
+ 17. http://www.bloglines.com/sub/http://echoreply.us/tech/2008/09/18/interesting-internationalization/
+ 18. http://del.icio.us/post?url=http://echoreply.us/tech/2008/09/18/interesting-internationalization/&title=Interesting+internationalization
+ 19. http://digg.com/submit?phase=2&url=http://echoreply.us/tech/2008/09/18/interesting-internationalization/&title=Interesting+internationalization
+ 20. http://www.facebook.com/sharer.php?u=http://echoreply.us/tech/2008/09/18/interesting-internationalization/
+ 21. http://www.google.com/bookmarks/mark?op=edit&output=popup&bkmk=http://echoreply.us/tech/2008/09/18/interesting-internationalization/&title=Interesting+internationalization
+ 22. http://reddit.com/submit?url=http://echoreply.us/tech/2008/09/18/interesting-internationalization/&title=Interesting+internationalization
+ 23. http://slashdot.org/bookmark.pl?url=http://echoreply.us/tech/2008/09/18/interesting-internationalization/&title=Interesting+internationalization
+ 24. http://www.stumbleupon.com/submit.php?url=http://echoreply.us/tech/2008/09/18/interesting-internationalization/&title=Interesting+internationalization
+ 25. http://www.sphere.com/search?q=sphereit:http://echoreply.us/tech/2008/09/18/interesting-internationalization/&title=Interesting+internationalization
+ 26. http://www.technorati.com/faves?add=http://echoreply.us/tech/2008/09/18/interesting-internationalization/
+ 27. http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://echoreply.us/tech/2008/09/18/interesting-internationalization/&t=Interesting+internationalization
+ 28. file://localhost/home/abaumann/projects/WolfBones/docs/i18n/Interesting%20internationalization%20|%20Echoreply.html
+ 29. http://echoreply.us/tech/2009/03/05/for-concurrency-issues-there-is-music/
+ 30. http://echoreply.us/tech/2009/02/19/the-great-microkernel-debate/
+ 31. http://echoreply.us/tech/2009/02/19/xen-and-single-system-images/
+ 32. http://echoreply.us/tech/tag/helenos/
+ 33. http://echoreply.us/tech/tag/ideas/
+ 34. http://echoreply.us/tech/tag/interesting/
+ 35. http://echoreply.us/tech/tag/programming/
+ 36. http://echoreply.us/tech/2009/03/05/for-concurrency-issues-there-is-music/
+ 37. http://echoreply.us/tech/2009/02/19/django-and-the-admin-anthem/
+ 38. http://echoreply.us/tech/2009/02/19/the-great-microkernel-debate/
+ 39. http://echoreply.us/tech/2009/02/19/xen-and-single-system-images/
+ 40. http://echoreply.us/tech/2009/02/19/yes-im-still-alive/
+ 41. http://echoreply.us/tech/2009/01/05/please-adopt-etcvendor/
+ 42. http://echoreply.us/tech/2008/12/30/my-list-for-2009/
+ 43. http://echoreply.us/tech/2008/12/28/web-pages-as-graphs/
+ 44. http://www.ohloh.net/accounts/20338?ref=Detailed
+ 45. http://echoreply.us/tech/tag/free-software/
+ 46. http://echoreply.us/tech/tag/ohno/
+ 47. http://echoreply.us/tech/tag/haha/
+ 48. http://echoreply.us/tech/tag/gnu/
+ 49. http://echoreply.us/tech/tag/programming/
+ 50. http://echoreply.us/tech/tag/thinking-out-loud/
+ 51. http://echoreply.us/tech/tag/interesting/
+ 52. http://echoreply.us/tech/tag/linux/
+ 53. http://twitter.com/tinkertim/statuses/1273136035
+ 54. http://twitter.com/tinkertim/statuses/1273063132
+ 55. http://twitter.com/tinkertim/statuses/1095308437
+ 56. http://cormander.com/
+ 57. http://jakubsuniversalblog.blogspot.com/
+ 58. http://johnhawks.net/weblog/
+ 59. http://helenos-blog.pavel-rimsky.cz/
+ 60. http://www.ext3cow.com/
+ 61. http://gridnix.org/
+ 62. http://www.helenos.org/
+ 63. http://echoreply.us/hg/index.php
+ 64. http://srce.echoreply.us/
+ 65. http://sharesource.org/project/xguests/
+ 66. http://www.lechak.info/blue/
+ 67. http://www.selenic.com/mercurial/wiki/
+ 68. http://sharesource.org/
+ 69. http://stackoverflow.com/
+ 70. http://echoreply.us/tech/2009/03/
+ 71. http://echoreply.us/tech/2009/02/
+ 72. http://echoreply.us/tech/2009/01/
+ 73. http://echoreply.us/tech/2008/12/
+ 74. http://echoreply.us/tech/2008/11/
+ 75. http://echoreply.us/tech/2008/10/
+ 76. http://echoreply.us/tech/2008/09/
+ 77. http://echoreply.us/tech/2008/08/
+ 78. http://echoreply.us/tech/2008/07/
+ 79. http://echoreply.us/tech/2008/06/
+ 80. http://echoreply.us/tech/2008/05/
+ 81. http://echoreply.us/tech/2008/04/
+ 82. http://echoreply.us/tech/2008/03/
+ 83. http://echoreply.us/tech/2008/02/
+ 84. http://echoreply.us/tech/2008/01/
+ 85. http://echoreply.us/tech/2007/12/
+ 86. http://echoreply.us/tech/2007/11/
+ 87. http://echoreply.us/tech/2007/10/
+ 88. http://echoreply.us/tech/2007/09/
+ 89. http://echoreply.us/tech/category/better-living/
+ 90. http://echoreply.us/tech/category/blogeting/
+ 91. http://echoreply.us/tech/category/computing/
+ 92. http://echoreply.us/tech/category/free-software/
+ 93. http://echoreply.us/tech/category/planned-projects/
+ 94. http://echoreply.us/tech/category/gizmos/
+ 95. http://echoreply.us/tech/category/gnu/
+ 96. http://echoreply.us/tech/category/humor/
+ 97. http://echoreply.us/tech/category/ideas/
+ 98. http://echoreply.us/tech/category/linux/
+ 99. http://echoreply.us/tech/category/neat-things/
+ 100. http://echoreply.us/tech/category/parenting/
+ 101. http://echoreply.us/tech/category/programming/
+ 102. http://echoreply.us/tech/category/rants/
+ 103. http://echoreply.us/tech/category/science/
+ 104. http://echoreply.us/tech/category/the-web-hosting-industry/
+ 105. http://echoreply.us/tech/category/travels/
+ 106. http://echoreply.us/tech/category/uncategorized/
+ 107. http://echoreply.us/tech/category/xen/
+ 108. http://echoreply.us/tech/wp-login.php
+ 109. http://validator.w3.org/check?uri=referer
+ 110. http://echoreply.us/design_credits.html
+ 111. http://wordpress.org/
diff --git a/docs/i18n/TODOS b/docs/i18n/TODOS
index cd409ba..270194b 100644
--- a/docs/i18n/TODOS
+++ b/docs/i18n/TODOS
@@ -1,4 +1,4 @@
- localization of gengetopt generated code? ok, it's just an example
(testd), but we should have an idea about this, maybe extend gengetopt?
-
-
+ - see discussions about 'gettext' in 'getgetopt-user' mailing list
+ - see HelenOS comment on getopt in libc: Interesting internationalization | Echoreply.txt