Supercharge your (Resource) Efficiency with Macros

This is part 4 of 4 in a series on how to improve the way we usually work with resource (resx) files.

I generally like to – and do – use resource files for all string constants that are shown to end-users, however I do feel that it is needlessly cumbersome, therefore these posts:

  1. A Good Way to Handle Multi Language Resource Files
  2. Verify that your Resource Labels Exists
  3. Find/Remove Obsolete Resource Labels
  4. Supercharge your (Resource) Efficiency with Macros (this one)

Generally these issues are generic to .NET and not specific to SharePoint, though that is where I’m spending my time writing this.

What is it again?

This is a macro to increase developer productivity. It is a topic that lies very close to my hearth and a healthy fraction of my posts are about automation and productivity. Every developer should really know the macro features especially the record/play shortcuts.

Working with resources (in SharePoint) is actually quite tedious – we write “$Resources:” a thousand times and occasionally cannot be bored and skip the chore.

This is simple a Visual Studio macro to improve that workflow, usage is:

1. You highlight a string

2. Press a shortcut (of your choice)

3. Write a name for the resource key to create(optionally use an existing if one exists with same value)

4. And you’re done.

It will then add the resource key to your existing resx file, it will type in “$Resources:….” as needed. If it’s an aspx/ascx file it will also throw in some “<%=” and “%>” tags.

(It works very well for xml files too.)

The Gory Detail

This is a VB macro script that took an inordinate amount of time to write mainly because the Visual Studio Macro object model (DTE) is one of the most hideous, awkward, APIs I’ve ever worked with. If there is one place the VS team could improve it would be here – the macro IDE is also tedious to work with.

I’m very certain that there are ways to make the code perform better (speed is fine) and look better (is it important?) – let me know your nuggets in the comments it’s always good to learn something new.

What you need to know is:

  1. It looks for a resx file with the same name as the target name of your project, i.e. the dll/wsp name
    • It only works on the culture independent resx file
    • It even adds a comment in the resource file as to where a key was first used J
  2. It works only for text editor windows
    • I have not found a way to make the selection work in the designer windows, specifically the feature designer would have been nice. This is annoying.

      The workaround is to simply choose to open the .feature file in the “XML (text) editor” (choose “Open with” in the file open dialog)

  3. You may need to customize the replacement pattern for cs and as?x files as it calls a simple utility method “ResourceLookup.SPGetLocalizedString” to translate the “$Resources:…” key (see code below)
  4. It handles quotes in/around the selection

At the moment it is only tested with VS2010 – I’m certain that changes need to be made for VS2013. In due time…

The resource lookup method I’m using is:

        public static string SPGetLocalizedString(string key)
        {
            if (!key.StartsWith("$Resources:"))
            {
                return key;
            }
            var split = key.TrimEnd(';').Remove(0, "$Resources:".Length).Split(',');

            if (split.Length != 2 || string.IsNullOrEmpty(split[1]))
            {
                return key;
            }

            return SPUtility.GetLocalizedString(key, split[0], (uint)System.Globalization.CultureInfo.CurrentUICulture.LCID);
        }

Download and Installation

It is simple:

  1. Download the Macro project here
  2. Dump it somewhere on your disk – the usual location is in “Documents\Visual Studio 2010\Projects\VSMacros80”
  3. Choose “Tools / Macros / Load Macro Project” and pick the DGMacros.vsmacros file
  4. Bind a keyboard shortcut for the text editor to the macro. Just write “dgm” in the search box and pick the “ReplaceStringWithResource” macro

  5. Have a try and perhaps a look at point 3 of the gory details above 😉
Advertisements

About Søren Nielsen
Long time SharePoint Consultant.

7 Responses to Supercharge your (Resource) Efficiency with Macros

  1. Pingback: Find/Remove Obsolete Resource Labels « Thoughts on computing, SharePoint and all the rest

  2. Pingback: Verify that your Resource Labels Exists « Thoughts on computing, SharePoint and all the rest

  3. Pingback: Announcing: Smart Resource VS2013 extension | Thoughts on computing, SharePoint and all the rest

  4. I blog often and I genuinely thank you for your content. This
    great article has truly peaked my interest.
    I will book mark your site and keep checking for new details about once a
    week. I subscribed to your Feed as well.

  5. With havin so much content and articles do you ever run into any issues of plagorism or copyright violation? My website
    has a lot of exclusive content I’ve either created myself or outsourced but
    it appears a lot of it is popping it up all over the internet
    without my agreement. Do you know any methods to help stop content from being stolen? I’d
    definitely appreciate it.

  6. Hi there, all is going well here and ofcourse every one is sharing information, that’s truly excellent, keep up
    writing.

  7. Sesuatu yang paling membingungkan pada zaman perjudian sekarang ialah dalam
    memilih agen taruhan sbobet terpercaya dari SBOBET, kami selaku agen besar kemudian terpercaya dalam dunia betting
    online siap membantu kamu dalam mengakses dan menyediakan panduan kepada anda pada bermain SBOBET, akses ekspress yang kami berikan ialah hal
    nyata tanpa bohong belaka. Telah banyak pejudi online yang bergabung
    berbareng kami dalam bermain SGD777 judi bola online, kedatangan anda kami akan sering tunggu dengan senang hati
    dan operator kami kerap siap membantu anda bila mengalami kesulitan. SBOBET gak sembarangan dalam memberikan jaringan kepada agen judi
    online karena hanya agen bola online terpercaya dan mempunyai reputasi
    baik seperti kami yang dipercaya SBOBET di menyediakan permainannya yaitu
    CMIDN.

    SBOBET memiliki banyak pengagum terutama penggila taruhan football online, dari kalangan putra muda bahkan orang
    tua memilih SBOBET sebagai spouse mereka dalam bermain judi bola online,
    SBOBET patut memiliki banyak agen tidak kecil dan terpercaya dalam
    sesuatu ini kami adalah diantaranya, promo-promo sering
    kami berikan kepada anda member anyar ataupun member lama, oleh sebab itu, buat
    apa anda menunggu lagi cepat bergabung dengan kami dan rasakan serunya taruhan bola online SGD777 bersama kami agen terkemuka.
    Kami agen judi terkemuka memiliki dukungan penuh dri SBOBET dalam memberikan hubungan dalam bermain Judi Online Online, Keamanan dan kedamaian dalam betting adalah situasi penting bagi kami, sama sekali
    tanpa memandang masalah kecil ataupun besar kami sebagai agency taruhan online profesional sering
    mengatasi hal seperti tersebut dengan cepat.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: