//*******************************************************************************
//*
//*   Copyright (C) 2003, International Business Machines
//*   Corporation and others.  All Rights Reserved.
//*
//*******************************************************************************

/**
 * These are top level comments for the bundle. Tag name: ra
 * @translate yes
 * @note Comments for tag named ra
 */
ra{
    /**
     * Top level comments for the string.Tag name: test1
     * @translate yes
     * @note {0} represents the position of OSNAME and {1} represents the position of job name
     *       e.g: The OS/400 job named SYSLOG
     */
    test1{"The {0} job named {1}"} 
    /**
     * Tag name: test2
     * @note This resource is for test2
     * @translate yes
     */
    test2{"some translatable stuff"} 

    /**
     * Top level comments for TestTable. Tag name: TestTable
     * @translate yes
     * @note This resource is for TestTable
     */
    TestTable{
        /**
         * Tag name: test3
         * @translate yes
         * @note This resource is for test3
         */
        test3{"jasldjfa"}
        /**
         * Tag name: test4
         * @translate yes
         * @note This resource is for test4
         */
        test4{"asdfasdf"}
        /**
         * Tag name: test5
         * @translate yes
         * @note This resource is for test5
         */
        test5:int{1}
        /**
         * Tag name: test6
         * @translate yes
         * @note This resource is for test6
         */
        test6:bin{"0102"}
    }
    /**
     * Top level comments for Tag name: TestArray
     * @translate yes
     * @note This resource is for Tag name: Array
     */
    TestArray{
        /**
         * comments for un-named string
         * @translate yes
         * @note This resource is un-named string
         */
        :string{"abcde"},
        /** 
         * comments for un-named int
         * @translate yes
         * @note This resource is un-named int
         */
        :int{1},
        /**
         * comments for un-named binary
         * @translate yes
         * @note This resource is for un-named binary
         */
        :bin{"12312312"}
    }
    
    /**
     * comments for TestInclude
     * @translate yes
     * @note This resource is for TestInclude
     */
    TestInclude:include{"translit_rules.txt"}

    /**
     * comments for TestImport
     * @translate yes
     * @note This resource is for TestImport
     */
    TestImpport:import{"importtest.bin"}

    /**
     * comments for TestIntVector
     * @translate yes
     * @note This resource is for TestIntVector
     */
     TestIntVector{
        /**
         * comments for element 1
         * @translate yes
         * @note This resource is for element 1
         */
         1,
        /**
         * comments for element 2
         * @translate yes
         * @note This resource is for element 2
         */
         2,
        /**
         * comments for element 3
         * @translate yes
         * @note This resource is for element 3
         */
         3
     }
        
}
