mongo_translatable 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. data/.document +5 -0
  2. data/.gitignore +26 -0
  3. data/.gitmodules +3 -0
  4. data/LICENSE +295 -0
  5. data/README.rdoc +131 -0
  6. data/Rakefile +55 -0
  7. data/VERSION +1 -0
  8. data/app/controllers/translations_controller.rb +150 -0
  9. data/app/helpers/translations_helper.rb +71 -0
  10. data/app/views/layouts/translations.html.erb +18 -0
  11. data/app/views/translations/_form.html.erb +50 -0
  12. data/app/views/translations/_translatable_value.html.erb +17 -0
  13. data/app/views/translations/_translation_field.html.erb +34 -0
  14. data/app/views/translations/_translation_field_input.html.erb +8 -0
  15. data/app/views/translations/edit.html.erb +8 -0
  16. data/app/views/translations/index.html.erb +22 -0
  17. data/app/views/translations/new.html.erb +7 -0
  18. data/app/views/translations/show.html.erb +12 -0
  19. data/config/locales/en.yml +33 -0
  20. data/config/locales/fr.yml +18 -0
  21. data/lib/mongo_translatable.rb +336 -0
  22. data/lib/mongo_translatable_configuration.rb +5 -0
  23. data/lib/translatables_helper.rb +227 -0
  24. data/lib/translations_controller_helpers.rb +37 -0
  25. data/rails/init.rb +3 -0
  26. data/test/full_2_3_5_app_with_tests/.gitignore +27 -0
  27. data/test/full_2_3_5_app_with_tests/README +1 -0
  28. data/test/full_2_3_5_app_with_tests/Rakefile +10 -0
  29. data/test/full_2_3_5_app_with_tests/app/controllers/application_controller.rb +26 -0
  30. data/test/full_2_3_5_app_with_tests/app/controllers/items_controller.rb +85 -0
  31. data/test/full_2_3_5_app_with_tests/app/helpers/application_helper.rb +3 -0
  32. data/test/full_2_3_5_app_with_tests/app/helpers/items_helper.rb +2 -0
  33. data/test/full_2_3_5_app_with_tests/app/models/comment.rb +3 -0
  34. data/test/full_2_3_5_app_with_tests/app/models/item.rb +5 -0
  35. data/test/full_2_3_5_app_with_tests/app/models/not_swapped_in_record.rb +3 -0
  36. data/test/full_2_3_5_app_with_tests/app/models/person.rb +3 -0
  37. data/test/full_2_3_5_app_with_tests/app/models/recipe.rb +21 -0
  38. data/test/full_2_3_5_app_with_tests/app/views/items/edit.html.erb +24 -0
  39. data/test/full_2_3_5_app_with_tests/app/views/items/index.html.erb +24 -0
  40. data/test/full_2_3_5_app_with_tests/app/views/items/new.html.erb +23 -0
  41. data/test/full_2_3_5_app_with_tests/app/views/items/show.html.erb +21 -0
  42. data/test/full_2_3_5_app_with_tests/app/views/layouts/items.html.erb +19 -0
  43. data/test/full_2_3_5_app_with_tests/config/boot.rb +110 -0
  44. data/test/full_2_3_5_app_with_tests/config/database.yml +22 -0
  45. data/test/full_2_3_5_app_with_tests/config/environment.rb +54 -0
  46. data/test/full_2_3_5_app_with_tests/config/environments/development.rb +17 -0
  47. data/test/full_2_3_5_app_with_tests/config/environments/production.rb +28 -0
  48. data/test/full_2_3_5_app_with_tests/config/environments/test.rb +28 -0
  49. data/test/full_2_3_5_app_with_tests/config/initializers/backtrace_silencers.rb +7 -0
  50. data/test/full_2_3_5_app_with_tests/config/initializers/inflections.rb +10 -0
  51. data/test/full_2_3_5_app_with_tests/config/initializers/mime_types.rb +5 -0
  52. data/test/full_2_3_5_app_with_tests/config/initializers/new_rails_defaults.rb +21 -0
  53. data/test/full_2_3_5_app_with_tests/config/initializers/session_store.rb +15 -0
  54. data/test/full_2_3_5_app_with_tests/config/locales.yml +5 -0
  55. data/test/full_2_3_5_app_with_tests/config/locales/en.yml +4 -0
  56. data/test/full_2_3_5_app_with_tests/config/locales/fr.yml +4 -0
  57. data/test/full_2_3_5_app_with_tests/config/locales/zh.yml +4 -0
  58. data/test/full_2_3_5_app_with_tests/config/routes.rb +4 -0
  59. data/test/full_2_3_5_app_with_tests/db/migrate/20100407010602_create_items.rb +14 -0
  60. data/test/full_2_3_5_app_with_tests/db/migrate/20100504234216_create_not_swapped_in_records.rb +15 -0
  61. data/test/full_2_3_5_app_with_tests/db/migrate/20100509011052_create_people.rb +13 -0
  62. data/test/full_2_3_5_app_with_tests/db/migrate/20100509042718_create_comments.rb +14 -0
  63. data/test/full_2_3_5_app_with_tests/db/migrate/20110112023516_create_recipes.rb +14 -0
  64. data/test/full_2_3_5_app_with_tests/db/schema.rb +56 -0
  65. data/test/full_2_3_5_app_with_tests/db/seeds.rb +7 -0
  66. data/test/full_2_3_5_app_with_tests/doc/README_FOR_APP +2 -0
  67. data/test/full_2_3_5_app_with_tests/public/404.html +30 -0
  68. data/test/full_2_3_5_app_with_tests/public/422.html +30 -0
  69. data/test/full_2_3_5_app_with_tests/public/500.html +30 -0
  70. data/test/full_2_3_5_app_with_tests/public/favicon.ico +0 -0
  71. data/test/full_2_3_5_app_with_tests/public/images/rails.png +0 -0
  72. data/test/full_2_3_5_app_with_tests/public/index.html +275 -0
  73. data/test/full_2_3_5_app_with_tests/public/javascripts/application.js +2 -0
  74. data/test/full_2_3_5_app_with_tests/public/javascripts/controls.js +963 -0
  75. data/test/full_2_3_5_app_with_tests/public/javascripts/dragdrop.js +973 -0
  76. data/test/full_2_3_5_app_with_tests/public/javascripts/effects.js +1128 -0
  77. data/test/full_2_3_5_app_with_tests/public/javascripts/prototype.js +4320 -0
  78. data/test/full_2_3_5_app_with_tests/public/robots.txt +5 -0
  79. data/test/full_2_3_5_app_with_tests/public/stylesheets/scaffold.css +54 -0
  80. data/test/full_2_3_5_app_with_tests/script/about +4 -0
  81. data/test/full_2_3_5_app_with_tests/script/console +3 -0
  82. data/test/full_2_3_5_app_with_tests/script/dbconsole +3 -0
  83. data/test/full_2_3_5_app_with_tests/script/destroy +3 -0
  84. data/test/full_2_3_5_app_with_tests/script/generate +3 -0
  85. data/test/full_2_3_5_app_with_tests/script/performance/benchmarker +3 -0
  86. data/test/full_2_3_5_app_with_tests/script/performance/profiler +3 -0
  87. data/test/full_2_3_5_app_with_tests/script/plugin +3 -0
  88. data/test/full_2_3_5_app_with_tests/script/runner +3 -0
  89. data/test/full_2_3_5_app_with_tests/script/server +3 -0
  90. data/test/full_2_3_5_app_with_tests/test/factories.rb +18 -0
  91. data/test/full_2_3_5_app_with_tests/test/functional/translations_controller_test.rb +66 -0
  92. data/test/full_2_3_5_app_with_tests/test/integration/translation_test.rb +72 -0
  93. data/test/full_2_3_5_app_with_tests/test/performance/browsing_test.rb +9 -0
  94. data/test/full_2_3_5_app_with_tests/test/selenium.rb +83 -0
  95. data/test/full_2_3_5_app_with_tests/test/test_helper.rb +86 -0
  96. data/test/full_2_3_5_app_with_tests/test/unit/helpers/translatables_helper_test.rb +37 -0
  97. data/test/full_2_3_5_app_with_tests/test/unit/helpers/translations_helper_test.rb +62 -0
  98. data/test/full_2_3_5_app_with_tests/test/unit/mongo_translatable_test.rb +342 -0
  99. data/test/full_2_3_5_app_with_tests/vendor/plugins/routing-filter/init.rb +1 -0
  100. data/test/full_2_3_5_app_with_tests/vendor/plugins/routing-filter/lib/routing_filter.rb +94 -0
  101. data/test/full_2_3_5_app_with_tests/vendor/plugins/routing-filter/lib/routing_filter/base.rb +31 -0
  102. data/test/full_2_3_5_app_with_tests/vendor/plugins/routing-filter/lib/routing_filter/force_extension.rb +57 -0
  103. data/test/full_2_3_5_app_with_tests/vendor/plugins/routing-filter/lib/routing_filter/locale.rb +70 -0
  104. data/test/full_2_3_5_app_with_tests/vendor/plugins/routing-filter/lib/routing_filter/pagination.rb +33 -0
  105. data/test/full_2_3_5_app_with_tests/vendor/plugins/routing-filter/lib/routing_filter/uuid_token.rb +78 -0
  106. data/test/full_2_3_5_app_with_tests/vendor/plugins/routing-filter/spec/force_extension_spec.rb +65 -0
  107. data/test/full_2_3_5_app_with_tests/vendor/plugins/routing-filter/spec/generation_spec.rb +367 -0
  108. data/test/full_2_3_5_app_with_tests/vendor/plugins/routing-filter/spec/pagination_extension_spec.rb +19 -0
  109. data/test/full_2_3_5_app_with_tests/vendor/plugins/routing-filter/spec/recognition_spec.rb +76 -0
  110. data/test/full_2_3_5_app_with_tests/vendor/plugins/routing-filter/spec/routing_filter_spec.rb +114 -0
  111. data/test/full_2_3_5_app_with_tests/vendor/plugins/routing-filter/spec/spec_helper.rb +108 -0
  112. metadata +309 -0
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
@@ -0,0 +1,26 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+ *.gemspec
21
+
22
+ ## PROJECT::SPECIFIC
23
+ test.sqlite3
24
+ test/debug.log
25
+ db/development.sqlite3
26
+ db/test.sqlite3
@@ -0,0 +1,3 @@
1
+ [submodule "test/full_2_3_5_app_with_tests/vendor/plugins/routing-filter"]
2
+ path = test/full_2_3_5_app_with_tests/vendor/plugins/routing-filter
3
+ url = git://github.com/svenfuchs/routing-filter.git
data/LICENSE ADDED
@@ -0,0 +1,295 @@
1
+ Copyright (C) 2010 Horowhenua Library Trust
2
+
3
+ This program (mongo_translatable) is free software; you can redistribute it and/or modify
4
+ it under the terms of the GNU General Public License as published by
5
+ the Free Software Foundation; either version 2 of the License, or
6
+ (at your option) any later version.
7
+
8
+ This program is distributed in the hope that it will be useful,
9
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ GNU General Public License for more details.
12
+
13
+ You should have received a copy of the GNU General Public License along
14
+ with this program; if not, write to the Free Software Foundation, Inc.,
15
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16
+
17
+ GNU GENERAL PUBLIC LICENSE
18
+ Version 2, June 1991
19
+
20
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
21
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22
+ Everyone is permitted to copy and distribute verbatim copies
23
+ of this license document, but changing it is not allowed.
24
+
25
+ Preamble
26
+
27
+ The licenses for most software are designed to take away your
28
+ freedom to share and change it. By contrast, the GNU General Public
29
+ License is intended to guarantee your freedom to share and change free
30
+ software--to make sure the software is free for all its users. This
31
+ General Public License applies to most of the Free Software
32
+ Foundation's software and to any other program whose authors commit to
33
+ using it. (Some other Free Software Foundation software is covered by
34
+ the GNU Lesser General Public License instead.) You can apply it to
35
+ your programs, too.
36
+
37
+ When we speak of free software, we are referring to freedom, not
38
+ price. Our General Public Licenses are designed to make sure that you
39
+ have the freedom to distribute copies of free software (and charge for
40
+ this service if you wish), that you receive source code or can get it
41
+ if you want it, that you can change the software or use pieces of it
42
+ in new free programs; and that you know you can do these things.
43
+
44
+ To protect your rights, we need to make restrictions that forbid
45
+ anyone to deny you these rights or to ask you to surrender the rights.
46
+ These restrictions translate to certain responsibilities for you if you
47
+ distribute copies of the software, or if you modify it.
48
+
49
+ For example, if you distribute copies of such a program, whether
50
+ gratis or for a fee, you must give the recipients all the rights that
51
+ you have. You must make sure that they, too, receive or can get the
52
+ source code. And you must show them these terms so they know their
53
+ rights.
54
+
55
+ We protect your rights with two steps: (1) copyright the software, and
56
+ (2) offer you this license which gives you legal permission to copy,
57
+ distribute and/or modify the software.
58
+
59
+ Also, for each author's protection and ours, we want to make certain
60
+ that everyone understands that there is no warranty for this free
61
+ software. If the software is modified by someone else and passed on, we
62
+ want its recipients to know that what they have is not the original, so
63
+ that any problems introduced by others will not reflect on the original
64
+ authors' reputations.
65
+
66
+ Finally, any free program is threatened constantly by software
67
+ patents. We wish to avoid the danger that redistributors of a free
68
+ program will individually obtain patent licenses, in effect making the
69
+ program proprietary. To prevent this, we have made it clear that any
70
+ patent must be licensed for everyone's free use or not licensed at all.
71
+
72
+ The precise terms and conditions for copying, distribution and
73
+ modification follow.
74
+
75
+ GNU GENERAL PUBLIC LICENSE
76
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
77
+
78
+ 0. This License applies to any program or other work which contains
79
+ a notice placed by the copyright holder saying it may be distributed
80
+ under the terms of this General Public License. The "Program", below,
81
+ refers to any such program or work, and a "work based on the Program"
82
+ means either the Program or any derivative work under copyright law:
83
+ that is to say, a work containing the Program or a portion of it,
84
+ either verbatim or with modifications and/or translated into another
85
+ language. (Hereinafter, translation is included without limitation in
86
+ the term "modification".) Each licensee is addressed as "you".
87
+
88
+ Activities other than copying, distribution and modification are not
89
+ covered by this License; they are outside its scope. The act of
90
+ running the Program is not restricted, and the output from the Program
91
+ is covered only if its contents constitute a work based on the
92
+ Program (independent of having been made by running the Program).
93
+ Whether that is true depends on what the Program does.
94
+
95
+ 1. You may copy and distribute verbatim copies of the Program's
96
+ source code as you receive it, in any medium, provided that you
97
+ conspicuously and appropriately publish on each copy an appropriate
98
+ copyright notice and disclaimer of warranty; keep intact all the
99
+ notices that refer to this License and to the absence of any warranty;
100
+ and give any other recipients of the Program a copy of this License
101
+ along with the Program.
102
+
103
+ You may charge a fee for the physical act of transferring a copy, and
104
+ you may at your option offer warranty protection in exchange for a fee.
105
+
106
+ 2. You may modify your copy or copies of the Program or any portion
107
+ of it, thus forming a work based on the Program, and copy and
108
+ distribute such modifications or work under the terms of Section 1
109
+ above, provided that you also meet all of these conditions:
110
+
111
+ a) You must cause the modified files to carry prominent notices
112
+ stating that you changed the files and the date of any change.
113
+
114
+ b) You must cause any work that you distribute or publish, that in
115
+ whole or in part contains or is derived from the Program or any
116
+ part thereof, to be licensed as a whole at no charge to all third
117
+ parties under the terms of this License.
118
+
119
+ c) If the modified program normally reads commands interactively
120
+ when run, you must cause it, when started running for such
121
+ interactive use in the most ordinary way, to print or display an
122
+ announcement including an appropriate copyright notice and a
123
+ notice that there is no warranty (or else, saying that you provide
124
+ a warranty) and that users may redistribute the program under
125
+ these conditions, and telling the user how to view a copy of this
126
+ License. (Exception: if the Program itself is interactive but
127
+ does not normally print such an announcement, your work based on
128
+ the Program is not required to print an announcement.)
129
+
130
+ These requirements apply to the modified work as a whole. If
131
+ identifiable sections of that work are not derived from the Program,
132
+ and can be reasonably considered independent and separate works in
133
+ themselves, then this License, and its terms, do not apply to those
134
+ sections when you distribute them as separate works. But when you
135
+ distribute the same sections as part of a whole which is a work based
136
+ on the Program, the distribution of the whole must be on the terms of
137
+ this License, whose permissions for other licensees extend to the
138
+ entire whole, and thus to each and every part regardless of who wrote it.
139
+
140
+ Thus, it is not the intent of this section to claim rights or contest
141
+ your rights to work written entirely by you; rather, the intent is to
142
+ exercise the right to control the distribution of derivative or
143
+ collective works based on the Program.
144
+
145
+ In addition, mere aggregation of another work not based on the Program
146
+ with the Program (or with a work based on the Program) on a volume of
147
+ a storage or distribution medium does not bring the other work under
148
+ the scope of this License.
149
+
150
+ 3. You may copy and distribute the Program (or a work based on it,
151
+ under Section 2) in object code or executable form under the terms of
152
+ Sections 1 and 2 above provided that you also do one of the following:
153
+
154
+ a) Accompany it with the complete corresponding machine-readable
155
+ source code, which must be distributed under the terms of Sections
156
+ 1 and 2 above on a medium customarily used for software interchange; or,
157
+
158
+ b) Accompany it with a written offer, valid for at least three
159
+ years, to give any third party, for a charge no more than your
160
+ cost of physically performing source distribution, a complete
161
+ machine-readable copy of the corresponding source code, to be
162
+ distributed under the terms of Sections 1 and 2 above on a medium
163
+ customarily used for software interchange; or,
164
+
165
+ c) Accompany it with the information you received as to the offer
166
+ to distribute corresponding source code. (This alternative is
167
+ allowed only for noncommercial distribution and only if you
168
+ received the program in object code or executable form with such
169
+ an offer, in accord with Subsection b above.)
170
+
171
+ The source code for a work means the preferred form of the work for
172
+ making modifications to it. For an executable work, complete source
173
+ code means all the source code for all modules it contains, plus any
174
+ associated interface definition files, plus the scripts used to
175
+ control compilation and installation of the executable. However, as a
176
+ special exception, the source code distributed need not include
177
+ anything that is normally distributed (in either source or binary
178
+ form) with the major components (compiler, kernel, and so on) of the
179
+ operating system on which the executable runs, unless that component
180
+ itself accompanies the executable.
181
+
182
+ If distribution of executable or object code is made by offering
183
+ access to copy from a designated place, then offering equivalent
184
+ access to copy the source code from the same place counts as
185
+ distribution of the source code, even though third parties are not
186
+ compelled to copy the source along with the object code.
187
+
188
+ 4. You may not copy, modify, sublicense, or distribute the Program
189
+ except as expressly provided under this License. Any attempt
190
+ otherwise to copy, modify, sublicense or distribute the Program is
191
+ void, and will automatically terminate your rights under this License.
192
+ However, parties who have received copies, or rights, from you under
193
+ this License will not have their licenses terminated so long as such
194
+ parties remain in full compliance.
195
+
196
+ 5. You are not required to accept this License, since you have not
197
+ signed it. However, nothing else grants you permission to modify or
198
+ distribute the Program or its derivative works. These actions are
199
+ prohibited by law if you do not accept this License. Therefore, by
200
+ modifying or distributing the Program (or any work based on the
201
+ Program), you indicate your acceptance of this License to do so, and
202
+ all its terms and conditions for copying, distributing or modifying
203
+ the Program or works based on it.
204
+
205
+ 6. Each time you redistribute the Program (or any work based on the
206
+ Program), the recipient automatically receives a license from the
207
+ original licensor to copy, distribute or modify the Program subject to
208
+ these terms and conditions. You may not impose any further
209
+ restrictions on the recipients' exercise of the rights granted herein.
210
+ You are not responsible for enforcing compliance by third parties to
211
+ this License.
212
+
213
+ 7. If, as a consequence of a court judgment or allegation of patent
214
+ infringement or for any other reason (not limited to patent issues),
215
+ conditions are imposed on you (whether by court order, agreement or
216
+ otherwise) that contradict the conditions of this License, they do not
217
+ excuse you from the conditions of this License. If you cannot
218
+ distribute so as to satisfy simultaneously your obligations under this
219
+ License and any other pertinent obligations, then as a consequence you
220
+ may not distribute the Program at all. For example, if a patent
221
+ license would not permit royalty-free redistribution of the Program by
222
+ all those who receive copies directly or indirectly through you, then
223
+ the only way you could satisfy both it and this License would be to
224
+ refrain entirely from distribution of the Program.
225
+
226
+ If any portion of this section is held invalid or unenforceable under
227
+ any particular circumstance, the balance of the section is intended to
228
+ apply and the section as a whole is intended to apply in other
229
+ circumstances.
230
+
231
+ It is not the purpose of this section to induce you to infringe any
232
+ patents or other property right claims or to contest validity of any
233
+ such claims; this section has the sole purpose of protecting the
234
+ integrity of the free software distribution system, which is
235
+ implemented by public license practices. Many people have made
236
+ generous contributions to the wide range of software distributed
237
+ through that system in reliance on consistent application of that
238
+ system; it is up to the author/donor to decide if he or she is willing
239
+ to distribute software through any other system and a licensee cannot
240
+ impose that choice.
241
+
242
+ This section is intended to make thoroughly clear what is believed to
243
+ be a consequence of the rest of this License.
244
+
245
+ 8. If the distribution and/or use of the Program is restricted in
246
+ certain countries either by patents or by copyrighted interfaces, the
247
+ original copyright holder who places the Program under this License
248
+ may add an explicit geographical distribution limitation excluding
249
+ those countries, so that distribution is permitted only in or among
250
+ countries not thus excluded. In such case, this License incorporates
251
+ the limitation as if written in the body of this License.
252
+
253
+ 9. The Free Software Foundation may publish revised and/or new versions
254
+ of the General Public License from time to time. Such new versions will
255
+ be similar in spirit to the present version, but may differ in detail to
256
+ address new problems or concerns.
257
+
258
+ Each version is given a distinguishing version number. If the Program
259
+ specifies a version number of this License which applies to it and "any
260
+ later version", you have the option of following the terms and conditions
261
+ either of that version or of any later version published by the Free
262
+ Software Foundation. If the Program does not specify a version number of
263
+ this License, you may choose any version ever published by the Free Software
264
+ Foundation.
265
+
266
+ 10. If you wish to incorporate parts of the Program into other free
267
+ programs whose distribution conditions are different, write to the author
268
+ to ask for permission. For software which is copyrighted by the Free
269
+ Software Foundation, write to the Free Software Foundation; we sometimes
270
+ make exceptions for this. Our decision will be guided by the two goals
271
+ of preserving the free status of all derivatives of our free software and
272
+ of promoting the sharing and reuse of software generally.
273
+
274
+ NO WARRANTY
275
+
276
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
277
+ FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
278
+ OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
279
+ PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
280
+ OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
281
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
282
+ TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
283
+ PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
284
+ REPAIR OR CORRECTION.
285
+
286
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
287
+ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
288
+ REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
289
+ INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
290
+ OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
291
+ TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
292
+ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
293
+ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
294
+ POSSIBILITY OF SUCH DAMAGES.
295
+
@@ -0,0 +1,131 @@
1
+ = mongo_translatable
2
+
3
+ Rails specific I18n model localization meant to tie-in to existing ActiveRecord models, ala Globalize2, backed by MongoDB rather than an RDBMS. May include UI elements, too.
4
+
5
+ This is a Rails engine.
6
+
7
+ If you are interested in pure MongoDB localization (your model is MongoMapper::Document, for example), check out http://github.com/ahe/mongo_translation.
8
+
9
+ == Dependencies
10
+
11
+ MongoMapper gem for interacting with MongoDB
12
+ routing-filter gem for setting up locale in your routes
13
+
14
+ So far this is only known to work with Rails 2.3.5. Feel free to fork and hack it to work with Rails 3 and let us know about it.
15
+
16
+ == Installation
17
+
18
+ You need to have mongodb installed and running.
19
+
20
+ === Installing Gem
21
+
22
+ gem install mongo_translatable
23
+
24
+ === Installing from Source
25
+
26
+ Get source from git and checkout submodules:
27
+ git clone http://github.com/kete/mongo_translatable.git
28
+ cd mongo_translatable
29
+ git submodule init
30
+ git submodule update
31
+
32
+ Installing Gem:
33
+ rake gemspec
34
+ gem build {generated gemspec file}
35
+ gem install {generated gem file}
36
+
37
+ Running rake will check that you have the dependencies installed correctly.
38
+
39
+ == Usage
40
+
41
+ In your model...
42
+
43
+ The MongoTranslatable module is for taking advantage of MongoDB for storing translations
44
+ of ActiveRecord models. Here is how it works in practice:
45
+ class Item < ActiveRecord::Base
46
+ mongo_translate :label
47
+ end
48
+
49
+ Then you can do stuff like this (though you don't necessarily need to directly, see below)
50
+ I18n.locale = :en
51
+
52
+ item = Item.create(:label => "a label")
53
+ p item.locale
54
+ "en"
55
+
56
+ item = Item.find(1)
57
+ p item.label
58
+ "a label"
59
+
60
+ item.translate(:label => "etiketissä", :locale => :fi).save
61
+
62
+ or you could have set I18n.locale = :fi in calling env and dropped locale from args
63
+
64
+ I18n.locale = :fi
65
+ item = Item.find(1)
66
+ p item.label
67
+ "etiketissä"
68
+ p item.locale
69
+ "fi"
70
+
71
+ Mongo_translatable also provides a UI for translations and thus an accompanying controller (translations), views, and helpers that manage CRUD for your model's translations.
72
+
73
+ You'll need to set up the routes for the translations controller for each model in question.
74
+
75
+ config.routes.rb in your app's code:
76
+
77
+ ActionController::Routing::Routes.draw do |map|
78
+ map.filter 'locale' # see routing-filter gem
79
+ map.resources :items, :has_many => :translations
80
+ end
81
+
82
+ You'll probably want to add something like this to your application's app/controllers/application_controller.rb
83
+
84
+ # borrowed from kete application (http://github.com/kete/kete)
85
+ # modified to not rely only on mongo_translatable helpers
86
+ before_filter :set_locale
87
+ # first take the locale in the url, then the session[:locale],
88
+ # then the users locale, finally the default site locale
89
+ def set_locale
90
+ if params[:locale] && TranslationsHelper.available_locales.include?(params[:locale])
91
+ I18n.locale = params[:locale]
92
+ elsif session[:locale] && TranslationsHelper.available_locales.include?(session[:locale])
93
+ I18n.locale = session[:locale]
94
+ else
95
+ I18n.locale = I18n.default_locale
96
+ end
97
+ session[:locale] = I18n.locale # need to make sure this persists
98
+ end
99
+
100
+ There are also helpers that you can use in your application for tying into the translations UI. Like so:
101
+
102
+ <%= available_in_locales_for(@item) %>
103
+ <%= needed_in_locales_for(@item, :lightbox => true) %>
104
+
105
+ Finally, you'll probably want to provide add translation key/values for the UI's text to your config/locales/your_locale.yml (or .rb). See this gem's config/locales/en.yml for what to translate. Feel free to contribute back your translations to us for your locale.
106
+
107
+ See the tests and example code in the included test Rails app under test/full_2_3_5_app_with_tests for more details.
108
+
109
+ == TODOs
110
+
111
+ * add mongo_mapper "timestamps!" to ...::Translation model set up by default
112
+ * add "key :user_id, String" to ...::Translation model set up by default, probably with required method implemented in owning model
113
+
114
+ Holding off on these until there is an upgrade path for translation instances that don't have these values
115
+
116
+ == Note on Patches/Pull Requests
117
+
118
+ * Fork the project.
119
+ * Make your feature addition or bug fix to a branch following this convention:
120
+ enhancement_[ticket #]_short_description
121
+ or
122
+ bugfix_[ticket #]_short_description
123
+ replace [ticket #] with ticket number from http://kete.lighthouseapp.com/projects/61584-mongo_translatable
124
+ * Add tests for it. This is important so we don't break it in a
125
+ future version unintentionally.
126
+ * Commit, do not mess with rakefile, version, or history.
127
+ * Send me a pull request.
128
+
129
+ == Copyright
130
+
131
+ Copyright (c) 2010 Horowhenua Library Trust. See LICENSE for details.