# Copyright (c) 2009, 2010, 2012, 2014 Eike Stepper (Berlin, Germany) 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:
#    Victor Roldan Betancort - initial API and implementation
#    Eike Stepper - maintenance

CDOImporter_2=Specify a valid Ecore model and try loading again
CDOImporter_4=Loading {0}
CDOImporter_5=Problems were detected while validating and converting the Ecore models
CDOImporterWizard_0=EcoreModel
CDOImporterWizard_1=Ecore &Import
CDOImporterWizard_2=Specify one or more '.ecore' or '.emof' URIs, try to load them, and choose a file name for the generator model
CDOImporterWizard_3=Specify one or more '.ecore' or '.emof' URIs and try to load them
CDOImporterWizard_4=EcorePackages
CDOMigratorUtil.1=Set Boolean Flags Field =
CDOMigratorUtil.2=Set Boolean Flags Reserved Bits =
CDOMigratorUtil.3=Set Packed Enums =
CDOMigratorUtil.4=Set Feature Delegation =
CDOMigratorUtil.6=Set Root Extends Class =
CDOMigratorUtil.8=Set Root Extends Interface =
CDOMigratorUtil.9=Set Provider Root Extends Class =
CDOMigratorUtil.10=Added Model Plugin Variables =
CDOMigratorUtil.12=Created target model project
CDOMigratorUtil.13=Opened target model project
MigrateAction_0=Migrating EMF model
MigrateAction_1=The selected element is not a *.genmodel file.
MigrateAction_10=CDO Migrator
MigrateAction_2=The selected file does not contain a generator model.
MigrateAction_3=The selected generator model was already migrated.
MigrateAction_4=The selected generator model has been migrated:\n\n
MigrateAction_6=Problem while migrating EMF model
