zen 0.2.8 → 0.3b
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gems +20 -0
- data/.mailmap +3 -2
- data/.rvmrc +1 -1
- data/.travis.yml +13 -2
- data/.yardopts +13 -0
- data/AUTHORS +1 -1
- data/README.md +115 -77
- data/Rakefile +6 -7
- data/bin/zen +12 -5
- data/guide/_static/categories/categories.png +0 -0
- data/guide/_static/categories/category_groups.png +0 -0
- data/guide/_static/categories/new_category.png +0 -0
- data/guide/_static/categories/new_category_group.png +0 -0
- data/guide/_static/comments/comments.png +0 -0
- data/guide/_static/comments/edit_comment.png +0 -0
- data/guide/_static/custom_fields/custom_field_groups.png +0 -0
- data/guide/_static/custom_fields/custom_field_types.png +0 -0
- data/guide/_static/custom_fields/custom_fields.png +0 -0
- data/guide/_static/custom_fields/edit_custom_field_general.png +0 -0
- data/guide/_static/custom_fields/edit_custom_field_group.png +0 -0
- data/guide/_static/custom_fields/edit_custom_field_settings.png +0 -0
- data/guide/_static/custom_fields/edit_custom_field_type.png +0 -0
- data/guide/_static/menus/edit_menu.png +0 -0
- data/guide/_static/menus/edit_menu_item.png +0 -0
- data/guide/_static/menus/menu_items.png +0 -0
- data/guide/_static/menus/menus.png +0 -0
- data/guide/_static/sections/edit_entry.png +0 -0
- data/guide/_static/sections/edit_entry_categories.png +0 -0
- data/guide/_static/sections/edit_entry_general.png +0 -0
- data/guide/_static/sections/edit_entry_meta.png +0 -0
- data/guide/_static/sections/edit_section_comments.png +0 -0
- data/guide/_static/sections/edit_section_general.png +0 -0
- data/guide/_static/sections/edit_section_groups.png +0 -0
- data/guide/_static/sections/entries.png +0 -0
- data/guide/_static/sections/sections.png +0 -0
- data/guide/_static/settings/overview_general.png +0 -0
- data/guide/_static/settings/overview_security.png +0 -0
- data/guide/_static/settings/overview_user.png +0 -0
- data/guide/_static/users/edit_user.png +0 -0
- data/guide/_static/users/edit_user_group.png +0 -0
- data/guide/_static/users/edit_user_group_permissions.png +0 -0
- data/guide/_static/users/edit_user_permissions.png +0 -0
- data/guide/_static/users/overview.png +0 -0
- data/guide/_static/users/user_groups_overview.png +0 -0
- data/guide/asset_management.md +117 -0
- data/{CHANGELOG.md → guide/changelog.md} +42 -0
- data/guide/css/common.css +20 -0
- data/guide/getting_started.md +61 -0
- data/guide/hacking.md +52 -0
- data/guide/installation.md +44 -0
- data/guide/javascript.md +352 -0
- data/lib/vendor/sequel_sluggable.rb +137 -0
- data/lib/yard/tags.rb +13 -0
- data/lib/zen.rb +148 -78
- data/lib/zen/asset_groups.rb +85 -0
- data/lib/zen/bin/create.rb +267 -56
- data/lib/zen/bin/default.rb +84 -0
- data/lib/zen/controller/admin_controller.rb +1 -82
- data/lib/zen/controller/base_controller.rb +9 -5
- data/lib/zen/controller/frontend_controller.rb +0 -1
- data/lib/zen/controller/main_controller.rb +30 -42
- data/lib/zen/controller/preview.rb +9 -8
- data/lib/zen/controller/translations.rb +49 -0
- data/lib/zen/error.rb +17 -0
- data/lib/zen/event.rb +118 -0
- data/lib/zen/helper/asset.rb +63 -0
- data/lib/zen/helper/breadcrumb.rb +1 -4
- data/lib/zen/helper/controller.rb +73 -0
- data/lib/zen/helper/locale.rb +42 -0
- data/lib/zen/helper/message.rb +0 -3
- data/lib/zen/helper/search.rb +54 -0
- data/lib/zen/helper/stacked_aspect.rb +249 -0
- data/lib/zen/helper/theme.rb +3 -10
- data/lib/zen/language.rb +356 -181
- data/lib/zen/language/en/zen_general.rb +52 -0
- data/lib/zen/language/en/zen_models.rb +19 -0
- data/lib/zen/language/nl/zen_general.rb +57 -0
- data/lib/zen/language/nl/zen_models.rb +22 -0
- data/lib/zen/language/translation.rb +132 -0
- data/lib/zen/languages.rb +9 -0
- data/lib/zen/layout/admin.xhtml +3 -3
- data/lib/zen/layout/login.xhtml +1 -1
- data/lib/zen/markup.rb +189 -0
- data/lib/zen/model/helper.rb +65 -0
- data/lib/zen/model/init.rb +62 -0
- data/lib/zen/model/methods.rb +6 -7
- data/lib/zen/package.rb +312 -201
- data/lib/zen/package/all.rb +4 -3
- data/lib/zen/package/categories/lib/categories.rb +29 -41
- data/lib/zen/package/categories/lib/categories/controller/categories.rb +185 -130
- data/lib/zen/package/categories/lib/categories/controller/category_groups.rb +172 -102
- data/lib/zen/package/categories/lib/categories/helper/category.rb +4 -9
- data/lib/zen/package/categories/lib/categories/helper/category_frontend.rb +86 -0
- data/lib/zen/package/categories/lib/categories/language/en/categories.rb +40 -0
- data/lib/zen/package/categories/lib/categories/language/en/category_groups.rb +39 -0
- data/lib/zen/package/categories/lib/categories/language/nl/categories.rb +42 -0
- data/lib/zen/package/categories/lib/categories/language/nl/category_groups.rb +42 -0
- data/lib/zen/package/categories/lib/categories/model/category.rb +21 -25
- data/lib/zen/package/categories/lib/categories/model/category_group.rb +21 -15
- data/lib/zen/package/categories/lib/categories/view/admin/categories/form.xhtml +25 -26
- data/lib/zen/package/categories/lib/categories/view/admin/categories/index.xhtml +24 -24
- data/lib/zen/package/categories/lib/categories/view/admin/category-groups/form.xhtml +18 -20
- data/lib/zen/package/categories/lib/categories/view/admin/category-groups/index.xhtml +21 -18
- data/lib/zen/package/comments/lib/comments.rb +30 -50
- data/lib/zen/package/comments/lib/comments/anti_spam.rb +138 -0
- data/lib/zen/package/comments/lib/comments/controller/comments.rb +159 -92
- data/lib/zen/package/comments/lib/comments/controller/comments_form.rb +122 -34
- data/lib/zen/package/comments/lib/comments/helper/comment.rb +0 -3
- data/lib/zen/package/comments/lib/comments/helper/comment_frontend.rb +90 -0
- data/lib/zen/package/comments/lib/comments/language/en/comments.rb +57 -0
- data/lib/zen/package/comments/lib/comments/language/nl/comments.rb +61 -0
- data/lib/zen/package/comments/lib/comments/model/comment.rb +147 -49
- data/lib/zen/package/comments/lib/comments/model/comment_status.rb +0 -2
- data/lib/zen/package/comments/lib/comments/view/admin/comments/form.xhtml +37 -40
- data/lib/zen/package/comments/lib/comments/view/admin/comments/index.xhtml +23 -42
- data/lib/zen/package/comments/migrations/1308774099_comment_status.rb +12 -4
- data/lib/zen/package/comments/migrations/1313851786_remove_defensio_signature.rb +11 -0
- data/lib/zen/package/custom_fields/lib/custom_fields.rb +40 -43
- data/lib/zen/package/custom_fields/lib/custom_fields/blue_form_parameters.rb +72 -17
- data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_groups.rb +154 -118
- data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_types.rb +147 -90
- data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_fields.rb +161 -131
- data/lib/zen/package/custom_fields/lib/custom_fields/helper/custom_field.rb +4 -9
- data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_field_groups.rb +42 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_field_types.rb +51 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_fields.rb +60 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_field_groups.rb +41 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_field_types.rb +49 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_fields.rb +61 -0
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field.rb +18 -23
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_group.rb +20 -19
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_method.rb +1 -3
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_type.rb +19 -9
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_value.rb +18 -15
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/form.xhtml +18 -18
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/index.xhtml +30 -24
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-types/form.xhtml +15 -10
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-types/index.xhtml +24 -19
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/form.xhtml +18 -13
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/index.xhtml +30 -20
- data/lib/zen/package/extensions/lib/extensions.rb +20 -0
- data/lib/zen/package/extensions/lib/extensions/controller/extensions.rb +41 -0
- data/lib/zen/package/extensions/lib/extensions/language/en/extensions.rb +23 -0
- data/lib/zen/package/extensions/lib/extensions/language/nl/extensions.rb +25 -0
- data/lib/zen/package/extensions/lib/extensions/view/admin/extensions/index.xhtml +86 -0
- data/lib/zen/package/menu.rb +109 -0
- data/lib/zen/package/menus/lib/menus.rb +25 -34
- data/lib/zen/package/menus/lib/menus/controller/menu_items.rb +143 -107
- data/lib/zen/package/menus/lib/menus/controller/menus.rb +166 -115
- data/lib/zen/package/menus/lib/menus/helper/menu.rb +2 -8
- data/lib/zen/package/menus/lib/menus/helper/menu_frontend.rb +114 -0
- data/lib/zen/package/menus/lib/menus/language/en/menu_items.rb +48 -0
- data/lib/zen/package/menus/lib/menus/language/en/menus.rb +48 -0
- data/lib/zen/package/menus/lib/menus/language/nl/menu_items.rb +48 -0
- data/lib/zen/package/menus/lib/menus/language/nl/menus.rb +50 -0
- data/lib/zen/package/menus/lib/menus/model/menu.rb +24 -17
- data/lib/zen/package/menus/lib/menus/model/menu_item.rb +37 -13
- data/lib/zen/package/menus/lib/menus/view/admin/menu-items/form.xhtml +32 -25
- data/lib/zen/package/menus/lib/menus/view/admin/menu-items/index.xhtml +23 -17
- data/lib/zen/package/menus/lib/menus/view/admin/menus/form.xhtml +31 -26
- data/lib/zen/package/menus/lib/menus/view/admin/menus/index.xhtml +20 -22
- data/lib/zen/package/sections/lib/sections.rb +25 -68
- data/lib/zen/package/sections/lib/sections/controller/section_entries.rb +178 -138
- data/lib/zen/package/sections/lib/sections/controller/sections.rb +173 -140
- data/lib/zen/package/sections/lib/sections/helper/section.rb +3 -6
- data/lib/zen/package/sections/lib/sections/helper/section_frontend.rb +146 -0
- data/lib/zen/package/sections/lib/sections/language/en/section_entries.rb +50 -0
- data/lib/zen/package/sections/lib/sections/language/en/sections.rb +55 -0
- data/lib/zen/package/sections/lib/sections/language/nl/section_entries.rb +50 -0
- data/lib/zen/package/sections/lib/sections/language/nl/sections.rb +55 -0
- data/lib/zen/package/sections/lib/sections/model/section.rb +36 -36
- data/lib/zen/package/sections/lib/sections/model/section_entry.rb +52 -59
- data/lib/zen/package/sections/lib/sections/model/section_entry_status.rb +2 -2
- data/lib/zen/package/sections/lib/sections/view/admin/form.xhtml +24 -21
- data/lib/zen/package/sections/lib/sections/view/admin/index.xhtml +24 -26
- data/lib/zen/package/sections/lib/sections/view/admin/section-entries/form.xhtml +33 -31
- data/lib/zen/package/sections/lib/sections/view/admin/section-entries/index.xhtml +24 -25
- data/lib/zen/package/sections/migrations/1308672298_use_id_for_default_section.rb +14 -10
- data/lib/zen/package/sections/migrations/1308813320_section_entry_statuses.rb +12 -6
- data/lib/zen/package/settings/lib/settings.rb +25 -120
- data/lib/zen/package/settings/lib/settings/blue_form_parameters.rb +157 -0
- data/lib/zen/package/settings/lib/settings/controller/settings.rb +94 -69
- data/lib/zen/package/settings/lib/settings/language/en/settings.rb +41 -0
- data/lib/zen/package/settings/lib/settings/language/nl/settings.rb +41 -0
- data/lib/zen/package/settings/lib/settings/model/setting.rb +0 -2
- data/lib/zen/package/settings/lib/settings/setting.rb +379 -0
- data/lib/zen/package/settings/lib/settings/setting_groups.rb +11 -0
- data/lib/zen/package/settings/lib/settings/settings.rb +83 -0
- data/lib/zen/package/settings/lib/settings/settings_group.rb +84 -0
- data/lib/zen/package/settings/lib/settings/singleton_methods.rb +35 -0
- data/lib/zen/package/settings/lib/settings/view/admin/settings/index.xhtml +15 -57
- data/lib/zen/package/settings/migrations/1321197919_remove_unused_columns.rb +17 -0
- data/lib/zen/package/users/lib/users.rb +51 -36
- data/lib/zen/package/users/lib/users/controller/user_groups.rb +133 -98
- data/lib/zen/package/users/lib/users/controller/users.rb +253 -136
- data/lib/zen/package/users/lib/users/helper/access.rb +102 -0
- data/lib/zen/package/users/lib/users/helper/acl.rb +113 -0
- data/lib/zen/package/users/lib/users/helper/users.rb +41 -24
- data/lib/zen/package/users/lib/users/language/en/permissions.rb +16 -0
- data/lib/zen/package/users/lib/users/language/en/user_groups.rb +39 -0
- data/lib/zen/package/users/lib/users/language/en/users.rb +73 -0
- data/lib/zen/package/users/lib/users/language/nl/permissions.rb +16 -0
- data/lib/zen/package/users/lib/users/language/nl/user_groups.rb +41 -0
- data/lib/zen/package/users/lib/users/language/nl/users.rb +74 -0
- data/lib/zen/package/users/lib/users/model/permission.rb +28 -0
- data/lib/zen/package/users/lib/users/model/user.rb +104 -65
- data/lib/zen/package/users/lib/users/model/user_group.rb +28 -24
- data/lib/zen/package/users/lib/users/model/user_status.rb +27 -0
- data/lib/zen/package/users/lib/users/public/admin/css/users/permissions.css +22 -0
- data/lib/zen/package/users/lib/users/public/admin/js/users/permissions.js +33 -0
- data/lib/zen/package/users/lib/users/settings.rb +19 -0
- data/lib/zen/package/users/lib/users/view/admin/user-groups/form.xhtml +58 -28
- data/lib/zen/package/users/lib/users/view/admin/user-groups/index.xhtml +19 -15
- data/lib/zen/package/users/lib/users/view/admin/users/form.xhtml +93 -62
- data/lib/zen/package/users/lib/users/view/admin/users/index.xhtml +23 -36
- data/lib/zen/package/users/lib/users/view/admin/users/login.xhtml +13 -6
- data/lib/zen/package/users/lib/users/view/admin/users/permissions.xhtml +33 -0
- data/lib/zen/package/users/lib/users/view/admin/users/register.xhtml +52 -0
- data/lib/zen/package/users/migrations/1313786058_update_default_date.rb +41 -0
- data/lib/zen/package/users/migrations/1316432327_permissions.rb +36 -0
- data/lib/zen/package/users/migrations/1320272365_status_ids.rb +67 -0
- data/lib/zen/public/admin/css/zen/buttons.css +3 -11
- data/lib/zen/public/admin/css/zen/datepicker.css +23 -13
- data/lib/zen/public/admin/css/zen/editor.css +6 -14
- data/lib/zen/public/admin/css/zen/forms.css +19 -12
- data/lib/zen/public/admin/css/zen/general.css +22 -18
- data/lib/zen/public/admin/css/zen/grid.css +1 -20
- data/lib/zen/public/admin/css/zen/layout.css +26 -11
- data/lib/zen/public/admin/css/zen/messages.css +3 -10
- data/lib/zen/public/admin/css/zen/reset.css +13 -15
- data/lib/zen/public/admin/css/zen/tables.css +8 -10
- data/lib/zen/public/admin/css/zen/tabs.css +2 -10
- data/lib/zen/public/admin/css/zen/window.css +2 -8
- data/lib/zen/public/admin/js/vendor/datepicker.js +540 -240
- data/lib/zen/public/admin/js/vendor/mootools/core.js +273 -283
- data/lib/zen/public/admin/js/vendor/mootools/more.js +131 -136
- data/lib/zen/public/admin/js/zen/index.js +8 -14
- data/lib/zen/public/admin/js/zen/lib/editor.js +36 -33
- data/lib/zen/public/admin/js/zen/lib/editor/markdown.js +0 -6
- data/lib/zen/public/admin/js/zen/lib/editor/textile.js +0 -6
- data/lib/zen/public/admin/js/zen/lib/html_table.js +0 -5
- data/lib/zen/public/admin/js/zen/lib/tabs.js +22 -79
- data/lib/zen/public/admin/js/zen/lib/window.js +12 -22
- data/lib/zen/spec/bacon/color_output.rb +1 -1
- data/lib/zen/spec/helper.rb +6 -11
- data/lib/zen/spec/simplecov.rb +3 -3
- data/lib/zen/task.rb +0 -1
- data/lib/zen/task/build.rake +46 -26
- data/lib/zen/task/clean.rake +14 -7
- data/lib/zen/task/db.rake +31 -29
- data/lib/zen/task/package.rake +19 -23
- data/lib/zen/task/proto.rake +3 -5
- data/lib/zen/task/setup.rake +4 -0
- data/lib/zen/task/test.rake +31 -6
- data/lib/zen/task/theme.rake +13 -19
- data/lib/zen/theme.rb +377 -52
- data/lib/zen/validation.rb +22 -30
- data/lib/zen/version.rb +1 -2
- data/lib/zen/view/bottom.xhtml +9 -1
- data/lib/zen/view/head.xhtml +1 -1
- data/lib/zen/view/main.xhtml +1 -1
- data/lib/zen/view/search.xhtml +9 -0
- data/proto/app/Rakefile +0 -1
- data/proto/app/app.rb +21 -16
- data/proto/app/config/config.rb.erb +41 -0
- data/proto/app/config/{database.rb → database.rb.erb} +17 -14
- data/proto/app/config/middlewares.rb +1 -1
- data/proto/app/theme/default/index.xhtml +25 -0
- data/proto/app/theme/theme.rb +19 -0
- data/proto/app/{log/database/dev → tmp}/.gitkeep +0 -0
- data/proto/migration.rb +3 -5
- data/proto/rack/thin.yml +41 -0
- data/proto/rack/unicorn.rb +38 -0
- data/spec/Rakefile +15 -11
- data/spec/fixtures/zen/helper/controller.rb +13 -0
- data/spec/fixtures/zen/helper/locale.rb +7 -0
- data/spec/fixtures/zen/helper/message.rb +0 -4
- data/spec/fixtures/zen/language.rb +31 -0
- data/spec/fixtures/zen/language/en/spec.rb +11 -0
- data/spec/fixtures/zen/language/nl/spec.rb +11 -0
- data/spec/fixtures/zen/package.rb +0 -10
- data/spec/fixtures/zen/package/categories/helper/category_frontend.rb +16 -0
- data/spec/fixtures/zen/package/comments/helper/comment_frontend.rb +16 -0
- data/spec/fixtures/zen/package/sections/helper/section_frontend.rb +16 -0
- data/spec/fixtures/zen/package/settings/controller/settings.rb +17 -0
- data/spec/fixtures/zen/package/users/helper/access.rb +18 -0
- data/spec/fixtures/zen/package/users/helper/acl.rb +23 -0
- data/spec/fixtures/zen/theme/{default-section → default}/index.xhtml +0 -0
- data/spec/helper.rb +12 -27
- data/{proto/app/log/database/live → spec/public}/.gitkeep +0 -0
- data/spec/zen/controller/admin_controller.rb +5 -6
- data/spec/zen/controller/main_controller.rb +29 -35
- data/spec/zen/controller/preview.rb +9 -10
- data/spec/zen/event.rb +44 -0
- data/spec/zen/helper/breadcrumb.rb +4 -5
- data/spec/zen/helper/controller.rb +21 -0
- data/spec/zen/helper/locale.rb +25 -0
- data/spec/zen/helper/message.rb +4 -11
- data/spec/zen/helper/theme.rb +11 -14
- data/spec/zen/language.rb +48 -22
- data/spec/zen/markup.rb +39 -0
- data/spec/zen/package.rb +48 -11
- data/spec/zen/package/categories/controller/categories.rb +99 -45
- data/spec/zen/package/categories/controller/category_groups.rb +109 -33
- data/spec/zen/package/categories/helper/category.rb +19 -32
- data/spec/zen/package/categories/helper/category_frontend.rb +61 -0
- data/spec/zen/package/comments/anti_spam.rb +50 -0
- data/spec/zen/package/comments/controller/comments.rb +121 -61
- data/spec/zen/package/comments/controller/comments_form.rb +120 -94
- data/spec/zen/package/comments/helper/comment.rb +13 -13
- data/spec/zen/package/comments/helper/comment_frontend.rb +92 -0
- data/spec/zen/package/custom_fields/blue_form_parameters.rb +50 -50
- data/spec/zen/package/custom_fields/controller/custom_field_groups.rb +135 -43
- data/spec/zen/package/custom_fields/controller/custom_field_types.rb +153 -48
- data/spec/zen/package/custom_fields/controller/custom_fields.rb +130 -51
- data/spec/zen/package/custom_fields/helper/custom_field.rb +8 -8
- data/spec/zen/package/extensions/controller/extensions.rb +38 -0
- data/spec/zen/package/menus/controller/menu_items.rb +121 -42
- data/spec/zen/package/menus/controller/menus.rb +125 -38
- data/spec/zen/package/menus/helper/menu.rb +26 -26
- data/spec/zen/package/menus/helper/menu_frontend.rb +104 -0
- data/spec/zen/package/sections/controller/section_entries.rb +145 -89
- data/spec/zen/package/sections/controller/sections.rb +130 -35
- data/spec/zen/package/sections/helper/section.rb +27 -38
- data/spec/zen/package/sections/helper/section_frontend.rb +160 -0
- data/spec/zen/package/settings/controller/settings.rb +73 -8
- data/spec/zen/package/settings/settings.rb +119 -0
- data/spec/zen/package/users/controller/user_groups.rb +134 -34
- data/spec/zen/package/users/controller/users.rb +189 -44
- data/spec/zen/package/users/helper/access.rb +29 -0
- data/spec/zen/package/users/helper/acl.rb +46 -0
- data/spec/zen/package/users/helper/users.rb +20 -64
- data/spec/zen/theme.rb +7 -9
- data/spec/zen/validation.rb +1 -2
- data/zen.gemspec +25 -22
- metadata +303 -222
- data/lib/zen/asset.rb +0 -292
- data/lib/zen/bin/runner.rb +0 -118
- data/lib/zen/error/language_error.rb +0 -10
- data/lib/zen/error/package_error.rb +0 -10
- data/lib/zen/error/plugin_error.rb +0 -10
- data/lib/zen/error/theme_error.rb +0 -10
- data/lib/zen/error/validation_error.rb +0 -10
- data/lib/zen/helper/acl.rb +0 -182
- data/lib/zen/helper/blue_form_vendor.rb +0 -689
- data/lib/zen/language/en/zen_general.yml +0 -25
- data/lib/zen/language/en/zen_models.yml +0 -13
- data/lib/zen/language/nl/zen_general.yml +0 -25
- data/lib/zen/language/nl/zen_models.yml +0 -13
- data/lib/zen/model/settings.rb +0 -78
- data/lib/zen/package/base.rb +0 -62
- data/lib/zen/package/categories/lib/categories/language/en/categories.yml +0 -36
- data/lib/zen/package/categories/lib/categories/language/en/category_groups.yml +0 -34
- data/lib/zen/package/categories/lib/categories/language/nl/categories.yml +0 -40
- data/lib/zen/package/categories/lib/categories/language/nl/category_groups.yml +0 -34
- data/lib/zen/package/categories/lib/categories/plugin/categories.rb +0 -141
- data/lib/zen/package/comments/lib/comments/language/en/comments.yml +0 -48
- data/lib/zen/package/comments/lib/comments/language/nl/comments.yml +0 -50
- data/lib/zen/package/comments/lib/comments/plugin/anti_spam.rb +0 -156
- data/lib/zen/package/comments/lib/comments/plugin/comments.rb +0 -115
- data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_field_groups.yml +0 -33
- data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_field_types.yml +0 -40
- data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_fields.yml +0 -54
- data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_field_groups.yml +0 -33
- data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_field_types.yml +0 -40
- data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_fields.yml +0 -54
- data/lib/zen/package/menus/lib/menus/language/en/menu_items.yml +0 -41
- data/lib/zen/package/menus/lib/menus/language/en/menus.yml +0 -40
- data/lib/zen/package/menus/lib/menus/language/nl/menu_items.yml +0 -41
- data/lib/zen/package/menus/lib/menus/language/nl/menus.yml +0 -40
- data/lib/zen/package/menus/lib/menus/plugin/menus.rb +0 -152
- data/lib/zen/package/sections/lib/sections/language/en/section_entries.yml +0 -44
- data/lib/zen/package/sections/lib/sections/language/en/sections.yml +0 -48
- data/lib/zen/package/sections/lib/sections/language/nl/section_entries.yml +0 -44
- data/lib/zen/package/sections/lib/sections/language/nl/sections.yml +0 -48
- data/lib/zen/package/sections/lib/sections/plugin/section_entries.rb +0 -244
- data/lib/zen/package/sections/lib/sections/plugin/sections.rb +0 -87
- data/lib/zen/package/settings/lib/settings/language/en/settings.yml +0 -36
- data/lib/zen/package/settings/lib/settings/language/nl/settings.yml +0 -37
- data/lib/zen/package/settings/lib/settings/plugin/group_base.rb +0 -39
- data/lib/zen/package/settings/lib/settings/plugin/setting_base.rb +0 -133
- data/lib/zen/package/settings/lib/settings/plugin/settings.rb +0 -251
- data/lib/zen/package/users/lib/users/controller/access_rules.rb +0 -284
- data/lib/zen/package/users/lib/users/language/en/access_rules.yml +0 -38
- data/lib/zen/package/users/lib/users/language/en/user_groups.yml +0 -32
- data/lib/zen/package/users/lib/users/language/en/users.yml +0 -57
- data/lib/zen/package/users/lib/users/language/nl/access_rules.yml +0 -38
- data/lib/zen/package/users/lib/users/language/nl/user_groups.yml +0 -32
- data/lib/zen/package/users/lib/users/language/nl/users.yml +0 -57
- data/lib/zen/package/users/lib/users/model/access_rule.rb +0 -42
- data/lib/zen/package/users/lib/users/public/admin/js/users/access_rules.js +0 -65
- data/lib/zen/package/users/lib/users/public/admin/js/users/lib/access_rules.js +0 -49
- data/lib/zen/package/users/lib/users/view/admin/access-rules/form.xhtml +0 -120
- data/lib/zen/package/users/lib/users/view/admin/access-rules/index.xhtml +0 -102
- data/lib/zen/plugin.rb +0 -182
- data/lib/zen/plugin/base.rb +0 -46
- data/lib/zen/plugin/helper.rb +0 -47
- data/lib/zen/plugin/markup/lib/markup.rb +0 -14
- data/lib/zen/plugin/markup/lib/markup/language/en/markup.yml +0 -6
- data/lib/zen/plugin/markup/lib/markup/markup.rb +0 -165
- data/lib/zen/public/admin/js/zen/lib/asset.js +0 -111
- data/lib/zen/task/plugin.rake +0 -18
- data/lib/zen/theme/base.rb +0 -65
- data/proto/app/config/config.rb +0 -18
- data/spec/fixtures/zen/language/en/spec.yml +0 -10
- data/spec/fixtures/zen/language/nl/spec.yml +0 -7
- data/spec/fixtures/zen/package/settings/plugin/settings.rb +0 -20
- data/spec/zen/asset.rb +0 -97
- data/spec/zen/bin/create.rb +0 -89
- data/spec/zen/bin/runner.rb +0 -47
- data/spec/zen/helper/acl.rb +0 -149
- data/spec/zen/package/categories/plugin/categories.rb +0 -92
- data/spec/zen/package/comments/plugin/anti_spam.rb +0 -59
- data/spec/zen/package/comments/plugin/comments.rb +0 -107
- data/spec/zen/package/menus/plugin/menus.rb +0 -120
- data/spec/zen/package/sections/plugin/section_entries.rb +0 -161
- data/spec/zen/package/sections/plugin/sections.rb +0 -75
- data/spec/zen/package/settings/plugin/settings.rb +0 -33
- data/spec/zen/package/users/controller/access_rules.rb +0 -90
- data/spec/zen/plugin.rb +0 -64
- data/spec/zen/plugin/helper.rb +0 -11
- data/spec/zen/plugin/markup.rb +0 -44
data/lib/zen/language.rb
CHANGED
|
@@ -1,258 +1,433 @@
|
|
|
1
|
-
require
|
|
1
|
+
require 'zen/language/translation'
|
|
2
2
|
|
|
3
|
-
#:nodoc:
|
|
4
3
|
module Zen
|
|
5
4
|
##
|
|
6
|
-
#
|
|
7
|
-
#
|
|
8
|
-
#
|
|
9
|
-
#
|
|
10
|
-
#
|
|
5
|
+
# ``Zen::Language`` is the heart of the multi language system that comes with
|
|
6
|
+
# Zen. It makes it easy to display localized bits of text as well as adding
|
|
7
|
+
# new collections of translated strings.
|
|
8
|
+
#
|
|
9
|
+
# ## Adding Languages
|
|
10
|
+
#
|
|
11
|
+
# Adding a new language can be done by using {Zen::Language.add}. This method
|
|
12
|
+
# works similar to the ones used by {Zen::Package} and {Zen::Theme}. An
|
|
13
|
+
# example of adding a language (English in this case) looks like the
|
|
11
14
|
# following:
|
|
12
15
|
#
|
|
13
|
-
#
|
|
14
|
-
#
|
|
15
|
-
#
|
|
16
|
+
# Zen::Language.add do |lang|
|
|
17
|
+
# lang.name = 'en'
|
|
18
|
+
# lang.title = 'English'
|
|
19
|
+
# end
|
|
20
|
+
#
|
|
21
|
+
# When adding a language you **must** set the following items:
|
|
22
|
+
#
|
|
23
|
+
# * **name**: the language code as defined in [ISO 639][iso 639]. Examples of
|
|
24
|
+
# these codes are "en-GB", "nl", etc. At the moment Zen does not have
|
|
25
|
+
# different language files for British English and American English.
|
|
26
|
+
# * **title**: the name of the language in a human friendly form. This name
|
|
27
|
+
# should be set in the specific language. For example, for Dutch the title
|
|
28
|
+
# would be "Nederlands".
|
|
29
|
+
#
|
|
30
|
+
# Optionally you can also set the following attributes:
|
|
31
|
+
#
|
|
32
|
+
# * **rtl**: indicates that the language reads from right to left. When set to
|
|
33
|
+
# true the ``<html>`` tag will have an extra ``dir`` attribute so that
|
|
34
|
+
# browsers can properly display the text from right to left.
|
|
35
|
+
#
|
|
36
|
+
# ## Adding Translations
|
|
37
|
+
#
|
|
38
|
+
# Translations for a certain language are added using
|
|
39
|
+
# {Zen::Language::Translation}. Similar to languages these are added by
|
|
40
|
+
# calling ``.add()``. A simple example of adding a set of translations is the
|
|
41
|
+
# following:
|
|
42
|
+
#
|
|
43
|
+
# Zen::Language::Translation.add do |trans|
|
|
44
|
+
# trans.language = 'en'
|
|
45
|
+
# trans.name = 'foobar'
|
|
46
|
+
#
|
|
47
|
+
# trans.translate do |t|
|
|
48
|
+
#
|
|
49
|
+
# end
|
|
50
|
+
# end
|
|
51
|
+
#
|
|
52
|
+
# This adds a language collection called "foobar" for the English language.
|
|
53
|
+
# Translation strings are added inside the block of the ``translate()``
|
|
54
|
+
# method. Setting these strings works just like setting the keys and values of
|
|
55
|
+
# a hash:
|
|
56
|
+
#
|
|
57
|
+
# trans.translate do |t|
|
|
58
|
+
# t['hello'] = 'Hello World'
|
|
59
|
+
# end
|
|
60
|
+
#
|
|
61
|
+
# It is a good idea to group certain language strings together. For example,
|
|
62
|
+
# you might have a few strings related to page titles. The way of doing this
|
|
63
|
+
# is by simply separating groups with a dot in the keys:
|
|
64
|
+
#
|
|
65
|
+
# trans.translate do |t|
|
|
66
|
+
# t['titles.index'] = 'Example'
|
|
67
|
+
# t['titles.edit'] = 'Edit Example'
|
|
68
|
+
# end
|
|
69
|
+
#
|
|
70
|
+
# The keys specified in ``[]=`` should match the regular expression as defined
|
|
71
|
+
# in {Zen::Language::Translation::KEY_REGEX}. In plain English, they can only
|
|
72
|
+
# contain lower case letters, underscores and dots.
|
|
16
73
|
#
|
|
17
|
-
#
|
|
18
|
-
# could then load that file as following:
|
|
74
|
+
# A full example:
|
|
19
75
|
#
|
|
20
|
-
# Zen::Language.
|
|
76
|
+
# Zen::Language::Translation.add do |trans|
|
|
77
|
+
# trans.language = 'en'
|
|
78
|
+
# trans.name = 'foobar'
|
|
79
|
+
#
|
|
80
|
+
# trans.translate do |t|
|
|
81
|
+
# t['titles.index'] = 'Example'
|
|
82
|
+
# t['titles.edit'] = 'Edit Example'
|
|
83
|
+
# end
|
|
84
|
+
# end
|
|
85
|
+
#
|
|
86
|
+
# ## Organizing Languages
|
|
87
|
+
#
|
|
88
|
+
# In order for language files to be loaded by Zen you need to place them in
|
|
89
|
+
# certain directories using a certain file name. Language files should be
|
|
90
|
+
# named after the ``name`` setter/getter defined when calling
|
|
91
|
+
# {Zen::Language::Translation.add} (including casing) and should have ``.rb``
|
|
92
|
+
# as extension. These files should be placed in sub directories that match the
|
|
93
|
+
# language name they belong to. These directories in turn should be placed
|
|
94
|
+
# inside a "language" directory.
|
|
95
|
+
#
|
|
96
|
+
# In other words, our "foobar" example would be stored as following:
|
|
97
|
+
#
|
|
98
|
+
# language/
|
|
99
|
+
# |
|
|
100
|
+
# |__ en/
|
|
101
|
+
# |
|
|
102
|
+
# |__ foobar.rb
|
|
103
|
+
#
|
|
104
|
+
# Before you can load files from the language directory you'll need to add it
|
|
105
|
+
# to the list of directories to search each time a language file is loaded.
|
|
106
|
+
# Similar to how you can add view folders or helper folders in Ramaze you can
|
|
107
|
+
# add language folders:
|
|
108
|
+
#
|
|
109
|
+
# Zen::Language.options.paths << 'path/to/language'
|
|
21
110
|
#
|
|
22
111
|
# ## Loading Translations
|
|
23
112
|
#
|
|
24
|
-
#
|
|
25
|
-
#
|
|
26
|
-
#
|
|
27
|
-
#
|
|
28
|
-
# (
|
|
113
|
+
# Once a language file has been added it must be loaded before it can be used.
|
|
114
|
+
# Loading a language file can be done in two ways:
|
|
115
|
+
#
|
|
116
|
+
# 1. Manually loading it by calling {Zen::Language.load}.
|
|
117
|
+
# 2. Calling {Zen::Language.lang} or ``lang()`` (injected into the global
|
|
118
|
+
# namespace).
|
|
29
119
|
#
|
|
30
|
-
#
|
|
31
|
-
#
|
|
120
|
+
# In the last case missing language files will be loaded if possible. However,
|
|
121
|
+
# it is recommended that you pre-load your language files before starting the
|
|
122
|
+
# application. By doing this these translations don't have to be loaded during
|
|
123
|
+
# an HTTP request which could potentially slow down the application.
|
|
32
124
|
#
|
|
33
|
-
#
|
|
125
|
+
# If we wanted to load the "foobar" language file mentioned earlier you can do
|
|
126
|
+
# this as following:
|
|
34
127
|
#
|
|
35
|
-
#
|
|
128
|
+
# Zen::Language.load('foobar')
|
|
36
129
|
#
|
|
37
|
-
#
|
|
38
|
-
# structure of this directory looks like the following:
|
|
130
|
+
# ## Using Translations
|
|
39
131
|
#
|
|
40
|
-
#
|
|
41
|
-
#
|
|
42
|
-
#
|
|
43
|
-
#
|
|
44
|
-
#
|
|
45
|
-
# |
|
|
46
|
-
# |__ filename.yml
|
|
132
|
+
# Once the entire process of adding and loading a language file has been
|
|
133
|
+
# completed you can use the language strings defined in that file. This can be
|
|
134
|
+
# done by calling the global method ``lang()`` which is available in all
|
|
135
|
+
# scopes. If you happen to need it in a scope where it's overwritten you can
|
|
136
|
+
# call {Zen::Language.lang} instead.
|
|
47
137
|
#
|
|
48
|
-
#
|
|
49
|
-
#
|
|
50
|
-
# updated as following:
|
|
138
|
+
# A simple example of loading a few language strings of the file defined
|
|
139
|
+
# earlier in this guide looks like this:
|
|
51
140
|
#
|
|
52
|
-
#
|
|
141
|
+
# lang('foobar.titles.index')
|
|
53
142
|
#
|
|
54
|
-
#
|
|
55
|
-
#
|
|
143
|
+
# Language keys should **always** be in the format of ``A.B`` where A is the
|
|
144
|
+
# name of the language file ("foobar" in this case) and B a dot separated
|
|
145
|
+
# string that points to the language string to load. This means that the
|
|
146
|
+
# following examples are not valid:
|
|
56
147
|
#
|
|
57
|
-
#
|
|
148
|
+
# lang('foobar')
|
|
149
|
+
# lang('foo bar')
|
|
58
150
|
#
|
|
59
|
-
#
|
|
60
|
-
# * paths: Array of paths to look for a language directory. Note that this
|
|
61
|
-
# should be the parent directory of the directory called "language", not the
|
|
62
|
-
# actual directory itself.
|
|
151
|
+
# [iso 639]: https://en.wikipedia.org/wiki/ISO_639
|
|
63
152
|
#
|
|
64
|
-
# @author Yorick Peterse
|
|
65
153
|
# @since 0.2
|
|
66
154
|
#
|
|
67
|
-
|
|
155
|
+
class Language
|
|
156
|
+
include Zen::Validation
|
|
68
157
|
include Ramaze::Optioned
|
|
69
158
|
|
|
70
|
-
|
|
71
|
-
|
|
159
|
+
# Hash containing all the available languages.
|
|
160
|
+
REGISTERED = {}
|
|
161
|
+
|
|
162
|
+
options.dsl do
|
|
163
|
+
o 'Fallback language to use when it can not be retrieved from the user',
|
|
164
|
+
:language, 'en'
|
|
165
|
+
|
|
166
|
+
o 'Array of paths to look for the language files',
|
|
167
|
+
:paths, []
|
|
72
168
|
end
|
|
73
169
|
|
|
74
|
-
#
|
|
75
|
-
|
|
170
|
+
# The name of the language
|
|
171
|
+
attr_reader :name
|
|
76
172
|
|
|
77
|
-
#
|
|
78
|
-
|
|
173
|
+
# Whether or not the language reads from right to left.
|
|
174
|
+
attr_writer :rtl
|
|
79
175
|
|
|
80
|
-
#
|
|
81
|
-
|
|
82
|
-
'en' => 'English',
|
|
83
|
-
'nl' => 'Nederlands'
|
|
84
|
-
}
|
|
176
|
+
# The title of the language (in that specific language).
|
|
177
|
+
attr_accessor :title
|
|
85
178
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
179
|
+
# A hash of all the language files that have been loaded for a language. The
|
|
180
|
+
# values are the names of these collections and the values the instances of
|
|
181
|
+
# {Zen::Language::Translation}.
|
|
182
|
+
attr_accessor :collections
|
|
90
183
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
# Abort of the file has already been loaded
|
|
114
|
-
if Loaded.key?(language) and Loaded[language].include?(lang_name)
|
|
115
|
-
file_found = true
|
|
116
|
-
break
|
|
117
|
-
end
|
|
184
|
+
class << self
|
|
185
|
+
##
|
|
186
|
+
# Adds a new language.
|
|
187
|
+
#
|
|
188
|
+
# @example
|
|
189
|
+
# Zen::Language.add do |lang|
|
|
190
|
+
# lang.name = 'nl'
|
|
191
|
+
# lang.title = 'Nederlands'
|
|
192
|
+
# end
|
|
193
|
+
#
|
|
194
|
+
# @example Adding an RTL language (such as Japanese)
|
|
195
|
+
# Zen::Language.add do |lang|
|
|
196
|
+
# lang.name = '...'
|
|
197
|
+
# lang.title = '...'
|
|
198
|
+
# lang.rtl = true
|
|
199
|
+
# end
|
|
200
|
+
#
|
|
201
|
+
# @since 14-11-2011
|
|
202
|
+
# @yield Zen::Language
|
|
203
|
+
#
|
|
204
|
+
def add
|
|
205
|
+
lang = new
|
|
118
206
|
|
|
119
|
-
|
|
120
|
-
path += "/language/#{language}/#{lang_name}.yml"
|
|
207
|
+
yield(lang)
|
|
121
208
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
209
|
+
lang.validate
|
|
210
|
+
|
|
211
|
+
REGISTERED[lang.name] = lang
|
|
212
|
+
end
|
|
126
213
|
|
|
127
|
-
|
|
214
|
+
##
|
|
215
|
+
# Loads the given language file for the currently used language. If the
|
|
216
|
+
# file has already been loaded this method will not load it again.
|
|
217
|
+
#
|
|
218
|
+
# @example
|
|
219
|
+
# Zen::Language.load('user')
|
|
220
|
+
#
|
|
221
|
+
# @since 0.1
|
|
222
|
+
# @param [String] lang_name The name of the language file to load.
|
|
223
|
+
# @param [String] lang The name of the language for which to load the
|
|
224
|
+
# collection. Set to the current language by default.
|
|
225
|
+
#
|
|
226
|
+
def load(lang_name, lang = nil)
|
|
227
|
+
lang_name = lang_name.to_s unless lang_name.is_a?(String)
|
|
228
|
+
language = REGISTERED[lang.to_s] || current
|
|
229
|
+
|
|
230
|
+
return if language.collections.keys.include?(lang_name)
|
|
128
231
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
232
|
+
options.paths.each do |path|
|
|
233
|
+
path = File.join(path, language.name, "#{lang_name}.rb")
|
|
234
|
+
|
|
235
|
+
# Load the language
|
|
236
|
+
if File.exist?(path)
|
|
237
|
+
require(path)
|
|
238
|
+
language.collections[lang_name].load
|
|
132
239
|
|
|
133
|
-
|
|
240
|
+
return
|
|
134
241
|
end
|
|
135
242
|
end
|
|
136
|
-
end
|
|
137
243
|
|
|
138
|
-
if file_found === false
|
|
139
244
|
raise(
|
|
140
245
|
Zen::LanguageError,
|
|
141
246
|
"No language file could be found for \"#{lang_name}\""
|
|
142
247
|
)
|
|
143
248
|
end
|
|
144
|
-
end
|
|
145
249
|
|
|
146
|
-
|
|
250
|
+
##
|
|
251
|
+
# Returns an instance of {Zen::Language} for the current language.
|
|
252
|
+
#
|
|
253
|
+
# @since 0.3
|
|
254
|
+
# @return [String]
|
|
255
|
+
#
|
|
256
|
+
def current
|
|
257
|
+
if !Ramaze::Current.actions.nil? and !Ramaze::Current.action.nil?
|
|
258
|
+
# The backend
|
|
259
|
+
if Ramaze::Current.action.node.request.env['SCRIPT_NAME'] \
|
|
260
|
+
=~ /^\/admin.*/
|
|
261
|
+
method = :language
|
|
262
|
+
# Probably the frontend
|
|
263
|
+
else
|
|
264
|
+
method = :frontend_language
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
# Extract the language from the current User object.
|
|
268
|
+
if Ramaze::Helper.const_defined?(:UserHelper)
|
|
269
|
+
model = Ramaze::Current.action.node.request \
|
|
270
|
+
.env[::Ramaze::Helper::UserHelper::RAMAZE_HELPER_USER]
|
|
271
|
+
|
|
272
|
+
if model.respond_to?(method)
|
|
273
|
+
lang = model.send(method)
|
|
274
|
+
end
|
|
275
|
+
end
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
# Make sure there always is a language set
|
|
279
|
+
if !lang
|
|
280
|
+
begin
|
|
281
|
+
if method
|
|
282
|
+
lang = get_setting(method).value
|
|
283
|
+
else
|
|
284
|
+
lang = get_setting(:language).value
|
|
285
|
+
end
|
|
286
|
+
rescue
|
|
287
|
+
lang = Zen::Language.options.language
|
|
288
|
+
end
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
return REGISTERED[lang]
|
|
292
|
+
end
|
|
293
|
+
|
|
294
|
+
##
|
|
295
|
+
# Returns a hash where the keys are the language codes and the values the
|
|
296
|
+
# titles.
|
|
297
|
+
#
|
|
298
|
+
# @since 14-11-2011
|
|
299
|
+
# @return [Hash]
|
|
300
|
+
#
|
|
301
|
+
def to_hash
|
|
302
|
+
hash = {}
|
|
303
|
+
|
|
304
|
+
REGISTERED.each { |lang, obj| hash[lang] = obj.title }
|
|
305
|
+
|
|
306
|
+
return hash
|
|
307
|
+
end
|
|
308
|
+
|
|
309
|
+
##
|
|
310
|
+
# Builds an HTML opening tag with the lang and rtl attributes set for the
|
|
311
|
+
# currently used language.
|
|
312
|
+
#
|
|
313
|
+
# @since 14-11-2011
|
|
314
|
+
# @return [String]
|
|
315
|
+
#
|
|
316
|
+
def html_head
|
|
317
|
+
curr = Zen::Language.current
|
|
318
|
+
head = "<html lang=\"#{curr.name}\""
|
|
319
|
+
|
|
320
|
+
if curr.rtl == true
|
|
321
|
+
header += ' dir="rtl"'
|
|
322
|
+
end
|
|
323
|
+
|
|
324
|
+
return head + '>'
|
|
325
|
+
end
|
|
326
|
+
end # class << self
|
|
147
327
|
|
|
148
328
|
##
|
|
149
|
-
#
|
|
150
|
-
# For example, the following hash:
|
|
329
|
+
# Creates a new instance of the class.
|
|
151
330
|
#
|
|
152
|
-
#
|
|
331
|
+
# @since 14-11-2011
|
|
153
332
|
#
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
#
|
|
333
|
+
def initialize
|
|
334
|
+
@loaded = []
|
|
335
|
+
@collections = {}
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
##
|
|
339
|
+
# Sets the name of the language and converts it to a string.
|
|
161
340
|
#
|
|
162
|
-
#
|
|
341
|
+
# @since 14-11-2011
|
|
342
|
+
# @param [#to_s] name The name of the language.
|
|
163
343
|
#
|
|
164
|
-
|
|
344
|
+
def name=(name)
|
|
345
|
+
@name = name.is_a?(String) ? name : name.to_s
|
|
346
|
+
end
|
|
347
|
+
|
|
348
|
+
##
|
|
349
|
+
# Returns a boolean that indicates whether or not the language reads from
|
|
350
|
+
# right to left.
|
|
165
351
|
#
|
|
166
|
-
# @
|
|
167
|
-
#
|
|
352
|
+
# @since 14-11-2011
|
|
353
|
+
# @return [TrueClass|FalseClass]
|
|
168
354
|
#
|
|
169
|
-
|
|
170
|
-
|
|
355
|
+
def rtl
|
|
356
|
+
return @rtl.nil? ? false : @rtl
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
##
|
|
360
|
+
# Validates the current instance using {Zen::Validation}.
|
|
171
361
|
#
|
|
172
|
-
# @
|
|
173
|
-
# @since 0.2
|
|
174
|
-
# @param [Hash/Array] source The hash or array to conver to a dot-based hash.
|
|
175
|
-
# @param [Hash] target The hash to store the new key/values in.
|
|
176
|
-
# @param [String] namespace The namespace for the key (e.g. "user.location").
|
|
177
|
-
# @return [Hash] The converted hash where the keys are dot-based strings
|
|
178
|
-
# instead of regular strings/symbols with sub hashes.
|
|
362
|
+
# @since 14-11-2011
|
|
179
363
|
#
|
|
180
|
-
def
|
|
181
|
-
|
|
182
|
-
prefix = "#{namespace}."
|
|
183
|
-
else
|
|
184
|
-
prefix = ""
|
|
185
|
-
end
|
|
364
|
+
def validate
|
|
365
|
+
validates_presence([:name, :title])
|
|
186
366
|
|
|
187
|
-
if
|
|
188
|
-
|
|
189
|
-
self.to_dotted_hash(v, target, "#{prefix}#{k}")
|
|
190
|
-
end
|
|
191
|
-
elsif source.class == Array
|
|
192
|
-
source.each_with_index do |v, i|
|
|
193
|
-
self.to_dotted_hash(v, target, "#{prefix}#{i}")
|
|
194
|
-
end
|
|
195
|
-
else
|
|
196
|
-
if !namespace.nil?
|
|
197
|
-
target[namespace] = source
|
|
198
|
-
else
|
|
199
|
-
target = source
|
|
200
|
-
end
|
|
367
|
+
if REGISTERED.key?(name)
|
|
368
|
+
raise(Zen::ValidationError, "The language #{name} already exists.")
|
|
201
369
|
end
|
|
202
|
-
|
|
203
|
-
return target
|
|
204
370
|
end
|
|
205
371
|
|
|
206
372
|
#:nodoc:
|
|
207
373
|
module SingletonMethods
|
|
208
374
|
##
|
|
209
|
-
#
|
|
210
|
-
# string. If you want to retrieve sub-items you can separate each level
|
|
211
|
-
# with a dot:
|
|
212
|
-
#
|
|
213
|
-
# lang('tutorial.main.sub')
|
|
214
|
-
#
|
|
215
|
-
# This would require our YAML file to look something like the following:
|
|
216
|
-
#
|
|
217
|
-
# ---
|
|
218
|
-
# main:
|
|
219
|
-
# sub: "Something!"
|
|
220
|
-
#
|
|
221
|
-
# It's important to remember that your key should always include the name
|
|
222
|
-
# of the language file since once a file is loaded it will be kept in
|
|
223
|
-
# memory to reduce disk usage.
|
|
375
|
+
# Retrieves a single language string.
|
|
224
376
|
#
|
|
225
377
|
# @example
|
|
226
|
-
# lang('
|
|
378
|
+
# lang('users.titles.index')
|
|
227
379
|
#
|
|
228
|
-
# @author Yorick Peterse
|
|
229
380
|
# @since 0.2
|
|
230
|
-
# @param [String] key The language key to
|
|
381
|
+
# @param [String] key The language key to retrieve.
|
|
231
382
|
# @param [String] lang The language for which to retrieve the key,
|
|
232
|
-
#
|
|
383
|
+
# overwrites the language set in the session.
|
|
233
384
|
# @return [Mixed]
|
|
234
385
|
#
|
|
235
386
|
def lang(key, lang = nil)
|
|
236
|
-
|
|
237
|
-
begin
|
|
238
|
-
lang = action.node.session[:user].language
|
|
239
|
-
rescue
|
|
240
|
-
lang = ::Zen::Language.options.language
|
|
241
|
-
end
|
|
242
|
-
end
|
|
243
|
-
|
|
244
|
-
groups = []
|
|
245
|
-
translations = ::Zen::Language::Translations
|
|
246
|
-
|
|
247
|
-
if !translations or !translations.key?(lang)
|
|
387
|
+
unless key =~ Zen::Language::Translation::KEY_REGEX
|
|
248
388
|
raise(
|
|
249
389
|
Zen::LanguageError,
|
|
250
|
-
"
|
|
390
|
+
"The format of the language key \"#{key}\" is invalid"
|
|
251
391
|
)
|
|
252
392
|
end
|
|
253
393
|
|
|
254
|
-
if
|
|
255
|
-
|
|
394
|
+
lang = Zen::Language.current.name if lang.nil?
|
|
395
|
+
key = key.to_s unless key.is_a?(String)
|
|
396
|
+
lang = lang.to_s unless lang.is_a?(String)
|
|
397
|
+
|
|
398
|
+
unless Zen::Language::REGISTERED.key?(lang)
|
|
399
|
+
raise(Zen::LanguageError, "The language \"#{lang}\" doesn't exist")
|
|
400
|
+
end
|
|
401
|
+
|
|
402
|
+
group = key.split('.')[0]
|
|
403
|
+
cache_key = [lang, key].join('.')
|
|
404
|
+
got = Ramaze::Cache.translations.fetch(cache_key)
|
|
405
|
+
|
|
406
|
+
return got unless got.nil?
|
|
407
|
+
|
|
408
|
+
# It seems the language item couldn't be fetched. This can happen when
|
|
409
|
+
# the user change the language but hasn't loaded a specific language set
|
|
410
|
+
# yet. Lets load it and try again.
|
|
411
|
+
Zen::Language.load(group, lang)
|
|
412
|
+
|
|
413
|
+
got = Ramaze::Cache.translations.fetch(cache_key)
|
|
414
|
+
|
|
415
|
+
return got unless got.nil?
|
|
416
|
+
|
|
417
|
+
# Last step: check if the cache has been cleared. If this is the case
|
|
418
|
+
# the language pack should be reloaded, otherwise an error will be
|
|
419
|
+
# raised.
|
|
420
|
+
REGISTERED[lang].collections[group].load
|
|
421
|
+
|
|
422
|
+
got = Ramaze::Cache.translations.fetch(cache_key)
|
|
423
|
+
|
|
424
|
+
unless got.nil?
|
|
425
|
+
Ramaze::Log.warn(
|
|
426
|
+
"The language item \"#{key}\" has been added to the cache as it " \
|
|
427
|
+
'appeared to be missing'
|
|
428
|
+
)
|
|
429
|
+
|
|
430
|
+
return got
|
|
256
431
|
end
|
|
257
432
|
|
|
258
433
|
raise(
|
|
@@ -260,6 +435,6 @@ module Zen
|
|
|
260
435
|
"The specified language item \"#{key}\" does not exist"
|
|
261
436
|
)
|
|
262
437
|
end
|
|
263
|
-
end
|
|
438
|
+
end # SingletonMethods
|
|
264
439
|
end # Language
|
|
265
440
|
end # Zen
|