nanoc-filesystem-i18n
文件大小: unknow
源码售价: 5 个金币 积分规则     积分充值
资源说明:I18n filesystem data source for nanoc
= nanoc-filesystem-i18n

{}[http://travis-ci.org/yannlugrin/nanoc-filesystem-i18n]

filesystem_i18n is a localized data source for a nanoc site. It stores
all data as files on the hard disk and is fully compatible with default
nanoc data sources {Nanoc::DataSources::FilesystemUnified} and
{Nanoc::DataSources::FilesystemVerbose}.

Nanoc is a Ruby web publishing system for building small to medium-sized
websites. It is a tool that runs on your local computer and compiles documents
written in formats such as Markdown, Textile, Haml, Erb, ... into a static
web site consisting of simple HTML files, ready for uploading to any web
server. For more information, please see Nanoc site.

== Resources

- FilesystemI18n (http://github.com/yannlugrin/nanoc-filesystem-i18n)
- Nanoc (http://nanoc.stoneship.org)
- Nanoc on Github (http://github.com/ddfreyne/nanoc)
- Nanoc discussion group (http://groups.google.com/group/nanoc)
- Nanoc irc channel (irc://chat.freenode.net/#nanoc)
- Ruby I18n on Github (http://github.com/svenfuchs/i18n)

== Documentation

=== Installation

 gem install nanoc-filesystem-i18n

And add following require in your `lib/default.rb` file:

 require 'nanoc/data_sources/filesystem_i18n'

Or add following line in your `Gemfile` file:

 gem 'nanoc-filesystem-i18n', :require => 'nanoc/data_sources/filesystem_i18n'

Edit `config.yaml` file of your nanoc site and change data_sources type
from `filesystem_unified` or `filesystem_verbose` to `filesystem_i18n`:

  data_sources:
    -
      type: filesystem_i18n

In the data source section of `config.yaml` file, add following informations:

      config:
        locale:
          # list of availables locale, ser default to true to select default
          # locale.
          availables:
            en:
              name: "English"
              default: true
            fr:
              name: "Francais"
          # objects should be not localized
          exclude:
            item: ['/css*', '/js*', '/images*']
            layout: ['*']

See following configuration section for more information.

=== Data source specifications

The filesystem_i18n data source stores its items and layouts in nested
directories or files. Each directory represents a single item or layout,
but an item can be a simple file in a directory. The root directory for
items is the `content` directory; for layouts it is the `layouts`
directory.

Every object (item or layout) is represented by a meta file and one or
more content files with a minimum of one file. The content file contains
the actual item content or layout, while the meta file contains the item’s
or the layout’s metadata, formatted as YAML.

Both meta files and content files are named after its parent directory
(i.e. item). For example, an item/layout named `foo` will have a directory
named `foo`, with e.g. a `foo.markdown` or `index.markdown` content file
and a `foo.yaml` or `index.yaml` meta file. An item/layout named `foo/bar`
can be also created in parent directory named `foo` without dedicated
directory, with e.g. a `foo.markdown` content file and `foo.yaml` meta
file. Root item already named `index.markdown` for content file (extension
can be different) and `index.yaml` for meta file.

Content file extensions are not used for determining the filter that
should be run; the meta file or configuration file defines the list of
filters. The meta file extension must always be `.yaml`, though.

An item/layout content file named `foo.markdown` contain default content
for all locales, but you can create a content file for each locales with
e.g. a `foo.fr.markdown` for locale `fr`. If default locale for site is
`fr` and the `foo.fr.markdown` file is present but `foo.markdow` file not,
the `fr` content file is used by default.

The identifier is calculated by stripping the extension (part after last
dot) and locale code. The locale code also be added at start of identifier
(`foo.fr.html` => `/fr/foo/`), remember this when you configure `Rules` file.

Top level key in meta file is default for all locales, but you can override a
metadata for specific locale with following method:

 title: Default Item Title
 locale:
   fr:
     title: Titre en Français

=== Configuration

You need to configure available locales in config data source section of
`config.yaml` file. The I18n configuration is a hash with `locale` key,
and have a `availables` section containing each locale information. If
`availables` is set to nil, empty hash or false, the site is not localized
and data source work normaly. A locale have it code has key and contain a
`name` key and optional `default` key. Set only one locale has default.

 config:
   locale:
     availables:
       en:
         name: "English"
         default: true
       fr:
         name: "Francais"

Items and layout can be excluded from localize process by set `exclude`
list. It is recommanded to exclude all layouts, css, javascript and
design images.

 config:
   locale:
     ...
     exclude:
       item: ['/css*', '/js*', '/images*']
       layout: ['*']

=== Manage locale meta and content

All items have an attribute `locale` now, with the item locale code. Get
current locale code in your templates and helpers with `item[:locale]`.

=== Rules file

In your `Rules` file, you must remember that identifier have locale code at
the beginning.

 compile '/*/foo/' do
   filter :erb
   layout 'default'
 end

 compile '*' do
   filter :erb
   layout 'default'
 end

 route '/*/foo/' do
   item.identifier.gsub(/\/$/, '') + '.' + item[:extension]
 end

 route '*' do
   if item.children.size > 0 || item.identifier == '/' || item.identifier == "/#{item[:locale]}/"
     item.identifier + 'index.html'
   else
     item.identifier.gsub(/\/$/, '') + '.' + item[:extension]
   end
 end

=== Locale selection according to navigator accept language

If you deploy your site with Apache server, you can use mod_rewrite to select
default locale according to navigator accept language configuration. Create an
item named `htaccess.erb` in `content` directory with following content:

---
locale: false
---

# For language content negociation, used by css images
 Options +MultiViews

 RewriteEngine On
 RewriteBase /

 # Set prefered language from browser preference if available or to default locale
 RewriteCond %{HTTP:Accept-Language} ^.*?(<%= I18n.available_locales.map{|l| l.to_s }.join('|') %>).*$ [NC]
 RewriteRule ^(.*)$ - [env=prefer-language:%1,S=1]
 RewriteRule ^(.*)$ - [env=prefer-language:<%= I18n.default_locale.to_s %>]

 # Force prefered language if present in URI
 SetEnvIf REQUEST_URI ^/(<%= I18n.available_locales.map{|l| l.to_s }.join('|') %>)(/.+)? prefer-language=$1

 # Rewrite root access to prefered language root
 RewriteRule ^(/)?$ %{ENV:prefer-language}/ [R=303,L]

 # Rewrite other uri to language scope
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-l
 RewriteCond %{REQUEST_URI} !^/(<%= I18n.available_locales.map{|l| l.to_s }.join('|') %>)
 RewriteRule ^(.*)$ %{ENV:prefer-language}/$1 [R=303,L]

Add in `Rules` file following compile and route information:

 compile '/htaccess*' do
   filter :erb
   # don’t layout
 end

 route '/htaccess*' do
   '/.htaccess'
 end

With this method, visitor on root of your site is redirected to is/her prefered
language or default language.

== Note on Patches/Pull Requests

* Fork the project.
* Make your feature addition or bug fix.
* Add tests for it. This is important so I don't break it in a
  future version unintentionally.
* Commit, do not mess with rakefile, version, or history.
  (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
* Send me a pull request. Bonus points for topic branches.

== Copyright

Copyright (c) 2010 Yann Lugrin. See LICENSE for details.

本源码包内暂不包含可直接显示的源代码文件,请下载源码包。