# Explorer messages.properties
#
#/*******************************************************************************
# * Copyright (c) 2008 IBM Corporation and others.
# * All rights reserved. This program and the accompanying materials
# * are made available under the terms of the Eclipse Public License v1.0
# * which accompanies this distribution, and is available at
# * http://www.eclipse.org/legal/epl-v10.html
# *
# * Contributors:
# *     IBM Corporation - initial API and implementation
# *******************************************************************************/

# Explorer
EXPLORER.DECORATOR_FOLDER=\u88c5\u9970\u5668
EXPLORER.EXPERIMENT_FOLDER=\u5b9e\u9a8c
EXPLORER.GRAPH_FOLDER=\u56fe
EXPLORER.MODEL_FOLDER=\u6a21\u578b
EXPLORER.MODIFIER_FOLDER=\u4fee\u6539\u5668
EXPLORER.PREDICATE_FOLDER=\u63cf\u8ff0
EXPLORER.SCENARIO_FOLDER=\u65b9\u6848
EXPLORER.SEQUENCER_FOLDER=\u5e8f\u5217\u53d1\u751f\u5668
EXPLORER.TRIGGER_FOLDER=\u89e6\u53d1\u5668
EXPLORER.RECORDED_SIMULATIONS_FOLDER=\u8bb0\u5f55\u7684\u4eff\u771f
EXPLORER.LOGGER_FOLDER=Loggers
