###############################################################################
# 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.
###############################################################################

operator.equality.PPC_EQ=\u7b49\u4e8e
operator.equality.PPC_NEQ=\u4e0d\u7b49\u4e8e
operator.equality.PPC_LT=\u7121\u6548
operator.equality.PPC_LTE=\u7121\u6548
operator.equality.PPC_GT=\u7121\u6548
operator.equality.PPC_GTE=\u7121\u6548

operator.quantity.PPC_EQ=\u7b49\u4e8e
operator.quantity.PPC_NEQ=\u9664\u4e86
operator.quantity.PPC_LT=\u5c0f\u4e8e
operator.quantity.PPC_LTE=\u5c0f\u4e8e\u7b49\u4e8e
operator.quantity.PPC_GT=\u5927\u4e8e
operator.quantity.PPC_GTE=\u5927\u4e8e\u7b49\u4e8e


condition.PPIP_ORDER_TOTAL=\u82b1\u8cbb ${quantityOperator} $${condValue}
condition.PPIP_PRODUCT_TOTAL=\u8cfc\u8cb7 ${quantityOperator} $${condValue} \u7684\u5408\u683c\u7522\u54c1
condition.PPIP_PRODUCT_AMOUNT=\u5c0d\u4e8e\u6bcf\u500b $${condValue} \u6216\u66f4\u591a\u7684\u5408\u683c\u7522\u54c1
condition.PPIP_PRODUCT_QUANT=\u8cfc\u8cb7 ${condValue} \u5408\u683c\u7522\u54c1
condition.PPIP_NEW_ACCT=\u5982\u679c\u4f60\u7684\u8cec\u6236\u662f ${quantityOperator} ${condValue} \u5929
condition.PPIP_PARTY_ID=\u5982\u679c\u4f60\u7684\u8cec\u6236\u6a19\u8b58 ${equalityOperator} ${condValue}
condition.PPIP_PARTY_GRP_MEM=\u5982\u679c\u4f60\u7684\u8cec\u6236 ${equalityOperator} \u6a19\u8b58\u70ba ${condValue} \u7684\u7d44\u7684\u4e00\u90e8\u5206
condition.PPIP_PARTY_GRP_MEM=\u5982\u679c\u4f60\u7684\u8cec\u6236 ${equalityOperator} \u5728\u6a19\u8b58\u70ba ${condValue} \u7684\u5206\u985e\u4e2d
condition.PPIP_ROLE_TYPE=\u5982\u679c\u4f60\u7684\u8cec\u6236 ${equalityOperator} \u5728\u6a19\u8b58\u70ba ${condValue} \u7684\u89d2\u8272\u4e2d

action.PROMO_GWP=\u5f97\u5230\u4e00\u500b\u514d\u8cbb\u7684 ${productName} [${productId}]
action.PROMO_FREE_SHIPPING=\u5f97\u5230\u514d\u8cbb\u7684\u8ca8\u904b\uff0c\u985e\u578b\u70ba ${productId}\uff0c\u627f\u904b\u5546\u70ba ${partyId}
action.PROMO_PROD_DISC=\u5f97\u5230 ${quantity} \u6309\u6298\u6263 ${amount}%
action.PROMO_PROD_AMDISC=\u5f97\u5230 ${quantity} \u6309 $${amount} \u6263\u9664
action.PROMO_PROD_PRICE=\u5f97\u5230 ${quantity} \u6309 $${amount} \u8a08\u7b97
action.PROMO_ORDER_PERCENT=\u5f97\u5230 ${amount}% \u5f9e\u4f60\u7684\u8a02\u55ae\u6263\u9664
action.PROMO_ORDER_AMOUNT=\u5f97\u5230 $${amount} \u5f9e\u4f60\u7684\u8a02\u55ae\u6263\u9664
