# <copyright>
#
# Copyright (c) 2008-2013 See4sys, itemis and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v2.0
# which accompanies this distribution, and is available at
# https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
#
# Contributors:
#     See4sys - Initial API and implementation
#     itemis - [402945] Add a new Hummingbird project creation wizard for Hummingbird examples
#     itemis - [402951] Add a new Hummingbird file creation wizard for Hummingbird examples
#
# </copyright>

# ====================================================================
# To code developer:
#   Do NOT change the properties between this line and the
#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
#   Make a new property name, append to the end of the file and change
#   the code to use the new property.
# ====================================================================

# ====================================================================
# %%% END OF TRANSLATED PROPERTIES %%%
# ====================================================================

pluginName=Sphinx Examples Common UI Plug-in (Incubation)
providerName=Eclipse Modeling Project

sphinx.examples.common.ui.perspectives.sphinx.name=Sphinx
sphinx.examples.common.ui.views.category.sphinxExampleViews.name=Sphinx Example Views
sphinx.examples.common.ui.newWizards.category.sphinxExampleWizards.name=Sphinx Example Wizards
sphinx.examples.common.ui.newWizards.category.examples.sphinx=Sphinx
sphinx.examples.common.ui.newWizards.modelFile.name=Model File

menu.showIn.label=Show In
menu.showIn.mnemonic = I
