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


functionsInFile = ${fileName}#${fileNumber} \u4e2d\u7684\u51fd\u6578
unknown = \u4e0d\u660e
empty = <\u7a7a\u767d>
processTerminatedWithoutDebuggerConnection = \u7a0b\u5e8f\u5df2\u7d42\u6b62\uff0c\u672a\u8207\u9664\u932f\u7a0b\u5f0f\u5efa\u7acb\u9023\u7dda\u3002
processTerminatedUnexpectedly = \u7a0b\u5e8f\u610f\u5916\u7d42\u6b62\u3002
serverSocketNotListening = \u4f3a\u670d\u5668\u901a\u8a0a\u7aef\u672a\u8655\u65bc\u63a5\u807d\u72c0\u614b\u3002
functionCallsNotSupported = \u76ee\u6a19\u64ad\u653e\u7a0b\u5f0f\u4e0d\u652f\u63f4\u51fd\u6578\u547c\u53eb
watchpointsNotSupported = \u76ee\u6a19\u64ad\u653e\u7a0b\u5f0f\u4e0d\u652f\u63f4\u76e3\u8996\u9ede
exceptionBreakpointsNotSupported = \u76ee\u6a19\u64ad\u653e\u7a0b\u5f0f\u4e0d\u652f\u63f4\u4f8b\u5916\u4e2d\u65b7\u9ede
operatorNotSupported = \u76ee\u6a19\u64ad\u653e\u7a0b\u5f0f\u4e0d\u652f\u63f4\u300c${operator}\u300d\u904b\u7b97\u5b50
