首页 > 技术文章 > SharePoint online Multilingual support - Development(2)

justinliu 2017-04-21 09:54 原文

博客地址:http://blog.csdn.net/FoxDave

上一节讲了如何通过Code的方式设置Site和List级别的国际化,本节介绍一下如何设置Content type和Site column级别的国际化。废话不多说了,还是以代码的方式带大家go through这个过程。

Content type和Site column级别的国际化

跟之前一样,为了测试咱们先创建专用的Site column和Content type,需要把Site column添加到Content type,所以先创建一个Site column。

创建Site column的代码如下所示:

private static void CreateSiteColumn(ClientContext cc, Web web)
        {
            // Add site column to the content type if it's not there...
            FieldCollection fields = web.Fields;
            cc.Load(fields);
            cc.ExecuteQuery();

            foreach (var item in fields)
            {
                if (item.InternalName == "ContosoString")
                    return;
            }

            string FieldAsXML = @"<Field ID='{4F34B2ED-9CFF-4900-B091-4C0033F89944}' 
                                       Name='ContosoString' 
                                       DisplayName='Contoso String' 
                                      Type='Text' 
                                       Hidden='False' 
                                       Group='Contoso Site Columns' 
                                       Description='Contoso Text Field' />";
            Field fld = fields.AddFieldAsXml(FieldAsXML, true, AddFieldOptions.DefaultValue);
            cc.Load(fields);
            cc.Load(fld);
            cc.ExecuteQuery();
        }
上面的代码创建了一个名为ContosoString的Site column,并指定ID为4F34B2ED-9CFF-4900-B091-4C0033F89944。接下来咱们创建Content type,代码如下:

private static void CreateContentTypeIfDoesNotExist(ClientContext cc, Web web)
        {
            ContentTypeCollection contentTypes = web.ContentTypes;
            cc.Load(contentTypes);
            cc.ExecuteQuery();

            foreach (var item in contentTypes)
            {
                if (item.StringId == "0x0101009189AB5D3D2647B580F011DA2F356FB2")
                    return;
            }

            // Create a Content Type Information object
            ContentTypeCreationInformation newCt = new ContentTypeCreationInformation();
            // Set the name for the content type
            newCt.Name = "Contoso Document";
            //Inherit from oob document - 0x0101 and assign 
            newCt.Id = "0x0101009189AB5D3D2647B580F011DA2F356FB2";
            // Set content type to be avaialble from specific group
            newCt.Group = "Contoso Content Types";
            // Create the content type
            ContentType myContentType = contentTypes.Add(newCt);
            cc.ExecuteQuery();
        }
上面的代码创建了名为Consoto Document的Content type,指定了ID为0x0101009189AB5D3D2647B580F011DA2F356FB2。接下来咱们需要将新建的Site column添加到新建的Content type中,代码如下:

private static void AddSiteColumnToContentType(ClientContext cc, Web web)
        {
            ContentTypeCollection contentTypes = web.ContentTypes;
            cc.Load(contentTypes);
            cc.ExecuteQuery();
            ContentType myContentType = contentTypes.GetById("0x0101009189AB5D3D2647B580F011DA2F356FB2");
            cc.Load(myContentType);
            cc.ExecuteQuery();

            FieldCollection fields = web.Fields;
            Field fld = fields.GetByInternalNameOrTitle("ContosoString");
            cc.Load(fields);
            cc.Load(fld);
            cc.ExecuteQuery();

            FieldLinkCollection refFields = myContentType.FieldLinks;
            cc.Load(refFields);
            cc.ExecuteQuery();

            foreach (var item in refFields)
            {
                if (item.Name == "ContosoString")
                    return;
            }

            // ref does nt
            FieldLinkCreationInformation link = new FieldLinkCreationInformation();
            link.Field = fld;
            myContentType.FieldLinks.Add(link);
            myContentType.Update(true);
            cc.ExecuteQuery();
        }
通过以上的代码,咱们用于测试的数据就创建完了,下面的代码就来演示如何设置国际化属性了:

private static void LocalizeContentTypeAndField(ClientContext cc, Web web)
        {
            ContentTypeCollection contentTypes = web.ContentTypes;
            ContentType myContentType = contentTypes.GetById("0x0101009189AB5D3D2647B580F011DA2F356FB2");
            cc.Load(contentTypes);
            cc.Load(myContentType);
            cc.ExecuteQuery();
            // Title of the content type
            myContentType.NameResource.SetValueForUICulture("en-US",
                                                            "Contoso Document");
            myContentType.NameResource.SetValueForUICulture("fi-FI",
                                                            "Contoso Dokumentti");
            myContentType.NameResource.SetValueForUICulture("fr-FR",
                                                             "Contoso Document (FR)");
            // Description of the content type
            myContentType.DescriptionResource.SetValueForUICulture("en-US",
                                           "This is the Contoso Document.");
            myContentType.DescriptionResource.SetValueForUICulture("fi-FI",
                                            "Tämä on geneerinen Contoso dokumentti.");
            myContentType.DescriptionResource.SetValueForUICulture("fr-FR",
                                            "French Contoso document.");
            myContentType.Update(true);
            cc.ExecuteQuery();

            // Do localization also for the site column
            FieldCollection fields = web.Fields;
            Field fld = fields.GetByInternalNameOrTitle("ContosoString");
            fld.TitleResource.SetValueForUICulture("en-US", "Contoso String");
            fld.TitleResource.SetValueForUICulture("fi-FI", "Contoso Teksti");
            fld.TitleResource.SetValueForUICulture("fr-FR", "Contoso French String");
            // Description entry
            fld.DescriptionResource.SetValueForUICulture("en-US",
                                     "Used to store Contoso specific metadata.");
            fld.DescriptionResource.SetValueForUICulture("fi-FI",
                                    "Tää on niiku Contoso metadatalle.");
            fld.DescriptionResource.SetValueForUICulture("fr-FR",
                                    "French Description Goes here");
            fld.UpdateAndPushChanges(true);
            cc.ExecuteQuery();
        }
跟Site和List级别同理,就不做过多解释了。
原文地址:https://blogs.msdn.microsoft.com/vesku/2014/03/20/office365-multilingual-content-types-site-columns-and-other-site-elements/

推荐阅读