#  Licensed to the Apache Software Foundation (ASF) under one
#  or more contributor license agreements.  See the NOTICE file
#  distributed with this work for additional information
#  regarding copyright ownership.  The ASF licenses this file
#  to you under the Apache License, Version 2.0 (the
#  "License"); you may not use this file except in compliance
#  with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing,
#  software distributed under the License is distributed on an
#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
#  KIND, either express or implied.  See the License for the
#  specific language governing permissions and limitations
#  under the License.

[egg_info]
tag_build = dev
tag_date = 0
tag_svn_revision = true

[sdist]
formats = gztar,bztar,ztar,tar,zip

[extract_messages]
add_comments = TRANSLATOR:
copyright_holder = Apache Software Foundation
msgid_bugs_address = dev@bloodhound.apache.org
output_file = bhrelations/locale/messages.pot
keywords = _ ngettext:1,2 N_ tag_ tagn_:1,2 Option:4 BoolOption:4 IntOption:4 ListOption:6 OrderedExtensionsOption:6 PathOption:4
no-wrap = true

[init_catalog]
input_file = bhrelations/locale/messages.pot
output_dir = bhrelations/locale
domain = bhrelations

[compile_catalog]
directory = bhrelations/locale
domain = bhrelations

[update_catalog]
input_file = bhrelations/locale/messages.pot
output_dir = bhrelations/locale
domain = bhrelations
