###############################################################################
# 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=\u65e0\u6548
operator.equality.PPC_LTE=\u65e0\u6548
operator.equality.PPC_GT=\u65e0\u6548
operator.equality.PPC_GTE=\u65e0\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\u8d39 ${quantityOperator} $${condValue}
condition.PPIP_PRODUCT_TOTAL=\u8d2d\u4e70 ${quantityOperator} $${condValue} \u7684\u5408\u683c\u4ea7\u54c1
condition.PPIP_PRODUCT_AMOUNT=\u5bf9\u4e8e\u6bcf\u4e2a $${condValue} \u6216\u66f4\u591a\u7684\u5408\u683c\u4ea7\u54c1
condition.PPIP_PRODUCT_QUANT=\u8d2d\u4e70 ${condValue} \u5408\u683c\u4ea7\u54c1
condition.PPIP_NEW_ACCT=\u5982\u679c\u4f60\u7684\u8d26\u6237\u662f ${quantityOperator} ${condValue} \u5929
condition.PPIP_PARTY_ID=\u5982\u679c\u4f60\u7684\u8d26\u6237\u6807\u8bc6 ${equalityOperator} ${condValue}
condition.PPIP_PARTY_GRP_MEM=\u5982\u679c\u4f60\u7684\u8d26\u6237 ${equalityOperator} \u6807\u8bc6\u4e3a ${condValue} \u7684\u7ec4\u7684\u4e00\u90e8\u5206
condition.PPIP_PARTY_GRP_MEM=\u5982\u679c\u4f60\u7684\u8d26\u6237 ${equalityOperator} \u5728\u6807\u8bc6\u4e3a ${condValue} \u7684\u5206\u7c7b\u4e2d
condition.PPIP_ROLE_TYPE=\u5982\u679c\u4f60\u7684\u8d26\u6237 ${equalityOperator} \u5728\u6807\u8bc6\u4e3a ${condValue} \u7684\u89d2\u8272\u4e2d

action.PROMO_GWP=\u5f97\u5230\u4e00\u4e2a\u514d\u8d39\u7684 ${productName} [${productId}]
action.PROMO_FREE_SHIPPING=\u5f97\u5230\u514d\u8d39\u7684\u8d27\u8fd0\uff0c\u7c7b\u578b\u4e3a ${productId}\uff0c\u627f\u8fd0\u5546\u4e3a ${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} \u8ba1\u7b97
action.PROMO_ORDER_PERCENT=\u5f97\u5230 ${amount}% \u4ece\u4f60\u7684\u8ba2\u5355\u6263\u9664
action.PROMO_ORDER_AMOUNT=\u5f97\u5230 $${amount} \u4ece\u4f60\u7684\u8ba2\u5355\u6263\u9664
