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

# Externalised messages for common elements of the port library
# New messages MUST be added at the end of this file.
# DO NOT delete messages from this file, as it will change their indices.
# If you wish to remove a message, delete its text, but leave the key in place
# NLS_MESSAGEFORMAT_NONE

HYNLS.MODULE=PORT
HYNLS.HEADER=portnls.h

# Do not translate
# used for unique number only
HYNLS_PORT_NLS_FAILURE=

HYNLS_PORT_FILE_MEMORY_ALLOCATE_FAILURE=\u7121\u6cd5\u914d\u7f6e\u8a18\u61b6\u9ad4\u3002

HYNLS_PORT_SL_UNKOWN_ERROR=\u8f09\u5165\u5171\u7528\u7a0b\u5f0f\u5eab\u6642\u767c\u751f\u4e0d\u660e\u932f\u8aa4
# Note: argument is the name of dependant the DLL
HYNLS_PORT_SL_ERROR_LOADING_DEPENDANT_MODULE=\u7121\u6cd5\u8f09\u5165\u76f8\u4f9d\u6a21\u7d44 %s
HYNLS_PORT_SL_SYMBOL_RESOLUTION_FAILURE=\u7b26\u865f\u89e3\u6790\u5931\u6557
HYNLS_PORT_SL_COULD_NOT_LOAD_MODULE=\u7121\u6cd5\u8f09\u5165\u6a21\u7d44
HYNLS_PORT_SL_MODULE_FORMAT_INCORRECT=\u6a21\u7d44\u683c\u5f0f\u4e0d\u6b63\u78ba
HYNLS_PORT_SL_NOT_A_MODULE=\u4e0d\u662f\u6a21\u7d44
HYNLS_PORT_SL_MODULE_ARCHITECTURE_INCORRECT=\u6a21\u7d44\u67b6\u69cb\u4e0d\u6b63\u78ba
HYNLS_PORT_SL_FILE_NOT_FOUND=\u627e\u4e0d\u5230\u6a94\u6848
HYNLS_PORT_SL_PERMISSION_DENIED=\u8a31\u53ef\u6b0a\u906d\u62d2
HYNLS_PORT_SL_OUT_OF_MEMORY=\u8a18\u61b6\u9ad4\u4e0d\u8db3
HYNLS_PORT_SL_ERROR_PACE_BIT_SET=\u932f\u8aa4\uff1a68K \u51fd\u6578\u5df2\u8a2d\u5b9a PACE \u4f4d\u5143\u3002
HYNLS_PORT_SL_DLL_TABLE_NOT_FOUND=\u627e\u4e0d\u5230 DLL \u8868\u683c
HYNLS_PORT_SL_DLL_NOT_FOUND=\u627e\u4e0d\u5230 DLL
HYNLS_PORT_SL_UNABLE_TO_RESOLVE_REFERENCES=\u7121\u6cd5\u89e3\u6790 DLL \u53c3\u8003 - \u53ef\u80fd\u907a\u6f0f\u5fc5\u8981\u7684 DLL
HYNLS_PORT_SL_INTERNAL_ERROR=\u5167\u90e8\u932f\u8aa4 %i

#Note: argument is OS errorCode
HYNLS_PORT_ERROR_OPERATION_FAILED=\u4f5c\u696d\u5931\u6557\uff1a%d
#Note: argument is errorCodeBeingLookedUp, OS Function Call, errorCodeFromFunctionCall
HYNLS_PORT_ERROR_MESSAGE_LOOKUP_FAILED=\u4f5c\u696d\u5931\u6557\uff1a%1$d\uff08%2$s \u5931\u6557\uff1a%3$d\uff09




